Die Open-Source-Befehlssatzarchitektur RISC-V ist mittlerweile für Mikroprozessoren in vielen Mainstream-Produkten nicht mehr nur eine Alternative zu anderen ISA (Instruction Set Architecture), sondern die erste Wahl. Der Speicherhersteller Western Digital stellt nicht nur Produktionshardware auf RISC-V um, sondern hat auch seinen eigenen RISC-V-basierten SweRV Core für die Open-Source-Community freigegeben.

Standard-ISA-Varianten der RISC-V-Foundation untersützt von den GCC- und LLVM-Compilern.

Standard-ISA-Varianten der RISC-V-Foundation untersützt von den GCC- und LLVM-Compilern. Mentor, a Siemens Business

Nvidia hat beschlossen, seinen Falcon-Logikcontroller der nächsten Generation auf RISC-V zu basieren. In einer Marktanalyse prognostiziert Semico Research, dass bis 2025 weltweit über 62 Milliarden RISC-V-basierte Geräte ausgeliefert werden. Immer mehr RISC-V-IPs sind Open Source verfügbar und ständig kommen neue RISC-V-Chips und Entwicklungsplatinen für Einsteiger dazu. Daher lohnt es sich, einen Blick auf den aktuellen Stand der für RISC-V verfügbaren Tools zu werfen und zu fragen, wie der Entwickler die RISC-V-Toolchain in den eigenen Anwendungen am besten nutzen kann.

Die Geschichte von RISC-V

2010 beschlossen Krste Asanović und David Patterson, Informatikexperten des ParLab an der University of California in Berkeley, gemeinsam mit einer Gruppe von Teilnehmern des Graduiertenstudiums im Rahmen ihrer Forschung zu fortgeschrittenem Parallel-Computing, eine Open-Source-Computerarchitektur zu entwickeln und zu veröffentlichen. Grund ihrer Entscheidung war, dass auf RISC-basierte (Reduced Instruction Set Computer) ISAs, die in den letzten zwanzig Jahren veröffentlicht wurden, mit wenigen Ausnahmen viele Gemeinsamkeiten aufwiesen.

Angesichts dessen fanden sie es frustrierend, dass die meisten RISC-basierten ISAs von CPU-Anbietern urheberrechtlich geschützt waren, die mit nur wenigen Ausnahmen Lizenzgebühren für die Nutzung der ISAs in Endprodukten erhoben. Darüber hinaus wurde die Dokumentation von diesen Anbietern meist nur in begrenztem Umfang veröffentlicht, häufig nur unter der Bedingung einer Vertraulichkeitsvereinbarung. Und die Anbieter gaben nur selten Einblick in die Entscheidungen über ihr architektonisches Design. Im Mai 2011 wurde mit der ersten ISA-Veröffentlichung der Berkeley-Gruppe die RISC-V-Initiative ins Leben gerufen.

Nach dieser ersten Veröffentlichung wurde 2015 die RISC-V-Foundation gegründet, als eine Non-Profit-Stiftung für die wachsende Community von Mitwirkenden, um ihre ISA zu formalisieren und sie über GitHub als Public Domain öffentlich zugänglich zu machen. Ab diesem Zeitpunkt wurde RISC-V lizenzgebührenfrei und kann jetzt von jedermann genutzt werden, nicht nur für Forschung oder Lehre und nicht nur für das Prototyping, sondern auch für den Einsatz in Produktionssystemen. Für die Nutzung der RISC-V-ISA fallen keine Gebühren an, ganz gleich, wie oft der Entwickler es herunterlädt und auf wie vielen Geräten sie zum Einsatz kommt. Es ist auch nicht notwendig, Mitglied der RISC-V-Foundation zu sein, um die ISA herunterzuladen. Die Foundation und die Mitgliedschaft dienen nur dazu, die RISC-V-Initiative zu fördern und über Aktualisierungen der ISA durch Erweiterungen abzustimmen und sie so zu genehmigen. Die Nutzung der Architektur steht allen offen, die auf GitHub zugreifen können.

Der Vorteil von RISC-V

