PTC - VII - VHDL

Celem ćwiczenia jest pokazanie jak połączyc wejścia i wyjścia w układzie FPGA oraz jak podłączyc obwód korzystający z tego układu, wykorzystując język VHDL. Podczas ćwiczenia będziemy korzystać z przełączników, diod LED oraz wyświetlacza 7-segmentowego znajdujących się na płycie DE2.

Część I

DE2 dostarcza 18 przełączników SW17-0, które mogą zostać użyte jako wejście projektowanego obwodu oraz 18 diod LEDR17-0, które mogą zostać wykorzystane jako wyjścia obwodu. Na wydruku 1 pokazano prosty kod encji wykorzystujący przełączniki oraz diody LED wyświetlające stan przełączników.
Na płycie DE2 diody oraz przełączniki są połączone z układem FPGA. Chcąc skorzystac z SW17-0 oraz LEDR17-0 należy dołączyc do projektu przyporządkowanie pinów odpowiednim nazwom. Przykładowo SW0 jest podłączone do pinu N25 układu FPGA, natomiast dioda LEDR0 jest podłączona do pinu AE23. Przyporządkowanie pinów najprościej wykonać poprzez zaimportowanie pliku DE2_pin_assignments.csv. W tym celu nalezy wybrac Assignments->Import Assignments, a następnie podać nazwę pliku z pinami.
Oczywiście wykorzystanie tego pliku ma sens tylko w przypadku kiedy chcemy odwoływac się do przełączników za pomocą nazw SW[0] .. SW[17], natomiast do diod LED[0] .. LED[17]. W przeciwnym wypadku należy ręcznie wygenerowac przyporządkowanie.

 
 
	LIBRARY ieee;
	USE ieee.std_logic_1164.all;
	-- Prosty projekt laczacy przelaczniki SW z diodami LEDR
	ENTITY czesc1 IS
		PORT ( SW : IN STD_LOGIC_VECTOR(17 DOWNTO 0);
			LEDR : OUT STD_LOGIC_VECTOR(17 DOWNTO 0));
	END czesc1;
 
	ARCHITECTURE Behavior OF czesc1 IS
	BEGIN
		LEDR <= SW;
	END Behavior;

WYDRUK 1.

Wykonaj następujące kroki aby uruchomic projekt opisany przez kod pokazany na wydruku 1 na płycie DE2:

  1. Otwórz nowy projekt w programie Quartus II. Podczas wyboru chipu należy zaznaczyć Cyclone II EP2C35F672C6.
  2. Stwórz nową encję dla kodu przydstawionego na wydruku 1.
  3. Dołącz do projektu wymaganą listę pinów jak opisano powyżej. Następnie skompiluj projekt.
  4. Załaduj skompilowany projekt do FPGA. Aby tego dokonac należy wybrać Tools->Programmer. W otwartym oknie należy wybrać urządzenie, do którego będziemy wysyłać nasz projekt (w naszym przypadku powinno być to urządzenie USB-BLASTER), sposób programowania (mode - JTAG) oraz nazwę pliku z projektem (wybieramy pliki z koncowka ".sof"). Przetestuj układ za pomocą przełączników.


Część II

Na rysunku 1a pokazano obwód realizujący 1-bitowy multiplekser 2-to-1, z wyjściem wybierającym s. Jeżeli s = 0 to multiplekser na wyjściu m podaje stan x w przeciwnym wypadku podaje stan y. Część b przedstawia tabele prawdy dla niniejszego multipleksera.

a) Obwód b) Tabela prawdy

RYSUNEK 1. Multiplekser 2-to-1.

Multiplekser może zostac opisany za pomocą następującego wyrażenia w języku VHDL:
 
	m <= (NOT (s) AND x) OR (s AND y);
 

Twoim zadaniem jest stworzenie w VHDL encji, które będzie realizowało 8-bitowy multiplekser 2-to-1 (pokazany na rysunku 2). Układ ten ma posiadać dwa 8-bitowe wejścia X oraz Y. Wyjście M również jet 8-bitowe i powinien pojawiać się na nim sygnał X w przypadku gdy s = 0 lub Y, gdy s = 1.


RYSUNEK 2. Ośmio-bitowy multiplekser 2-to-1.

