ZTC WEL WAT 2013 NIOS2. Projekt programowalnego generatora sygnałów o przebiegach prostokątnych. Grzegorz Grzęda 2013-06-02



Podobne dokumenty
Projektowanie z użyciem procesora programowego Nios II

Projekt procesora NIOSII w strukturze programowalnego układu logicznego CYCLONEII EP2C35F672C6 wersja startowa dla słuchaczy studiów niestacjonarnych.

Projekt procesora NIOSII w strukturze programowalnego układu logicznego CYCLONEII EP2C35F672C6 podłączenie i obsługa wyświetlacza LCD.

1.Wstęp. 2.Generowanie systemu w EDK

Warsztaty AVR. Instalacja i konfiguracja środowiska Eclipse dla mikrokontrolerów AVR. Dariusz Wika

Ćwiczenia z S S jako Profinet-IO Controller. FAQ Marzec 2012

Galileo v10 pierwszy program

dokument DOK wersja 1.0

MultiTool instrukcja użytkownika 2010 SFAR

INSTALACJA DOSTĘPU DO INTERNETU

WYKONANIE APLIKACJI OKIENKOWEJ OBLICZAJĄCEJ SUMĘ DWÓCH LICZB W ŚRODOWISKU PROGRAMISTYCZNYM. NetBeans. Wykonał: Jacek Ventzke informatyka sem.

Konfiguracja pakietu CrossStudio for MSP

Politechnika Białostocka Wydział Elektryczny Katedra Automatyki i Elektroniki

Utworzenie aplikacji mobilnej Po uruchomieniu Visual Studio pokazuje się ekran powitalny. Po lewej stronie odnośniki do otworzenia lub stworzenia

Bezpieczeństwo informacji oparte o kryptografię kwantową

Programowanie procesora Microblaze w środowisku SDK

Product Update Funkcjonalność ADR dla przemienników Częstotliwości PowerFlex 750 oraz 525 6

LABORATORIUM UKŁADÓW PROGRAMOWALNYCH Wydziałowy Zakład Metrologii Mikro- i Nanostruktur SEMESTR LETNI 2017

Programowanie niskopoziomowe

Ćwiczenia z S Komunikacja S z miernikiem parametrów sieci PAC 3200 za pośrednictwem protokołu Modbus/TCP.

Komunikacja Master-Slave w protokole PROFIBUS DP pomiędzy S7-300/S7-400

Parametryzacja przetworników analogowocyfrowych

Instrukcja instalacji i obsługi modemu ED77 pod systemem operacyjnym Windows 98 SE (wydanie drugie)

Projektowanie Systemów Wbudowanych

SYSTEMY DEDYKOWANE W UKŁADACH PROGRAMOWALNYCH

Rys. 1. Główne okno programu QT Creator. Na rysunku 2 oznaczone zostały cztery przyciski, odpowiadają kolejno następującym funkcjom:

TwinCAT 3 konfiguracja i uruchomienie programu w języku ST lokalnie

ĆWICZENIE 7. Wprowadzenie do funkcji specjalnych sterownika LOGO!

Informatyka I : Tworzenie projektu

FAQ: /PL Data: 26/11/2008 Komunikacja w protokole MPI za pomocą Global Data (GD) pomiędzy sterownikami S7-300

OPERACJE NA PLIKACH I FOLDERACH

Instrukcja instalacji oraz konfiguracji sterowników. MaxiEcu 2.0

TWORZENIE OD PODSTAW PROJEKTU W ŚRODOWISKU QUARTUS PRIME

Sterbox. e-pilot. v.4.0. INSTRUKCJA KONFIGURACJI e-pilot V4 oraz Programowanie STERBOX-a

MentorGraphics ModelSim

Program EDYTOR-AS-OUX

Programator procesorów rodziny AVR AVR-T910

Papyrus. Papyrus. Katedra Cybernetyki i Robotyki Politechnika Wrocławska

SYSTEMY DEDYKOWANE W UKŁADACH PROGRAMOWALNYCH

Wstęp. Skąd pobrać program do obsługi FTP? Logowanie

Instrukcja podstawowego uruchomienia sterownika PLC LSIS serii XGB XBC-DR20SU

WPROWADZENIE DO INFORMATYKI

Instrukcja do oprogramowania ENAP DEC-1

Instalacja programu:

Politechnika Białostocka Wydział Elektryczny Katedra Automatyki i Elektroniki. ĆWICZENIE Nr 8 (3h) Implementacja pamięci ROM w FPGA

Tworzenie nowego projektu w asemblerze dla mikroprocesora z rodziny 8051

Włączanie/wyłączanie paska menu

Instrukcja instalacji systemu. CardioScan 10, 11 i 12

Projektowanie baz danych za pomocą narzędzi CASE

Instytut Sterowania i Systemów Informatycznych Uniwersytet Zielonogórski SYSTEMY SCADA

