Celem ćwiczenia jest zapoznanie się z licznikami oraz zegarami.
Zaprojektuj prosty licznik mod 16 wyzwalany zegarem o częstotliwości 1Hz. W tym celu możesz skorzystać z zegara 50MHz znajdującego się na dostarczonej płytce DE2. Sygnał zegarowy można odczytać korzystając z nazwy CLOCK_50 podobnie jak w przypadku przełączników oraz diod. Licznik powinien być resetowany za pomocą przycisku KEY0. Na potrzeby ćwiczenia może zaistnieć konieczność skorzystania z biblioteki umożliwiającej operacje arytmetyczne (IEEE.STD_LOGIC_ARITH.ALL). Na wydruku 1 przedstawiono sposób konwersji liczb całkowitych na tablicę bitów i odwrotnie.
-- Szkielet kodu licznika LIBRARY ieee; USE ieee.std_logic_1164.all; Use IEEE.STD_LOGIC_ARITH.ALL; ENTITY czesc1 IS PORT ( CLOCK_50 : IN STD_LOGIC; LEDR : OUT STD_LOGIC_VECTOR(17 downto 0); SW: in STD_LOGIC_VECTOR(17 downto 0) ); END czesc1; ARCHITECTURE Structural OF czesc1 IS signal temp1:integer; BEGIN --przyklad konwersji tablicy bitow na liczbe calkowita temp1<=CONV_INTEGER(unsigned(SW))+1; --przyklad konwersji liczby calkowitej na tablice bitow (jako drugi parametr podany jest rozmiar tablicy) ledr(3 downto 0)<=CONV_STD_LOGIC_VECTOR(temp1,4); END Structural; |
W celu realizacji tej części ćwiczenia wykonaj następujące kroki:
Stwórz nowy projekt w programie Quartus II (podczas wyboru chipu należy zaznaczyć: Cyclone II EP2C35F672C6).
Stwórz nowe entity dla kodu przydstawionego na wydruku 1 (nazwa entity musi odpowiadać nazwie projektu), a następnie zmodyfikuj go tak by realizować zadany licznik.
Dołącz do projektu wymaganą listę pinów (DE2_pin_assignments.csv).
Skompiluj projekt.
Załaduj skompilowany projekt do układu FPGA.
Zmodyfikuj program z części I tak by wynik był wyświetlany na wyświetlaczu 7-segmentowym. Na rysunku 1 przedstawiono dekoder dla wyświetlacza, natomiast w tabeli 1 przedstawiono jakie stany powinny być uzyskiwane na wyświetlaczu dla poszczegolnych wartości. Segmenty aktywowane są stanem niskim ("0").
c3c2c1c0 | Znak |
0000 | 0 |
0001 | 1 |
0010 | 2 |
0011 | 3 |
0100 | 4 |
0101 | 5 |
0110 | 6 |
0111 | 7 |
1000 | 8 |
1001 | 9 |
1010 | A |
1011 | b |
1100 | c |
1101 | d |
1110 | E |
1111 | F |
Zmodyfikuj końcowy program z laboratorium VII, tak by napis HELLO cyklicznie przesuwał się po wyświetlaczach z częstotliowścią 0.5Hz.
Stwórz grę 2-osobową badającą refleks graczy. Zaprojektowany układ ma po czasie mniej więcej 5 sekund od ustawienia przełącznika SW17 w stan 1, zapalić wszystkie czerwone diody. Gracz który pierwszy zareaguje na zapalone diody wygrywa - gracz który pierwszy wcisnął odpowiedni przycisk (KEY3 dla gracza pierwszego, KEY0 dla gracza 2). W przypadku gdy któryś z graczy wcisnął przycisk zanim zapaliły się diody wygrywa gracz przeciwny. Zwycięstwo gracza 1 powinno być sygnalizowane zapaleniem diody LEDG7, natomiast gracza 2 diodą LEDG0. Gra powinna się zresetować po przełączeniu SW17 w stan 0.
Rozbudować zadanie z części IV o moduł zliczający i wyświetlający punkty - gracze grają do 5 zwycięstw. Punkty gracza pierwszego powinny znajdować się na pierwszym wyświetlaczu LED, natomiast punkty gracza drugiego powinny znajdować się na ostatnim wyświetlaczu LED. Po 5 zwycięstwach wynik powinien się już nie móc zmienić. Dopiero przełączenie przyciska SW0 powinno restartować grę.