Dzielnik częstotliwości (Remote Lab)

Zadanie: Zaprojektować układ dzielnika częstotliwości przez N.

  • Zapewnić wypełnienie przebiegu wyjściowego jak najbardziej zbliżone do 1/2 (dla parzystych N wypełnienie powinno wynosić dokładnie 1/2, dla nieparzystych N wypełnienie = 1/2 z dokładnością do jednego okresu sygnału wejściowego).
  • Umożliwić łatwą zmianę wartości N (np. poprzez constant lub generic).
  • Dzielnik powinien mieć wejście resetu asynchronicznego sterowanego wirtualnym przyciskiem BTN0.

Wirtualnymi przyciskami steruje się poprzez emulator przycisków fpga_remote_lab - patrz instrukcja.

  • Napisać osobny moduł testbench generujący wszystkie sygnały i służący do symulacji układu dzielnika. Moduł testbench może być niesyntezowalny.
  • Przed implementacją wykonać symulację układu z wykorzystaniem pliku testbench. Do celów symulacji zmniejszyć podział N.
  • Aby sprawdzić działanie dzielnika, należy podzielić sygnał zegara 100MHz tak, aby otrzymać miganie wybranej diody LED z częstotliwością 1Hz.
  • Wykonać implementację.

Więcej szczegółów, schematy itp. znajdziesz w instrukcji obsługi płytki Nexys A7, na stronach 13 i 22.

Plik "constraints" w formacie XDC do zadania, płytka Digilent Nexys A7, układ Artix-7 XC7A100T-1CSG324C (obudowa: CSG324, speed grade:-1):

#########################################################################################
# CLOCK:
set_property -dict { PACKAGE_PIN E3 IOSTANDARD LVCMOS33 } [get_ports {clk_i} ];
create_clock -add -name sys_clk_pin -period 10.00 -waveform {0 5} [get_ports {clk_i}];
#########################################################################################
# Virtual RESET - Remote Lab - (BTN0):
set_property -dict { PACKAGE_PIN C17 IOSTANDARD LVCMOS33 } [get_ports {rst_i} ];
#########################################################################################
# LED:
set_property -dict { PACKAGE_PIN H17 IOSTANDARD LVCMOS33 } [get_ports {led_o} ];
#########################################################################################