PLUTO Sterownik bezpieczeństwa Skrócona Instrukcja obsługi oprogramowania. PlutoProgrammingManualPL_v7A.pdf 1

Notepad++ / PuTTY. Interaktywne środowisko programowania w języku ForthLogic. Wersja dokumentu P.1. Wersja dokumentu NP1.

Instalacja i opis podstawowych funkcji programu Dev-C++

Komunikacja z wykorzystaniem Protokołu TCP oraz funkcji AG_SEND/AG_RECV

Podstawy programowania w środowisku Totally Integration Automation Portal

Autorzy. Zespół SABUR Sp. Z o.o. Wydanie Data. Sierpień SABUR Sp. Z o. o. Wszelkie prawa zastrzeżone

Modelowanie obiektowe - Ćw. 1.

Instalacja protokołu PPPoE

Instrukcja użytkowania

System kontroli dostępu Yotogi

Instrukcja instalacji oprogramowania. CardioScan 10, 11 i 12. w wersji 54a i 76a

Konfiguracja oprogramowania w systemach MS Windows dla kont z ograniczonymi uprawnieniami

Szkolenie dla nauczycieli SP10 w DG Operacje na plikach i folderach, obsługa edytora tekstu ABC. komputera dla nauczyciela. Materiały pomocnicze

Instrukcja konfiguracji połączenia PPPoE w Windows XP

Projektowanie z użyciem softprocesora picoblaze w układach programowalnych firmy Xilinx

Komunikacja w sieci Industrial Ethernet z wykorzystaniem Protokołu S7 oraz funkcji BSEND/BRCV

1 Moduł Bramki xcomfort

PROGRAMOWALNE STEROWNIKI LOGICZNE

1. Instalacja Programu

Rozdział 7. Drukowanie

Tomasz Greszata - Koszalin

CoDeSys 3 programowanie w języku CFC

Szybka instrukcja tworzenia testów dla E-SPRAWDZIAN-2 programem e_kreator_2

Instrukcja instalacji i konfiguracji bazy danych SQL SERVER 2008 EXPRESS R2. Instrukcja tworzenia bazy danych dla programu AUTOSAT 3. wersja 0.0.

LabVIEW PLATFORMA EDUKACYJNA Lekcja 5 LabVIEW i Arduino konfiguracja środowiska i pierwszy program

Jak przygotować pokaz album w Logomocji

Krótkie wprowadzenie do ModelSim i Quartus2

Konfiguracja i podłączenie sterownika Horner APG do oprogramowania Cscape po RS232

Kopiowanie, przenoszenie plików i folderów

2. W oknie dialogowym Choose Toolbox Items w zakładce.net Framework Components naciskamy przycisk Browse...

Instrukcja obsługi. Generatora CSV

PC0060. ADAPTER Kabel Easy Copy PC-Link USB 2.0 Proste kopiowanie, bez instalacji. Instrukcja obsługi

Pracownia internetowa w każdej szkole (edycja Jesień 2007)

Politechnika Białostocka Wydział Elektryczny Katedra Automatyki i Elektroniki. ĆWICZENIE Nr 4 (3h) Przerzutniki, zatrzaski i rejestry w VHDL

Tworzenie pliku źródłowego w aplikacji POLTAX2B.

Politechnika Gdańska Wydział Elektrotechniki i Automatyki Katedra Inżynierii Systemów Sterowania

Site Installer v2.4.xx

Informatyka II. Laboratorium Aplikacja okienkowa

Projekt Komputerowych Systemów Sterowania Wymiana danych pomiędzy dwoma sterownikami Siemens S7-300 po sieci Profibus DP

Wydział Elektryczny. Katedra Automatyki i Elektroniki. Instrukcja do ćwiczeń laboratoryjnych z przedmiotu: TECHNIKA CYFROWA 2 TS1C

SKRÓCONA INSTRUKCJA INSTALACJI MODEMU I KONFIGURACJA POŁĄCZENIA Z INTERNETEM NA WINDOWS 8 DLA AnyDATA ADU-520L

Opis szybkiego uruchomienia programu APBSoft

Projektowania Układów Elektronicznych CAD Laboratorium

Laboratorium - Zarządzanie systemem plików poprzez wbudowane oprogramowanie w systemie Windows Vista

Pobieranie edytora CodeLite

1.1 Co to jest USBasp? Parametry techniczne Obsługiwane procesory Zawartość zestawu... 4

OPTIMA PC v Program konfiguracyjny dla cyfrowych paneli domofonowy serii OPTIMA ELFON. Instrukcja obsługi. Rev 1

Budowa aplikacji ASP.NET współpracującej z bazą dany do obsługi przesyłania wiadomości

Instalacja i konfiguracja serwera IIS z FTP

Transkrypt:

ZTC WEL WAT 2013 NIOS2 Projekt programowalnego generatora sygnałów o przebiegach prostokątnych Grzegorz Grzęda 2013-06-02 Niniejsza instrukcja służy zapoznania studentów z procesem projektowania systemów wbudowanych z użyciem procesora NIOS2 firmy Altera oraz zestawu prototypowego DE2-115 firmy Terasic.

