VIII - Zegary i liczniki

Celem ćwiczenia jest zapoznanie się z licznikami oraz zegarami.

Część I

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;
 

WYDRUK 1.

W celu realizacji tej części ćwiczenia wykonaj następujące kroki:

  1. Stwórz nowy projekt w programie Quartus II (podczas wyboru chipu należy zaznaczyć: Cyclone II EP2C35F672C6).

  2. 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.

  3. Dołącz do projektu wymaganą listę pinów (DE2_pin_assignments.csv).

  4. Skompiluj projekt.

  5. Załaduj skompilowany projekt do układu FPGA.

Część II

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").

RYSUNEK 1. Wyświetlacz 7-segmentowy.
 c3c2c1c0   Znak 
00000
00011
00102
00113
01004
01015
01106
01117
10008
10019
1010A
1011b
1100c
1101d
1110E
1111F
TABELA 1. Kodowanie znaków.

Część III

Zmodyfikuj końcowy program z laboratorium VII, tak by napis HELLO cyklicznie przesuwał się po wyświetlaczach z częstotliowścią 0.5Hz.

Część IV

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.

Część V

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ę.