Licznik w kodzie Graya

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

Wejścia układu:
- przycisk BTNC stanowiący zegar ( nazwa sygnału - clk_i ),
- przycisk BTNR 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) ).

 

Zegar generowany jest poprzez naciskanie mechanicznego przycisku BTNC 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:  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):  isp2s.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.