Arduino i otwarta architektura RISC-V: droga do tanich i wydajnych systemów wbudowanych
Projektanci systemów wbudowanych zawsze poszukują nowych sposobów skrócenia czasu projektowania, szczególnie na etapach weryfikacji pomysłu i szybkiego tworzenia prototypu. Pewne rozwiązanie tego problemu stanowią zestawy projektowe, jednak projektanci, poza dostępnością wygodnej płytki i wykorzystaniem popularnego ekosystemu, wymagają też odpowiedniej wydajności.
Płytka projektowa Arduino Uno stanowi próbę znalezienia takiego rozwiązania. Jej format stał się niezwykle popularny wśród projektantów dzięki niskiej cenie i dostępności dosłownie setek płytek rozszerzeń Arduino Shield, które pozwalają zwiększyć możliwości w zakresie interfejsów I/O. Jednakże niektórzy projektanci mogą w pewnych zastosowaniach potrzebować większej wydajności, niż jest w stanie dostarczyć 8-bitowy mikrokontroler.
Dla takich osób przeznaczony jest zestaw projektowy HiFive1 oferowany przez Crowd Supply. Niniejszy artykuł stanowi opis tegoż zestawu i omówienie jego cech, które pozwalają na szybkie prototypowanie systemów wbudowanych o dużej wydajności. Ponadto opisuje narzędzia, które mogą ułatwić projektantom rozpoczęcie pracy.
Czym jest HiFive1?
HiFive1 to zestaw projektowy wykorzystujący mikrokontroler oparty na 32-bitowym rdzeniu RISC-V (rys. 1). Ponadto współpracuje on z płytkami rozszerzeń Arduino Shield, które pozwalają w znacznym stopniu rozszerzyć jego użyteczność w celu szybkiego prototypowania projektów wbudowanych.
Sercem HiFive1 jest rdzeń procesora RISC-V. W tym przypadku koncepcja otwartego projektu płytek Arduino została rozszerzona także na sam procesor. RISC-V jest otwartym modelem rozkazowym procesora (ISA), który łączy architekturę RISC znaną od lat 80. oraz otwartą strukturę pozwalającą na wykorzystanie go do dowolnego celu. Każdy może projektować, produkować i sprzedawać układy oparte na architekturze RISC-V bez ponoszenia jakichkolwiek opłat.
Mikrokontroler RISC-V znajdujący się na płytce HiFive1 można zaprogramować tak, aby wykonywał kod w miejscu (XIP) w celu zmniejszenia narzutu na komunikację przez interfejs SPI podczas zapełniania pamięci Cache. Interfejs QSPI pozwala mikrokontrolerowi na odczyt 32-bajtowych porcji danych w trybie burst, aby przyspieszyć zapełnianie pamięci instrukcji umieszczonych w pamięci Flash i w rezultacie przyspieszyć pracę w trybie XIP.
Mikrokontroler może pracować z taktowaniem zegara powyżej 320 MHz, jednak w przypadku płytki HiFive1 jego częstotliwość nie powinna przekraczać 133 MHz. Gwarantuje to, że zegar taktujący interfejs SPI mikrokontrolera nie przekracza maksymalnej szybkości dostępnej na płytce pamięci Flash QSPI o pojemności 128 Mb.
Złącza Arduino – z pewnymi zastrzeżeniami
Zestaw HiFive1 powiela charakterystyczny dla Arduino układ wyprowadzeń I/O. Pozwala to na instalację wielu spośród setek dostępnych płytek Arduino Shield – z kilkoma ograniczeniami.
Po pierwsze, mikrokontroler nie ma analogowych wejść – na złączach w stylu Arduino dostępnych na płytce HiFive1 dostępne są jedynie cyfrowe wejścia I/O, wejście przerwania i wejście PWM. Pozycje pinów analogowych od A0 do A5 płytki Arduino Uno są na płytce HiFive1 podpisane jako cyfrowe wejścia I/O od D14 do D19. Jeśli zachodzi konieczność dodania funkcji analogowych, można wykorzystać płytki rozszerzeń zawierające przetworniki analogowo-cyfrowe (ADC), cyfrowo-analogowe (DAC) lub płytki typu kombo ADC/DAC.
Należy również pamiętać, że:
- Projektanci mogą przypisać do 9 generatorów sygnału PWM w złączach Arduino dostępnych w zestawie HiFive1
- Wszystkie 19 wejść I/O HiFive1 mogą pracować jako wejścia przerwań
Dostępne na płytce układy konwersji poziomu pozwalają skonfigurować poziomy logiczne wszystkich cyfrowych wejść I/O jako 3,3 lub 5 V za pomocą zworki. Jedna zworka oznaczona jako IOREF na rys. 1. określa poziomy logiczne wszystkich wejść I/O występujących na złączu Arduino płytki HiFive1.
Wiąże się z tym inny problem: Do tej pory tylko wymienione poniżej płytki Arduino Adafruit zostały przetestowane razem z HiFive1, choć pomocnicze biblioteki Adafruit dla tych dwóch płytek zostały już przeniesione do biblioteki HiFive1:
- Adafruit Resistive Touchscreen & LED Display
- Adafruit BPLE SPI Friend
Pomimo tego każda płytka, która komunikuje się za pośrednictwem interfejsu SPI, UART lub cyfrowych wejść I/O powinna z łatwością współpracować z HiFive1, choć obsługująca ją biblioteka może wymagać pewnych poprawek. Biblioteki dla płytek peryferyjnych HiFive1 dopiero co się pojawiły, można jednak oczekiwać, że liczba obsługiwanych płytek będzie rosła.
Dobry sprzęt wymaga dobrego oprogramowania
Narzędzia programistyczne dla zestawu projektowego HiFive1 są dostępne na Githubie. Obejmują one kompilator C i asembler dla architektury RISC-V, debugger GDB hosta dla procesora RISC-V oraz odpowiednią wersję OpenOCD (On-Chip Debugger).
Gdy program zostanie już napisany, skompilowany i przetłumaczony na kod asemblera, można go wgrać na płytkę HiFive1 za pośrednictwem interfejsu debuggera USB. HiFive1 przechowuje kod programu w umieszczonej na płytce pamięci Flash z interfejsem SPI. Ma ona pojemność 16 MB – dużo więcej, niż pamięć dostępna dla kodu na 8-bitowej płytce Arduino Uno. Rozszerzenie przestrzeni adresowej jest jedną z wielu zalet 32-bitowej architektury, takiej jak RISC-V. Również dostępna w mikrokontrolerze pamięć SRAM ma stosunkowo dużą pojemność 16 KB.
Mikrokontroler
Mikrokontroler stanowiący serce płytki HiFive1 zasługuje na osobny opis.
Mikrokontroler jest oparty na 32-bitowym rdzeniu wykorzystującym otwarty model programowy RISC-V. Jego rdzeń stanowi procesor RV32IMAC, co oznacza, że wykorzystuje on 32-bitowy zestaw instrukcji RISC-V (RV32I) z atomową sprzętową operacją mnożenia i dzielenia na liczbach całkowitych (M), atomowymi instrukcjami czasu rzeczywistego (A) i dodatkowo oferuje obsługę kompaktowego (C) zestawu instrukcji 16-bitowych. Istnieją również 64- i 128-bitowe wersje modelu programowego procesora RISC-V. Rdzeń zawiera również 16 KB pamięci Cache instrukcji (na diagramie oznaczony jako „I$” oraz 16 KB pomocniczej pamięci SRAM. Dostępnych jest również kilka standardowych układów peryferyjnych, takich jak timery, generatory sygnału PWM, zegar czasu rzeczywistego, interfejs UART, interfejsy QSPI i wbudowany sprzętowy moduł debuggera otaczający rdzeń procesora.
Kto stworzył architekturę RISC-V i dlaczego?
Zestaw projektowy HiFive1 oraz mikrokontroler są w istocie projektami demonstracyjnymi dla architektury procesora RISC-V. Nasuwa się pytanie: Czy świat naprawdę potrzebuje kolejnej architektury procesora?
Projekt RISC-V został zapoczątkowany na Uniwersytecie Stanu Kalifornia w Berkeley, ostatecznie gromadząc wokół siebie wielu niezależnych ochotników i osób pracujących w branży elektronicznej. W rezultacie powstał otwarty model programowy procesora (ISA) RISC, który niczym nie ustępuje innym 32-bitowym modelom RISC. Różnica polega na tym, że model RISC-V może być swobodnie używany przez każdą osobę w dowolnym celu.
Potrzebny jest cały ekosystem
Tak jak w przypadku płytki HiFive1, projektanci systemów wbudowanych oczekują czegoś więcej, niż tylko procesora czy mikrokontrolera. W przypadku RISC-V projektanci potrzebują narzędzi, przykładowych kodów, bibliotek i stosów oprogramowania. Narzędzia te są rozwijane w ramach ekosystemu tworzącego się wokół udanych architektur procesorów oraz przez samych użytkowników. Architektura procesora RISC-V jest stosunkowo nowa i to samo dotyczy jej ekosystemu – ten jednak stopniowo się rozwija. Poza opisanymi wyżej narzędziami projektowymi dostarczonymi przez SiFive, dostępne są również inne narzędzia projektowe dla ekosystemu RISC-V, takie jak:
- GNU MCU Eclipse – rodzina otwartych wtyczek i narzędzi dla środowiska Eclipse, która pozwala na rozwój systemów wbudowanych na wielu platformach przy użyciu zestawu narzędzi GNU.
- Embedded Studio for RISC-V firmy Segger – przenośne środowisko programistyczne do tworzenia systemów wbudowanych w języku C/C++, a także sonda debuggera J-Link tej samej firmy.
Podsumowanie
Format niedrogich płytek Arduino Uno oferuje zalety w postaci małych wymiarów i wagi, a także dostępu do setek płytek rozszerzeń z modułami peryferyjnymi oraz modułami I/O. Zestaw projektowy HiFive1 ma te same wymiary, co płytka Arduino Uno i ten sam unikalny układ wyprowadzeń złącza. Pozwala on korzystać z istniejącej oferty modułów rozszerzeń Shield i połączyć je z 32-bitowym mikrokontrolerem opartym na architekturze RISC-V.
Zestaw projektowy HiFive zawiera 16 MB wbudowanej pamięci Flash pozwalającej na przechowywanie większych kodów programu. Wokół nowej architektury RISC-V rozwija się otwarty ekosystem oferujący coraz większy zestaw narzędzi programistycznych – w tym kompilator, asembler, debugger oraz bibliotekę Arduino IDE.