Entschlüsselung der RISC-V-Namenskonvention

Entschlüsselung der RISC-V-Namenskonvention

image

Von: Richard A. Quinnell
2021-09-16

Stichworte
Entwicklung
Eingebettete Systeme
Evaluierungs-/Entwicklungstool
Halbleiter & Entwicklungstools

Die RISC-V-Befehlssatzarchitektur (Instruction Set Architecture, ISA) bietet eine einzigartige Gelegenheit. Ihr Aufbau ermöglicht es Entwicklern, Prozessoren mit einer großen Bandbreite an Größen und Leistungen zu verwenden, die eine beispiellose Softwarekompatibilität bieten. Der Schlüssel zur Nutzung dieser Kompatibilität ist das Verständnis der Namenskonvention für RISC-V-Kerne.

Im Gegensatz zu den meisten Prozessorarchitekturen ist RISC-V quelloffen, d.h. für Entwickler ohne Lizenz- oder Nutzungsgebühren verfügbar. Darüber hinaus ist die ISA so konzipiert, daß sie flexibel ist und es Entwicklern ermöglicht, die Befehlsblöcke auszuwählen, die sie implementieren möchten, und nicht benötigte Befehle wegzulassen und bei Bedarf sogar eigene Befehle hinzuzufügen. Damit soll die Entwicklung mehrerer Prozessorkerne mit unterschiedlichen Größen und Leistungs-Merkmalen, aber gemeinsamer Basis gefördert werden.

Diese gemeinsame Basis sorgt für ein hohes Maß an Softwarekompatibilität zwischen den Prozessoren, unabhängig von ihrem Funktionsumfang. Der Code für einen RISC-V-Prozessor mit minimalem Funktionsumfang, der nur den Integer-Befehlssatz implementiert, läuft beispielsweise unverändert auf einem leistungsfähigeren Prozessor, der sowohl Integer- als auch Gleitkomma-funktionen besitzt. Code, der die Fließkomma-Befehle verwendet, läuft natürlich nicht auf dem reinen Integer-Prozessor, wird aber auch nicht zum Absturz des Prozessors führen. Nicht implementierte Befehle erzeugt einfach einen Trap für unzulässige Befehle.

Die RISC-V-ISA erreicht diese Flexibilität durch die Aufteilung ihrer Befehle in im Wesentlichen unabhängige Gruppen mit Maschinencodes, die sich nicht überschneiden. Diese Befehlsgruppen werden als „Standarderweiterungen“ bezeichnet, und die ISA hat zahlreiche solcher Standard-Erweiterungen definiert, die die meisten der von Entwicklern benötigten Funktionen bieten. Jede Standarderweiterung ist durch einen Buchstabencode gekennzeichnet. Die „M“-Standarderweiterung bietet beispielsweise Anweisungen zum Multiplizieren oder Dividieren von zwei in Registern gespeicherten Ganzzahlen. In ähnlicher Weise bietet die „F“-Standarderweiterung Anweisungen für Gleitkommaoperationen mit einfacher Genauigkeit.

Da die Entwickler von Prozessoren bei der Implementierung eines RISC-V-Kerns Standard-Erweiterungen mischen und anpassen können, sollte man meinen, daß die Benutzer die technischen Datenblätter und Programmierhandbücher sorgfältig lesen müssen, um festzustellen, was der Prozessor, für den sie nutzen wollen, tatsächlich kann. Aber es gibt eine einfachere Lösung. RISC-V verwendet eine Kernnummerierungskonvention, die dem Benutzer sofort die Fähigkeiten des Kerns anzeigt.

Die Nummerierungskonvention beginnt mit der Basisangabe. Für RISC-V gibt es vier definierte Basisangaben:

  • RV32I nutzt einen 32-bit-Integer-Befehlssatz und bietet 32 Allzweckregister.
  • RV32E verwendet einen 32-bit-Befehlssatz für Eingebettete Anwendungen mit 16 Registern.
  • RV64I greift auf einen 64-bit-Integer-Befehlssatz mit 32 Registern zurück.
  • RV128I basiert auf einem 128-bit-Integer-Befehlssatz mit 32 Registern.

Diese Basisangaben definieren einen voll funktionsfähigen, wenn auch einfachen Prozessor. Die meisten Entwickler werden sich jedoch dafür entscheiden, eine oder mehrere Standard-Befehlssatzerweiterungen in ihr Design aufzunehmen. Diese Standarderweiterungen und ihre Kennbuchstaben sind in Abbildung 1 aufgeführt.

Abbildung 1: Die Standard-Befehlssatzerweiterungen für RISC-V-Prozessoren verwenden Buchstabencodes, um ihr Vorhandensein in der Nummerierungskonvention eines Kerns zu kennzeichnen. (Bildquelle: Digi-Key Electronics)

Eine vollständige RISC-V-Kernbezeichnung enthält die Basisangabe, an die die Buchstaben der implementierten Standarderweiterungen angehängt sind, in der in Abbildung 1 aufgeführten Reihenfolge. Ein kleines SoC, das nur minimale Ressourcen benötigt, könnte also die Bezeichnung RV32EMAB tragen. Das bedeutet, daß der Kern den 32-Bit-Integer-Befehlssatz für Eingebettete Geräte implementiert, über 16 Register verfügt und Integer-Multiplikation und -Division sowie Atomare Befehle ausführt. Er verfügt nicht über Fließkommamathematik, unterstützt aber Bitmanipulation.

Ein guter Ausgangspunkt für diese Experimente ist der Guide to RISC-V, der die anfängliche Einrichtung und Verwendung verschiedener RISC-V-Evaluierungsboards erläutert.