Licznik w kodzie Graya

Zadanie: Należy zaprojektować trzybitowy licznik liczący w kodzie Graya.

Wejścia układu:
- wirtualny przycisk BTN0 stanowiący zegar ( nazwa sygnału - clk_i ),
- wirtualny przycisk BTN3 stanowiący reset asynchroniczny ( nazwa sygnału - rst_i ).

Wyjścia układu:
- dioda świecąca LED0 - bit 0 licznika Graya ( nazwa sygnału - led_o(0) ),
- dioda świecąca LED1 - bit 1 licznika Graya ( nazwa sygnału - led_o(1) ),
- dioda świecąca LED2 - bit 2 licznika Graya ( nazwa sygnału - led_o(2) ).

 

W trybie lokalnym zegar generowany jest poprzez naciskanie mechanicznego przycisku BTN0 i dlatego mogą wystąpić drgania zestyków, czyli generacja więcej niż jednego impulsu zegara po pojedynczym naciśnięciu przycisku. W trybie zdalnym przyciski wirtualne posiadają emulację drgań zestyków, należy ją wyłączyć.

Należy wykonać symulację funkcjonalną oraz zweryfikować układ praktycznie poprzez zaprogramowanie płytki testowej.

 

Minimalne wymagania dotyczące symulacji:  Wykonać reset dwa razy: na początku symulacji i w jej trakcie, ale w taki sposób, aby było widać jego działanie na wyjściu licznika. Symulacja musi obejmować wszystkie stany licznika. Częstotliwość zegara w symulacji - dowolna.

 

Fragment głównego pliku projektowego VHDL z deklaracją sygnałów:

 

entity top is

    Port ( clk_i : in STD_LOGIC;

           rst_i : in STD_LOGIC;

           led_o : out STD_LOGIC_VECTOR (2 downto 0));

end top;

 


Plik z ograniczeniami projektowymi dla płytki Nexys-A7 (układ FPGA xc7a100tcsg324-1):  isp2.xdc 

 

Następujące ostrzeżenia oprogramowania Vivado można zignorować w tym ćwiczeniu:

[Power 33-232] No user defined clocks were found in the design! Power estimation will be inaccurate until this is corrected.

[Timing 38-313] There are no user specified timing constraints. Timing constraints are needed for proper timing analysis.

[Place 46-29] place_design is not in timing mode. Skip physical synthesis in placer.

[Place 30-574] Poor placement for routing between an IO pin and BUFG.