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.
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; |
Wykonaj następujące kroki aby uruchomic projekt opisany przez kod pokazany na wydruku 1 na płycie DE2:
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.
Podczas prac z płytą DE2-70 należy w Assigments -> Device -> Device Pin and Options... -> Dual Purpose and Pins dla "nCEO" ustawić wartość "Use as regular I/O".
W przeciwnym wypadku podczas kompilacji otrzymamy informację o błedzie przypisania wielu pinów do lokacji AD25.
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 |
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.
W celu wykonania tego ćwiczenia wykonaj następujące kroki:
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 |
Twoim zadaniem jest stworzenie 3-bitowego multipleksera 5-to-1. W tym celu:
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.
c2c1c0 | Znak |
000 | H |
001 | E |
010 | L |
011 | O |
100 | |
101 | |
110 | |
111 |
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); |
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 |
Tutaj można znaleźć rozwiązania do niniejszego ćwiczenia.