32-bitowy procesor w maXimatorze: czy nadal wolisz Arduino?

Quartus Prime to zaawansowane środowisko dedykowane do obsługi układów programowalnych firmy Altera. Przy jego użyciu można implementować w FPGA najbardziej wyrafinowane projekty, używając różnych metod (za pomocą tekstu, schematów lub grafów) i języków opisu sprzętu (VHDL, Verilog czy AHDL), można także „wyklikać” konfiguracje IP core’ów za pomocą narzędzia Qsys.

 Kompletny projekt dla programu Quartus Prime Lite wraz z plikami źródłowymi jest dostępny do pobrania na stronie maximator-fpga.org.
Rys. 1. Schemat blokowy 32-bitowego mikroprocesora NIOS II

Jednym z takich „wyklikiwanych” elementów jest 32-bitowy procesor NIOS II (rysunek 1), w artykule przedstawimy krok po kroku, jak go do pracy w maXimatorze i jak napisać oraz uruchomić program napisany w C. Żeby to zrobić, nie trzeba znać VHDL-a ani Verilog-a! Wystarczy znać język programowania C.

W prezentowanym projekcie zaimplementowano najprostszą wersję procesora NIOS II o nazwie NIOS II/e (od Economy), skrócone charakterystyki wszystkich wariantów pokazano w tabeli 1.

Tab. 1. Zestawienie najważniejszych cech procesorów NIOS II

 W prezentowanym projekcie zaimplementowaliśmy w FPGA 32-bitowy mikroprocesor z pamięcią RAM, wyposażony w sprzętowy timer, podłączony do 4 bitowego cyfrowego wyjścia GPIO. Timer generuje przerwanie co pół sekundy i jest ono obsługiwane przez funkcję irr().Jeśli chodzi o samo programowanie, należy zwrócić uwagę na to, że nie operujemy bezpośrednio na adresach urządzeń a na zdefiniowanych nazwach, jest to bardzo ważne ponieważ przy modyfikacji projektu w Qsys-ie adresy bazowe dla poszczególnych komponentów mogą się zmienić.

Wszystkie najważniejsze definicje wygenerowane automatycznie przez Qsys na podstawie zadanych w nim wartości parametrów, znajdują się w pliku system.h w projekcie NIOS_LED.bsp, warto również zapoznać się z plikami znajdującymi się w katalogu drivers/inc w projekcie NIOS_LED.bsp. W tych plikach znajdują się makra ułatwiające pracę z komponentami wygenerowanymi w Qsys-ie, przy okazji widać jakie są możliwości sterowania komponentami.

Tworzenie nowego projektu

Po uruchomieniu programu Quartus z menu wybieramy File->New…

Wybieramy New Quartus Prime Project i naciskamy OK. Pojawia się okienko New Project Wizard, klikamy Next, wybieramy katalog w którym będzie projekt, wpisujemy nazwę projektu i klikamy Next.

W okienku (Project Type) zostawiamy wybraną opcję Empty project i klikamy Next, na następnym (Add Files) też NEXT. W okienku Family, Device & Board Settings wybieramy Family – MAX 10 i na liście (Available devices) wybieramy układ 10M08DAF256C8GES i klikamy Finish.

Konfiguracja NIOS-a

Uruchamiamy narzędzie Qsys wybierając z menu Tools->Qsys. W okienku IP Catalog wpisujemy NIOS, na samym dole listy wybieramy Nios II Processor i klikamy +Add…

Pojawi się okienko konfiguracji procesora, wybieramy Nios II/e i klikamy Finish.

Dalej tak samo dodajemy pamięć RAM, wpisujemy w pole (Total memory size) 32768.

oraz dodajemy i konfigurujemy timer:

Do pobrania

O autorze