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.
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: