Politechnika Białostocka Wydział Elektryczny Katedra Automatyki i Elektroniki ĆWICZENIE Nr 2 (3h) Przełączniki, wyświetlacze, multipleksery - implementacja i obsługa w VHDL Instrukcja pomocnicza do laboratorium z przedmiotu Synteza układów cyfrowych ES2C100005 studiów stacjonarnych II stopnia kierunku: Elektrotechnika Opracował: dr inż. Marian Gilewski Białystok 2008
1. Cel ćwiczenia. Celem tego ćwiczenia jest nauka technik łączenia prostych urządzeń wejściowo wyjściowych z układem FPGA. W tym celu użyjemy przełączników SW 17 SW 0 modułu DE2 jako urządzeń wejściowych układu cyfrowego. Jako urządzenia wyjściowe zastosujemy diody LED oraz wyświetlacze siedmiosegmentowe. 2. Część pierwsza. Moduł laboratoryjny DE2 zawiera dwupozycyjne przełączniki SW 17 SW 0, których można używać jako źródła sygnałów wejściowych układu cyfrowego. Do wyświetlania informacji wyjściowej można zastosować czerwone diody LED, oznaczone jako LEDR 17 0. Na rysunku pierwszym przedstawiono prostą realizację programu w języku VHDL, wyświetlającą stan przełączników przy pomocy diod LED. W kodzie programu zarówno przełączniki jak i diody reprezentowane są jako elementy tablicowe. Alternatywnym rozwiązaniem jest zastosowanie indywidualnych przypisań dla poszczególnych par w sposób przedstawiony poniżej. LEDR(17) <= SW(17); LEDR(16) <= SW(16);... LEDR(0) <= SW(0); Moduł DE2 zawiera sprzętowe połączenia FPGA z przełącznikami i wyświetlaczami. W celu zastosowania przełączników i wyświetlaczy konieczne jest umieszczenie w projekcie badanego układu przypisań poszczególnym portom pliku top - level odpowiednich numerów wyprowadzeń (pinów) układu FPGA. Lista przypisań wszystkich pinów układu FPGA modułu DE2 zawarta jest w pliku DE2_pin_assignments.csv. Np. przełącznik SW 0 jest połączony z pinem nr N25 układu FPGA, zaś LEDR 0 jest połączony z pinem AE23. Dobrą techniką realizacji przypisań jest ich import z pliku DE2_pin_assignments.csv. Procedura importu opisana została w przewodniku Quartus II Introduction using VHDL Design, dostępnym na stronie internetowej firmy Altera. Automatyczna procedura przypisań jest skuteczna pod warunkiem zastosowania tych samych nazw portów reprezentujących przełączniki i wyświetlacze w projekcie oraz na liście zawartej w importowanym pliku. W pliku DE2_ pin_ assignments.csv przyjęto oznaczenia SW[0]...SW[17] dla przełączników oraz LEDR[0]...LEDR[17] dla diod LED. Należy zauważyć rozbieżność, w systemie Quartus II indeksy tablicowe ujmowane są w nawiasy kwadratowe [] zaś w języku VHDL w nawiasy zwykłe (). LIBRARY ieee; USE ieee.std_logic_1164.all; - - Prosty moduł łączący przełączniki SW z diodami LEDR ENTITY part1 IS PORT ( SW : IN STD_LOGIC_VECTOR(17 DOWNTO 0); LEDR : OUT STD_LOGIC_VECTOR(17 DOWNTO 0)); - - red LEDs END part1; ARCHITECTURE Behavior OF part1 IS BEGIN LEDR <= SW; END Behavior; Rys. 1. Program w języku VHDL wykorzystujący przełączniki i diody świecące.
Proszę zaimplementować w modelu DE2 układ opisany programem z rysunku 1 wykonując następujące kroki: 1. Utworzyć nowy projekt w systemie Quartus II, wybierając jako programowalną strukturę układ EP2C35F672C6 rodziny Cyclone II. 2. Utworzyć w VHDL jednostkę projektową (entity) programu z rysunku 1 i umieścić ją w projekcie. 3. Zawrzeć w projekcie wymagane przyporządkowania pinów modułu DE2, w sposób omówiony wcześniej. Skompilować projekt. 4. Zaprogramować strukturę FPGA. Przeprowadzić test końcowy polegający zmianie położenia przełączników i obserwacji LED. 3. Część druga. Na rysunku 2a (Circuit) przedstawiono schemat multipleksera o dwóch wejściach informacyjnych z i y oraz jednym wejściu adresowym s. Jeżeli s = 0 to sygnał wyjściowy multipleksera jest równy sygnałowi wejściowemu x, jeżeli s = 1 to wyjście jest równe y. Na rysunku 2b (Truth table) przedstawiono tablicę działania multipleksera, zaś na rysunku 2c (Symbol) jego symbol graficzny w konwencji stosowanej w układach programowalnych. Rys.2. Schemat, tablica prawdy oraz symbol multipleksera o 2 wejściach informacyjnych. Multiplekser tego typu można opisać następującą instrukcją w VHDL: m <= (NOT (s) AND x) OR (s AND y); Naszym zadaniem jest napisanie jednostki projektowej w VHDL zawierającej osiem instrukcji, podobnych do powyższej, opisujących układ przedstawiony na rysunku 3a. Wspomniany układ posiada dwa ośmiobitowe wejścia X i Y oraz ośmiobitowe wyjście M. Jeżeli s = 0 wówczas M = X, w przypadku s = 1 wyjście M = Y. Jest to zatem układ dwuwejściowego multipleksera szynowego, przełączającego magistrale 8 - bitowe. Jego symbol przedstawiono na rysunku 3b, gdzie X, Y oraz M obrazują ośmiobitowe magistrale. Należy wykonać następujące kroki: 1. Utworzyć nowy projekt w systemie Quartus II. 2. Dołączyć do projektu plik VHDL opisujący projektowany multiplekser szynowy. Należy użyć przełącznika SW 17 płyty DE2 jako wejścia s, przełączników SW 7-0 jako wejścia X oraz przełączników SW 15-8 jako wejścia Y. Przełączniki SW należy połączyć z czerwonymi diodami LEDR, zaś wyjścia M z zielonymi diodami LEDG 7-0.
3. Następnie należy przypisać portom wejściowym i wyjściowym w układzie odpowiednie numery pinów układu FPGA płyty DE2. Rys.3. Dwuwejściowy multiplekser szyn 8 - bitowych. W części pierwszej już zostało omówione zagadnienie przypisywania numerów pinów struktury Cyclone II modułu DE2 przełącznikom SW oraz diodom LED. 4. Skompilować projekt. 5. Zaprogramować układ FPGA. Sprawdzić działanie układu zmieniając położenia przełączników SW oraz obserwując świecenie poszczególnych diod LED. 4. Część trzecia. Na rysunku drugim mieliśmy przykład multipleksera 2 na 1, o dwóch wejściach x i y. W tej części zajmiemy się układem multipleksera, który posiada wyjście m oraz pięć wejść: u, v, w, x oraz y. Układ z rysunku 4a pokazuje sposób budowy multipleksera 5 na 1 z czterech multiplekserów 2 na 1. Układ posiada trzybitowe wejście adresowe: s 2, s 1 oraz s 0. Na rysunku 4b przedstawiono tablicę prawdy opisującą układ a na rysunku 4c jego symbol. Rys.4. Multiplekser 5 na 1.
Przypomnijmy sobie multiplekser szynowy z rysunku trzeciego, zbudowany z ośmiu multiplekserów 2 na 1. Rysunek 5 przedstawia koncepcję multipleksera szynowego, zawierającego 5 trzybitowych szyn wejściowych. Zawiera on 3 struktury układu z rysunku 4a. Rys.5. Multiplekser szynowy 5 na 1. Wykonaj następujące kroki w celu implementacji multipleksera z rysunku 5.: 1. Otwórz nowy projekt w systemie Quartus II. 2. Utwórz jednostkę projektową w VHDL dla szynowego multipleksera 5 na 1 z rysunku 5. Podłącz wejścia adresowe do przełączników SW 17-15, zaś pozostałe 15 przełączników SW 14-0 wykorzystaj jako sygnały wejściowe 3 bitowych szyn oznaczonych od U do Y. Przełączniki SW połącz z czerwonymi diodami LEDR oraz wyjścia M połącz z zielonymi diodami LEDG 2-0. 3. Zawrzyj w swoim projekcie wymagane przypisania pinów na płyty DE2. Skompiluj projekt. 4. Zaprogramuj FPGA chip. Zbadaj działanie multipleksera zmieniając położenie przełączników i obserwując świecenie diod LED. Upewnij się, że każde z wejść od U do Y jest prawidłowo przełączane na wyjście M. 5. Część czwarta. Na rysunku 6 pokazano konwerter kodu binarnego (wejścia c 2, c 1 oraz c 0 ) na kod wyświetlacza siedmiosegmentowego. Ten konwerter posiada 7 wyjść sterujących poszczególnymi segmentami wyświetlacza. Rys.6. Dekoder 7 - segmentowy. Tablica 1 zawiera listę znaków, jakie powinny być wyświetlane dla poszczególnych wartości sygnałów wejściowych c 2 c 1 c 0. W realizowanym przykładzie tylko 4 znaki są zawarte w tablicy (plus ciemny znak wygaszonego wyświetlacza, kodowany liczbami od 100 do 111). Siedem segmentów wyświetlacza oznaczonych jest cyframi od 0 do 6 w sposób przedstawiony na powyższym rysunku. Każdy z segmentów świeci jeżeli jest sterowany poziomem logicznym 0. Napisz jednostkę projektową w VHDL zawierającą funkcje logiczne reprezentujące układ, niezbędną do aktywacji poszczególnych segmentów. Zastosuj jedynie proste instrukcje przypisania w VHDL zawierające wyrażenia boolowskie. W tym celu wykonaj następujące kroki:
c 2 c 1 c 0 0 0 0 0 0 1 0 1 0 0 1 1 1 0 0 1 0 1 1 1 0 1 1 1 Znak H E L O Tabl. 1. Lista znaków konwertera 1. Otwórz nowy projekt w systemie Quartus II. 2. Utwórz w języku VHDL jednostkę projektową dekodera 7-segmentowego. Połącz wejścia c 2 c 1 c 0 z przełącznikami SW 2-0 oraz wyjścia z dekoderem HEX0 na płycie DE2. Odpowiednio do rysunku 6 poszczególne segmenty wyświetlacza posiadają nazwy: HEX0 0, HEX0 1,, HEX0 6. Należy zadeklarować 7 - bitowy port HEX0 : OUT STD_ LOGIC_ VECTOR (0 TO 6); w którym nazwy portów powinny korespondować z nazwami w pliku przypisań DE2_ pin_ assignments.csv 3. Następnie skompiluj projekt. 4. Dokonaj konfiguracji układu FPGA. Zbadaj funkcjonowanie układu zmieniając położenie przełączników SW 2-0 i obserwując wyświetlacz 7 - segmentowy. 6. Część piąta. Rozważmy układ pokazany na rysunku 7. Zastosowano w nim multiplekser szynowy 5 na 1 do wyboru jednego z 5 znaków wyświetlanych na wyświetlaczu 7 - segmentowym. Rys.7. Układ selekcji i wyświetlania jednego z pięciu znaków. Stosując dekoder 7 - segmentowy z części czwartej, powyższy układ może wyświetlać znaki: H, E, L, O i znak ciemny. Układ pracuje zgodnie z tabelą 1 wykorzystując przełączniki SW 14-0 oraz wybierając odpowiedni znak ustawiając przełączniki SW 17-15. Szkic programu w VHDL, reprezentującego powyższy układ przedstawiono na rysunku 8. Zauważ, iż zastosowaliśmy układy z części trzeciej i czwartej jako podprogramy w tym kodzie. Rozbuduj kod z rysunku 8 tak żeby używał pięciu 7 - segmentowych wyświetlaczy zamiast jednego. Powinieneś zastosować pięciu zestawów podprogramów. Proponuję, żeby twój układ wyświetlał słowo na pięciu wyświetlaczach skomponowane ze znaków w tablicy 1.
oraz żeby mógł obracać to słowo w koło na wyświetlaczach w zależności od pozycji przełączników SW 17-15. LIBRARY ieee; USE ieee.std_logic_1164.all; ENTITY part5 IS PORT ( SW : IN STD_LOGIC_VECTOR(17 DOWNTO 0); HEX0 : OUT STD_LOGIC_VECTOR(0 TO 6)); END part5; ARCHITECTURE Behavior OF part5 IS COMPONENT mux_3bit_5to1 PORT ( S, U,V, W, X,Y : IN STD_LOGIC_VECTOR(2 DOWNTO 0); M : OUT STD_LOGIC_VECTOR(2 DOWNTO 0)); END COMPONENT; COMPONENT char_7seg PORT ( C : IN STD_LOGIC_VECTOR(2 DOWNTO 0); Display : OUT STD_LOGIC_VECTOR(0 TO 6)); END COMPONENT; SIGNAL M : STD_LOGIC_VECTOR(2 DOWNTO 0); BEGIN M0: mux_3bit_5to1 PORT MAP ( SW(17 DOWNTO 15), SW(14 DOWNTO 12), SW(11 DOWNTO 9), SW(8 DOWNTO 6), SW(5 DOWNTO 3), SW(2 DOWNTO 0), M); H0: char_7seg PORT MAP (M, HEX0); END Behavior; LIBRARY ieee; USE ieee.std_logic_1164.all; - - implementacja 3-bitowego multipleksera szynowego 5-na-1 ENTITY mux_3bit_5to1 IS PORT ( S, U, V, W, X, Y : IN STD_LOGIC_VECTOR(2 DOWNTO 0); M : OUT STD_LOGIC_VECTOR(2 DOWNTO 0)); END mux_3bit_5to1; ARCHITECTURE Behavior OF mux_3bit_5to1 IS... uzupełnij kod END Behavior; LIBRARY ieee; USE ieee.std_logic_1164.all; ENTITY char_7seg IS PORT ( C : IN STD_LOGIC_VECTOR(2 DOWNTO 0); Display : OUT STD_LOGIC_VECTOR(0 TO 6)); END char_7seg; ARCHITECTURE Behavior OF char_7seg IS... uzupełnij kod END Behavior; Rys.8. Szkic programu w języku VHDL układu z rysunku 7.
Przykładowo może to być słowo HELLO, zaś układ powinien generować układ znaków przedstawiony w tabeli 2. SW 17 SW 16 SW 15 0 0 0 0 0 1 0 1 0 0 1 1 1 0 0 Zestaw znaków E L L O H L L O H E L O H E L O H E L L Tabl. 2. Lista znaków konwertera Wykonaj następujące kroki: 1. Otwórz nowy projekt w systemie Quartus II. 2. Utwórz jednostkę projektową w VHDL. Połącz przełączniki SW 17-15 z wejściami selekcji pięciu egzemplarzy multiplekserów szynowych 5 na 1. Przełączniki SW 14-0 połącz z każdym multiplekserem w celu wytwarzania niezbędnych wzorów znaków pokazanych w tablicy 2. Połącz wyjścia multiplekserów z 7 - segmentowymi wyświetlaczami HEX4, HEX3, HEX2, HEX1 i HEX0. 3. Przypisz odpowiednie piny struktury programowalnej do wszystkich przełączników, diod LED i wyświetlaczy 7 - segmentowych. Skompiluj projekt. 4. Zaprogramuj układ FPGA. Sprawdź funkcjonowanie układu ustawiając właściwe kody znaków przełącznikami SW 14-0 oraz zaobserwuj rotację znaków manipulując przełącznikami SW 17-15. 7. Część szósta. Rozszerz swój projekt z części piątej w taki sposób, żeby wykorzystać wszystkie wyświetlacze 7 - segmentowe płyty DE2. Twój układ powinien mieć możliwość wyświetlania słów 5 - znakowych (lub krótszych) na ośmiu wyświetlaczach i rotacji wyświetlanego słowa gdy przełączniki SW 17-15 są przełączane. Jeżeli wyświetlane jest słowo HELLO, układ powinien wytwarzać wzory pokazane w tabeli 3. SW 17 SW 16 SW 15 0 0 0 0 0 1 0 1 0 0 1 1 1 0 0 1 0 1 1 1 0 1 1 1 Wzór znaku E L L O H L L O H E L O H E L O H E L L Tabl. 3. Rotacja słowa HELLO na ośmiu wyświetlaczach. Wykonaj następujące kroki: 1. Otwórz nowy projekt w systemie Quartus II przypisując chip Cyclone II EP2C35F672C6. 2. Utwórz jednostkę projektową w VHDL. Połącz przełączniki SW 17-15 z wejściami selekcji poszczególnych realizacji multiplekserów w układzie. Połącz również przełączniki SW 14-0 do każdego multipleksera w celu wytwarzania niezbędnych wzorów znaków przedstawionych w tablicy 3. Połącz wyjścia multiplekserów do wyświetlaczy siedmiosegmentowych HEX7,... HEX0. 3. Przypisz odpowiednie piny struktury programowalnej do wszystkich przełączników, diod LED i wyświetlaczy 7 - segmentowych. Skompiluj projekt.
4. Zaprogramuj układ FPGA. Sprawdź funkcjonowanie układu ustawiając właściwe kody znaków przełącznikami SW 14-0 oraz zaobserwuj rotację znaków manipulując przełącznikami SW 17-15. Literatura: 1. Barski M., Jędruch W.: Układy cyfrowe, podstawy projektowania i opisu w języku VHDL, Wydawnictwo Politechniki Gdańskiej, 2007. 2. IEEE-SA Standars Board: IEEE Standard VHDL Language reference manual, ieeexplore.ieee.org/iel5/7180/19335/00893288.pdf, USA, 2000. 3. Łuba T.: Synteza układów cyfrowych, WKiŁ, Warszawa, 2004. 4. Mano M.M., Kime Ch.R.: Podstawy projektowania układów logicznych i komputerów, NT, Warszawa 2007. 5. Skahill K.: Język VHDL Projektowanie programowalnych układów logicznych, WNT, Warszawa, 2001.