Licznik w kodzie Graya

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

Wejścia układu:
- przycisk BTNC na płytce prototypowej (środkowy) (w trybie zdalnym - wirtualny przycisk BTN0) stanowiący zegar ( nazwa sygnału - clk_i ),
- przycisk BTNR na płytce prototypowej (prawy) (w trybie zdalnym - wirtualny przycisk BTN3) stanowiący reset asynchroniczny ( nazwa sygnału - rst_i ).

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

 

W trybie stacjonarnym zegar generowany jest poprzez naciskanie mechanicznego przycisku 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 i weryfikacji na płytce: wykonać reset dwa razy - na początku symulacji/weryfikacji i w jej trakcie, ale w taki sposób, aby było widać jego działanie na wyjściu licznika. Symulacja/weryfikacja 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):  iup3s.xdc 

 

Wersja pliku z ograniczeniami projektowymi przeznaczona dla trybu zdalnego (obsługa przycisków wirtualnych): iup3z.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.