Dzielnik częstotliwości

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 parameter (Verilog), lub generic (VHDL)).
  • Dzielnik powinien mieć wejście resetu asynchronicznego.
  • Napisać osobny moduł (niesyntezowalny) testbench generujący wszystkie sygnały i służący do symulacji układu dzielnika. 
  • 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}];
######################################################################################### 
# RESET: 
set_property -dict { PACKAGE_PIN N17 IOSTANDARD LVCMOS33 } [get_ports {rst_i} ];
######################################################################################### 
# LED: 
set_property -dict { PACKAGE_PIN H17 IOSTANDARD LVCMOS33 } [get_ports {led_o} ];
#########################################################################################