W celu wykonania tego ćwiczenia wykonaj następujące kroki:

  1. Stwórz nowy projekt w programie Quartus II.

  2. Dołącz do projektu stworzony przez siebie plik encji opisujący działanie 8-bitowego multipleksera 2-to-1. Jako wejście s wykorzystaj przełącznik SW17, przełączniki SW7-0 powinny stanowić wejście X, natomiast SW15-8 wejście Y. Dodatkowo podłącz przełączniki SW do diod LEDR oraz wyjście M do zielonych diod LEDG7-0.
  3. Zaimportuj plik z przyporządkowanymi pinami tak jak w Częsci I.
  4. Skompiluj projekt.
  5. Załaduj skompilowany projekt do FPGA i przetestuj jego działanie.

Część III

Na rysunku 1 pokazano multiplekser 2-to-1 wybierający spomiędzy 2 wejść. W tej części ćwiczenia będziemy wykorzystywać multiplekser 5-to-1 wybierający jeden z pięciu sygnałów wejściowych: u, v, w, x oraz y. Na rysunku 3a pokazano jak można zbudowac multiplekser 5-to-1 korzystając z 4 multiplekserów 2-to-1. Obwód korzysta z 3-bitowego wejścia wybierającego s2s1s0 i implementuje tablice prawdy pokazaną na rysunku 3b.

a) Obwód b) Tabela prawdy

RYSUNEK 3. Multiplekser 5-to-1.

Twoim zadaniem jest stworzenie 3-bitowego multipleksera 5-to-1. W tym celu:

  1. Stwórz nowy projekt w Quartus II.

  2. Stwórz plik encji dla 3-bitowego multipleksera 5-to-1. Wejścia wybierające podłącz do SW17-15 natomiast pozostałe 5 wejśc 3-bitowych podłącz do SW14-0. Wszystkie przełączniki podłącz do diod czerwonych LEDR, a wyjście M do diod zielonych LEDG2-0.

  3. Dołącz plik z przyporządkowanymi pinami.

  4. Skompiluj projekt.

  5. Załaduj skompilowany projekt do FPGA. Przetestuj zbudowany multiplekser. Upewnij się że wszystkie wejścia U-Y odpowiednio są przepisywane na wyjście M w zależności od stanu S.

Część IV

Na rysunku 4 przedstawiono dekoder dla 7-segmentowego wyświetlacza. Dekoder posiada 3 bity wejścia oraz 7 bitów wyjścia. W tabeli 1 przedstawiono jakie wartości powinien przyjmowac dekoder dla poszczególnych wartości. Poszczególne segmenty wyświetlacza oznaczone są indeksami z zakresu 0-6. Każdy segment jest aktywowany po podaniu logicznego 0.


RYSUNEK 4. Dekoder dla wyświetlacza 7-segmentowego.

 c2c1c0   Znak 
000H
001E
010L
011O
100 
101 
110 
111 
TABELA 1. Kodowanie znaków.

Twoim zadaniem jest stworzenie układu który wyświetla odpowiednie wartości na wyświetlaczu w zależności od wejścia:
  1. Stwórz nowy projekt w Quartus II.
  2. Utwórz plik encji dla dekodera 7-segmentowego. Wejścia c2c1c0 podłącz do przełączników SW2-0, natomiast wyjście dekodera podłącz do wyświetlacza HEX0. Odwoływanie się do poszczególnych segmentów wyświetlacza odbywa się za pomocą HEX00, HEX01, ..., HEX06 tak jak pokazano na rysunku 4. Wyświetlacz 7-segmentowy należy zdefiniowac następująco:
     
    	HEX0 : OUT STD_LOGIC_VECTOR(0 TO 6);
     
    tak aby nazwa pasowała do pliku DE2_pin_assignments.csv.


  3. Po zaimportowaniu pliku z przyporządkowanymi pinami skompiluj projekt.

  4. Skompilowany projekt załaduj do FPGA. Przetestuj układ zmieniając odpowiednio pozycje przełączników SW2-0.

Część V

Rozszerz układ z części IV tak by w zależności od wartości wejściowych zmieniały się wartości na wszystkich wyświetlaczach 7-segmentowych tak jak to pokazano na tabeli 2. W tym celu możesz skorzystac z multipleksera zaprojektowanego w części III.

 c2c1c0   HEX7 HEX6 HEX5 HEX4 HEX3 HEX2 HEX1 HEX0  
000                  H    E    L    L    O  
001             H    E    L    L    O       
010        H    E    L    L    O            
011   H    E    L    L    O                 
100   E    L    L    O                   H  
101   L    L    O                   H    E  
110   L    O                   H    E    L  
111   O                   H    E    L    L  
TABELA 2. Obracany napis HELLO.

Tutaj można znaleźć rozwiązania do niniejszego ćwiczenia.