RISC-V ist möglicherweise ein Game Changer beim Design von Mikrocontrollern und Mikroprozessoren. Entwickler von Embedded-Lösungen haben jetzt die Wahl, ihre Produkte entweder auf einer der vielen proprietären kommerziellen Prozessorarchitekturen zu basieren oder die offene RISC-V-Architektur ohne Lizenz- oder Nutzungsgebühren zu verwenden. In vielen Industriebereichen, in denen die Anzahl der Prozessoren bei einer Produktionsserie möglicherweise mehrere Millionen betragen kann, können die Kosteneinsparungen allein durch den Wegfall der Lizenzgebühren erheblich sein. Mehrere Hersteller von Speichermedien aber auch Unternehmen der Automobilbranche engagieren sich bereits stark in RISC-V-Projekten.

Und die Vorteile gehen über die Kosteneinsparungen hinaus. Designer im Bereich der Verteidigungs- und Luftfahrtindustrie waren in der Vergangenheit mit Verzögerungen durch Vertraulichkeitserklärungen und zusätzliche Gebühren konfrontiert, wenn sie eine Änderung einer proprietären ISA für spezielle Anwendungen vornehmen wollten und hatten dann nur die Alternative, ihre eigene Architektur von Grund auf neu zu entwickeln. Jetzt können sie die gut dokumentierte Open-Source-ISA RISC-V kostenlos herunterladen und für ihren eigenen speziellen Einsatzzweck modifizieren. Gemäß der offenen RISC-V-Lizenz können Nutzer die ISA nach Belieben ändern, ohne verpflichtet zu sein, ihre Änderungen hochzuladen oder zu veröffentlichen. Unternehmen können somit ihre geänderte, auf RISC-V basierende ISA geschützt halten.

Ein Überblick über die RISC-V-Architektur

Eck-Daten

RISC-V ist nicht mehr nur eine akademische Innovation, sondern auch vermehrt in vielen Mainstream-Produkten der Befehlssatz der Wahl. Gleichzeitig hat sich auch ein Ökosystem an Tools für die Open-Source-ISA entwickelt und es entstehen die entsprechenden Toolchains. Kommerzialisierung, Anpassung und Support sind wesentliche Bestandteile für die Bereitstellung von Toolchains auf Open-Source-Basis in SDKs, die die RISC-V-basierte Produktentwicklung und Software-Updates nach der Veröffentlichung unterstützen.

RISC-V ist eine Verarbeitungsarchitektur, jedoch keine Prozessorimplementierung. Die Designer waren bestrebt, bei der Entwicklung der ISA jegliche Tendenz zu einer bestimmten Mikroarchitektur oder Chiptechnologie zu vermeiden. RISC-V lässt sich in einem ASIC oder FPGA und auf jedem Prozessknoten implementieren. Die ersten erstellten Prozessorimplementierungen wurden in der Open-Source-Hardwarebeschreibungssprache Chisel entwickelt und für jedermann öffentlich zugänglich gemacht. Darüber hinaus wächst die Zahl der Chiphersteller, die RISC-V-basierte Hardware anbieten, rasant. Heute sind über 70 RISC-V-Prozessorimplementierungen auf der Website der Foundation aufgelistet.

Die RISC-V-Architektur ist modular aufgebaut und beginnt mit der Basisspezifikation, die 32- und 64-Bit-Integer unterstützt. Integer im 128-Bit-Modus ist ebenfalls definiert, wird jedoch absichtlich offengelassen, da mit diesen dichteren Speicherzuordnungen mehr Designs verfügbar werden. Die Basis-ISA ist in zwei Volumes unterteilt: die Architektur auf Benutzerebene (Volume I) und die privilegierte Architektur (Volume II). Die privilegierte Architektur dient zur Isolierung von Software-Stack-Komponenten vom Benutzerteil des Betriebssystems und des Anwendungscodes.

Ausgehend von einer Basis-ISA und anschließendem Hinzufügen der erforderlichen Erweiterungen wie Gleitkomma mit einfacher, doppelter und vierfacher Genauigkeit, gepackten SIMD-Anweisungen (Single Instruction, Multiple Data) oder Virtualisierungsunterstützung kann RISC-V eine Vielzahl von Systemmodellen abdecken, von geringen Anforderungen an den Platzbedarf bis hin zu Multiprozessoranwendungen und schließlich sogar DSP-Anwendungen, die SIMD nutzen.