1. Wstęp Szybki rozwój techniki układów programowalnych, sprawia, że układy te stają się coraz szybsze i coraz bardziej pojemne pod względem liczby bramek logicznych. Pozwala to na realizację skomplikowanych struktur cyfrowych, poczynając od prostych automatów, kończąc na całych systemach mikroprogramowalnych. Dodatkowo, układy cyfrowe coraz częściej wyposażane są w dedykowane obwody sterujące i kontrolne, np. kontrolery pamięci DDR, pętle PLL, transceivery szerokopasmowych łączy szeregowych. Dotyczy to głównie układów FPGA. Ze względu na matrycową budowę, rozsianie programowalnych tablic, realizujących funkcje boolowskie oraz konfigurowalnych przerzutników, układy FPGA zyskały ostatnio popularność przy projektowaniu mikroprocesorowych systemów wbudowanych, opartych na procesorach zrealizowanych w językach opisu sprzętu, np. VHDL lub Verilog. Celem niniejszej instrukcji jest zapoznanie studentów z procesem projektowania systemu wbudowanego w oparciu o rozwiązania układowe firmy ALTERA. 2. Założenia projektu Projekt dotyczy urządzenia laboratoryjnego w postaci generatora sygnału o przebiegu prostokątnym. Zadania: przygotowanie opisu układu generatora w języku VHDL oraz opracowanie nadrzędnego pliku projektu, przygotowanie systemu procesorowego NIOS2 z potrzebnymi peryferiami komunikacyjnymi (wykorzystanie kreatora QSys), opracowanie oprogramowania sterującego z użyciem NIOS II Software Development Tool. Ewaluacyjna płytka testowa TERASIC DE2-115, z układem EP4CE115F29C7, na której zostanie zbudowany system procesorowy, jest pokazana na rys. 1. Rys. 1. Płytka ewaluacyjna TERasic DES-115. Strukturę urządzenia przedstawiono na Rys. 2. Organizacja projektowanego systemu cyfrowego.rys. 2. 2

Rys. 2. Organizacja projektowanego systemu cyfrowego. UWAGA!!! Ze względu na edukacyjny charakter zajęć zaleca się nie zmieniać nazw portów oraz instancji przyjętych w instrukcji nazwy te używane są później do połączenia modułów oraz opracowania programu sterującego. 3. Procesor NIOS2 i peryferia Po uruchomieniu programu Quartus II wybieramy File New New Quartus Project. Rys. 3. Wybór rodzaju nowego obiektu. Po zapoznaniu się z informacjami z ekranu konfiguratora projektu, klikamy Next. Wybieramy ścieżkę dostępu dla naszego projektu (w to miejsce będą następnie dodawane kolejne pliki, warto zdefiniować nowy folder o nazwie generator_projekt ), następnie nadajemy nazwę generator naszemu projektowi. Wybieramy Next. 3

Rys. 4. Konfiguracja projektu 1/5. Na tym etapie nie dodajemy żadnych plików, więc klikamy Next. Na stronie trzeciej wybieramy z listy rodziny układów Cyclone IV E, a z dostępnych układów wybieramy EP4CE115F29C7. Klikamy Next. Rys. 5. Konfiguracja projektu 3/5. Nie zmieniamy nic na stronie 4, klikamy Next. Na ostatniej, piątej stronie możemy sprawdzić, czy wszystko poprawnie wprowadziliśmy. Jeżeli wszystko jest zgodne z instrukcją, klikamy Finish. 4

Rys. 6. Konfiguracja projektu 5/5. Po prawidłowym skonfigurowaniu projektu, w lewym górnym rogu powinna pojawić się główna instancja projektu oraz typ zadeklarowanego układu docelowego (rys. 7). Rys. 7. Widok aplikacji po zakończeniu konfiguracji projektu. Teraz uruchomimy moduł środowiska Quartus II do generacji systemów procesorowych QSys. W tym celu wybieramy w pasku menu Tools Qsys. Po uruchomieniu modułu, na ekranie pojawi się okno główne (rys. 8). 5

