Politechnika Białostocka Wydział Elektryczny Katedra Automatyki i Elektroniki ĆWICZENIE Nr 4 (3h) Przerzutniki, zatrzaski i rejestry 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 ćwiczenia jest badanie przerzutników, rejestrów oraz przerzutników typu zatrzask w języku VHDL. 2. Część pierwsza. Układy FPGA firmy Altera zawierają przerzutniki przeznaczone do implementacji w układach użytkownika. W części czwartej ćwiczenia pokażemy, w jaki sposób to zrealizować. Jednak w części wstępnej ćwiczenia pokażemy, w jaki sposób implementować elementy pamiętające w FPGA bez korzystania przerzutników dedykowanych. Rysunek pierwszy przedstawia układ przerzutnika RS typu zatrzask. Sposób opisu tego układu w VHDL przedstawiono na rysunku 2. Jeżeli taki przerzutnik jest implementowany w strukturze FPGA zawierającej 4 - wejściowe tablice LUT, wówczas do jego realizacji wystarczy pojedyńcza tablica, jak to pokazano na rysunku 3a. - - A gated RS latch desribed the hard way LIBRARY ieee; USE ieee.std_logic_1164.all; ENTITY part1 IS PORT ( Clk, R, S : IN STD_LOGIC; Q : OUT STD_LOGIC); END part1; Rys. 1. Układ przerzutnika RS typu zatrzask. ARCHITECTURE Structural OF part1 IS SIGNAL R_g, S_g, Qa, Qb : STD_LOGIC ; ATTRIBUTE keep : boolean; ATTRIBUTE keep of R_g, S_g, Qa, Qb : SIGNAL IS true; BEGIN R_g <= R AND Clk; S_g <= S AND Clk; Qa <= NOT (R_g OR Qb); Qb <= NOT (S_g OR Qa); Q <= Qa; END Structural; Rys. 2. Specyfikacja przerzutnika RS za pomocą wyrażeń logicznych.
Rys. 3. Implementacja przerzutnika RS z rysunku 1. Chociaż przerzutnik można poprawnie realizować w pojedyńczej tablicy LUT, taka implementacja nie pozwala na obserwację wewnętrznych sygnałów takich jak R_g i S_g, gdyż nie ma możliwości wyprowadzenia ich z LUT jako sygnały wyjściowe. W celu zabezpieczenia tych wewnętrznych sygnałów w implementowanym układzie, konieczne jest użycie dyrektywy kompilatora w programie. Na rysunku 2 dyrektywa keep została umieszczona w wyniku użycia instrukcji VHDL ATTRIBUTE. Informuje ona kompilator systemu Quartus II o użyciu oddzielnych elementów logicznych dla każdego z sygnałów R_g, S_g, Qa oraz Qb. W czasie kompilacji programu tworzy się układ pokazany na rysunku 3b, zawierający 4 tablice LUT. Utwórz projekt przerzutnika RS w sposób następujący: 1. Utwórz nowy projekt przypisując mu chip Cyclone II EP2C35F672C6 płyty DE2. 2. Wygeneruj plik z kodem VHDL z rysunku 2 i przyłącz go do projektu. 3. Skompiluj program. Użyj Quartus II RTL Viewer do obejrzenia projektu układu na poziomie bramek z kodu źródłowego oraz Technology Viewer do obejrzenia implementacji przerzutnika jak to pokazano na rysunku 3b. 4. Utwórz plik wektora sygnałów testowych (VectorWaveform File,.vwf), który definiuje sygnały wejściowe i wyjściowe układu w procesie symulacji. Narysuj sygnały wejściowe, dokonaj symulacji i obejrzyj przebiegi sygnałów R_g, S_g, Qa oraz Qb. Sprawdź czy przerzutnik pracuje w sposób oczekiwany zarówno dla symulacji funkcjonalnej jak i czasowej. 3. Część druga. Na rysunku czwartym pokazano układ przerzutnika D typu zatrzask. Wykonaj następujące kroki: 1. Utwórz nowy projekt. Wygeneruj kod VHDL przerzutnika D w podobnym stylu jak to zrobiono na rysunku 2. Użyj dyrektywy keep w celu zapewnienia implementacji sygnałów R, S_g, R_g, Qa, i Qb w oddzielnych elementach logicznych. 2. Wybierz domyślny chip jako Cyclone II EP2C35F672C6 i skompiluj układ. Zastosuj moduł Technology Viewer do obejrzenia implementacji układu.
Rys. 4. Układ przerzutnika D typu zatrzask. 3. Zweryfikuj czy przerzutnik pracuje poprawnie dla wszystkich warunków wejściowych w wyniku symulacji funkcjonalnej zaś charakterystyki czasowe stosując czasową symulację. 4. Utwórz nowy projekt, który będzie zawierał implementację przerzutnika D zatrzask na płycie DE2. Projekt powinien zawierać top-level jednostkę projektową, zawierająca przydział portów wejściowych i wyjściowych do odpowiednich pinów FPGA płyty DE2. Umieść twój przerzutnik w jednostce top-level. Użyj przełącznika SW 0 do sterowania wejściem D, SW 1 jako wejście Clk, zaś wyjście Q podłącz do LEDR 0. 5. Dokonaj ponownej kompilacji projektu i zaprogramuj FPGA. 6. Przetestuj funkcjonowanie układu manipulując przełącznikami wejść D i Clk oraz obserwując wyjście Q. 4. Część trzecia. Rysunek piąty przedstawia układ przerzutnika typu D typu master-slave. Rys. 5. Układ przerzutnika D typu master-slave. Wykonaj następujące kroki: 1. Utwórz nowy projekt. Wygeneruj plik VHDL zawierający dwie kopie jednostek projektowych przerzutnika D typu zatrzask z części drugiej, definiujące przerzutnik typu master-slave. 2. Umieść w projekcie właściwe dla DE2 porty wejściowe i wyjściowe. Podłącz Q do LEDR 0. 3. Skompiluj projekt. 4. Użyj Technology Viewer do analizy rozmieszczenia a symulatora do weryfikacji pracy. 5. Zaprogramuj strukturę FPGA i przetestuj funkcjonowanie manipulując kluczami D i Clock oraz zaobserwuj zachowanie wyjścia Q.
5. Część czwarta. Rysunek 6 przedstawia układ z trzema różnymi elementami pamiętającymi: D zatrzask, przerzutnik D wyzwalany zboczem narastającym oraz przerzutnik D wyzwalany zboczem opadającym. Rys. 5. Schemat oraz przebiegi czasowe układu z części czwartej. Dokonaj implementacji i symulacji projektu w sposób następujący: 1. Utwórz nowy projekt. 2. Napisz plik VHDL zawierający trzy elementy pamięciowe. W tej części nie używaj więcej dyrektywy keep z poprzednich części. Rysunek 7 pokazuje behawioralny styl oprogramowania w VHDL przerzutnika D zatrzask z rysunku 4. Ten przerzutnik może być implementowany w pojedyńczej tablicy LUT. Użyj podobnego stylu kodowania do specyfikacji przerzutnika z rysunku 6. 3. Skompiluj program i zastosuj Technology Viewer do badania utworzonego układu. Sprawdź czy przerzutnik używa pojedyńczej tablicy LUT oraz czy opracowany przerzutnik używa przerzutników zawartych w układzie FPGA. 4. Utwórz plik testowy symulatora specyfikując wejścia i wyjścia układu. Narysuj przebiegi wejść D i Clock tak jak to przedstawiono na rysunku 6. Użyj funkcjonalnej symulacji w celu obserwacji sygnałów wyjściowych. Zaobserwuj różnice opisu behawioralnego poszczególnych elementów pamiętających.
LIBRARY ieee ; USE ieee.std_logic_1164.all ; ENTITY latch IS PORT ( D, Clk : IN STD_LOGIC ; Q : OUT STD_LOGIC) ; END latch ; ARCHITECTURE Behavior OF latch IS BEGIN PROCESS ( D, Clk ) BEGIN IF Clk = 1 THEN Q <= D ; END IF ; END PROCESS ; END Behavior ; Rys. 7. Behawioralny styl definicji przerzutnika D. 6. Część piąta. Chcielibyśmy wyświetlić heksadecymalną wartość 16-bitowej liczby A na siedmiosegmentowych wyświetlaczach HEX7-4. Chcielibyśmy również wyświetlić heksadecymalną wartość 16-bitowej liczby B na siedmiosegmentowych wyświetlaczach HEX3-0. Wartości A i B są wejściami układu sterowanymi przełącznikami SW 15-0. Realizowane jest to w sposób następujący: najpierw jest ustawiana wartość A i zapamiętywana w układzie a następnie jest ustawiana wartość B. 1. Utwórz nowy projekt w Quartus II, który będzie implementowany w module DE2. 2. Napisz kod programu w VHDL. Użyj KEY 0 jako źródła asynchronicznego sygnału zerującego poziomem niskim. Zastosuj KEY 1 jako źródło sygnału zegarowego. Skompiluj projekt. 3. Przypisz piny FPGA przełącznikom I wyświetlaczom siedmiosegmentowym. 4. Dokonaj powtórnej kompilacji. 5. Zbadaj funkcjonowanie układu manipulując przełącznikami i obserwując wyświetlacze. 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.