Programowalne układy logiczne Wydziałowy Zakład Nanometrologii SEMESTR LETNI Pierwszy projekt w środowisku ISE Design Suite Xilinx 1. Zapoznanie ze środowiskiem Xilinx ISE Design oraz językiem opisu sprzętu Verilog, program obejmuje: tworzenie projektu w środowisku ISE Design 14.7, tworzenie symulacji Test Bench, synteza, fizyczna implementacja kodu w strukturze FPGA. Język Verilog: podstawowe pojęcia języka (blok entity, blok architekture, zmienne, sygnały, procesy, sekwencyjne i równolegle wykonanie instrukcji), definicja stałych, sygnałów i zmiennych, definicja procesu, instrukcje podstawień. Zasady wykonywania instrukcji opisanych językiem Verilog (równoległe oraz sekwencyjne wykonywanie programu). Umiejętność pisania prostych programów opisujących logikę w sposób behawioralny tworzenie procesów, tworzenie liczników/dzielników, rejestrów, operacje logiczne oraz arytmetyczne wykonywane na zmiennych i sygnałach, instrukcje warunkowe, instrukcje wyboru, podstawienia warunkowe. Zadania Proste struktury umożliwiające m. in.: sterowanie diodami LED z wykorzystaniem przycisków, proste konstrukcje logiczne asynchroniczne - bramki AND, OR, NAND, NOR, XOR, XNOR, multipleksery, demultipleksery, proste konstrukcje synchroniczne, wykorzystanie procesów i zmiennych - dzielniki częstotliwości, liczniki, maszyny stanowe, sterowanie diodami LED. Prowadzący może modyfikować program w zależności od postępów grupy.
Zadania Uruchomienie programu następuje po wywołaniu IseDesign Suite 14.7, czego wynikiem jest pojawienie się okna ISE Project Navigator. W oknie głównym programu należy stworzyć nowy projekt za pomocą polecenia New Project, alternatywnie można to samo zrobić wybierając New Project w menu File. W oknie projektu należy podać nazwę oraz ścieżkę, w której zapisany zostanie projekt (należy pamiętać, aby w nazwie projektu nie używać polskich znaków oraz spacji). Dobrym zwyczajem jest w oknie Description w kilku zdaniach napisać, co jest celem realizowanego projektu bądź, jakie spełnia funkcje. W ustawieniach projektu należy zdefiniować parametry realizowanego projektu. Wśród dostępnych opcji należy wybrać Evaluation Development Board - czyli zestaw prototypowy, w którego skład wchodzi układ programowalny itp. W trakcie realizacji zajęć do dyspozycji
studentów przeznaczony jest zestaw ewaluacyjny firmy Digilent z układem FPGA SPARTAN 3E (XC3S500E) więc wybieramy: Spartan 3E Starter Board Pełna dokumentacja techniczna dostępna jest na stronie producenta oraz w dziele materiały na stronie przedmiotu: http://www.digilentinc.com/products/detail.cfm?navtop=2&navsub=423&prod=s3eboar D&CFID=7488200&CFTOKEN=eee4d540d3ade18-CB4F5D43-5056-0201-021900B95A61CD0F Pozostałe ustawienia jak Family, Device, Package odnoszę się do układu logiki programowalnej i oznaczają odpowiednio: rodzinę układów, symbol układu scalonego oraz rodzaj obudowy. FG320 oznacza układ scalony FBGA o 320 wyprowadzeniach, przeznaczony do montażu powierzchniowego. W kolejnym kroku pojawi się okno stanowiące podsumowanie projektu. Klikając Finish można przejść do dalszego etapu, konfiguracji środowiska. W trakcie zajęć laboratoryjnych/projektowych oraz przy realizacji projektów własnych należy posługiwać się językiem Verilog. Aby przystąpić do realizacji określonej struktury logicznej należy kliknąć prawym przyciskiem myszy na symbol układu scalonego xc3s500e-4fg320 z menu kontekstowego wybieramy New Source. Opis struktury realizujemy z wykorzystaniem modułu Verilog Module. Pozostałe opcje umożliwiają między innymi tworzenie symboli dla realizowanych funkcjonalności, tworzenie dokumentacji oraz prowadzenia procesu testowania projektowanej struktury logicznej. Nazwę projektowanego modułu VHDL najlepiej przyjąć w ten sposób, aby krótko opisywała realizowaną funkcjonalność.
Przechodząc dalej, w kolejnym kroku należy zdefiniować porty wejściowe oraz wyjściowe dla realizowanej struktury logicznej. Przy założeniu, że realizuje się dwu wejściową bramkę AND z łatwością można się domyśleć ze w oknie Port Name zdefiniowano dwa wejścia a, b oraz wyjście y. Oczywiście można w tym miejscu zdefiniować wektory wejściowe o dowolnej długości. W kolumnie Port Name należy wpisać nazwy sygnałów wejściowych i wyjściowych użytych w układzie logicznym, w kolumnie Direction należy podać rodzaj sygnału, wejściowy (in) lub wyjściowy (out). Rodzaje, ilość wejść, wyjść można ustalać w trakcie realizacji programu. W trakcie prac nad projektem, możliwe jest nanoszenie dowolnych zmian w portach wejścia/wyjścia.
Potwierdzając kolejny krok realizacji projektu, pojawia się okno główne programu, w centralnej części programu widnieje okno edytora, ze wstępnie wygenerowanym kawałkiem kodu. Część kodu związana ze standardowymi bibliotekami IEEE oraz podstawowy szkielet architektury opisu sprzętu generowany jest automatyczni. Należy mieć jednak na uwadze jak wygląda szkielet i co wchodzi w jego skład. Aby sprawdzić poprawność składniową opisanego kodu w okienku Processes rozwiń opcję Synthesize XST i kliknij dwukrotnie Check Syntax, w wyniku syntezy Przez wykonaniem syntezy każdorazowo należy pamiętać o tym, aby zapisać projekt. Określenie podstawowej jednostki czasu w wykonywaniu projektu (do celów symulacji) Komentarz informacyjny odnośnie projektu, zawiera takie informacje jak: czas wykonania projektu, projektanta, przeznaczenie, itp Określenie granic tworzenia moduły w którym zawarty zostnie opis danej struktury Wypisanie wejść oraz wyjść modułu stworzonego w języku Verilog
Do modułu wpisać następujący opis struktury: Gdzie: Deklaracja sygnałów wewnętrznych Opis struktury bramka AND Opisaną funkcjonalność przedstawia poniższy symbol (RTL): UWAGA: W którym miejscu znajduje się błąd na tej stronie?
Symulacja testowanie funkcjonalności. Aby sprawdzić poprawność zaprojektowanego/zakodowanego układu należy przeprowadzić jego symulację. Środowisko ISE WebPack ma wbudowany symulator. Przed przystąpieniem do symulacji należy zbudować tzw. Test Bench, który określi wymuszenia testujące. Aby zbudować plik testujący należy w menu Project wybrać New Source...: W oknie wybrać Verilog Test Figure i wpisać nazwę pliku testującego w File Name. W kolejnym oknie należy wybrać układ, dla którego tworzony będzie plik testujący. Opis struktury symulacyjnej wygenerowany automatycznie: W okienku Design należy wybrać View: Simulation. Klikając dwukrotnie lewym przyciskiem myszy na Simulate Behavioral Model, po chwili powinno pojawić się okno z wynikiem symulacji:
W oknie symulacji można zobaczyć m.in.: sygnały wymuszające a i b oraz wyjście y układu po zmianie stanów bitowych. Oraz przybliżenie na przebieg symulacji:
Synteza kodu i programowanie układu FPGA Po przeprowadzeniu procesu syntezy można przystąpić do zaprogramowania układu FPGA, do dyspozycji studentów przeznaczony jest zestaw uruchomieniowy: Spartan 3E Starter Board. Dokumentacja techniczna, schematy zamieszone zostały na stronie kursu. Zestaw prototypowy należy podłączyć do komputera za pomocą przewodu USB. Interfejs USB przeznaczony jest do komunikacji z programatorem JTAG. Zestaw zasilany jest napięciem stabilizowanym 5 V z zasilacza dołączonego do zestawu. Dokumentacja techniczna dostępna na stronie kursu oraz na stronie producenta
Realizacja fizyczna i Plan Ahead Przypisywanie wejść i wyjść: Dla wcześniej zdefiniowanej architektury należy przypisać fizyczne wejścia oraz wyjście. W wypadku zestawu uruchomieniowego, jako sygnały wejściowe posłużę przełączniki oraz dioda LED. Na podstawie dokumentacji należy sprawdzić połączenia między układem FPGA oraz elementami peryferyjnymi. 1 0 Działanie przełączników: Ustawienie przełącznika SW0 w pozycję 1 powoduje ustawienie stanu wysokiego (3,3 V) na pinie L13 układu FPGA. W pozycji 0 nożna układu dołączona jest do potencjału GND. Diody LED: Zestaw prototypowy wyposażony jest w 8 diod LED ogólnego przeznaczenia. Dołączonych do pinów układu FPGA. Każda z diod dołączona jest do wyprowadzeń układu za pomocą szeregowo połączonego rezystora 390. Dioda aktywowana jest stanem wysokim. Proces implementacji syntezowanego kodu w architekturę FPGA następuję w kilku krokach. Niewątpliwą zaletą jest fakt, że to użytkownik decyduje, w którym miejscu projektowana
struktura posiada wejścia oraz wyjścia. Definicję wejść, wyjść realizuje się za pomocą pakietu Plan Ahead. Dostęp uzyskujemy przechodząc kolejno: Processes User Constraints I/O Pin Planning Proces przypisania wyjść polega na odpowiednim zdefiniowaniu i przypisaniu. Definiowanie realizuje się za pomocą myszki, klikając w odpowiednie pozycje (piny). Proces definiowania wejść/wyjść polega na odpowiednim zdefiniowaniu i przypisaniu. Definiowanie realizuje się za pomocą myszki, klikając w odpowiednie pozycje (piny) widoczne na schemacie połączeniowym układu. W kolumnach oraz wierszach przedstawione są kolejne porty/piny wejścia/wyjścia. Należy mieć jednak na uwadze fakt, że niektóre z pinów mają przypisane funkcje, jak np. rozprowadzanie sygnału zegarowego lub napięcia zasilającego układ i poszczególne struktury.
Innym sposobem definiowanie wejść/wyjść lub źródła sygnału zegarowego jest tworzenie pliku Net List (plik z rozszerzeniem *.ucf). Ten sposób definiowania połączeń wymaga jednak doświadczenia w czytaniu schematów ideowych oraz dokumentacji technicznej. Zawartość pliku połączeń (Netlist): NET pin wejściowy/wyjściowy, LOC fizyczna lokalizacja pinu układu FPGA, do którego dołączony zostanie NET, IOSTANDARD standard określający poziom sygnałów wejściowych/wyjściowych, PULLUP dołączenie wejścia/wyjścia do potencjału podciągającego + VCC przez rezystor wewnętrzny. Sposób nr 1 Sposób nr 2 # PlanAhead # wejście a oraz b NET "a" LOC = N17; NET "a" IOSTANDARD = LVTTL; NET "a" PULLUP; NET "b" LOC = H18; NET "b" IOSTANDARD = LVTTL; NET "b" PULLUP; # wyjście y NET "y" LOC = F9; NET "y" IOSTANDARD = LVTTL; # wejście a oraz b NET "a" LOC = N17 IOSTANDARD = LVTTL IOSTANDARD; NET "b" LOC = H18 IOSTANDARD = LVTTL PULLUP; # wyjście y NET "y" LOC = F9 IOSTANDARD = LVTTL;
Impact implementacja funkcjonalności w FPGA Po wykonaniu poprzednich kroków, określoną funkcjonalność należy zaimplementować w strukturę FPGA. Do tego celu przewidziany jest pakiet IMPACT. Za pośrednictwem interfejsu JTAG dokonuje identyfikacji układów połączonych programowalnych połączonych w pętli (szeregowo). Pakiet IMPACT wywołujemy klikając dwukrotnie: Należy potwierdzić komunikat mówiący o konieczności uruchomienia pakietu IMPACT. Następnie z menu Edit wybieramy Lunch Wizard komunikat potwierdzamy klikając na OK. Po chwili w oknie głównym programu pojawią się urządzenia podłączone do interfejsu JTAG komunikat potwierdzamy klikając YES.
Naszym układem programowalnym jest układ xc3s500e. To w jego strukturę należy zaimplementować kod. Pozostałe układy to pamięć FLASH oraz dodatkowy układ CPLD. Poprawnie przeprowadzony proces programowania układu zostanie potwierdzone komunikatem: Program Succeeded.