Rys. 8. Widok po uruchomieniu QSys. Jest to okno składające się z kilku elementów. Główną część ekranu zajmuje mapa systemu z zakładkami. System Contents jest główną zakładką projektu, gdzie buduje się system. Nie jest to mapa topograficzna ani schemat systemu - zawarte są jedynie wszystkie niezbędne dane (np. Connections do łączenia magistral danych, adresowych, sygnałów zegarowych oraz resetu między modułami, IRQ magistrala sygnałów przerwań itp.). Jeżeli nie widać wszystkich parametrów, należy skorzystać z poziomego paska do przewinięcia okna w poziomie. Address map zawiera mapę pamięci systemu, do którego będzie odwoływało się oprogramowanie w trakcie dostępu do peryferii IO procesora, również tu jest zawarte okno w przestrzeni, które zajmuje pamięć operacyjna i pamięć danych. Clock Settings konfiguruje systemowy zegar, HDL Example pozwala wygenerować port mapę dla VHDL lub Verilog. Zakładka Generation generuje wszystkie potrzebne dla środowiska Quartus II pliki do kompilacji projektu. Na lewo od mapy systemu znajduje się pole z zakładką Component Library zawiera ona wszystkie elementy, w jakie można wyposażyć system NIOS2. Bezpośrednio po włączeniu modułu QSys, w zakładce System Contents mamy wyłącznie moduł dystrybuujący sygnał zegarowy do systemu. Klikając na niego Prawym Przyciskiem Myszy (PPM), wybieramy Rename i zmieniamy jego nazwę na CLK_SYS, następnie klikając na niego dwukrotnie Lewym Przyciskiem Myszy (LPM) otwieramy okno jego właściwości. Okno właściwości komponentu pozwala precyzyjnie skonfigurować parametry i własności komponentu. W oknie właściwości CLK_SYS ustawiamy wartość zegara wejściowego na 50000000 Hz (50 MHz). Nie zmieniamy pozostałych parametrów. Również klikając PPM w polu mapy systemu wybieramy Filter Default. Pozwoli to na wyświetlanie domyślnych magistral systemowych, które należy połączyć ze sobą. Zapisujemy teraz nasz projekt systemu. Tworzymy folder generator_system w folderze naszego projektu z Quartus 12.0, zapisujemy projekt QSys pod nazwą nios2_system.qsys. Dodamy teraz procesor NIOS2. W Component Library rozwijamy zakładkę Embedded Processors, wybieramy NIOS II Processor. 6

Po chwili, QSys doda procesor do mapy systemu oraz uruchomi okno właściwości procesora. Rys. 9. Okno właściwości NIOS2 Rys. 9. przedstawia wstępną konfigurację dla procesora NIOS2. Ze względu na to, że nie zdefiniowaliśmy jeszcze pamięci programu, możemy zignorować komunikaty o błędach adresów. W Select a Nios II Core wybieramy Nios II/s. Klikamy Finish. W oknie mapy systemu klikamy PPM i zmieniamy nazwę instancji procesora z nios2_qsys_0 na CPU. Rys. 10. Widok QSys po dodaniu procesora NIOS2. Rys. 10. przedstawia QSys po dodaniu procesora NIOS2. Pojawiły informacje o błędach brakuje bloku pamięci programu, skąd NIOS2 mógłby pobierać program Dodamy teraz blok pamięci programu. W tym celu Component Library rozwijamy Memories and Memory Controllers On-Chip On-Chip Memory (RAM or ROM). 7

Nasz blok pamięci będzie blokiem RAM. Oznacza to, że w tym samym bloku będzie przechowywany program (ładowany przy programowaniu modułu) oraz obszar roboczy na zmienne i stos. Tym, by te obszary się nie przesłaniały zajmie się QSys. Gdy wyświetli się okno właściwości wybranej przez nas pamięci, zmieniamy tylko pole Total memory size na wartość 81920 bajtów (80 kb) lub większą, np. 131072. Tak duży rozmiar jest potrzebny na standardowe funkcje wejścia/wyjścia, niezbędne przy komunikacji systemu z użytkownikiem przez UART. Klikamy Finish. Następnie zmieniamy nazwę modułu z onchip_memory2_0 na MEMORY. Przyszedł czas na połączenie części magistral systemowych, by moduły były ze sobą skomunikowane. Użytkownik nie musi dokładnie wiedzieć jak te magistrale połączyć zadba o to QSys. Zadaniem użytkownika jest jedynie połączyć wystające z modułów druciki dotyczące zegara systemowego (clk), sygnału resetu (clk_reset), magistrali danych (data_master, s1), magistrali instrukcji (instruction_master). Aby dokonywać połączeń, należy przede wszystkim przesunąć kursor myszy w obszar Connections jednego z modułów (np. CPU). Podświetlą się wtedy małe koła (o białym wypełnieniu) miejsca, gdzie można wykonać zwarcie dla danej magistrali. Ważne jest aby każdy moduł miał doprowadzone sygnały zegara (clk), resetu (clk_reset) oraz magistrali danych (data_master). Wyjątkiem jest moduł MEMORY, tam do jednej magistrali danych koniecznie należy podłączyć dwie magistrale od CPU data_master oraz instruction_master. Czynimy tak, ponieważ wcześniej zadeklarowaliśmy, że moduł MEMORY jest jednocześnie pamięcią danych i pamięcią programu. Rys. 11. Wstępne połączenia w systemie. Rys. 11 pokazuje wszystkie połączenia magistral z podświetleniem zwarć. Warto zauważyć, że szyna clk_in_reset będzie pozostawać cały czas niepodłączona, ponieważ jest to sygnał do wyzwolenia systemowego resetu, a to nie będzie obsługiwane z poziomu naszego systemu. 8