Was ist eine Toolchain?

Da Embedded-RISC-V-IPs in immer mehr neuen Produkten auftauchen, ist es eine wichtige Voraussetzung, dass Softwareentwickler Anwendungscode portieren können.  Der Compiler, die Bibliotheken, der Linker und das Debugger-Toolset, mit denen der Quellcode der Anwendung in Binärcode konvertiert und auf der Zielhardware ausgeführt wird, werden zusammen als Toolchain bezeichnet. In eine Anwendungsentwicklungssuite integrierte Toolchains zur Unterstützung eines bestimmten Produkts werden als Software Development Kits (SDK) bezeichnet.

Es gibt zwei Open-Source-Compiler-Framework-Projekte, die zumindest eine Teillösung für die Toolchain-Anforderung bei RISC-V bieten. Das GCC-Projekt (GNU Compiler Collection) ist eine Open-Source-Initiative, die Compiler-Unterstützung für viele der RISC-V-Standard-ISA-Varianten bietet. GCC unterstützt auch Linux- und „Bare-Metal“-Ziele (RTOS und kein Betriebssystem). GCC-Versionen 7.1 und höher unterstützen RISC-V. Das LLVM-Projekt ist eine neuere Open-Source-Compiler-Framework-Initiative, die auch Compiler-Backend und Bibliotheksunterstützung für RISC-V-Standard-ISA-Varianten bietet. LLVM-Versionen 9.0.0 und höher unterstützen RISC-V. Das LLVM-Projekt hat sich traditionell auf die Unterstützung von Linux-Betriebssystemen konzentriert. Jedoch wächst in der LLVM-Community das Interesse, die Unterstützung für eingebettete Bare-Metal-Zielgeräte zu erweitern (siehe Tabelle).

Open-Source-Toolchain nutzen

Während Softwareentwickler, die an RISC-V-Geräten arbeiten, GCC- oder LLVM-Quellcode direkt aus den öffentlichen Open Source-Repositorys des Projekts herunterladen können, ist dies normalerweise kein effizienter erster Schritt bei der Portierung von Anwendungssoftware auf einen RISC-V-Prozessor.  Das Erstellen und Validieren der eigenen auf Open-Source-basierenden Toolchain ist ein komplexer und langwieriger Prozess, der mit vielen möglichen Fallstricken behaftet ist, insbesondere für diejenigen, die noch keine Erfahrung mit dem Erstellen eigener Toolchains haben.

Glücklicherweise bieten viele RISC-V-Chip- und IP-Anbieter Toolchain-Referenzdistributionen auf Open-Source-Basis an, um Entwicklern bei der Evaluierung ihres IP zu helfen.  Diese Referenz-Toolchains sind zwar nützlich für die Evaluierung von RISC-V-IPs, sie sind jedoch keine auf Produktionseinsatz gerichteten Lösungen, mit denen Entwickler und Endbenutzer Softwareanwendungen für kommerzielle Produkte auf Basis von RISC-V bereitstellen können.  Bei der Beschaffung kundenfähiger Toolchains auf Open-Source-Basis müssen drei wichtige Anforderungen Berücksichtigung finden, damit Entwickler eine RISC-V-basierte Plattform verwenden können: Kommerzialisierung, Anpassung und Support.

Kommerzialisierung der Toolchain

Bei der Kommerzialisierung der Toolchain wird der öffentlich verfügbare Open-Source-Code in eine getestete und unterstützbare Distribution ausführbarer Toolchain-Komponenten und -Bibliotheken umgewandelt, die für die Unterstützung der Zielgeräte konfiguriert sind.  Die beiden wichtigsten Überlegungen bei der Kommerzialisierung der Toolchain sind die Auswahl der Compilerversion sowie der zu unterstützenden Zielgerätevarianten. Durch die Nutzung von Open-Source-Compiler-Projekttestsuiten und Testframeworks wie DejaGNU wird die Abdeckung bei Toolchain-Tests verbessert. Der Teufel steckt jedoch im Detail, wenn es darum geht, die ausführbare Toolchain-Datei korrekt zu erstellen und die Testsuiten zu bestehen.

