Standardisierte Open-Source-Prozessorarchitektur
Hinzufügen von Hardware- und Software-Erweiterungen zu einer Open-Source-Architektur für optimiertes Design
Jon Gabay for Mouser Electronics
(Quelle: Shutterstock/wanpatsorn)
Wie oft mussten wir schon eine neue Prozessorarchitektur und Entwicklungsumgebung erlernen, weil unser neues Projekt mehr Leistung und Geschwindigkeit erfordert als frühere Projekte? Die Erfahrung lehrt uns, dass ähnliche Bauteile wie die, die uns in einem neuen Prozessor vertraut vorkommen, zumindest die Einstiegshürden etwas beseitigen können. Was aber, wenn das Erlernen einer einzigen neuen Architektur Sie in die Lage versetzen kann, in Zukunft schneller und einfacher zu entwickeln? Dank der skalierbaren, replizierbaren und konfigurierbaren Open-Source-Prozessoren von RISC-V ist dies kein Wunschtraum mehr.
RISC (Reduced Instruction Set Computer) ist keine neue Architektur; es gibt sie seit Jahrzehnten als schlankere Alternative zu den komplexen Befehlssätzen (CISC, Complex Instruction Set Computer), die ihnen vorausgingen. Ältere CISC-Prozessoren funktionierten sehr gut und folgten größtenteils einer Von-Neumann-Architektur, bei der der Code eines Prozessors in Zyklen zum Abrufen, Dekodieren und Ausführen der Anweisungen arbeitet. RISC-Prozessoren folgen einer Harvard-Architektur, bei welcher der Befehlscode-Bus vom Datenbus getrennt ist, was den gleichzeitigen Zugriff ermöglicht, so dass der Prozessor jeden Befehl in einem einzigen Zyklus ausführen kann. Das macht sie schnell, deterministisch und erleichtert die Erstellung von Compilern und Funktionsbibliotheken, die sich leichter von Maschine zu Maschine portieren lassen.
Aber ebenso wie bei CISC-Prozessoren haben die verschiedenen Hersteller unterschiedliche interne Architekturen, Peripheriegeräte, I/O und Befehlssätze. Dies erfordert auf den jeweiligen Hersteller und die Teile zugeschnittene Entwicklungswerkzeuge, um ein Design zu entwickeln. Die Hersteller von Development Tools gehen damit um, indem sie für jeden Prozessor unterschiedliche „Plug-ins“ und Header-Dateien für die Entwicklungs-Toolchains bereitstellen – eine nicht ganz triviale Aufgabe.
Das RISC-V-Projekt begann 2010 in Berkeley, Kalifornien, mit Experten und Mitwirkenden sowohl aus Berkeley als auch von außerhalb, aber erst seit 2018 hat RISC-V bei Prozessorherstellern und Entwicklungsingenieuren mehr Aufmerksamkeit erlangt. Der Grund dafür ist das Versprechen, dass das Design nicht mehr an ein Teil oder eine Familie von Teilen eines Herstellers gebunden ist.
RISC-V ist eine offene Spezifikation für eine Befehlssatzarchitektur (ISA), die es jedem Hersteller ermöglicht, einen Prozessor herzustellen, der den gleichen Code ausführt. Mit diesem Open-Source-Befehlssatzkonzept entfällt die Notwendigkeit, für jede Prozessorarchitektur ein eigenes Entwicklungs-Ökosystem zu erlernen und zu schaffen. Neben dedizierten Prozessoren können die RISC-V-Cores auch in ASICs und FPGAs eingesetzt werden, um eine noch höhere Integration zu erreichen.
Der Schlüssel besteht darin, dass die Verwendung von Open-Source-RISC-V-Befehlen vielschichtig und erweiterbar ist. Das bedeutet, dass die Verwendung des Open-Source-Standard-Befehlssatzes immer noch die Entwicklung von ASIPs (Application Specific Instruction Set Processor) ermöglicht, indem die Entwickler Befehle hinzufügen können, die tief eingebettete Funktionen effizienter ausführen. Dies kann in Form von Erweiterungen der Chiphersteller geschehen, die sich von anderen abheben, oder in Form von ASIC/FPGA-Hardware, die von Designingenieuren überall entwickelt wurde. EDA-Anbieter können Erweiterungen z. B. durch Verilog oder VHDL unterstützen.
Warum ist der Zeitpunkt dafür so wichtig? Die Prozessoren mit Advanced RISC Machine (ARM)-Architektur sind heute die dominierende RISC-Kraft auf dem Markt, aber es ist nicht ungewöhnlich, dass Unternehmen Lizenzgebühren in sechsstelliger Höhe im Voraus und sehr teure Nutzungsgebühren zahlen müssen.
Um die langfristige Nachhaltigkeit von Spitzentechnologien, insbesondere für militärische und sicherheitstechnische Zwecke, zu gewährleisten, spielen viele Faktoren eine Rolle. Die quelloffene RISC-V-Architektur ist gut positioniert, um die Anforderungen aller zu erfüllen.
Auf internationalen Druck hin wurde das quelloffene RISC-V zu einem internationalen Standard, der im März offiziell in RISC-V International umbenannt wurde und seinen Hauptsitz nun in der Schweiz, und nicht mehr in den USA hat. Die RISC-V-Stiftung (riscv.org) pflegt den Standard.
Architektur-Spezifikationen
RISC-V verwendet eine standardmäßige 5-stufige Pipeline und ermöglicht die Ausführung von bis zu zwei Befehlen pro Taktzyklus. Es wird eine standardmäßige Last-/Speicherarchitektur implementiert, die ALU- und Speicheroperationen voneinander trennt. Ein Basisregister, das als Base Integer ISA definiert ist, addiert den Wert des Offsetregisters und arbeitet mit dem Quell- oder Zielregister zusammen, um einen vollständigen Zugriff auf den externen Speicher zu ermöglichen. I/O können in diesem Bereich für flexible programmierte I/O und Blockoperationen abgebildet werden. Darüber hinaus hilft eine Load-Reserved/Store-Conditional-Anweisung (LR/SC) bei der Aktualisierung bzw. Ausgabe in Abhängigkeit von bedingten Kriterien.
Base-Integer-Befehle sind durch Ganzzahlregisterbreiten und die Größe des Benutzerentwurfsraums gekennzeichnet. Die RV32I- und RV64I-Befehlsvarianten unterstützen 32- und 64-Bit-Adressräume auf Benutzerebene; ein zukünftiger RV128I wird in der Lage sein, eine flache 128-Bit-Adressierungskapazität zu unterstützen. Die Anweisung soll eine native Hardware-Implementierung ohne eine „übertriebene Architektur“ ermöglichen, damit sie gut für die Implementierung als ASIC oder FPGA geeignet ist.
Die Befehlsvarianten umfassen sowohl 32- als auch 64-Bit-Adressierungsmöglichkeiten, und es werden ISA-Erweiterungen auf Benutzerebene und spezielle Varianten unterstützt. Die Little-Endian-Konfiguration wird wie bei den x86-Architekturen verwendet. So müssen beispielsweise Speicheradressen, auf die zugegriffen wird, nicht an ihrer Wortbreite von 16, 32, 64 oder 128 Bit ausgerichtet werden. Darüber hinaus wird durch eine „Fence“-Anweisung sichergestellt, dass die Ergebnisse vorangehender Anweisungen für andere Threads oder I/O-Geräte sichtbar sind. Dadurch werden Lese- und Schreibvorgänge im Speicher getrennt, ohne die I/O zu beeinträchtigen, und Wartezeiten werden vermieden.
Was hilft, sind die Anweisungen zum sofortigen Laden des oberen Speicherbereichs, die es ermöglichen, die oberen 20 Bits des 32-Bit-Adressregisters mit sofortigen Datenwerten zu laden, die in die Einzelzyklusanweisung eingefügt werden. Darüber hinaus ermöglicht ein weiterer Befehl zur Manipulation der Speicheradresse die Einstellung der unteren 12 Bits. Dies hilft bei der Erstellung von positionsunabhängigem Code und ermöglicht es Programmen, 32-Bit-Adressen relativ zum Programmzählerregister zu generieren. Und obwohl ein adressierter 128-Bit-Speicher heute unvorstellbar erscheint, gibt es diese Möglichkeit.
Im 32-Integer-Registersatz sind Stack-, Global- und Thread-Pointer enthalten. Weitere 32 Gleitkommaregister stehen für Argumente, Parameter und Ergebnisse zur Verfügung. Das Register x0 gibt beim Lesen immer eine „0“ zurück und ist in allen Implementierungen gleich. Es ist wichtig zu wissen, dass RISC-V eine 16-Bit-Variante für embedded Applikationen und eine 32-Bit-Variante für Ganzzahl- und Gleitkommaregistersätze bietet.
RISC-V erlaubt Befehle mit einer Länge von 16, 32, 48, 64 und 80+x Bits. Anweisungen mit variabler Länge werden unterstützt, und die vorliegende Spezifikation enthält eine reservierte Kodierung für Anweisungen mit einer Länge von mehr als 192 Bit. Ausnahmen, Traps und Interrupts werden vollständig unterstützt.
Erwartungsgemäß werden für arithmetische Operationen Erweiterungen verwendet, um Fest-, Gleitkomma- und Ganzzahlwerte, Präzisionswerte, hohe Rückgabewerte, niedrige Rückgabewerte und Operationstypen anzugeben (Tabelle A).
Tabelle A: Vereinfachte Erweiterungen für Multiplizieren und Dividieren (Quelle: Autor)
Variationen und Vektorverarbeitung unterstützen eine Reihe von datenparallelen Beschleunigern, was ein ausdrückliches Ziel der RISC-V-Architektur ist. Ein entspanntes Speichermodell wird es zukünftigen Erweiterungen erleichtern, mit datenparallelen Coprozessor- oder Beschleunigerfunktionen zu arbeiten. Ein benutzerdefinierter Beschleuniger kann zum Beispiel so konzipiert sein, dass er Kernel aus wichtigen Applikationsbereichen ausführt. Hier können Sie alle Operationen außer den Basis-Ganzzahloperationen eliminieren und nur die Erweiterungen verwenden, die die jeweilige Aufgabe effizienter machen.
Dies kann für die KI-Beschleunigung und das maschinelle Lernen nützlich sein. Zur Steigerung der TeraFLOPS/Watt-Leistung werden derzeit bereichsspezifische Erweiterungen (Domain-Specific Extensions, DSEs), Tensor-Anweisungen und Vektor-ISA eingesetzt. Benutzerdefinierte Hardware-Beschleuniger werden softwarebasierte berechnete Lösungen stets übertreffen. Diese benutzerdefinierten Beschleuniger können in die Datenpipeline eingebunden werden und Grafik-, Multimedia-, DSP-, Echtzeit-Motorsteuerung und andere spezifische Architekturanforderungen beschleunigen.
Kürzlich wurden die Vektorerweiterungen ratifiziert, die sieben unprivilegierte CSRs zu 32-Bit-Vektorregistern hinzufügen. Es ist wichtig, das Vektorkontext-Statusfeld mstatus vs. richtig zu setzen, da sonst der Versuch, einen Vektorbefehl auszuführen oder darauf zuzugreifen, eine Ausnahme für unerlaubte Befehle auslösen kann.
Während Beschleuniger für hardware- und rechenintensive Aufgaben geeignet sind, sind Hypervisor-Befehle praktisch, wenn virtuelle Maschinen als Gäste oder Prozesse implementiert werden. Die intern embedded Methoden können intensive oder Housekeeping-Funktionen übernehmen und sind Teil des Prozessorcodes oder werden auf andere Cores im System ausgelagert. Unter Verwendung der H-Erweiterungen sind Hypervisor-Befehle Teil der privilegierten Befehlssätze, die es einem im Maschinenmodus laufenden Prozessor ermöglichen, mehrere Benutzer, Prozesse und Überwacher zu haben. Bei einer orthogonalen Implementierung ermöglichen Konfigurationsbits dem Überwachungscode den Zugriff auf Hypervisor-Register oder die Generierung von Interrupts bei Zugriff.
Kryptografie und maschinelle Lernfunktionen nutzen die Vorteile von Vektorerweiterungen, die eine Grundlage für weitere Vektorerweiterungen in bestimmten Bereichen bilden. Die RISC-V-Architektur kann die kryptografische Arbeitslast durch Unterstützung von 32-Bit- und 64-Bit-Datenpfaden beschleunigen. Dies hilft bei der Implementierung von NIST AES-Entschlüsselung und NIST AED-Entschlüsselung sowie von Blockchiffren, Hash-Funktionen, Entropiequellenerweiterungen, Crossbar-Permutationen und mehr.
Eine wichtige neue Entwicklung ist die Verfügbarkeit von Trusted Execution Environment (TEE) Unterstützung für das SiFive Freedom SDK Entwicklungssystem. Die HexFive Security Multizone-Zusätze zu RISC-V unterstützen eine Hardware-Policy, die auf erzwungener Trennung für eine „unbegrenzte“ Anzahl von Sicherheitszonen basiert. Dadurch können Firmware-Entwickler die volle Kontrolle über die Daten übernehmen. Die Sperrung von Code, Peripheriegeräten und Interrupts wäre ein Versuch, die Sicherheit zu verletzen.
Explizite Definitionen für Hardware-Threads sind Teil der privilegierten Anweisungen, die es ermöglichen, einen festgefahrenen Thread oder einen Thread, der nicht bereit ist, fortzufahren (z. B. beim Warten auf Eingaben oder mitten in einer Berechnung), wiederherzustellen. Hardware-Threads können auch effizientere Interrupts implementieren, da Speicher- und Wiederherstellungsoperationen für schnelle und Echtzeit-Dienstroutinen nicht implementiert werden müssen. Der ISA von RISC-V unterstützt fünf Modi für Hypervisor-Operationen. Diese sind Maschine, Supervisor, Benutzer, Supervisor-unter-Hypervisor und Benutzer-unter-Hypervisor. Dies lässt eine große Flexibilität für mehrere unabhängige Prozesse zu, ohne sich gegenseitig zu behindern.
Beispiele aus der Praxis
Um besser zu verstehen, was RISC V ist und wie man die Technologie im Zuge des Fortschritts nutzen kann, lassen Sie uns einen branchenführenden RISC-V-Entwickler als Ausgangsbeispiel nehmen. SiFive bietet ein Portfolio von RISC-V-Prozessor-Cores für domänenspezifische Systeme auf einem Chip (SoCs). Dies reicht von stromsparenden embedded Mikrocontroller-ähnlichen Cores bis hin zu Multi-Core-Applikationsprozessoren. Darüber hinaus können die konfigurierbaren Cores auf spezifische Anforderungen abgestimmt werden, einschließlich HyperX-Architekturen, Pipeline-Architekturen, Vektorarchitekturen und Parallelverarbeitungsarchitekturen.
Ein wesentlicher Vorteil von SiFive ist sein Online-Mikroarchitektur-Generator, der detaillierte Architekturkonfigurationen und -erweiterungen bietet (Abbildung 1). Entwickler können Single-Core-Designs oder bis zu 8 oder mehr Cores mit einzelnen oder mehreren Gleitkommaprozessoren, Bitmanipulationsbefehlen, flexiblen Interrupt-Handlern, prädiktiven Verzweigungen und mehr spezifizieren. Die Architekturen sind mit Design-for-Test-Hooks sowie Debug- und Trace-Funktionen mit J-TAG ausgestattet.
Abbildung 1: Die Möglichkeit, mehrere Cores in einem einheitlichen oder monolithischen Design zu mischen und aufeinander abzustimmen, erlaubt es dem Ingenieur, ein Design speziell auf seine Bedürfnisse zuzuschneiden und gleichzeitig die Möglichkeit zu erhalten, Abschnitte aufzurüsten oder zu verbessern, ohne ein komplettes Redesign vorzunehmen. (Quelle: SiFive)
Peripherieanschlüsse können 32 Bit breit sein, und Speicheranschlüsse für Code und Daten können 64 Bit breit sein, was weniger Zugriffe und höhere Geschwindigkeiten bedeutet. Speicherblöcke können nur einem Core zugeordnet sein oder für den gemeinsamen Zugriff zwischen Cores verwendet werden. Ein wesentlicher Vorteil des SiFive-Ansatzes besteht darin, dass er einen Mix-and-Match-Prozess für intensive und periphere Funktionen heterogen und/oder monolithisch ermöglicht (Abbildung 2). Rechenintensive Aufgaben können parallel zu Daten-I/O-, Lade- und Speicher- sowie Kommunikationsoperationen mit Atomic Access auf gemeinsamen Speicher und Peripheriegeräte ausgeführt werden.
Abbildung 2: Ein flexibles Online-Core-Entwicklungstool ermöglicht es, spezifische Anforderungen für jeden Core zu erfassen und zu kategorisieren, einschließlich Multi-Core-Architekturen, Peripheriearchitekturen, Busbreiten und gemeinsam genutzte Ressourcen. Eine Build-Funktion erstellt den benutzerdefinierten Core, und Simulationsmodelle werden für die Funktionsprüfung verwendet. (Quelle: Bedford Falls)
Ein weiterer entscheidender Vorteil, den SiFive bietet, ist die verbesserte Sicherheit. Mit der WorldGuard-Technik kann die feinkörnig abgestufte Sicherheit Code zur Ausführung und Daten isolieren. Dazu gehören mehrere Berechtigungsebenen mit einer unbegrenzten Anzahl von benutzerdefinierten Welten. Darüber hinaus isolieren World-ID-Marker die Prozesse voneinander, um eine geschützte und isolierte Ausführung zu gewährleisten.
Zum Schutz kritischer Informationen ist eine Shield-Architektur enthalten, die einen NIST SP-800-90A/B/C-konformen echten Zufallszahlengenerator für kryptografische und entropiebasierte Sicherheitsfunktionen enthält. Darüber hinaus ist eine AES-Kryptographie-Engine gegen verschiedene Arten von Angriffen geschützt, und eine sichere Krypto-Hash-Engine unterstützt die Standards SHA-2 und SHA-3 sowie die Verschlüsselung mit öffentlichen Schlüsseln.
Ab sofort ist der neuere HiFive FE310-G002 von Crown Supply als Chip oder auf einer Entwicklungsplattform als 32-Bit RISC-V SoC und Development Board erhältlich. Das 3,3 V Development Board verfügt über einen 32-Bit breiten Datenbus und integrierte Wireless-Technologie für Netzwerk- und IoT-Anwendungen, die eine hohe Verarbeitungsleistung erfordern.
Die Entwicklung der RISC-V-basierten Produkte als Core bietet die höchstmögliche Integration und Leistung, da fast alle Funktionen und Datenübertragungen monolithisch erfolgen können.
Während die Verwendung eines Hardcore-Prozessors einen vollständig charakterisierten und fehlerbereinigten Ausgangspunkt für den Prozessor darstellen sollte, ermöglichen Softcores die monolithische Integration von Benutzerfunktionen.
Fazit
Die Möglichkeit, die Architektur Ihrer Mikrocontroller und Mikroprozessoren mit kostenlos lizenziertem IP anzupassen, ermöglicht die Standardisierung von Produktlinien jetzt und in der Zukunft. Darüber hinaus bedeutet Open Source, dass nach Abschluss der anfänglichen Lernkurve ein großer Pool qualifizierter und erfahrener Designer genutzt werden kann, um die Produktarchitektur von nun an weiterzuentwickeln.
Durch minimale und schrittweise Designverbesserungen wird das alte Design nicht plötzlich überflüssig, sondern kann durch clevere Implementierungen von Hard- und Software in Zukunft wiederverwendet werden. So können sich die Designer ausschließlich auf die neuen und fortschrittlichen Aspekte des neuen Designs konzentrieren und erhalten eine stabile Grundlage für die in Zukunft verfügbaren Designelemente, Bibliotheken, Funktionen und Blöcke. Es handelt sich also um eine „Low-RISC“-Lösung.