Popularny post Elvis Napisano Maj 11, 2018 Popularny post Udostępnij Napisano Maj 11, 2018 Nie wiem, czy kogoś to zainteresuje, mam nadzieję że tak - ale jeśli nie to będę miał chociaż dla siebie zapisany tutorial jak wgrać soft-procesor na FPGA 🙂 W każdym razie po próbach z różnymi układami FPGA oraz czasami syntezy prostych projektów postanowiłem nieco więcej czasu poświęcić płytkom Maximator produkowanym przez firmę Kamami: https://kamami.pl/zestawy-uruchomieniowe/561438-zestaw-maximator-maximator-expander-kamami-usb-blaster.html Płytka wyposażona jest w układ z rodziny MAX10 produkowany przez firmę Altera (przejętą jakiś czas temu przez Intel). Dokładniej jest to model: 10M08DAF256C8GES Układ wyposażony jest w około 8000 elementów logicznych (10M08, czyli MAX10 z 8k elementów logicznych) - to niby niewiele, ale idealnie pasuje jako kolejny krok po kursie FPGA z Forbota i płytce ElbertV2, która ma układ z 1600 elementami. Mniej rozbudowany układ to szybsza synteza, ale co ważniejsze bardzo przyzowita cena zestawu - za 249 zł dostajemy programator, płytkę bazową z układem FPGA oraz płytkę rozszerzeń (wyprowadzenia zgodne z Arduino). Więcej informacji znajdziemy na stronie sklepu Kamami oraz stronie dedykowanej płytce Maximator: http://maximator-fpga.org Jednak tym co chciałem opisać nie jest sama płytka, ale krótki opis kroków niezbędnych do utworzenia i zaprogramowania procesora w układzie FPGA. W przypadku ElbertV2 można było użyć rdzenia PicoBlaze, ale jego możliwości były ograniczone przez bardzo małą pamięć oraz niezbyt przyjazne narzędzia (właściwie tylko programowanie w asemblerze bez debuggera). Jako ciekawostkę spróbuję pokazać o ile wygodniej można podobny efekt uzyskać na płytce Maximator. Do tworzenia projektu używam środowiska Altera Quartus w wersji 17.0 - wersja Lite jest darmowa i dostępna na stronie: https://www.altera.com/downloads/download-center.html Aktualnie jest już wersja 17.1, ale pod Linux-em coś złego się dzieje z Eclipse w tej wersji, więc zdecydowałem się na używanie poprzedniej edycji. Po uruchomieniu, ekran Quartus-a wygląda mniej więcej tak: Jeśli chcemy utworzyć projekt z własnym soft-procesorem, z menu File wybieramy opcję "New Project Wizard" Pojawi się kreator projektu. W pierwszym kroku wybieramy katalog (najlepiej nowy, środowisko go utworzy), nazwę projektu oraz nazwę głównego modułu: Ja używam jako katalogu: /home/elvis/fpga/nios05_max, nazwa projektu: nios05_max, a główny moduł ma niezbyt oryginalną nazwę - "top". Następne strony możemy pominąć naciskając "Next", aż dojdziemy do wybóru układu FPGA. Chcemy wybrać 10M08DAF256C8GES, ale Qauartus wspiera znaczną liczbę układów i odnalezienie naszego może być niemałym wyzwaniem. Pomogą nam w tym filtry widoczne w górnej części okna - wybierając rodzinę układów, obudowę itd. zmniejszamy liczbę dostępnych modeli. Po odnalezieniu naszego układu naciskamy Next i przechodzimy przez kolejne okna kreatora - na koniec generujemy projekt naciskając Finish: Projekt został przygotowany, czas dodać do niego soft-procesor Nios2. Z menu Tools wybieramy opcję Qsys: Uruchomimy w ten sposób nowe narzędzie - Qsys (w wersji 17.1 ma on nową nazwę, ale działa tak samo). Jak widzimy Qsys domyślnie dodaje moduł zegara clk_0. W oknie po lewej stronie znajdziemy dostępne komponenty. Wybieramy "Processors and Peripherals"->"Embedded Processors"->"Nios II Processor": Komponent dodajemy do naszego projektu, zobaczymy wtedy konfigurator, w którym zaznaczamy wersję "Nios II/e": Następnie dodajemy pamięć dla programu i danych - wybieramy "Basic Functions"->"On Chip Memory"->"On Chip Memory (RAM or ROM)". Pojawi się kolejny konfigurator: W polu "Total memory size" możemy zmienić domyślną wartość 4096 (czyli 4k) na powiedzmy 32768 - czyli 32k pamięci. Maksymalna wielkość to ok. 48k (kiedyś Spectrum miało tyle RAM-u, ktoś to jeszcze pamięta?). Bardzo ważne jest wyłączenie opcji "Initialize memory content" - inaczej projekt nie zadziała. Na koniec dodajemy emulator portu szeregowego działający przez JTAG - wybieramy "Interface Protocols"->"Serial"->"JTAG UART" i akceptujemy domyślną konfigurację. Powinnniśmy otrzymać konfigurację podobną do następującej: Teraz musimy połączyć komponenty naszego układu. Właściwie łączymy wszystkie oprócz "instruction master" procesora i jtag_uart_0: Następnie musimy wybrać procesor, czyli moduł "nios2_gen2_0", prawy klawisz mysz i wybrać opcję "Edit". Zobaczymy to samo okno konfiguratora, które widzieliśmy wcześniej dodając procesor. Jednak teraz wchodzimy do zakładki "Vectors" i ustalamy, że wektor reset-u (Reset vector memory) i przerwań (Exception vector memory) ma być ulokowany w naszej pamięci RAM (onchip_memory2_0): Na koniec musimy przypisać poprawne adresy każdemu modułowi. Może to za nas zrobić automat, wystarczy że wybierzemy z menu "System" opcję "Assign Base Adresses". Po tym kroku powinny zniknać błędy widoczne wcześniej w dolnej części okna. Możemy teraz zaspiać projekt - najlepiej pod nazwą "top", czyli jako główny moduł. Na koniec wybieramy opcję "Generate HDL" i Qsys wygeneruje dla nas odpowiednie pliki: Teraz możemy zamknąć okno Qsys-a i wrócić do głównego narzędzia, czyli Quartusa. Co ciekawe nasz ciężko wyklikany moduł nie został jeszcze dołączony do projektu. Aby go dodać, z menu "Project" wybieramy opcję "Add/Remove Files in Project" - a następnie dodajemy plik top.qsys: Teraz możemy skompilować nasz projekt. Co ciekawe, kompilacja się powiedzie chociaż nie skonfigurowaliśmy jeszcze poprawnie pinów - ale chociaż Quartus ustali listę wyprowadzeń. Teraz musimy poprawić przypisanie pinów. Z menu "Assignments" wybieramy opcję "Pin Planner": Po uruchomieniu zobaczymy całkiem rozbudowane narzędze do konfiguracji pinów. W tej chwili interesuje nas lista rozpoznanych pinów widoczna w dolnej części okna: Linia zegara została nazwana "clk_clk". Musimy połączyć ją z pinem L3 - opis pinów znajdziemy na schemacie płytki, do L3 podłączony jest 10MHz generator. Modyfikujemy więc konfigurację następująco: Teraz zamykamy Pin Planner i ponownie syntetyzujemy projekt. Po chwili kod powinien być gotowy zaprogramowania płytki. W okienku zadań możemy wybrać opcję "Program Device (Open Programmer)". Jeśli mamy odrobinę szczęścia, wystarczy że przyciśniemy "Start" i po chwili pole "Progres" powinno zmienić się w zielony wesoły pasek z opisem "100% (Successful)" (przy okazji, programowanie trwa moment, dużo krócej niż ElbertV2). Mamy już gotowy układ FPGA z wgranym procesorem. Teraz wystarczy napisać na niego program. c.d.n. [ Dodano: 11-05-2018, 14:51 ] Teraz będzie już tylko łatwiej. Na początek otwieramy menu "Tools" i wybieramy opcję "Nios II Software Build Tools For Eclipse": Po chwili zobaczymy najzwyklejszego Eclipse-a. No może Eclipse z kilkoma pluginami. Z menu "File" wybieramy pierwszą opcję o strasznie długim tytule "Nios II Application and BSP from Template" Teraz wypełniamy pola opisujące nasz projekt. Jako "SOPC Information File name" wybiramy plik top.sopcinfo, nazwę projektu wpisujemy dowolną np. nios05, możemy też wybrać interesujący nasz szablon projektu - ja używam "Hello World Small" Przyciskamy Next lub od razu Finish i po chwili możemy się cieszyć wygenerowanym kodem naszego pierwszego projektu: Kod programu możemy zostawić bez zmian, albo poprawić na bardziej odpowiedni: #include "sys/alt_stdio.h" int main() { alt_putstr("Hello Forbot !!!\n"); while (1); return 0; } W każdym razie nasz program powinien się skompilować jak każdy inny w środowisku Eclipse. Teraz jedyne co nam pozostało to wgrać go na płytkę. Z menu "Debug" wybieramy opcję "Debug Configurations", a następnie podwójnie klikamy na opcji "Nios II Hardware": Teraz wystarczy kliknąć przycisk "Debug" i po chwili zobaczymy debugger zatrzymany na początku funkcji main. Możemy uruchomić nasz program, a następnie otworzyć zakładkę "Nios II Console" - to w niej pojawiają się komunikaty z UART-a emulowanego poprzez JTAG. Jak widzimy nasz program działa i pozdrawia Forbota 🙂 Mamy teraz działający procesor płytce z układem FPGA. Programowanie odbywa się w komfortowych warunkach, a pamięć programo chociaż nie ogromna pozwoli na napisanie niejednej ciekawej aplikacji. Ja natomiast mam nadzieję, że nikogo nie zanudziłem tym nieco długim wpisem. 3 Cytuj Link do komentarza Share on other sites More sharing options...
FlyingDutch Maj 11, 2018 Udostępnij Maj 11, 2018 Cześć Elvis, bardzo fajnie napisany artykuł 😃 Posiadam Maximatora i mam nadzieję, że znajdę czas w ten weekend aby wypróbować twój "przepis" na NIOS'a. Pozdrawiam [ Dodano: 11-05-2018, 17:57 ] Cześć Elvis, a mógłbyś może dołączyć projekt Quartus'a do postu. Tak na wszelki wypadek, gdyby ktoś "utknął" w którymś momencie - będę się starał zrobić wszystko 'od zera' wedle twojej procedury? Pozdrawiam Cytuj Link do komentarza Share on other sites More sharing options...
Elvis Maj 12, 2018 Autor tematu Udostępnij Maj 12, 2018 Nie ma problemu, projekt jest w załączonym pliku. nios05_max.zip 1 Cytuj Link do komentarza Share on other sites More sharing options...
JTyburski Czerwiec 20, 2018 Udostępnij Czerwiec 20, 2018 NIOS II to jest prosty tak naprawdę - np: u mnie na uczelni to my jako ćwiczenie dajemy obsługę wyświetlaczy Nokii które są dostępne na KAMAMI (tj: https://kamami.pl/lcd-84x48/180404-modlcd1.html). A proste bo jakby nie patrzeć to wszystkie instrukcje są wskaźnikami na dane rejony pamięci, na której pracuje softprocesor (a w których zawarte są związane z nimi rejestry )i starczy tylko wstawiać odpowiednie wartości w danych miejscach tejże pamięci (poza tym tych rejestrów sporo wcale nie jest jak w STM-ach czy AVR-ach i dlatego tym bardziej ten softprocesor jest prosty). To tak na boku ^^ Cytuj Link do komentarza Share on other sites More sharing options...
Polecacz 101 Zarejestruj się lub zaloguj, aby ukryć tę reklamę. Zarejestruj się lub zaloguj, aby ukryć tę reklamę. Produkcja i montaż PCB - wybierz sprawdzone PCBWay! • Darmowe płytki dla studentów i projektów non-profit • Tylko 5$ za 10 prototypów PCB w 24 godziny • Usługa projektowania PCB na zlecenie • Montaż PCB od 30$ + bezpłatna dostawa i szablony • Darmowe narzędzie do podglądu plików Gerber Zobacz również » Film z fabryki PCBWay
Elvis Czerwiec 20, 2018 Autor tematu Udostępnij Czerwiec 20, 2018 To może zamiast linka do wyświetlacza podziel się linkiem do materiałów, które przerabiacie na ćwiczeniach? Sterowanie wyświetlacza brzmi ciekawie, chociaż mam wrażenie, że pisanie o rejestrach w pamięci jest nieco mało precyzyjne - w każdym razie chętnie bym materiały pooglądał. Może i u mnie na uczelni coś na FPGA się dzieje, ale niestety w innej katedrze. Cytuj Link do komentarza Share on other sites More sharing options...
JTyburski Czerwiec 20, 2018 Udostępnij Czerwiec 20, 2018 Prawa autorskie niestety, więc nie mogę tak ot co upowszechniać tego (takie zarządzenie u nas) Cytuj Link do komentarza Share on other sites More sharing options...
piotrva Wrzesień 8, 2018 Udostępnij Wrzesień 8, 2018 Brakuje w tym projekcie tylko komponentu System ID, który zabezpiecza nas przed wgraniem softu z BSP niezgodnym z tym co jest aktualnie skonfigurowane w układzie FPGA. Poza tym nie wiem czy tylko ja mam takie wrażenie, ale Platform Designer (dawny Qsys) spisuje się lepiej niż obecny system przygotowywania MicroBlaze? 1 Cytuj Link do komentarza Share on other sites More sharing options...
FlyingDutch Wrzesień 8, 2018 Udostępnij Wrzesień 8, 2018 2 minuty temu, piotrva napisał: Poza tym nie wiem czy tylko ja mam takie wrażenie, ale Platform Designer (dawny Qsys) spisuje się lepiej niż obecny system przygotowywania MicroBlaze? Cześć, zgadzam się w pełni z tą opinią. Pozdrawiam 1 Cytuj Link do komentarza Share on other sites More sharing options...
Elvis Wrzesień 8, 2018 Autor tematu Udostępnij Wrzesień 8, 2018 A jaki jest obecny system przygotowywania MicroBlaze? Cytuj Link do komentarza Share on other sites More sharing options...
FlyingDutch Wrzesień 8, 2018 Udostępnij Wrzesień 8, 2018 6 minut temu, Elvis napisał: A jaki jest obecny system przygotowywania MicroBlaze? Cześć Elvis, najpopularniejszym jest ten promowany przez Xilinx'a oparty na Vivado - budowa soft-procesora poprzez składanie go z "IP corów" Xilinxa np. Core Microblaze + rózne moduły oparte np. na magistrali AXI, osoby generator zegara dla CPU itp. Potem synteza tak zbudowanego projektu w Vivado i jego eksport do SDK. Są także gotowe projekty oparte na SDK lub EDK (komercyjna licencja). Ale jak sam mogłeś się przekonać na prostym tutorialu dla Microblaze jest to problematyczne. Pozdrawiam Cytuj Link do komentarza Share on other sites More sharing options...
Elvis Wrzesień 8, 2018 Autor tematu Udostępnij Wrzesień 8, 2018 Ale przecież Maximator ma FPGA MAX10, na nim działa Nios II, a nie MicroBlaze... Do konfiguracji używany jest QSYS, przemianowany na Platform Designer - natomiast całość działa praktycznie identycznie jak w przypadku Vivado dla Xilinxa. Właściwie główna różnica to inny wygląd - Vivado pozwala na rysowanie schematu, a Platform Designer używa bardziej tabelarycznej postaci. No i domyślnie używa magistrali Avalon, ale można do niej podpinać peryferia z AXI, AHB, czy APB. Wynik jest też eksportowany do SDK i programowanie odbywa się podobnie jak w przypadku narzędzi Xilinxa w Eclipse. Prawdę mówiąc różnice są moim zdaniem niewielkie, chociaż jak dla mnie narzędzia Altery są trochę wygodniejsze - ale to pewnie kwestia przyzwyczajenia. Natomiast dla małych projektów Altera bije na głowę Xilix-a czasem syntezy. To co napisałem nie dotyczy Microblaze - i nie bardzo rozumiem co jest problematyczne... Cytuj Link do komentarza Share on other sites More sharing options...
FlyingDutch Wrzesień 8, 2018 Udostępnij Wrzesień 8, 2018 3 minuty temu, Elvis napisał: Ale przecież Maximator ma FPGA MAX10, na nim działa Nios II, a nie MicroBlaze... To co napisałem nie dotyczy Microblaze - i nie bardzo rozumiem co jest problematyczne... Elvis to chyba kwestia złego zrozumienia się 😉 Mnie wydaje się iż kolega chciał napisać, iż metoda budowy NIOSII w QSYS jest wygodniejsza niż ta w Vivado (właśnie ta postać tabelaryczna). W Vivado wcale nie jest prosto na schemacie prawidłowo połączyć te wszystkie IP cory. A co gorsza potem na etapie syntezy i implementacji pojawią się mnóstwo nie do końca zrozumiałych błędów związanych z konfiguracją pinów układu FPGA. Chodziło tylko o zasygnalizowanie faktu, że dla NIOS jest to wygodniejsze - z czym się zgadzam. Pozdrawiam 1 Cytuj Link do komentarza Share on other sites More sharing options...
piotrva Wrzesień 8, 2018 Udostępnij Wrzesień 8, 2018 Elvis - chodzi o porównanie Intel FPGA / Xilinx. Moim zdaniem interfejs jak to nazwałeś w "bardziej tabelarycznej postaci" jest wygodniejszy i bardziej czytelny niż rysowanie schematu w Vivado. I też czas syntezy w Quartus wydaje mi się o niebo krótszy niż podobnego projektu w Vivado, ale tu by trzeba dokładnie porównać narzędzia do syntezy i ich ustawienia (np. jaki poziom optymalizacji jest wybrany, etc). Widać tym małym wpisem rozpętałem off-topic pod Twoim fajnym i bardzo kompaktowym poradnikiem 😉 1 Cytuj Link do komentarza Share on other sites More sharing options...
Elvis Wrzesień 8, 2018 Autor tematu Udostępnij Wrzesień 8, 2018 Ok, faktycznie za szybko przeczytałem i jak widać bez zrozumienia 🙂 A że temat odżył to może i lepiej - w sumie FPGA to bardzo ciekawe zagadnienie. 1 Cytuj Link do komentarza Share on other sites More sharing options...
FlyingDutch Październik 14, 2018 Udostępnij Październik 14, 2018 Cześć Elvis, dopiero dzisiaj wypróbowałem twój tutorial dla "NIOS II" (na Maximatorze) wszystko działa bez żadnych problemów. Pozdrawiam 2 Cytuj Link do komentarza Share on other sites More sharing options...
Pomocna odpowiedź
Dołącz do dyskusji, napisz odpowiedź!
Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!