RISC-V für Maker
Erweiterbar, flexibel, frei: RISC-V verspricht, den Open-Source-Gedanken in die CPU-Welt zu tragen. Was es mit der Technik auf sich hat, wie sie funktioniert und wo Maker damit in Berührung kommen, erzählt der Artikel.
Die offene Befehlssatzarchitektur RISC-V bietet den allgegenwärtigen Anbietern von CPUs wie Intel, AMD und ARM die Stirn und will die Welt des Prozessordesigns nachhaltig verändern. Klingt spannend, aber auch etwas überambitioniert. Damit Sie sich einen eigenen Eindruck verschaffen können, haben wir uns das Ökosystem mal angeschaut. Zuvor aber ein paar Grundlagen zur Einführung oder Erinnerung.
Damals
Wenn man sich mit Mikrocontrollern und Single Board Computern beschäftigt, hatte man es bislang meist mit Prozessorarchitekturen wie ARM, AVR und PIC zu tun. Alles sind sogenannte RISC-Architekturen, also Reduced Instruction Set Computer, die einen kleinen Satz einfacher, dafür aber schneller CPU-Befehle verstehen. Im Unterschied dazu gibt es CPUs mit CISC-Architektur, wobei das erste C für Complex steht und einen großen Satz an Befehlen kennzeichnet, die komplizierte Aufgaben erledigen, dafür aber viele Taktzyklen benötigen. Fun Fact: Auch wenn etwa die PC-CPUs von Intel und AMD meist der CISC-Architektur zugeordnet werden, arbeiten sie auf der untersten Ausführungsschicht ebenfalls einer RISC-Architektur.
Über die Vor- und Nachteile zwischen RISC und CISC gibt es viele Diskussionen. Vereinfacht kann man sagen, dass CISC (auf dem PC) weniger RAM benötigt, weil der Programmcode kürzer ist. Dafür sind CISC-CPUs aber ziemlich stromhungrig. RISC hingegen benötigt auf einer CPU weniger Transistoren und damit auch weniger Energie sprich Strom. Die Grenzen zwischen beiden Architekturen werden aber immer durchlässiger. In der Praxis findet man CISC eher auf PCs und RISC auf Embedded-Systemen (abgesehen von Apple-PCs und deren CPUs M1 und M2), wobei embedded und mobile Systeme von ARM-Prozessoren dominiert werden.
Geschlossen
ARM stellt selbst keine Prozessoren her (außer in Sonderfällen wie Physical IP), sondern definiert nur die sogenannte Instruction Set Architecture (ISA) und designt dazu passende CPUs und Peripherie-Busse. Die ISA legt genau fest, wie die einzelnen Befehle lauten, wie sie arbeiten, etwa welche Register und Flags gelesen oder geschrieben werden, wie adressiert wird und wie Speicherzugriffe ablaufen und so weiter.
Kunden können das Design lizenzieren, auf Wunsch anpassen und daraus physische ICs herstellen. Auf dem Raspberry Pi ist beispielsweise ein ARM-SoC von Broadcom mit vier Cortex-A72 verbaut. Broadcom hat den A72 lizenziert, stellt ihn her und verkauft ihn, unter anderem an die Pi Foundation. Dabei fallen für Broadcom einmalige Grundgebühren und zusätzliche Kosten pro verkauftem Chip an.
Vielen Herstellern sind diese Erlös schmälernden Gebühren ein Dorn im Auge. Je mehr Chips sie verkaufen, desto mehr müssen sie an ARM abführen. Auf längere Zeit und bei fallenden Preisen ein Wettbewerbsnachteil. Darüber hinaus ist vielen CPU-Designern die festgelegte ISA von ARM ein Hindernis. Es ist nicht erlaubt, den Befehlssatz um eigene zu erweitern, etwa für KI-Beschleunigung.
Open Source
Einen Ausweg bietet der offene, freie und nicht patentierte Standard RISC-V (das V steht für die römische Ziffer 5 und wird daher „five“ ausgesprochen), auf dessen Basis jeder kompatible Mikroprozessoren entwerfen, herstellen und verkaufen darf – ohne Lizenzkosten abführen zu müssen.
Der Ursprung von RISC-V liegt in den 1980er Jahren an der University of California, Berkeley, dem vier RISC-Projekte (RISC-I bis RISC-IV) vorangingen, die eher für Forschung und Lehre gedacht waren. Der Befehlssatz des fünften Projekts ist für tatsächliche Anwendungen geeignet und mit 47 Grundbefehlen minimalistisch gehalten.
Die RISC-V-Entwickler haben bewusst versucht, die Nachteile vorhergehender ISAs und deren Implementierung in Hardware für andere 32-Bit-Systeme wie ARM, x86 und MIPS zu vermeiden. Ein Beispiel: Bei der x86-Architektur kommen immer nur zwei Register in der CPU zum Einsatz, um beispielsweise zwei Werte zu addieren. Das Ergebnis landet in einem der beiden Register. RISC-V legt das Ergebnis hingegen in einem dritten Register ab, sodass beide Operanden eine Operation überleben. RISC-V gibt es für 32, 64 und 128 Bits, wir konzentrieren uns in diesem Artikel aber auf 32 Bit.
Fundament
Mit den Basisbefehlen kann man insgesamt 32 interne Register (je 32 Bit breit) und Speicher beschreiben und lesen, Integer addieren und subtrahieren, logische Operationen (AND, OR, XOR) durchführen, Register schieben (leider nicht rotieren), Werte vergleichen und verzweigen sowie springen und Kontroll-, Counter- und Statusregister auslesen. Klingt erstmal nicht viel, reicht aber im Prinzip für alle möglichen Aufgaben aus. Prozessoren, die nur diese Funktionen implementiert haben, bezeichnet man mit RV32I. Das I steht hier für Base Integer Set.
RV32E ist eine nochmal schlankere Version von RV32I mit nur 16 statt 32 internen Registern. Daneben fehlen noch ein paar Counter und die dazu passenden Befehle, der Rest bleibt gleich. Sie zielt auf kleine Mikrocontroller-Systeme. Neben I gibt es noch diverse Erweiterungen, die das Programmieren einfacher machen, dazu gleich mehr.
CPUs selber machen
RISC-V ist eine Architektur auf dem Papier, wie macht man daraus nun eine CPU? Man programmiert die Funktionen der CPU (ALU, Programmzähler, Takt, Multiplexer, Register) in einer Hochsprache, etwa Python, und exportiert das mit Tools wie MyHDL in Hardwarebeschreibungssprachen wie VHDL. Oder man programmiert gleich in der C-ähnlichen Sprache Verilog. Ein Beispiel, wie Verilog aussieht, ist im Listing Schieberegister zu sehen.
Vereinfacht gesagt wird damit der Signalfluss zwischen den Registern spezifiziert, auch Registertransferebene (Register Transfer Level, RTL) genannt. Damit lassen sich spezielle Chips wie ASICs und FPGAs programmieren, Chipfertiger können nach so einem Protoypen einen Schaltkreis in Silizium gießen. Der Hersteller SiFive, ein Spin-off dreier Forscher der University of California, Berkeley, bietet seine Designs in der Sprache Chisel an.
Weil es anfangs für RISC-V kaum Implementierungen in echter Hardware gab, fand viel der Entwicklung in dem Emulator Qemu unter Linux und in FPGAs statt. Die Unterstützung in Qemu ist so ausgereift, dass man so gut wie alle Features der Architektur darin testen kann.
Mittlerweile gibt es für RV32I viele frei verfügbare Implementierungen diverser Hersteller, Universitäten und Forschungseinrichtungen (siehe Link). Auch wenn die einzelnen Implementierungen im Kern genau das machen, was die ISA vorschreibt, unterscheiden sie sich doch in der konkreten Umsetzung und der resultierenden Performance, dem Energiebedarf, der Größe usw. Wer will, kann sich einen RV32I-Kern herunterladen, anpassen, in Qemu testen, in FPGAs schreiben oder kostenlos von der mit Google kooperierenden SkyWater Technology Foundry in 130nm-Technik produzieren lassen.
Im Internet sind diverse Anleitungen (siehe Links) zu finden, wie man seinen eigenen RV32I-Kern baut, vielleicht ist das ja mal ein Thema für künftige Make-Ausgaben.
Erweiterungen
Wem die Befehle des I-Sets nicht ausreichen, kann seine CPU mit Erweiterungen ausstatten, die Multiplizieren (M), mit Fließkommazahlen (F, D) und mit Matrizen/Vektoren (V) rechnen können. Spannend gerade für Mikrocontroller ist die Atomic-Extension, die bitweise OR-, AND- und XOR-Operationen direkt im Speicher respektive Peripherieregistern ermöglicht, sodass man nicht ganze Bytes lesen, manipulieren und zurückschreiben muss. Konkurrent ARM hat dies in seinen Designs durch sogenanntes Bit Banding gelöst, bei der in einem reservierten Speicherbereich recht aufwändig einzelnen Bits dedizierte 32-Bit-Speicheradressen zugeordnet werden.
Mit der C-Erweiterung (Compressed) kann man nur 16 Bit lange Instruktionen (RVC) verwenden und im Programm mit 32 Bit langen Befehlen mischen. Laut Spezifikation lassen sich bis zu 60% der herkömmlichen Befehle durch kürzere ersetzen und damit bis zu 30% Speicher sparen.
Die Liste einiger Erweiterungen ist im gleichnamigen Kasten zu sehen. Ein Kern mit der Bezeichnung RV32IMC unterstützt somit kürzere Befehle und Integer-Multiplikationen. RV32GC steht für einen Kern, der sämtliche Extensions mitbringt. Im Prinzip gilt für RV64 und RV128 das gleiche, nur dass die Befehle entsprechend breiter sind. Ein RV64GC ist aktuell ein Kern, der sich für den Betrieb mit Linux etabliert hat.
In echt!
Auch wenn „under the hood“ schon zahlreiche Produkte RISC-V einsetzen, hat es doch einige Zeit gedauert, bis SoCs mit RISC-V verfügbar waren, die es konkret mit ARM-SoCs aufnehmen könnten. Einer ist der StarFive JH7110 der chinesischen Firma StarFive. Sie hat den Einplatinencomputer VisionFive 2 (ca. 100 Euro) damit bestückt, den wir in Heft 2/23, S. 102 vorgestellt haben. Im SoC stecken vier RISC-V-Kerne vom Typ U74-MC, die das US-Unternehmen SiFive entwickelt hat. StarFive wurde von SiFive mitgegründet, um die RISC-V-Technik in China voranzutreiben.
Linux läuft auf dem VisionFive 2, es taugt bisher aber noch nicht für Bastelprojekte oder gar als Desktop-PC-Ersatz. Es hakelt und ruckelt an allen Ecken. Daran ändert auch ein dediziertes Image von Ubuntu nichts, wie Kollege Dirk Knop von heise online im Test herausfand (siehe Link). Hersteller Pine64, bekannt für seine Allwinner- und Rockchip-SBCs, hatte Anfang des Jahres mit dem Star64 ein Konkurrenzboard zum VisionFive 2 auf den Markt gebracht, das den gleichen SoC trägt. Es war nach kurzer Zeit vergriffen. Die Softwareprobleme dürften aber die gleichen sein.
Ankündigungen
Dennoch ist bald mit einem Ruck in der Linux-Landschaft zu rechnen, nämlich wenn Intels RISC-V-SoC Horse Creek auf dem Micro-ATX-Board HiFive Pro P550 für Desktop-PCs den Weg in Entwickler-Büros findet. Der SoC besteht besteht aus vier RV64GBC-Kernen von SiFive mit 2,2 GHz, jeweils 128 KByte Level-2-Cache und 2 MByte Shared L3 Cache sowie DDR5-5600- und PCIe-Gen5-Interface. Gefertigt wird er im Intel-4-Prozess mit 7nm. Auf dem Board finden sich je zwei PCIe-Slots, M.2-USB-Adapter, ein Grafik-IC sowie ein 10GbE-Netzwerkadapter. Das Board ist für diesen Sommer angekündigt und dürfte danke Intel breite Unterstützung bei der Entwicklung von Treibern finden.
Wer erste Schritte mit RISC-V machen will, ohne sich mit Linux und fehlenden Treibern auseinandersetzen zu müssen, kann auf günstigere Mikrocontroller-Boards zurückgreifen. Sparkfuns RED-V Redboard und RED-V Thing Plus enthalten den SoC SiFive RISC-V FE310. Nachteil: Sie werden mit dem Eclipse-Abkömmling Freedom Studio und dem Freedom-e-SDK programmiert, die sich eher an fortgeschrittene Programmierer richten. Immerhin hat das Redboard den Arduino-Formfaktor. Apropos: Arduino hatte 2017 schon einmal das RISC-V-Board Cinque vorgestellt - ebenfalls mit dem FE310. Es ist aber nie zur Marktreife gelangt.
Game Changer
Vor einiger Zeit hat auch der Hersteller Espressif begonnen, sämtliche seiner neu entwickelten Produkte nur noch mit RISC-V auszustatten. In seinen ESPs hat die Chipschmiede bislang recht exotische Xtensa-CPU-Kerne von Tensilica eingesetzt, die einer 32-Bit-RISC-Architektur folgen und von Cadence lizensiert sind. Die ISA ist zwar sogar um eigene Befehle erweiterbar. Allerdings war sie genauso Closed Source wie die Dokumentation und die Toolchain dazu, was Espressif dazu bewog, auf das freie RISC-V zu wechseln.
Mitte 2021 kam als ESP32-C3 der erste SoC mit RISC-V auf den Markt: Im Kern ein RV32IMC-Kern mit 160 MHz plus 400 KB SRAM. Nach Angaben von Espressif eine Eigenentwicklung, Gerüchte behaupten, es sei ein SiFive E Core. Leistungsmäßig ersetzt er den ESP8266, von der Kompatibilität insbesondere aus Softwaresicht orientiert er sich eher am ESP32. Schaut man sich das Blockschaltbild an, so ist der RV32IMC ein Drop-In-Replacement für die alte CPU, die Peripherie-Einheiten sind im Prinzip fast vollständig erhalten geblieben. Allerdings bringt der C3 nicht so viele GPIO-Ports mit, wie der ESP32: ADC, SPI, UART, I2C, I2S, RMT, TWAI und PWM sind dabei, ein DAC fehlt leider.
Leistungsmäßig rangiert der C3 zwischen ESP8266 und ESP32, ist aber weniger stromhungrig als letzterer.
Das Praktische: Um sein erstes Programm für das RISC-V-Board zu programmieren und hochzuladen, kann man wie gewohnt die Arduino IDE oder die ESP IDF (mit VSCode oder Eclipse) benutzen. Espressif liefert in seinen Board Add-ons für Arduino alle RISC-V-Tools wie Compiler, Linker, Libraries sowie Beispiele mit. Somit genügt es, unter Boards einfach ESP32 C3 Devmodule auszuwählen, um sein Programm zu übersetzen.
Das Eval-Board von Espressif hat eine WS2812B-LED dabei, mit der man den Blink-Klassiker aus den Beispielen sofort übersetzen und hochladen kann. Anders als herkömmliche LEDs schaltet hier nicht ein normaler I/O-Pin ein oder aus. Vielmehr ist GPIO8 für das Remote Control Peripheral (RMT) konfiguriert, das die erforderliche Bitfolge für die RGB-LED erzeugt.
Unter der ESP IDF setzt man mit idf.py set-target esp32c3 das richtige Ziel, beim Plug-in für VSCode stellt man ganz einfach über die Breadcrumb-Leiste unten in der IDE per Klick das Ziel um. Espressif nutzt gcc als Compiler, grundsätzlich wird auch Clang/LLVM RISC-V unterstützt. Ansonsten programmiert man die Funktionen des C3 wie vom herkömmlichen ESP32 bekannt, egal in welcher IDE.
Mit Spannung erwartet wird der im Januar angekündigte Zweikerner ESP32-P4, der mit 400 MHz laufen soll und eine AI Instruction Extension sowie Unterstützung für Kameras und HW-Beschleunigung für H.264 verspricht.
Interpretiert
Wer lieber mit MicroPython programmieren möchte, hat im Moment keine große Auswahl. Der chinesische Hersteller WCH, sonst eher bekannt für seinen USB-zu-Seriell-IC CH340, hat auch RISC-V im Portfolio, etwa den CH32V307. Zusammen mit dem Evalboard CH32V307EVT (AliExpress, 10 Euro) ist das eine leistungsfähige Bastelplattform, für die es sogar eine MicroPython-Portierung gibt (siehe Link). Allerdings muss man die sich mit der auf Eclipse beruhenden, hauseigenen IDE MounRiver selbst übersetzen (Anleitung siehe Link).
Auf dem Max Bit AI Board (ca. 35 Euro) ist MicroPython bereits vorinstalliert. Konkret ist es eine angepasste Version namens MaixPy für die 64-Bit-RISC-V-CPU Kendryte K210 mit KI-Beschleuniger, die auf Objekterkennung spezialisiert ist.
Ausblick
Übrigens: 2015 gründete sich die RISC-V Foundation und im gleichen Jahr erschien Version 1.0 der Programmiersprache Rust. Wie RISC-V will sie auch vieles besser machen und beide Systeme werden immer populärer. Gut zu wissen, dass beide miteinander gut funktionieren.
RISC-V ebnet das Feld für offene Hardware, nachdem Linux das schon für Software getan hat. Noch hinkt RISC-V sowohl bei der Leistung als auch der Treiberunterstützung an einigen Stellen hinterher, aber am Beispiel des ESP32-C3 zeigt sich, wie schnell und einfach die Architektur plötzlich im Mainstream landen kann. Wir werden dem Gebiet künftig sicherlich noch mehr Artikel widmen. —dab