Projektowanie z użyciem procesora programowego Nios II WSTĘP Celem ćwiczenia jest nauczenie projektowania układów cyfrowych z użyciem wbudowanych procesorów programowych typu Nios II dla układów FPGA firmy ALTERA. Dodatkowym celem jest nabycie umiejętności stosowania podstawowych instrukcji języka C oraz obsługi systemów projektowych Quartus II, Altera SOIP Builder i Nios II IDE. Niniejszy opis dotyczy oprogramowania w wersji 9.1. Pomimo tego można korzystać z wcześniejszych wersji, jednak należy mieć na uwadze inne położenie wybieranych poleceń i ustawień. WYKONANIE ĆWICZENIA UWAGA! Ćwiczenie realizowane jest z użyciem gotowego projektu, do którego należy dołączyć procesor Nios II oraz napisać dla niego program działania w języku C. Przed przystąpieniem do realizacji ćwiczenia należy wykonać następujące polecenia: 1. Na dysku C:\ utworzyć katalog C:\NIOS2 dla projektu. Jeżeli już istnieje to usunąć jego zawartość. 2. Do utworzonego katalogu C:\NIOS2 skopiować zawartość katalogu C:\NIOS2_SOURCE, który zawiera gotowy projekt bez procesora programowego. Jeżeli nie istnieje katalog źródłowy to należy pobrać projekt w postaci zarchiwizowanej nios2_source.zip ze strony internetowej ZTC, z zakładki Dydaktyka dla przedmiotu PUC. Gotowy projekt zawiera sygnały do komunikacji procesora z zewnętrzną pamięcią programu SRAM, z diodami świecącymi LED oraz z przyciskami KEY. Procesor taktowany jest sygnałem o częstotliwości 50 MHz (pin_28) a kasowany przełącznikiem SW4 (pin_181). 1. Otwarcie projektu w systemie Quartus II Uruchomić system Quartus II, Otwieramy gotowy projekt poprzez File Open Project, następnie w oknie Open Project należy odszukać katalog C:\NIOS2 i wybrać plik proj.qpf, naciskamy Otwórz, Jeśli nie otwarł się schemat projektu to należy nacisnąć dwa razy lewy klawisz myszy wskazując na zaznaczonym poniżej obszarze, 1
Powinniśmy zobaczyć schemat jak przedstawiono poniżej, w którym dodatkowo zaznaczono miejsce dołączenia procesora programowego, 2
2. Utworzenie procesora programowego Nios II W systemie projektowym Quartus II wybieramy Tools SOPC Builder, Uruchamiany jest program Create New System Altera SOPC Builder, pojawia się okno Create New System, którego pola wypełniamy jak poniżej (nadajemy nazwę nios2_ep1c6 i wybieramy język VHDL), zatwierdzamy wybór poprzez OK, 3
Najpierw dołączamy kontroler pamięci SDRAM. W tym celu w oknie Create New System Altera SOPC Builder, w polu Component Library wybieramy Memories and Memory Conrollers SDRAM SDRAM Controller, naciskamy Add, 4
Pojawia się okno SDRAM Controller sdram_0, którego pola wypełniamy jak przedstawiono poniżej, naciskamy Finish, 5
Dołączamy procesor. W tym celu w oknie Create New System Altera SOPC Builder, w polu Component Library wybieramy Processors Nios II Processor, naciskamy Add, 6
Pojawia się okno Nios II Processor cpu_0, którego konfigurację ustawiamy jak przedstawiono poniżej, wybieramy typ procesora Nios II/e oraz pamięć SDRAM jako pamięć programu, naciskamy Next, 7
W trzech kolejnych oknach naciskamy Next, dopiero w czwartym oknie wybieramy interfejs JTAG typu Level 1 jak przedstawiono poniżej, naciskamy Finish, 8
Dołączamy do procesora port wyjściowy, do którego dołączymy zewnętrzne diody LED. W tym celu w oknie Create New System Altera SOPC Builder, w polu Component Library wybieramy Peripherals Microcontroler Peripherals PIO (Parallel I/O), naciskamy Add, 9
Pojawia się okno konfiguracyjne PIO (Parallel I/O) pio_0, którego konfigurację ustawiamy jak przedstawiono poniżej, naciskamy Finish, Następnie w oknie programu Altera SOIP Builder zmieniamy nazwę dołączonego portu I/O pio_0 na led_pio, w tym celu po wskazaniu kursorem myszy nazwy pio_0 naciskamy jej prawy klawisz i wybieramy Rename, 10
Dołączamy do procesora port wejściowy, do którego dołączymy zewnętrzne przyciski KEY. W tym celu w oknie Create New System Altera SOPC Builder, w polu Component Library wybieramy Peripherals Microcontroler Peripherals PIO (Parallel I/O), naciskamy Add, Pojawia się okno konfiguracyjne PIO (Parallel I/O) pio_0, którego konfigurację ustawiamy jak przedstawiono poniżej, naciskamy Finish, Następnie w oknie programu Altera SOIP Builder zmieniamy nazwę dołączonego portu I/O pio_0 na key_pio, w tym celu po wskazaniu kursorem myszy nazwy pio_0 naciskamy jej prawy klawisz i wybieramy Rename, 11
Dołączamy do procesora interfejs JTAG dla możliwości programowania jego pamięci programu z komputera PC. W tym celu w oknie Create New System Altera SOPC Builder, w polu Component Library wybieramy Interface Protocols Serial JTAG UART, naciskamy Add, Pojawia się okno konfiguracyjne JTAG UART jtag_uart_0, którego konfigurację pozostawiamy bez zmian, naciskamy Finish, 12
Okno programu Altera SOPC Builder powinno teraz wyglądać jak pokazano poniżej, Ustawiamy automatyczne przydzielenie adresów poprzez System Auto-Assign Base Addresses, Ustawiamy automatyczne przydzielenie przerwań poprzez System Auto-Assign IRQs, Zapisujemy projekt procesora File Save, Następnie naciskamy lewy klawisz myszy wskazując Generate w celu utworzenia modelu procesora dla projektu w Quartus II, 13
Program Altera SOPC Builder automatycznie przechodzi do zakładki System Generation, gdzie można obserwować proces kompilacji modelu procesora, w zależności od liczby peryferii oraz prędkości komputera PC może to trwać do 10 minut, po zakończeniu i pojawieniu się informacji System generation was successful zamykamy program Altera SOPC Builder, powracamy do Quartus II. 14
3. Dołączenie procesora Nios II do projektu w systemie Quartus II W zakładce edytora schematu naciskamy symbol bramki (Symbol Tool) w celu otwarcia okna z listą komponentów dostępnych w projekcie, Pojawia się okno Symbol, w polu Librares rozwijamy Project i zaznaczamy nios2_ep1c6, wyłączamy Repeat-insert mode, naciskamy OK, 15
Symbol procesora umieszczamy na schemacie jak pokazano poniżej dołączając jego sygnały do odpowiednich sygnałów projektu, zapisujemy File Save, Następnie uruchamiamy kompilację projektu Processing Start Compilation, aby uzyskać plik konfiguracyjny proj.sof dla układu FPGA, 16
Konfigurujemy układ EP1C6 poprzez Tools Programmer, Pojawia się okno programatora, w którym ustawiamy aktywna opcję Program/Configure, naciskamy Start, po wykonaniu się konfiguracji zamykamy okno programatora, zezwalamy na zapis jego ustawień. 17
4. Programowanie procesora Nios II w języku C przy użyciu Nios II 9.1 IDE Uruchomić Nios II 9.1 IDE, Pojawia się okno Nios II C/C++ Nios II IDE, w którym wybieramy File New Project Nios II C/C++ Application, 18
Otwiera się okno New Project, w którym najpierw ustawiamy Blank Project w polu Select Project Template, potem nadajemy nazwę my_soft, ustawiamy lokalizację w katalogu C:\NIOS2, w polu Select Target Hardware ustawiamy plik nios2_ep1c6.ptf znajdujący się w katalogu C:\NIOS2, opisujący architekturę utworzonego wcześniej procesora programowego, naciskamy Next, 19
W kolejnym oknie New Project ustawiamy aktywną opcję Create a new system library named:, naciskamy Finish, 20
W zakładce Nios II C/C++ Projects naciskamy prawy klawisz myszy wskazując na my_soft_syslib [nios2_ep1c6], w rozwiniętym menu wybieramy Build Project, uruchamiamy tworzenie bibliotek z naszym procesorem dla kompilatora języka C, Może to trwać do 10 min! 21
Aby utworzyć nowy plik w języku C w zakładce Nios II C/C++ Projects naciskamy prawy klawisz myszy wskazując na my_soft, w rozwiniętym menu wybieramy New, z menu Project wybieramy Surce File, Pojawia się okno New Source File, w polu Source Folder musi znajdować się my_soft, w polu Source File wpisujemy nazwę pliku z rozszerzeniem.c, naciskamy Finish, 22
Kod programu włączający diody LED w zależności od naciśniętego przycisku KEY jest następujący: Komunikacja z komponentami we/wy procesora dokonywana jest poprzez ich rejestr danych DATA: odczyt: IORD_ALTERA_AVALON_PIO_DATA(nazwa_portu_BASE) zapis: IOWR_ALTERA_AVALON_PIO_DATA(nazwa_portu_BASE, wartość_lub_zmienna) Kompilację kodu programu w języku C oraz zaprogramowanie pamięci programu procesora dokonujemy poprzez naciśnięcie prawego klawisza myszy wskazując na my_soft, w rozwiniętym menu wybieramy Run As, a następnie Nios II Hardware, 23
Przerwanie stanu połączenia oprogramowania IDE z pamięcią programu można dokonać poprzez naciśnięcie IDE stop button. 5. Modyfikacja kodu programu Projekt należy zmodyfikować w taki sposób, aby uzyskać efekt płynącego światła na diodach LED. Kombinacje świetlne podaje prowadzący. ZALICZENIE ĆWICZENIA 1. Zaliczenie kolokwium wstępnego. 2. Zrealizowanie zadanej kombinacji świetlnej. ZAGADNIENIA DO OPRACOWANIA PRZED PRZYSTĄPIENIEM DO ĆWICZENIA 1. Podstawy języka C dla mikrokontrolerów. 2. Zapoznanie się z opisem płytki testowej strona internetowa przedmiotu. 24