Dies kann eine frustrierende Aufgabe sein, da Open-Source-Software immer in Entwicklung ist. Tausende Mitglieder der Community arbeiten ständig an verschiedenen Fehlerkorrekturen und neuen Funktionen. Infolgedessen gibt es in der Regel eine Reihe von Tests bei jeder Testsuite, von denen zu erwarten ist, dass sie fehlschlagen. Zwischen erwarteten Testfehlern (XFAILS) und realen Testfehlern zu unterschieden (und natürlich das Beheben der tatsächlichen Fehler), ist eine mühsame Arbeit, die hochspezialisierte Kenntnisse im Bereich des Compilerdesigns erfordert.

Das Endziel besteht darin, eine zuverlässige, wiederholbare Menge von Tests mit einer angemessenen Abdeckung für die Toolchain-Tests einzurichten, die bei Bedarf für die fortlaufende Unterstützung der Toolchain erneut ausführbar ist. Ein weiterer wichtiger Aspekt bei der Kommerzialisierung ist die Beseitigung von allgemeinen Sicherheitslücken und Gefährdungen (Common Vulnerabilities and Exposures, CVEs).  Das Anwenden der richtigen Toolchain-Komponenten für Cybersicherheitspatches (normalerweise Bibliotheken) während des Prozesses der Toolchain-Erstellung ist für die Erstellung hochwertiger Toolchain-Releases für Entwickler-SDKs von entscheidender Bedeutung.

Anpassung der Toolchain

Die Anpassung der Toolchain soll Funktionserweiterungen und Leistungsoptimierungen bereitstellen, die über das hinausgehen, was derzeit in der Open Source-Community verfügbar ist. Bei RISC-V kann die Anpassung der Toolchain in Form von Compiler-Erweiterungen erfolgen, um hardwarespezifische RISC-V-ISA-Anpassungen zu unterstützen, die über die offene RISC-V-ISA aktiviert werden.  Die zielspezifische Optimierung der Anwendungsleistung ist ein weiterer Bereich der Toolchain-Anpassung, mit dessen Hilfe die Leistung der Anwendung für die Zielhardware optimierbar ist.

Darüber hinaus kann die Anpassung der Toolchain auch Fehlerbehebungen für Compiler und die Vervollständigung neuer Funktionen umfassen, die in der Open-Source-Community noch nicht öffentlich verfügbar sind. Der neueste Quellcode ist möglicherweise nicht immer über die öffentlichen Repositories des Open-Source-Projekts verfügbar. Work in Progress befindet sich normalerweise bis zur Freigabe in privaten Entwicklungszweigen. Zudem gibt es keinen allgemeinen Open-Source-Projektentwicklungsplan mit einem festen Lieferplan für bestimmte neue Funktionen.  Daher kann eine Anpassung der Toolchain erforderlich sein, um eine optimale, korrekt konfigurierte Toolchain bereitzustellen, die die kommerziellen RISC-V-basierten Produktanforderungen und die eigenen Release-Zeitpläne erfüllt.

Support für die Toolchain

CVEs für Toolchains werden regelmäßig gemeldet, darunter auch Probleme in den Compiler-Laufzeitbibliotheken. Unentdeckte CVEs in Compiler-Laufzeitbibliotheken können mit Anwendungssoftware verknüpft und dann über eine Produktversion versehentlich an Kunden ausgeliefert werden. Dies wiederum bringt das Risiko mit sich, dass zu einem späteren Zeitpunkt ein Hotfix-Softwareupdate bereitzustellen ist, um neu entdeckte CVEs zu beheben. In einem solchen Fall sorgt ein vorhandener Toolchain-Support, der eine fortlaufende CVE-Behebung bietet, dafür, dass die Toolchain bereit ist, ein Software-Update zu erstellen, das zur schnellen und effektiven Lösung einer solchen Krise erforderlich ist, ohne dass möglicherweise über Jahre angesammelte Toolchain-Patches und -Updates durchzugehen sind.  Der langfristige Support der Toolchain sollte ältere Toolchains mit Patches für kritische CVEs und Fehlerkorrekturen auf dem neuesten Stand halten und gleichzeitig die Gesamtzahl der Änderungen an der Toolchain minimieren, um das Risiko der Einführung neuer Probleme zu verringern.