Akademia Górniczo Hutnicza im. Stanisława Staszica w Krakowie Wydział IEiT Katedra Elektroniki SYSTEMY DEDYKOWANE W UKŁADACH PROGRAMOWALNYCH Ćwiczenie 5 ZYNQ. Obsługa przerwań. Zespół Rekonfigurowalnych Systemów Obliczeniowych Sebastian Koryciak & Paweł Russek
Wprowadzenie http://www..pl/gegula Zajęcia poświęcone płycie ZedBoard i systemowi PetaLinux. Cele zajęć: - stworzenie projektu sprzętowego w środowisku PlanAhead 2
1. Stworzenie projektu w PlanAhead 1. Proszę uruchomić program PlanAhead, a następnie przystąpić do stworzenia nowego projektu, który będzie podstawą do zbudowania całego systemu. 2. Proszę projekt zatytułować project_zynq_irq, oraz zadbać aby ścieżka dostępu do projektu nie zawierała znaków spacji. 3. W następnym oknie proszę wybrać opcję RTL Project (nie zaznaczać opcji Do not specify sources at this time) 3
4. W kolejnym oknie proszę jako Taget language wybrać opcję VHDL. 5. Proszę klikać Next w celu nie dodawania żadnych istniejących IP, źródeł Constraints. 6. W oknie wyboru części proszę zaznaczyć opcję Boards, a następnie wybrać rodzinę Zynq- 7000, opakowanie clg484. Ostatecznie z listy proszę wybrać opcję ZedBoard Zynq... Wybór zatwierdzić przyciskiem Next. 4
7. Zatwierdzamy stworzenie nowego projektu przyciskiem Finish. 8. Przystępujemy do dodawania źródeł do naszego projektu. W tym celu klikamy na ikonę umieszczoną w oknie zatytułowanym Sources 5
9. W nowo otwartym oknie zaznaczamy opcję Add or Create Embedded Sources, zatwierdzamy wybór przyciskiem Next, a następnie chcąc utworzyć nowy system klikamy na przycisk Create Sub-Design... 10. Nowo tworzony moduł proszę nazwać zynq_module i nacisnąć OK. Dodawanie systemów zakańczamy przyciskiem Finish. 11. W trakcie tworzenia, a także modyfikowania modułu systemu będzie pojawiało się powyżej umieszczone okno. W tym samym czasie zostaje uruchomiona automatycznie aplikacja XPS. Zaczynamy od zatwierdzenia dodania systemu. 6
12. Stworzony system jest pusty. Pierwsza czynność polega na zaimportowaniu ustawień jednostki PS (czyli ARM z peryferiami) przypisanych przez producenta płyty Zedboard. W związku z tym klikamy na ikonę Import. 13. W oknie zatytułowanym Import Zynq Processing System Configuration wybieramy z listy opcję ZedBoard Development Board Template, a nasz wybór potwierdzamy przyciskiem OK. 14. W następnej informacji program XPS poinformuje nas o zaimportowaniu nowej konfiguracji. Proszę potwierdzić wprowadzenie zmian przyciskiem YES. W ten sposób przygotowaliśmy Processing System do pracy. Teraz rozpoczniemy jego modyfikację, w celu podłączenia kontrolera PWM, oraz Debouncera. Dokonamy następujących zmian: dodamy IP core do komunikacji z GPIO po przez magistralę AXI-Lite udostępnimy na zewnątrz systemu port GPIO i GPIO2, oraz 2 zegary o zadanej częstotliwości 15. Proszę w oknie IP Catalog rozwinąć wiersz General Purpose IO, a następnie dwukrotnie kliknąć na dodawany moduł: AXI General Purpose IO. Przyciskiem YES potwierdzamy zamiar dodania nowego modułu. 7
16. Dokonujemy następujących modyfikacji: aktywujemy GPIO Supports Interrupts i Enable Channel 2, rozwijamy wiersz Channel 2, gdzie aktywujemy Channel 2 is Input Only i zmieniamy parametr GPIO2 Data Channel Width na wartość 5. Zatwierdzamy zmiany przyciskiem OK, a następnie zgadzamy się na automatyczne stworzenie połączenia między modułem, a processing_system7_0 klikając OK. 8
Prawidłowo podłączony moduł powinien być widoczny pod zakładką Bus Interfaces. 9
17. Kolejne modyfikacje będą dotyczyły portów, dlatego proszę przejść do zakładki Ports znajdującej się obok zakładki Bus Interfaces. 18. Proszę rozwinąć wiersz axi_gpio_0, a w nim wiersz (IO_IF) gpio_0. Klikając prawy przyciskiem myszy na wiersz GPIO_IO proszę wybrać opcję No Connection (to samo robimy dla wiersza GPIO2_IO), a następnie klikając prawym przyciskiem myszy na wiersz GPIO_IO_O proszę wybrać opcję Make External (to samo dla GPIO2_IO_I). Po dokonanych zmianach okno powinno wyglądać jak poniższe. 10
19. Następnie dodajemy przerwanie. Proszę kliknąć na wiersz IP2INTC_Irpt lewym przyciskiem myszy (na puste pole Connected Port). W otwartym oknie wybieramy jedynie nieaktywne przerwanie, a następnie strzałką podłączamy je do kontrolera. Zmiany zatwierdzamy OK. 20. Proszę zwinąć wiersz axi_gpio_0, a rozwinąć processing_system7_0. Proszę odnaleźć wiersz FCLK_CLK0, a następnie klikając na niego prawym przyciskiem myszy proszę wybrać opcję Make External (tak samo robimy dla FCLK_CLK1). Po zmianach okno powinno wyglądać jak poniżej. Proszę zwrócić uwagę na obecność podłączonego przerwania w wierszu IRQ_F2P. 11
21. Proszę zwinąć wiersz processing_system7_0, a rozwinąć wiersz External Ports. Klikając raz lewym przyciskiem myszy na wiersze axi_gpio_0_gpio_io_o_pin, processing_system7_0_fclk_clk0_pin, axi_gpio_0_gpio2_io_i_pin, processing_system7_0_fclk_clk1_pin proszę zmodyfikować ich nazwy na odpowiednio: PWM_DutyCycle, PWM_Clk, DEB_Buttons, DEB_Clk. Po zmianach okno powinno wyglądać jak poniżej. 12
22. Wybierając zakładkę Zynq proszę lewym przyciskiem myszy nacisnąć na przycisk Clock Generation. 13
23. W nowo otwartym oknie rozwijamy wiersz PL Fabric Clocks, a następnie modyfikujemy wartości częstotliwości na podane poniżej. Zmiany najpierw zatwierdzamy przyciskiem Validate Clock, a następnie OK. FCLK_CLK0 -> 50,000000 FCLK_CLK1 -> 1,000000 FCLK_CLK2 -> 50,000000 FCLK_CLK3 -> 50,000000 14
24. Wszystkie dokonane przez nas zmiany zostaną zapisane w momencie wyjścia z aplikacji XPS. Dokonujemy tego klikając na File -> Exit. 25. Po powrocie do aplikacji PlanAhead dodajemy kolejne źródła w sposób analogiczny do punktu 1.8. Tym razem wybieramy opcję Add or Create Design Sources. 26. Proszę kliknąć na przycisk Add Files... po czym zaznaczyć pliki PWM_Controller.vhd, debouncer.vhd i zynq_module_stub.vhd znajdujące się w archiwum dostępnym na stronie zespołu. Proszę zwrócić uwagę czy jest zaznaczone pole Copy sources into project, a następnie nacisnąć Finish. 27. Proszę zgodnie z punktem 1.8 powtórnie dodać źródła, ale tym razem wybrać opcję Add or Create Constraints. 28. Proszę kliknąć na przycisk Add Files... po czym zaznaczyć plik system.ucf znajdujący się również w powyższym archiwum. Proszę zwrócić uwagę czy jest zaznaczone pole Copy constraints files into project, a następnie nacisnąć Finish. 29. Na podstawie tak zbudowanego projektu proszę wygenerować bitstream klikając na ikonę zaznaczoną na poniższym zrzucie ekanu. Przy okazji proszę sprawdzić, czy zawartość okna Sources jest taka sama jak poniżej. 15
W trakcie syntezy pojawią się ostrzeżenia, które należy zignorować. Po poprawnym wykonaniu operacji Bitgen proszę otworzyć zaimplementowany projekt wybierając poniżej zaznaczoną ikonę 30. Pozostało nam jedynie wyeksportować projekt (Hardware + Bitstream) do aplikacji SDK. Proszę wybrać File -> Export -> Export Hardware for SDK. W nowym oknie proszę pozostawić zaznaczone wszystkie opcje, czyli Include bitstream, Export Hardware, Launch SDK. Proszę przejść do nowo otwartej aplikacji SDK. 16
2. Stworzenie oprogramowania 1. Rozpoczynamy od stworzenia nowego BSP. Proszę wybrać z menu górnego File -> New -> Board Support Package. 2. W kolejnym oknie proszę zatwierdzić wszystkie opcje klikając Finish. 3. Proszę pozostawić opcje podstawowe dla standalone_bsp_0 i zatwierdzić przyciskiem OK. 17
4. W drugiej kolejności proszę stworzyć nową aplikację. Wybieramy z górnego menu File -> New -> Application Project. 5. Jako nazwę projektu wpisujemy irq_test, a jako Board Support Package wybieramy opcję Use existing i wybieramy wcześniej stworzone standalone_bsp_0. Lewym przyciskiem myszy klikamy na Next. 18
6. W kolejnym oknie upewniamy się czy jest zaznaczona opcja Hello World, a następnie zatwierdzamy stworzenie aplikacji przyciskiem Finish. 7. Proszę na płycie ZedBoard (przy wyłączonym zasilaniu) ustawić konfigurację wgrywania systemu za pomocą interfejsu JTAG (wszystkie 5 (JP7 - JP11) zworek do GND, zwora JP6 otwarta). Następnie proszę podłączyć płytę do zasilania, oraz dwa połączenia USB z komputerem: UART i JTAG. 8. Następnie w aplikacji SDK proszę wybrać z menu Xilinx Tools -> Program FPGA. 9. W kolejnym oknie upewniamy się czy ścieżka dostępowa do pliku Bitstream jest prawidłowa, a następnie programujemy FPGA przyciskiem Program. Prawidłowe wgranie konfiguracji potwierdzi zapalona niebieska dioda na płycie ZedBoard. 10. Przygotowujemy terminal do komunikacji z płytą ZedBoard przez UART. Na systemie Windows uruchamiamy aplikację (np. Putty) i łączymy się z portem COM3 / 115200. 11. Jako pierwszą aplikację uruchamiamy stworzony irq_test. Proszę nacisnąć prawym przyciskiem myszy na projekt irq_test, a następnie wybrać opcję Run as -> Launch on Hardware (GDB). 12. Zawartość pliku helloworld.c proszę podmienić z zawartością pliku o tej samej nazwie znajdującym się w archiwum zamieszczonym w materiałach dodatkowych. 13. Po zapisaniu i zbudowaniu (automatycznym) aplikacji ponownie ją wgrywamy zgodnie z punktem 11. 14. Ostatnie zadanie polega na modyfikacji aplikacji, tak aby na podstawie naciskanych przycisków na płycie ZedBoard otrzymać następujące funkcje: zwiększenie / zmniejszenie jasności led(z uwzględnieniem wartości brzegowych), włącz / wyłącz led, wyjdź z aplikacji. 19