Politechnika Białostocka Wydział Elektryczny Katedra Automatyki i Elektroniki ĆWICZENIE Nr 3 (4h) Konwersja i wyświetlania informacji binarnej w VHDL Instrukcja do zajęć laboratoryjnych z przedmiotu Synteza układów cyfrowych studia niestacjonarne, II stopnia, semestr 2 EZ2B200013 Opracował: dr inż. Łukasz Sajewski Białystok 2012 1
1. Cel ćwiczenia Celem tego ćwiczenia jest nauka projektowania układów kombinacyjnych realizujących funkcje: sumowania liczb binarnych, konwersji liczb binarnych na liczby dziesiętne oraz sterowania wyświetlaniem z zastosowaniem języka VHDL. 2. Konwersja liczb Zaprojektuj układ, który dokonuje konwersji czterobitowej liczby binarnej V = v 3 v 2 v 1 v 0 na odpowiednik dwucyfrowej liczby dziesiętnej D = d 1 d 0. W tabeli 1 pokazano wymagane sygnały wyjściowe. Tab. 1. Tablica działania konwertera. Wartość binarna Liczba dziesiętna 0000 0 0 0001 0 1 0010 0 2...... 1001 0 9 1010 1 0 1011 1 1 1100 1 2 1101 1 3 1110 1 4 1111 1 5 Projekt przedstawiono schematycznie na rysunku 2. Zawiera on komparator sprawdzający czy wartość V jest większa od 9, sygnał z komparatora wykorzystywany jest do sterowania wyświetlaczami. Uzupełnij projekt układu tworząc jednostkę projektową w VHDL zawierającą komparator, multipleksery oraz układ A i B. Jednostka projektowa w VHDL powinna posiadać 4 - bitowe wejście V, 4 - bitowe wyjście M oraz wyjście z. Intencją tego ćwiczenia jest stosowanie prostych instrukcji przypisania funkcji logicznych zawierających wyrażenia boolowskie. Sugerowane jest użycie konstrukcji WITH-SELECT którą można znaleźć w funkcji: Insert template => VHDL => constructs => concurrent statements => selected signal assignment. Rys. 1. Funkcja Insert Template 2
Podczas tworzenia jednostek projektowych tego zadania pomocne mogą się okazać bloki projektowe przygotowane na poprzednich zajęciach. Rys. 2. Część składowa projektu konwertera liczb binarnych na BCD Wykonaj następujące kroki: 1. Utwórz jednostkę projektową VHDL w systemie Quartus II zawierającą bloki komparatora, multiplekserów oraz układu A. 2. Skompiluj układ oraz dokonaj symulacji funkcjonalnej w celu weryfikacji pracy stworzonych bloków. 3. Rozbuduj Twój plik źródłowy w VHDL tak aby zawierał układ dekodera siedmiosegmentowego B z rysunku 1. Dostosuj wejścia i wyjścia jednostki projektowej, używając przełączników SW 3-0 płyty DE1, reprezentujących binarną liczbę V oraz wyświetlaczy HEX1 i HEX0 pokazujących dziesiętne cyfry d 1 i d 0. Nie zapomnij o wymaganych przypisaniach pinów układu FPGA. 4. Dokonaj ponownej kompilacji projektu i zaprogramuj układ FPGA. 5. Zbadaj funkcjonowanie układu zmieniając wartość V i obserwując stan wyświetlaczy. 3. Sumatory Na rysunku 3a pokazano schemat pełnego sumatora jednobitowego, który posiada wejścia a, b i c i oraz wyjścia s i c o. Części b) i c) rysunku przedstawiają symbol zastępczy układu oraz tablicę prawdy opisującą działanie sumatora, wytwarzającego dwubitowy wynik sumowania binarnego: c o s = a + b + c i 3
Rysunek 3d przedstawia w jaki sposób 4 układy pełnych sumatorów jednobitowych można zastosować do budowy sumatora czterobitowego. Ten typ układu zwyczajowo jest nazywany sumatorem kaskadowym lub iteracyjnym (ripple-carry adder), ponieważ sygnały przeniesienia przechodzą z jednego elementarnego bloku do następnego. Napisz program w VHDL opisujący układ opisany powyżej. Rys. 3. Układ sumatora iteracyjnego W tym celu: 1. Utwórz nowy projekt w systemie Quartus II. Napisz jednostkę projektową w VHDL jednobitowego sumatora pełnego (zamknięty w symbolu) oraz jednostkę projektową VHDL najwyższego poziomu hierarchii (top-level) konkretyzującą (łączącą) cztery sumatory jednobitowe w moduł sumatora czterobitowego. 2. Użyj przełączników SW 7-4 i SW 3-0 reprezentujących oddzielnie wejścia A i B. Użyj przełącznika SW 8 jako wejściowego sygnału przeniesienia c in sumatora. Połącz przełączniki z diodami LEDR natomiast wyjścia c out i s z diodami LEDG. 3. Zamieść w projekcie niezbędne przypisania pinów układu FPGA. Skompiluj projekt i zaprogramuj FPGA. 4. Przetestuj swój układ dla różnych wartości A, B i c in. 4. Sumator liczb BCD W części drugiej analizowaliśmy konwersję liczb binarnych na liczby dziesiętne. W niektórych zastosowaniach wykorzystywana jest 4 bitowa reprezentacja cyfr dziesiętnych, czyli kod BCD 8421 - np. binarna reprezentacja liczby dziesiętnej 59 w kodzie BCD 8421 przyjmuje wartość 0101 1001. Zaprojektuj układ sumujący dwie cyfry BCD. Wejściowymi sygnałami układu są liczby A i B w kodzie BCD 8421 oraz wejściowy sygnał przeniesienia c in. Wyjście powinno być dwucyfrowym wynikiem sumowania S 1 S 0 w kodzie BCD. Zauważmy, że największy wynik sumowania obsługiwany przez układ wynosi: S 1 S 0 = 9 + 9 +1 = 19 4
Wykonaj następujące kroki: 1. Utwórz w systemie Quartus II projekt sumatora BCD. Powinieneś zastosować czterobitowy sumator z części trzeciej generujący czterobitowy wynik sumy oraz wyjściowego przeniesienia operacji sumowania A + B. Układ generujący pięciobitowy wynik o maksymalnej wartości 19 oraz konwertujący go na dwie cyfry BCD powinien być zbudowany w sposób podobny do układu z części drugiej. Układ opisz prostymi instrukcjami podstawienia w VHDL. Sugerowane jest użycie konstrukcji WITH-SELECT którą można znaleźć w funkcji: Insert template => VHDL => constructs => concurrent statements => selected signal assignment. 2. Zastosuj przełączniki SW 7-4 i SW 3-0 odpowiednio do wejść A i B oraz SW 8 do wejściowego przeniesienia. Połącz przełączniki SW do odpowiednich diod LEDR oraz 4 bity wyniku sumy i przeniesienia wyjściowego do diod LEDG. Wyświetl wartości A i B w kodzie BCD na siedmiosegmentowych wyświetlaczach HEX3 i HEX2, zaś wynik S 1 S 0 na wyświetlaczach HEX1 i HEX0. 3. Układ obsługuje poprawnie tylko cyfry BCD 8421, sprawdź przypadek gdy wejściowe sygnały A i B są większe od 10. Jeżeli to się zdarzy, układ powinien zasygnalizować błąd zaświecając diodę LEDG 7. 4. Zastosuj odpowiednie przypisania pinów układu FPGA, skompiluj projekt i zaprogramuj układ. 5. Przetestuj swój układ dla różnych wartości A, B i c in. 5. Sprawozdanie Sprawozdanie z zajęć laboratoryjnych powiano zawierać: 1. Opis słowny zadania do realizacji 2. Założenia realizowanego zadania 3. Procedurę projektową 4. Listingi gotowych programów 5. Weryfikację działania układu 6. Uwagi i wnioski 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. Zamieszczone w instrukcji zrzuty ekranowe oraz zdjęcia pochodzą z materiałów firmowych dostarczonych przez firmę Altera. 5