Najpierw z paska menu QSys wybieramy System Assign Base Addresses. Przypisze to dla MEMORY oraz CPU pewne domyślne adresy w przestrzeni adresowej (można je podejrzeć w zakładce Address Map). Teraz dwukrotnie klikamy na CPU i przystąpimy do konfiguracji adresów w pamięci dla NIOS2. W zakładce Core Nios II, w punktach Reset Vector oraz Exception Vector z rozwijalnej listy wybieramy pozycję MEMORY.s1. Oznacza to, że procesor będzie pobierał instrukcje z modułu naszej pamięci. Na tym etapie system jest funkcjonalnie pełny posiada obwody sterowania pracą (CLK_SYS), procesor (CPU) oraz moduł pamięci programu i danych (MEMORY). Brakuje jeszcze portów wejścia/wyjścia, przez które system mógłby komunikować się z naszym przyszłym generatorem sygnału prostokątnego oraz z użytkownikiem. Zajmiemy się teraz komunikacją z użytkownikiem. Komunikacja będzie oparta na połączeniu przez port szeregowy z konsolą poleceń na komputerze. Zaimplementujemy możliwość wyboru między standardowym portem UART (z wyprowadzeniem na złącze RS-232 na płytce TERasic-DE115) oraz portem UART zagwarantowanym przez złącze JTAG. To drugie rozwiązanie jest o tyle wygodne, że będzie można z niego korzystać podczas testowania napisanego programu, z konsoli w programie Eclipse to będzie nasze domyślne łącze. Niemniej, później zostanie wskazane, jak przełączyć się na standardowy UART. Najpierw dodajemy moduł Interface Protocols Serial JTAG UART. Nic nie modyfikujemy w oknie właściwości, tylko klikamy na Finish. Zmieniamy nazwę modułu na JTAG_UART i podłączamy do niego zegar, reset oraz magistralę danych. Ponadto w polu IRQ (na prawo od nazwy modułu, przewinąć paskiem) zwieramy tu magistralę źródeł przerwań i nadajemy w punkcie zwarcia numer 16. Wybieramy teraz z listy Interface Protocols Serial UART (RS-232 Serial). Nic nie zmieniamy w oknie właściwości, klikamy Finish. Zmieniamy nazwę na RS-232. Podobnie jak wyżej, podłączamy zegar, reset i dane. Dla magistrali IRQ również zwieramy i nadajemy numer 1. Dodatkowo, musimy wyprowadzić sygnały RxD i TxD modułu RS-232 na zewnątrz projektu systemu. W tym celu najeżdżamy na moduł RS-232, na pole Export, klikamy w miejsce click to export dla magistrali external_connection. Spowoduje to wygenerowanie połączeń na zewnątrz projektu dla modułu standardowego UART. Warto zauważyć, że nie robiliśmy tego dla JTAG_UART, ponieważ tam transmisja przebiega po JTAG, który jest domniemany w systemie. Powstałe połączenie zewnętrzne nazywamy rs232_con. To jest dobry czas na nadpisanie projektu (File Save). 9

Dodamy teraz funkcjonalność w postaci wyświetlacza LCD. Wybieramy Peripherials Display Character LCD. Dla okna z informacją o rodzaju sterownika LCD klikamy Finish. Zmieniamy jego nazwę na LCD2X16 oraz podłączamy zegar, reset oraz magistralę danych. Dodatkowo tworzymy dla niego połączenie zewnętrzne (podobnie jak dla RS-232). Połączenie zewnętrzne nazywamy lcd2x16_con. W tym momencie wybieramy, jak poprzednio System Assign Base Addresses. Na tym etapie w polu informacji nie powinno być żadnych błędów (jedynie informacja, że MEMORY będzie wstępnie wypełniony plikiem HEX z programem przy inicjalizacji), a całość powinna wyglądać tak jak na rys. 12. Rys. 12. Dotychczasowa konfiguracja systemu. Teraz dodamy do systemu równoległe rejestry ogólnego przeznaczenia (PIO), przez które procesor NIOS2 będzie konfigurował do pracy generator przebiegu prostokątnego. Będą to rejestry tylko wyjściowe, bo procesor nie będzie przez nie pobierał żadnych informacji. Zbudujemy trzy rejestry wyjściowe, każdy po 32 bity długości: CNT_TL do ustawiania czasu trwania stanu 0 w generatorze, CNT_TH do ustawiania czasu trwania stanu 1 w generatorze, CNT_CTRL do ustawiania bitów sterujących generatora oraz liczby generowanych impulsów. Przystępujemy do budowania pierwszego rejestru. Wybieramy z listy Peripherials Microcontroller Peripherials PIO (Parallel I/O). W oknie właściwości, w polu Basic Settings Width (1-32 bits) wpisujemy 32 i klikamy Finish. 10

