Mirosław Łazoryszczak Technika cyfrowa Laboratorium nr 8 Temat: Kodery, dekodery, transkodery Synteza sprzętu przy pomocy VHDL Katedra Architektury Komputerów i Telekomunikacji Zakład Systemów i Sieci Komputerowych SPIS TREŚCI 1. Wymagania ................................................................................................. 3 2. Przebieg ćwiczenia....................................................................................... 3 2.1. Przykład projektowy ............................................................................. 3 2.2. Realizacja transkodera w języku VHDL .................................................. 5 3. Zadania...................................................................................................... 12 4. Podsumowanie.......................................................................................... 14 5. Literatura................................................................................................... 14 Technika cyfrowa – Laboratorium nr 8 1. W Y M A GAN I A Wykonanie ćwiczenia obejmującego temat koderów, dekoderów oraz transkoderów wymaga od studenta znajomości: • kodów typu „1 z n”, kodu Graya, kodu BCD, • projektowania układów kombinacyjnych przy pomocy znanych metod, • zasad działania wyświetlacza siedmiosegmentowego LED, • podstaw posługiwania się narzędziem Xilinx ISE, a w szczególności tworzenia projektu opartego na schemacie, wykonania operacji implementacji, przeprowadzenia symulacji opartej na jednostce testowej (ang. test bench) implementowanej w języku VHDL. 2. PRZEBI EG ĆW I CZEN I A W warstwie merytorycznej niniejszego ćwiczenia wykorzystywane są ponownie układy kombinacyjne, których przykładem są kodery, dekodery i transkodery. Układy te stanowią istotną podgrupę układów logicznych, która jest szeroko wykorzystywana w różnych obszarach techniki cyfrowej. Kodery oznaczają układy, których zadaniem jest konwersja kodu typu „1 z n” na kod binarny, dekodery zaś pełnią funkcję odwrotną. Zadaniem natomiast transkoderów jest zamiana jednego kodu na inny, przy czym zarówno kod wejściowy jak wyjściowy nie jest kodem typu „1 z n”. Zakres ćwiczenia obejmuje wszystkie etapy projektowania, z którymi uczestnicy laboratoriów mogli zetknąć się do tej pory. Nowym, lecz niezwykle istotnym elementem jest zapis projektu w postaci kodu VHDL oraz synteza i implementacja projektu w konkretnej platformie sprzętowej. 2.1. PRZYKŁAD PROJEKTOWY Zadanie Zaprojektuj, wykonaj symulację oraz zaimplementuj i przetestuj w układzie rzeczywistym czterobitowy transkoder kodu binarnego na kod Graya. Tabela 1: Tablica przejść ilustrująca działanie licznika Liczba x dziesiętna 3 0 0 1 0 2 0 3 0 4 0 5 0 6 0 7 0 8 1 9 1 10 1 11 1 12 1 13 1 14 1 15 1 x2 x1 x0 y3 y2 y1 y0 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 0 0 0 0 1 1 1 1 1 1 1 1 0 0 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 Strona 3 z 14 Technika cyfrowa – Laboratorium nr 8 Tablica prawdy dla jednej z możliwych postaci transkodera kodu binarnego na kod Graya została przedstawiona w tabeli 1. Klasyczne podejście do zagadnienia projektowania układu transkodera jako układu kombinacyjnego wymaga wyznaczenia tylu funkcji logicznych, ile wyjść powinien posiadać projektowany układ. Korzystając z tradycyjnych metod minimalizacji funkcji logicznych można otrzymać zbiór funkcji boolowskich dla poszczególnych wyjść układu transkodera. Tabela 2: Tablica Karnaugh dla funkcji x1x0 00 01 11 10 00 0 0 0 0 01 0 0 0 0 11 1 1 1 1 10 1 1 1 1 x3x2 y3 y3 = x3 Tabela 3: Tablica Karnaugh dla funkcji x1x0 00 01 11 10 00 0 0 0 0 01 1 1 1 1 11 0 0 0 0 10 1 1 1 1 x3x2 y2 y 2 = x3 x 2 ∨ x 3 x 2 = x 2 ⊕ x 3 Tabela 4: Tablica Karnaugh dla funkcji x1x0 00 01 11 10 00 0 0 1 1 01 1 1 0 0 11 1 1 0 0 10 0 0 1 1 x3x2 y1 y1 = x1 x 2 ∨ x1 x 2 = x1 ⊕ x 2 Tabela 5: Tablica Karnaugh dla funkcji x1x0 00 01 11 10 00 0 1 0 1 01 0 1 0 1 11 0 1 0 1 10 0 1 0 1 x3x2 y 0 = x1 x0 ∨ x1 x0 = x 0 ⊕ x1 Strona 4 z 14 y0 Technika cyfrowa – Laboratorium nr 8 Wpisując wartości funkcji z tablicy prawdy do tablic Karnaugh otrzymujemy zestaw tabel oraz odpowiadających im wyrażeń boolowskich przedstawionych w tabelach 2 – 5. Realizacja układowa wynikająca wprost z powyższych równań przedstawiona została na rys. 1. Bufor, który znajduje się pomiędzy sygnałem wyjściowym y3 a sygnałem wejściowym x3 pełni funkcję techniczną (separującą). Rys. 1. Schemat układu realizującego zamianę kodu binarnego na kod Graya 2.2. REALIZACJA TRANSKODERA W JĘZYKU VHDL Projekt transkodera może być równie dobrze zrealizowany nie tylko w postaci schematu, ale także w postaci kodu w języku VHDL. Kod taki jest zresztą ogniwem pośrednim pomiędzy schematem, a postacią wynikową projektu czyli bezpośrednią implementacją w strukturze sprzętowej. Z przeprowadzonych uprzednio ćwiczeń laboratoryjnych wiadomo, w jaki sposób można zapoznać się ze strukturą kodu VHDL, stanowiącą realizację wprowadzonego schematu (rys. 2). Rys. 2. Uruchomienie podglądu kodu VHDL projektowanego układu Fragment kodu odpowiadającego za realizację schematu transkodera przedstawiono na wydruku 1. Styl (sposób) konstrukcji tego kodu określany jest jako strukturalny, ponieważ opisuje precyzyjnie komponenty, które wchodzą w skład projektu oraz definiuje połączenia pomiędzy nimi. Z punktu widzenia zastosowania konstrukcji języka VHDL należy zwrócić uwagę na główne elementy konstrukcji kodu: Strona 5 z 14 Technika cyfrowa – Laboratorium nr 8 • entity – jednostka projektowa, w której zdefiniowany jest interfejs zewnętrzny układu, czyli jego wejścia oraz wyjścia, • architecture – ciało architektury, które określa sposób działania układu o zdefiniowanym wyżej interfejsie. Znajdują się tutaj także deklaracje elementów (component), wykorzystywane do konstrukcji układu oraz połączenia pomiędzy tymi komponentami (pomiędzy słowami kluczowymi begin i end), które realizowane są z kolei na zasadzie mapowania portów czyli sygnałów zewnętrznych na wejścia poszczególnych funktorów (komponentów) oraz mapowania wyjść funktorów na wyjścia całego układu. entity tc8a is port ( x0 : x1 : x2 : x3 : y0 : y1 : y2 : y3 : end tc8a; in in in in out out out out std_logic; std_logic; std_logic; std_logic; std_logic; std_logic; std_logic; std_logic); architecture attribute component port ( BEHAVIORAL of tc8a is BOX_TYPE : string ; XOR2 I0 : in std_logic; I1 : in std_logic; O : out std_logic); end component; attribute BOX_TYPE of XOR2 : component is "BLACK_BOX"; component BUF port ( I : in std_logic; O : out std_logic); end component; attribute BOX_TYPE of BUF : component is "BLACK_BOX"; begin XLXI_1 : XOR2 port map (I0=>x2, I1=>x3, O=>y2); XLXI_2 : XOR2 port map (I0=>x1, I1=>x2, O=>y1); XLXI_3 : XOR2 port map (I0=>x0, I1=>x1, O=>y0); XLXI_4 : BUF port map (I=>x3, O=>y3); end BEHAVIORAL; Wydruk 1: Fragment automatycznie utworzonego kodu VHDL transkodera Znając zasady kodowania VHDL możliwe jest zapisanie projektu bezpośrednio w postaci kodu z pominięciem schematu. Forma kodu strukturalnego wymaga jednak dokładnej znajomości budowy układu na takim samym poziomie, jak przy użyciu schematu. Styl taki jest również niezwykle przydatny w przypadku rozbudowanych, wieloplikowych projektów, umożliwiających realizację struktur hierarchicznych w przejrzysty sposób. Inne podejście do projektowania za pomocą VHDL polega na wykorzystaniu równań boolowskich określających sposób działania układu lub niemal bezpośrednie użycie tablicy prawdy (w przypadku układów kombinacyjnych). W obu przypadkach konieczne jest utworzenie nowego projektu, w którym plik nadrzędny projektu posiada typ HDL (rys. 3). Strona 6 z 14 Technika cyfrowa – Laboratorium nr 8 Następnie postępujemy analogicznie jak w przypadku poprzednich ćwiczeń, z tym że w przypadku dodawania nowego pliku źródłowego, należy ustawić jego typ jako VHDL Module (rys. 4). Rys. 3. Rys. 4. Okno kreatora nowego projektu z ustawionym typem źródła nadrzędnego (HDL) Okno kreatora nowego pliku źródłowego z typem ustawionym na moduł VHDL W kolejnym etapie tworzenia nowego źródła na ekranie pojawi się okno kreatora nowego źródła, w którym można zdefiniować interfejs zewnętrzny poprzez specyfikację wejść i wyjść. Efektem działania kreatora po wprowadzeniu wejść i wyjść będzie szablon kodu VHDL. Szablon ten zawierać będzie wygenerowaną automatycznie jednostkę projektową oraz skojarzoną z nią architekturę wewnętrzną. Strona 7 z 14 Technika cyfrowa – Laboratorium nr 8 Rys. 5. Specyfikacja wejść i wyjść w oknie kreatora modułu VHDL Fragment kodu modułu VHDL, który powstał w wyniku działania kreatora pliku źródłowego został przedstawiony na wydruku 2. Zadaniem projektanta jest napisanie fragmentu kodu pomiędzy słowami kluczowymi begin oraz end. entity tc8b is Port ( x3 : x2 : x1 : x0 : y3 : y2 : y1 : y0 : end tc8b; in in in in out out out out STD_LOGIC; STD_LOGIC; STD_LOGIC; STD_LOGIC; STD_LOGIC; STD_LOGIC; STD_LOGIC; STD_LOGIC); architecture Behavioral of tc8b is begin -- TUTAJ WSTAW KOD Z WYDRUKU NR 3 end Behavioral; Wydruk 2: Fragment automatycznie wygenerowane szablonu VHDL Jedno z możliwych rozwiązań polega na opisaniu architektury za pomocą równań boolowskich, przedstawionych na początku niniejszego podrozdziału. Zatem fragment kodu, który należy wstawić do pliku źródłowego we wskazanym miejscu może mieć postać jak na wydruku 3. y3 y2 y1 y0 <= <= <= <= x3; x3 XOR x2; x2 XOR x1; x1 XOR x0; Wydruk 3: Opis architektury transkodera za pomocą równań boolowskich W tym momencie projekt jest już opisany za pomocą języka VHDL i możliwe jest przeprowadzenie symulacji działania układu w znany już sposób. Ponieważ jednak celem niniejszego ćwiczenia jest fizyczna implementacja układu w strukturze rekonfigurowalnej, przedstawione zostaną Strona 8 z 14 Technika cyfrowa – Laboratorium nr 8 dalsze kroki, które należy wykonać, aby powiązać deklaracje interfejsu w języku VHDL z fizycznymi wyprowadzeniami układu i zasobami sprzętowymi zestawu uruchomieniowego. W tym celu należy uruchomić narzędzie Floorplan IO (rys. 6). Rys. 6. Uruchomienie narzędzia Floorplan IO Jeśli w danym projekcie narzędzie to jest uruchamiane po raz pierwszy, na ekranie pojawi się komunikat z pytaniem o dodanie pliku UCF (User Constraint File) do projektu. W pliku tym definiowane są własności poszczególnych wejść i wyjść układu, które są wykorzystywane w projekcie. Na pytanie w oknie dialogowym należy odpowiedzieć twierdząco (rys 7). Rys. 7. Okno potwierdzenia utworzenia pliku UCF W jednym z okien programu Xilinx PACE – Design Object List – I/O Pins (rys. 8) należy przypisać poszczególnym nazwom portów I/O numery wyprowadzeń zgodne z wykorzystywaną platformą uruchomieniową. Na rys. 8 w odpowiednich polach wpisano numery portów zgodne z płytką SK-CRIIL-G (Xilinx CoolRunner-II CPLD Starter Kit). Numery wyprowadzeń dostępne są w dokumentacji do zestawu uruchomieniowego, umieszczone są także na płytce drukowanej w pobliżu elementów wykorzystywanych w zadaniu. Jako wejścia x3 i x2 użyte zostały przełączniki (ang. switches) o wyprowadzeniach odpowiednio 124 i 39, zaś jako wejścia x1 oraz x0 zastosowano przyciski (ang. push buttons) o wyprowadzeniach 94 oraz 143. Z kolei wyjścia przypisane zostały do diod LED w kolejności y3, y2, y1, y0 o wyprowadzeniach 64, 66, 68 oraz 69. Po wprowadzeniu numerów portów należy zamknąć program Xilinx PACE zapisując jednocześnie plik UCF. Strona 9 z 14 Technika cyfrowa – Laboratorium nr 8 Rys. 8. Okno przypisania wyprowadzeń do poszczególnych portów Po wykonaniu przypisania numerów wyprowadzeń do poszczególnych portów wykonaj operację implementacji obejmującą proces syntezy, translacji, rozmieszczenia i generowania pliku wynikowego dla układu transkodera klikając dwukrotnie gałąź Implement Design w oknie Design (rys. 9). Rezultatem implementacji jest plik wynikowy z rozszerzeniem .JED, który powinien zostać umieszczony w głównym folderze projektu. Rys. 9. Uruchomienie implementacji Jeśli implementacja zostanie zakończona sukcesem, można przystąpić do zaprogramowania (konfigurowania) układu CPLD w zestawie uruchomieniowym. W tym celu należy uruchomić program ExPort (Menu Start | Programy | Digilent | Adept). Ogólny wygląd płytki testowej przedstawiono na rys. 10. UWAGA: W trakcie pracy z zestawem uruchomieniowym należy zachować SZCZEGÓLNĄ OSTROŻNOŚĆ! Pod żadnym pozorem nie należy dotykać podzespołów zestawu przedmiotami zawierającymi metalowe elementy! W razie jakichkolwiek wątpliwości co do obsługi zestawu należy zwrócić się o wskazówki do prowadzącego zajęcia! Jeśli zestaw uruchomieniowy jest podłączony do komputera za pomocą przewodu USB należy wcisnąć przycisk Initialize Chain. Okno programu ExPort powinno zawierać symbol układu CPLD (rys. 11). Następnie za pomocą przycisku Browse należy odszukać w głównym folderze projektu plik Strona 10 z 14 Technika cyfrowa – Laboratorium nr 8 konfiguracyjny i uruchomić proces konfiguracji przyciskiem Program Chain. Po skonfigurowaniu układu powinien on być gotowy do działania. Rys. 10. Płyta uruchomieniowa CoolRunner II Starter Kit [4]. Rys. 11. Okno programu ExPort Inny sposób realizacji omawianego transkodera może wykorzystywać instrukcje with ... select. Zastosowanie tej instrukcji pozwala na zaprojektowanie układu bez podawania równań Strona 11 z 14 Technika cyfrowa – Laboratorium nr 8 boolowskich, w zamian za to konieczne jest wyspecyfikowanie wszystkich możliwych kombinacji transkodera. 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 architecture Behavioral of tc8b is signal WE,WY : STD_LOGIC_VECTOR(3 downto 0); begin WE <= x3 & x2 & x1 & x0; with WE select WY <= "0000" when "0000", "0001" when "0001", "0011" when "0010", "0010" when "0011", "0110" when "0100", "0111" when "0101", "0101" when "0110", "0100" when "0111", "1100" when "1000", "1101" when "1001", "1111" when "1010", "1110" when "1011", "1010" when "1100", "1011" when "1101", "1001" when "1110", "1000" when "1111", "0000" when others; y3 <= WY(3); y2 <= WY(2); y1 <= WY(1); y0 <= WY(0); end Behavioral; Wydruk 4: Opis architektury transkodera za pomocą instrukcji with ... select Przykładowy kod całej architektury podano na wydruku 4. Pewnego komentarza wymaga deklaracja struktury signal (linia nr 02). W ramach architektury sygnały pełnią funkcję wewnętrznych portów. Można do nich przypisywać wartości portów zewnętrznych (wejściowych), można wykonywać operacje oraz można przypisywać wartości sygnałów do portów wyjściowych. Ponieważ w projekcie transkodera wykorzystano niezależne zmienne x3, x2, x1 oraz x0, to operowanie na nich z punktu widzenia instrukcji with ... select nie jest zbyt wygodne. Wprowadzony został zatem typ tablicowy (STD_LOGIC_VECTOR) o szerokości czterech bitów w celu kompaktowej reprezentacji wektora wejściowego i wyjściowego. Aby możliwe było operowanie na wektorze WE, konieczne jest zatem złożenie wektora z pojedynczych zmiennych za pomocą operatora konkatenacji ‘&’ (linia 04), dzięki czemu może on zostać wykorzystany w instrukcji with ... select. Z tego samego powodu użyty został wektor WY, którego elementy w efekcie muszą zostać przypisane do konkretnych portów wyjściowych (linie 23 – 26). 3. ZA D A N IA Zadanie 1 Wykonaj implementację i przetestuj układ wykonany na podstawie kodu z wydruku 2 i 3. Zadanie 2 Wykonaj implementację i przetestuj układ wykonany na podstawie kodu z wydruku 4 Zadanie 3 Zaprojektuj i zaimplementuj transkoder kodu BCD na kod wyświetlacza siedmiosegmentowego. Strona 12 z 14 Technika cyfrowa – Laboratorium nr 8 WSKAZÓWKI DO ZADANIA 3 Do wykonania zadania nr 3 niezbędna jest znajomość budowy wyświetlacza siedmiosegmentowego. Wyświetlacz taki składa się z siedmiu diod typu LED umieszczonych we wspólnej obudowie w taki sposób, że tworzą one cyfrę „8”. Poszczególne segmenty oznaczane są literami alfabetu od „a” do „g” (rys. 12). Dodatkowo wyświetlacz może zawierać kropkę dziesiętną („dp”, ang. decimal point). Wszystkie diody posiadają wspólne zasilanie, przy czym wyświetlacze wykonywane są w wersjach ze wspólną anodą lub ze wspólną katodą. Z rodzaju wyświetlacza wynika sposób polaryzacji poszczególnych wyprowadzeń. W wykorzystywanym zestawie uruchomieniowym wyświetlacze posiadają wspólną anodę, zatem włączenie wyświetlacza wymaga podania sygnału niskiego na odpowiednie wyprowadzenie układu CPLD, co w konsekwencji powoduje włączenie odpowiedniego tranzystora bipolarnego pnp i doprowadzenie napięcia zasilającego na wspólne wyprowadzenia poszczególnych diod. Rys. 12. Oznaczenia segmentów wyświetlacza siedmiosegmentowego Aby na wyświetlaczu możliwe było przedstawienie poszczególnych cyfr, konieczne jest przyporządkowanie kolejnym kombinacjom binarnym ustawionym za pomocą przełączników i przycisków odpowiednich kombinacji włączenia/wyłączenia poszczególnych segmentów. Zapalenie danego segmentu wymaga, zgodnie z rys. 13, ustalenia stanu niskiego na katodach diod (wyprowadzenia CA ÷ CG oraz DP) i stanu niskiego na wyprowadzeniu AN1 (w zadaniu wykorzystany zostanie tylko jeden wyświetlacz). Na rys. 13 podano także numery wyprowadzeń odpowiadających poszczególnym elementom zestawu uruchomieniowego, które należy wykorzystać w projekcie na etapie przypisywania zmiennych VHDL do fizycznych portów w układzie rzeczywistym. Rys. 13. Szczegółowy schemat podłączenia urządzeń peryferyjnych do układu CoolRunner II [5] Strona 13 z 14 Technika cyfrowa – Laboratorium nr 8 Uwzględniając powyższe wskazówki należy wyznaczyć tablicę prawdy dla transkodera kodu binarnego lub BCD na kod wyświetlacza siedmiosegmentowego zgodnie z szablonem sprawozdania, a następnie utworzyć nowy projekt w środowisku Xilinx ISE i opisać transkoder w języku VHDL na podstawie wydruków omówionych w niniejszej instrukcji. Po syntezie oraz implementacji projektu należy wykonać testowanie układu w zestawie uruchomieniowym. Należy także zwrócić uwagę, aby w projekcie przewidziany został sygnał, który spowoduje doprowadzenie napięcia (włączenie) do jednego z czterech wyświetlaczy dostępnych na płytce uruchomieniowej. 4. PO D SUM O W A N IE W wyniku przeprowadzonego ćwiczenia, a także ćwiczeń poprzednich student powinien nabyć bądź utrwalić następujące umiejętności: • projektowanie dowolnych koderów, dekoderów i transkoderów, • posługiwanie się zestawami uruchomieniowymi zawierającymi układy rekonfigurowalne CPLD, • posługiwanie się narzędziem Xilinx ISE w zakresie syntezy sprzętu na platformie rekonfigurowalnej CPLD. 5. L I TERA TURA [1] Kalisz J.: Podstawy elektroniki cyfrowej, WNT, Warszawa 1999 [2] Mano M. M., Kime Ch. R.: Podstawy projektowania układów logicznych i komputerów, WNT, Warszawa, 2007. [3] Pieńkos J., Turczyński J.: Układy scalone TTL w systemach cyfrowych, WKŁ, Warszawa 1986 [4] Wilkinson B.: Układy Cyfrowe, WKŁ, Warszawa 2000 [5] Xilinx: CoolRunner-II Evaluation Board Reference Manual, 2008, (http://www.xilinx.com/ support/documentation/boards_and_kits/ug501.pdf, dostęp: marzec 2011). [6] Zwoliński M., Projektowanie układów cyfrowych z wykorzystaniem języka VHDL, WKŁ, Warszawa 2002 Strona 14 z 14