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.