Teraz zmieniamy nazwę modułu na CNT_TL, dołączamy do niego zegar, reset oraz magistralę danych. Ponadto wyprowadzamy na zewnątrz port i nazywamy go cnt_tl_con. Mogą się pojawić błędy, o przesłonieniu przestrzeni adresowej przez ten moduł NA RAZIE to ignorujemy. ANALOGICZNIE postępujemy z pozostałymi dwoma portami PIO. Na koniec dodamy jeszcze jeden moduł. Jego zadaniem będzie zwracanie identyfikatorów każdego z powstałych modułów systemu NIOS2 dla programu sterującego. Jest to konieczne, ponieważ program wstępny, wygenerowany przez Eclipse, będzie sprawdzał obecność w systemie wszystkich deklarowanych modułów. Wybieramy po kolei Peripherials Debug and Performance System ID Peripherial. W oknie właściwości nic nie zmieniamy, klikając po prostu Finish. Zmieniamy nazwę modułu na SYSid. Podłączamy do niego sygnał zegara, resetu oraz magistralę danych. WAŻNE teraz by wykonać ponownie odświeżenie przestrzeni adresowej, czyli wybranie System Assign Base Addresses z menu QSys a. Nadpisujemy projekt. System przygotowany przez nas powinien wyglądać jak na rys. 13. Różnice w adresach bazowych i końcowych mogą wynikać z innego tempa wybierania opcji System Assign Base Addresses. Ważne jest aby nie było żadnych błędów jedynie informacje o inicjalizacji MEMORY plikiem HEX, stempel czasowy dla SYSid będzie wygenerowany przy starcie układu oraz wyłączenie automatycznego przypisywania ID również dla SYSid. Rys. 13. Widok systemu NIOS2 po zakończeniu konfiguracji. 11

Przystępujemy do końcowej fazy projektowania systemy NIOS2. Przechodzimy do głównej zakładki HDL Example. Wybieramy generację dla języka VHDL. Możemy kliknąć w przycisk Copy i skopiować wygenerowaną port-mapę do schowka (i wstępnie wkleić np. do Notatnika). Przechodzimy do zakładki Generation, sprawdzamy, czy obydwa pola w punkcie Synthesis są ZAZNACZONE i klikamy na Generate. Proces generacji projektu chwilę trwa W oknie generacji klikamy na Close (mogły się pojawić ostrzeżenia odnoście RS-232 ale je ignorujemy) i zamykamy QSys. Wracamy do programu Quartus. Z menu wybieramy Project Add/Remove Files in Project W polu Files naciskamy na przycisk i wybieramy folder z projektem systemu wygenerowanego w QSys (nasz folder generator_system ), a następnie plik projetu w QSys (rys. 14). Klikamy na przycisk Add, następnie na Apply i OK. Rys. 14. Dodawanie systemu procesorowego Ten plik został dodany do fazy kompilacji. Musimy jeszcze dodać pliki VHDL z generatorem sygnału oraz nadrzędny plik łączący generator i system procesorowy. 4. Moduł generatora fali prostokątnej oraz łączenie modułów Spod wskazanego przez prowadzącego folderu kopiujemy do naszego folderu plik prog_gen.vhd oraz generator.vhd. Korzystamy tutaj analogicznie z Project Add/Remowe Files in Project Dodane pliki stanowią kolejno: generator sygnału prostokątnego oraz główny plik wiązania generatora i systemu NIOS2 ze sobą oraz tworzy zewnętrzne piny projektu. Warto zapoznać się z nimi i przeanalizować ich kod. W zakładce Project Navigator przechodzimy do pod-zakładki Files. Powinny się tam znajdować teraz wszystkie dodane trzy pliki. Klikamy PPM na generator.vhd i wybieramy Set as Top-Level Entity lub naciskamy kombinację Ctrl+Shift+J. Spowoduje to wybranie tego pliku jako nadrzędnego. WAŻNE! Jeżeli w projekcie QSys nazywano zewnętrzne (external) piny inaczej niż w instrukcji, to w pliku generator.vhd należy nanieść zmiany w port-mapie systemu. 12

