Licznik w kodzie Johnsona

Zadanie: Należy zaprojektować czterobitowy licznik liczący w kodzie Johnsona.

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

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

- dioda świecąca LD3 - bit 3 licznika Johnsona ( nazwa sygnału - led_o(3) ).

 

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.

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 (3 downto 0));

end top;

 


Plik z ograniczeniami projektowymi dla płytki Basys 3 (układ FPGA xc7a35tcpg236-1):  iup4.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.