AKADEMIA GÓRNICZO-HUTNICZA im. St. Staszica w Krakowie EAIiE SPRZĘTOWA IMPLEMENTACJA ALGORYTMÓW EDK MicroBlaze Tutorial Documentation z wykorzystaniem platformy FPGA z rodziny SPARTAN3E Prowadzący: dr inŝ. Ernest Jamro Autorzy Maciej Jaklik, Artur Rydosz Wersja EDK 9.2i Data 11.06.2008 Modyfikacja 09.10.2009 (pr)
1. Wstęp Celem niniejszego ćwiczenia jest zapoznanie z moŝliwościami realizacji systemu procesorowego MicroBlaze przy wykorzystaniu Xlinx Platform Studio w środowisku ISE Design Suite. Wymagania: Xilinx ISE Design Suite 11.1 Spartan3-200- Digillent Board. 2. Generowanie systemu w EDK Otworzyć środowisko Xilinx ISE Design Suite 11.1->EDK->Xilinx Platform Studio i wygenerować nowy projekt przy pomocy Base System Builder Wizard (rys.1.) Rys.1. Okno dialogowe, wybór projektu. Wpisujemy dowolną nazwę projektu w wybranym katalogu 1 (rys.2.), a następnie wybieramy opcję tworzenia nowego projektu EDK (rys.3.) Rys.2. Okno dialogowe, wybór ścieŝki projektu. 1 Katalog z naszym projektem nie moŝe być tym samym katalogiem gdzie zainstalowane jest środowisko EDK ani katalogiem w którego nazwie są spacje (np.:pulpit!!!). 2
Rys.3. Okno dialogowe, wybór opcji tworzenia projektu. Wybieramy wersję płytki, którą będziemy wykorzystywać w ćwiczeniu: Xilinx Spartan-3 Starter Board E Wybieramy system jednoprocesorowy Wybieramy częstotliwość zegara 50MHz Rozmiar pamięci lokalnej 8KB Zastosować peryferia: o Przełączniki DIP switch na urządzeniu GPIO (General Purpose Input Output) o Wyświetlacz 7 segmentowy na urządzeniu GPIO o Diody LED na urządzeniu GPIO o Przyciski PUSH Button na urządzeniu GPIO o Interfejs RS232 na urządzeniu UARTLite o Kontroler pamięci danych LMB (DLMB) na mostku lmb_bram_if_cntr o Kontroler pamięci instrukcji LMB (DLMB) na mostku lmb_bram_if_cntr o Interfejs pamięci zewnętrznej SRAM na intrerfejsie xps_mch_emc Skonfigurować przykładowe aplikacje dla procesora: TestApp_Memory i TestApp_Pheripherial 3
3. Interfejsy magistrali Poprawnie wygenerowany system pokazano na rysunku 4. Rys. 4. Widok (System Assembly View) poprawnie wygenerowanego projektu. microblaze_0 procesor MicroBlaze debug_module moduł umoŝliwiający sprzętowe debuggowanie poprzez JTAG RS232 interfejs UART dlmb_cntr interfejs pamięci danych ilmb_cntr interfejs pamięci instrukcji lmb_bram pamięć BRAM mdm moduł umoŝliwiający debagowania SRAM interfejs pamięci zewnętrznej DIP, LED, PUSH urządzenia peryferyjne płytki Digillent 4. Schemat blokowy Wybrać Blok Diagram. Wyjaśnić dlaczego obydwie magistrale LMB (DLMB, ILMB) są podłączone do jednej pamięci BRAM. Jak to jest moŝliwe, ze nie ma tu konfliktu?
5. Mapa pamięci Dokonać zmian w mapie pamięci automatycznie wygenerowanego systemu zgodnie z rysunkiem 5: Rys.5. Mapa pamięci wygenerowanego projektu (z uwzględnieniem uwag). Uwaga. NaleŜy dokonać zmian w adresach pamięci SRAM i BRAM. W przypadku SRAM adres początkowy ustawiamy na wartość 0x70000000, natomiast dla dlmb_cntrl i lmb_cntrl adresy początkowe ustawiamy na wartość 0x00000000 a rozmiar na 8K. 6. Przykład dodawania nowego komponentu do istniejącego systemu Kiedy system zostanie utworzony za pomocą kreatora (Base System Builder) moŝe zostać zmodyfikowany wg naszych potrzeb w oknie systemowym (System Assembly view rys.6). Rys.6. Okno systemowe System Assembly View. Podwójne kliknięcie na którykolwiek IP z listy wyświetlonej w System Assembly View umoŝliwia jego zmodyfikowanie. System Assembly View posiada filtry: o Bus Interface filter kiedy jest aktywny pokazane są połączenia magistarli o Ports filter kiedy jest aktywny pokazane są porty i połączenia. Jeśli chcemy dodać jakiś zewnętrzny port filtr musi być aktywny, o Addresses filter kiedy jest aktywny pokazane są odpowiednie adresy IP. Mamy moŝliwość generowania i zmiany adresów poszczególnych IP. 5
Jeśli chcemy dodać jakieś urządzenie GPIO (General Purpose Input Output) do naszego projektu klikamy na katalog IP (IP Catalog) i wybieramy XPS General Purpose IO klikając dwukrotnie. System Assembly View zostanie zaktualizowany o nowe połączenie rys.7. Rys.7. Okno dialogowe System Assembly View. W tym momencie nasze urządzenie nie jest podłączone do magistrali ani nie ma przypisanego adresu. Aktywujemy filtr Bus Interface (wystarczy kliknąć na zakładkę o tej nazwie), i klikamy w + obok xps_gpio_0 umoŝliwi nam to wybór połączenia urządzenia: o New connection zostanie dodana nowa magistrala do systemu i nasze urządzenie zostanie do niej dołączone o mb_plb nasze urządzenie zostanie dołączone do juŝ istniejącej magistrali PLB o No connection urządzenie nie zostanie dołączone. Najprostszą formą połączenia urządzenia jest podłączenie go do juŝ istniejącej magistrali. W kolejnym kroku przypisujemy adres naszemu urządzeniu Base Address i High Address. W tym celu aktywujemy filtr Address (klikamy na zakładkę rys.8). Adres moŝemy przypisać ręcznie bądź skorzystać z opcji automatycznego przypisania adresu przez kilknięcie Generate Addresses. Rys.8. Okno dialogowe System Assembly View Address Filter. 6
7. Generacja pliku konfiguracyjnego Wybieramy Hardware->Generate bitstream. Tworzymy plik konfuguracyjny FPGA, ale bez binariów programu który ma być realizowany przez procesor Microblaze. 8. Projekt softwarowy Zanim przystąpimy do kompilacji projektu softwarowego naleŝy włączyć Mark to Initialize BRAM s tak jak pokazano na rysunku poniŝej: Rys. 9. Później wybieramy: Software Genrate Libraries and BSPs. Jeśli nie ma Ŝadnych błędów to: Software Build All user applications Jeśli nie ma Ŝadnych błędów to moŝemy dołączyć binaria programu do pliku bitstream do konfiguracji FPGA Device Configuration Update Bitstream Tak utworzonym plikiem download.bit moŝna skonfigurować FPGA. Ale tego kroku w tym ćwiczeniu nie wykonujemy. NaleŜy zwrócić uwagę na komunikaty konsoli czy nie pojawiły się tam Ŝadne błędy. 7
9. Programowanie systemu Microblaze a. Tworzenie nowego projektu Chcąc stworzyć swoją własną aplikację, naleŝy w zakładce Aplication kliknąć na Add Software Application Project (rys.9). W oknie dialogowym wpisujemy nazwę naszej aplikacji, wybieramy procesor i klikamy OK. (rys.10). Po wygenerowaniu nowego projektu naleŝy włączyć Mark to initialize BRAMs tak jak to pokazano na rys. 9. Rys.10. Okno dialogowe kreator dodawania nowej aplikacji do projektu b. dodawanie nowego pliku źródłowego W pierwszej kolejności naleŝy pobrać plik system.c do folderu XPS (http://www.fpga.agh.edu.pl/russek/sprzetowa/system.c) Klikamy na Source i wybieramy: Add existing file. Wybieramy nasz pobrany plik system.c. tak jak pokazano to na rysunku poniŝej. Rys. 11 Okno dialogowe dodawanie pliku źródłowego 8
c. Modyfikacje kodu z pliku źródłowego Klikamy dwukrotnie na plik system.c rys. 12. Rys.12. Widok zawartości pliku źródłowego system.c. NaleŜy zapoznać się z kodem źródłowym, zrozumieć jego funkcjonalność. Następnie otworzyć dokumentację sprzętową GPIO i na jej podstawie odpowiednio skonfigurować funkcje zawarte w system.c: XGPIO_Initialize, XGPIO_SetDataDirection, XGPIO_DiscreteRead, XGPIO_DiscreteWrite. Wybieramy: HELP EDK Online Documentation IP Reference Driver reference guide Driver API links odszukujemy GPIO I klikamy na ostatnią wersje. Odszukujemy funkcje: XGPIO_Initialize, XGPIO_SetDataDirection, XGPIO_DiscreteRead, XGPIO_DiscreteWrite i poprawiamy je w system.c. Poprawnie skonfigurowany plik system.c pokazano na rysunku 12a. 9
Rys.12a. Poprawnie skonfigurowany plik system.c. 10. Implementacja softwaru Sprzętowy i programowy projekt jest kompletny, kolejnym krokiem jest zdefiniowanie programowania: konifguracja Board Support Package (BSP) (Konfiguracja BSP zawiera wybór urządzenia i bibliotek) oraz wgrywania aplikacji programowych. a. konfiguracja BSP Wybieramy: Software Software Platform Settings Okno dialogowe zawiera trzy podokna: Software Platform, OS and Libraries, Drivers w kaŝdym podoknie moŝna dokonać odpowiednich zmian w konfiguracji BSP. Okno Software View (rys.13) umoŝliwia uŝytownikowi zmianę paramterów procesora, drivera, systemu operacyjnego (Standalone, xilkernel) i bibliotek. W tym oknie nie dokonujemy Ŝadnych zmian. W oknie OS and Libraries (rys.14) umoŝliwia uŝytkownikowi konfigurację systemu operacyjnego I bibliotek. Nie dokonujemy Ŝadnych zmian. Okno Driver (rys.15) umoŝliwia wybór wersji oprogramowanie do urządzeń peryferyjnych w systemie. 10
Rys. 13. Okno dialogowe software view Rys.14 Okno dialogowe OS and Library Rys.15. Okno dialogowe driver configuration 11
11. Budowa aplikacji końcowej i uruchomienie EDK 9.2, XPS umoŝliwia uŝytkownikowi stworzenie wielu projektów softwareowych. KaŜdy projekt moŝe zawierać pliki źródłowe, pliki nagłówkowe, skrypty linkera. KaŜdy projekt moŝna skonfigurować z osobna: zmieniać opcje kompilatora wybierać, które projekty mają być skompilowane kompilować całe projekty a. Kompilacja kodu UŜywając GNU GCC Compiler moŝemy skompilować nasz kod. W tym celu wybieramy: Software Build All User Appliations (rys. 16 wynik kompilacji), a następnie Device Configuration -> Update Bitstream Rys.16. Wynik kompilacji programu. b. Wgrywanie konfiguracji do FPGA Kiedy projekty sprzętowe i programowe są juŝ kompletne, urządzenie moŝe zostać skonfigurowane. Wgrywanie programu i konfigurację FPGA moŝna przeprowadzić w kilku prostych krokach: a) podłączyć komputer z płytą FPGA poprzez Parallel-JTAG kabel i kabel szeregowy b) uruchomić sesje w hyperterminalu o ustawić bits per second: naleŝy ustawić taką samą prędkość jaką zdefiniowaliśmy w kreatorze urządzeń GPIO (rekomendowana 57600) o data bits: 8 o parity: none o stop bits: 1 o flow control: none c) podłączyć zasilanie do płytki d) załadować program download.bit e) obserwować komunikaty na terminalu i zachowanie LED na płytce. Zmieniać połoŝenia DIP switch. Zweryfikować czy obserwowane działanie pokrywa się z oczekiwanym zgodnie z uruchomionym kodem programu. 12