TERAZ kompilujemy projekt, wybierając z menu Processing Start Compilation. Kompilacja trochę potrwa, nie powinny wystąpić żadne błędy. Kompilacja nada domyślne przypisanie logicznych pinów projektu do wyprowadzeń układu, jednak nie będą to takie, które nas interesują Wybieramy z menu głównego Assignments Pin Planner. Przejdziemy do programu przyporządkowującego pinom układu EP4CE115F29C7 logicznych wyprowadzeń projektu. Konfigurujemy piny projektu wg zamieszczonego rys. 15. Rys. 15. Konfiguracja pinów projektu. Po zakończeniu konfigurowania pinów, po prostu zamykamy edytor pinów. Ponownie przeprowadzamy kompilację projektu. Po poprawnym skompilowaniu całości nadpisujemy całość (File Save Project). Możemy teraz zaprogramować płytkę z układem. Wybieramy Tools Programmer. Zostanie wyświetlona informacja, że projekt zawiera ograniczenia czasowe na wykonywalne moduły projektu. Oznacza to, że projekt nie będzie działał, po zawieszeniu jego działania w Programmer, lub przy odłączeniu kabla USB. Sprawdzamy, czy podłączono płytkę TERasic-DES115, przez USB od programowania. Wybieramy przycisk Hardware Setup i wybieramy z listy. Jeżeli się nie pojawił, oznacza nieprawidłowości w połączeniu USB (poprosić o pomoc prowadzącego). Przy poprawnym wyborze programatora klikamy na Start Na tym etapie (jeżeli programowanie przebiegło pomyślnie), układ jest zaprogramowany i działa. Dodatkowo pojawiło się okienko z informacją, że uruchomiono moduły z ograniczeniami czasowymi. Jeżeli w tym okienku naciśniemy OK. układ przestanie działać. Niestety, na tym etapie układ nie ma jeszcze programu, który mógłby wykonać. Dlatego teraz przystąpimy do opracowania programu sterującego. 5. Przygotowanie oprogramowania Teraz, zajmiemy się przygotowaniem programu sterującego, który będzie wykonywany przez procesor NIOS2 w naszym systemie. 13

Zaznacza się w tym miejscu, że pliki cmdline.c oraz cmdline.h są własnością firmy Texas Instruments. Zawierają one obsługę interpretera wiersza poleceń tekstowych. Zasada jego działania zostanie przybliżona w dalszej części instrukcji. Aby rozpocząć pracę nad programem, należy włączyć program NIOS2 12.0sp2 Software Build Tool for Eclipse. Rys. 16. Środowisko programistyczne Eclipse po uruchomieniu Rys. 16. przedstawia środowisko Eclipse tuż po uruchomieniu. Jest to zintegrowane środowisko programistyczne, pozwalające na przeprowadzenie procesu edycji, kompilacji razem z konsolidacją oraz debuggowaniem programu przygotowanego na procesor NIOS2. W rzeczywistości, firma Altera przygotowała swoiste SDK dla procesora NIOS2, Eclipse jest uniwersalnym środowiskiem programistycznym. Po lewej stronie znajduje się drzewo projektów, w części centralnej znajduje się edytor tekstu (początkowo nieaktywny) wraz z konsolą komunikatów, zaś po prawo znajduje się okno podpowiedzi definiowanych elementów w bieżąco edytowanym pliku źródłowym. Nasz projekt będzie kompilowany, jako w pełni zgodny z ANSI C. Na potrzeby tego laboratorium, przygotowano gotowe pliki z programem użytkowym (znajdują się we wskazanym przez prowadzącego folderze): program_glowny.c plik z główną funkcją programu zawiera wszystkie niezbędne procedury i funkcje związane z inicjalizacją elementów, obsługą generatora impulsów prostokątnych oraz zestawieniem transmisji, 14

cmdline.c oraz cmdline.h procesor linii komend to pliki zawierające obsługę interpretera komend tekstowych wysyłanych do generatora. Jego działanie polega na interpretacji wskazywanego strumienia znaków (tutaj: odebranego przez UART) oraz wywołanie odpowiedniej funkcji z tablicy wywołań, w celu obsługi komendy. Wszystkie pliki źródłowe zawierają komentarze do kodu, przez co w tej instrukcji zostaje opuszczona szczegółowa analiza działania programu. Projekt oprogramowania dla NIOS2 zawsze składa się z dwóch zasadniczych elementów: projektu BSP oraz projektu właściwego. Projekt BSP (Board Support Package) zawiera zestaw wszystkich niezbędnych funkcji i procedur niezbędnych do obsłużenia i wysterowania zaprojektowanego przez nas systemu. Jest to warstwa pośrednicząca między sprzętem a naszym programem. To właśnie przy generowaniu BSP, będziemy wskazywać na plik generatora QSys. Projekt właściwy zawiera pliki źródłowe (wraz z funkcją main()), które zawierają właściwy program pracy dla NIOS2. Projekt właściwy ma wskazane, z której BSP ma korzystać. W tym miejscu zaleca się utworzenie dedykowanego folderu (np. z dopiskiem _soft ), obok folderu z projektem w Quartus ie. Dzięki temu uniknie się bałaganu przy tworzeniu projektu programu. Ponadto należy skopiować wspomniane wyżej pliki źródłowe do tego folderu. Najpierw utworzymy nowy BSP dla naszego systemu. Wybieramy File New Nios2 Board Support Package. W oknie kreatora BSP, nadajemy nazwę naszej paczce, np. generator_bsp, oraz wskazujemy na plik *.sopcinfo wygenerowany przez QSys (należy go poszukać w folderze z projektem z Quartus a). Rys. 17. Przykładowa zawartość generatora BSP Rys. 17. przedstawia przykładowy wygląd okna generatora BSP. Nic więcej nie zmieniamy, tylko klikamy Finish. 15

Jeżeli nic wcześniej nie zmienialiśmy, to wszystko powinno wygenerować się bez błędów. W drzewie projektów pokazał się symbol otwartego katalogu z nazwą naszej paczki. Teraz klikamy na generator_bsp PPM i wybieramy Properties. W zakładce NIOS2 BSP Properties (czekamy, aż się zawartość załaduje), odznaczamy wszystkie pozycje do wyboru. Odznaczenie Support C++ zmniejszy rozmiar zajmowanego kodu, jednak NIE należy zaznaczać pozycji Small C libr ary ponieważ spowoduje to błędne działanie niektórych funkcji (np. sprintf()), z których korzysta program. Zaznaczamy za to Reduce device drivers (zmniejsza rozmiar sterowników z BSP). Klikamy Apply oraz OK. Jeżeli studenci będą chcieli, mogą, naciskając na naszą paczkę przez PPM wejść w Nios2 BSP Editor. Pozwala on na szczegółową ingerencję w sposób generacji BSP. M. in. tutaj znajduje się, w zakładce Main opcja wyboru standardowych strumieni wejścia wyjścia (między zaprojektowanym wcześniej UART JTAG oraz UART RS-232). Jednak na początek sugeruje się nie zmieniać nastaw generatora. Teraz czas na przygotowanie właściwego projektu. Z menu głównego wybieramy File New Nios2 Application. W generatorze podajemy nazwę projektu (np. generator_proj ) oraz wybieramy z listy, wcześniej przez nas przygotowany BSP. Od tej chwili nasz kod źródłowy będzie odnosił się do tego BSP (tj. wszystkie funkcje obsługi IO). Klikamy Finish. Najłatwiej dodać do projektu pliki źródłowe przez przeciągnięcie ich z okna folderu w Windows, do drzewa projektu, najeżdżając na nasz świeżo wygenerowany generator_proj. Na koniec wybieramy z menu głównego Project Build All. Jeżeli wszystko poprawnie wybraliśmy, po pewnej chwili proces kompilacji zakończy się sukcesem. 16

Rys. 18. Widok Eclipse po poprawnej kompilacji. Rys. 18. przedstawia widok programu Eclipse po poprawnej kompilacji. Widać w drzewie projektu, że pojawiły się nowe pliki (np. generator_proj.elf wsad do pamięci programu systemy u NIOS2). Jeżeli na tym etapie nie udało się przeprowadzić poprawnie kompilacji, oznacza to najprawdopodobniej, że zabrakło pamięci programu dla naszego projektu. Należy teraz powrócić do QSys, otworzyć projekt naszego systemu oraz zmienić pojemność pamięci MEMORY na większą (np. 110 kb). Następnie wygenerować jeszcze raz BSP (tym razem przez Properties, klikając PPM) i spróbować skompilować jeszcze raz projekt. Jeżeli chcemy teraz zaprogramować nasz system, to należy zaprogramować sprzęt (przez programator w Quartus ie) tylko nie wyłączać okienka informacyjnego o ograniczeniach czasowych. Teraz, przejść do Eclipse i z menu głównego wybrać Run Hardware. W razie problemów na tym etapie poprosić o pomoc prowadzącego. 6. Uruchomienie Po poprawnym skompilowaniu programu oraz załadowaniu go do pamięci DZIAŁAJĄCEGO (tzn. po zaprogramowaniu układu, z aktywną informacją o OpenCORE) procesora, z poziomu konsoli UART w Eclipse, można wydawać polecenia układowi. Standardowe polecenia tekstowe, jakie można wydawać układowi generatora, zestawiono w tabeli 1. Parametry podane w <> należy oddzielać od siebie spacją, całość zatwierdzić klawiszem Enter. 17

Zestawienie intrukcji setf <freq [Hz]> <duty [%]> Ustawia częstotliwość i wypełnienie sygnału sett <tlow [ns]> <thigh [ns]> Ustawia czas trwania stanu 0 i 1 setc <n/b/p> <n/w> <cnt [sztuk]> Ustawia tryb pracy (normalny, bramkowany i paczka impulsów) triggera, Polaryzację aktywną triggera, liczba impulsów w paczce state <p/s> Ustawia stan generatora: praca lub spoczynek output <a/o> Ustawia stan wyjścia sygnału: aktywny lub odcięty Tab. 1. Zestaw znakowych instrukcji sterujących generatora sygnału prostokątnego. 7. Podsumowanie Zadaniem powyższej instrukcji jest przybliżenie studentom problematyki tworzenia systemów wbudowanych, na układach FPGA. Ze względu na zależność niektórych elementów procesów projektowania oraz kompilacji projektów zarówno w Quartus ie jak i w Eclipse ie wszelkie wątpliwości należy rozwiązywać z prowadzącym ćwiczenia. 18