RISC-V

Logo
Prototyp eines RISC-V Mikroprozessors aus dem Jahr 2013

RISC-V, offizielle Aussprache in Englisch: „risc-five[1] [rɪsk faɪv], ist eine Befehlssatzarchitektur (engl. instruction set architecture, ISA), die sich auf das Designprinzip des Reduced Instruction Set Computers (RISC) stützt. Es ist ein offener Standard, welcher der freien BSD-Lizenz unterliegt. Das bedeutet, dass RISC-V nicht patentiert ist und frei verwendet werden darf. Somit ist es jedem erlaubt, RISC-V Mikroprozessoren zu entwerfen, herzustellen, weiterzuentwickeln und zu verkaufen (Open-Source-Hardware).[2] Zahlreiche Unternehmen bieten RISC-V-Hardware an oder haben diese angekündigt.

Der RISC-V Befehlssatz wurde für eine Vielzahl von Anwendungsfällen entworfen. Er hat eine variable Datenwortbreite und ist erweiterbar, so dass mehr Kodierungsbits jederzeit hinzugefügt werden können. Er unterstützt drei Datenwortbreiten: 32, 64 und 128 Bit und eine Auswahl an Unterbefehlssätzen. Die Definitionen jedes Unterbefehlssatzes variieren geringfügig zwischen den drei Wortbreiten. Die Unterbefehlssätze unterstützen kompakte eingebettete Systeme, persönliche Rechner, Hochleistungsrechner mit Vektorprozessoren und Parallelrechner.

Der Befehlssatzraum für den auf 128 Bit gedehnten Befehlssatz wurde reserviert, weil 60 Jahre Industrieerfahrung gezeigt haben, dass die meisten nicht wieder gut zu machenden Fehler in der Gestaltung von Befehlssätzen durch fehlenden Speicheradressraum verursacht wurden. Noch im Jahr 2016 blieb der 128-Bit-Teil des Befehlssatzes absichtlich undefiniert, da bisher wenig Erfahrung mit solch großen Speichersystemen besteht. Es gibt Vorschläge, Instruktionen mit einer variablen Breite bis zu 864 Bit zu implementieren.[3]

Das Projekt begann 2010 an der University of California, Berkeley unter der Leitung von Krste Asanovic und David A. Patterson und wird bereits von Hard- und Softwareentwicklern weltweit mitentwickelt und gefördert.[4] Anders als andere akademische Entwürfe, die üblicherweise auf einfache Erläuterung optimiert sind, wurde der RISC-V-Befehlssatz für die praktische Anwendung in Rechnern entworfen. Er besitzt Eigenschaften, die die Rechnergeschwindigkeit erhöhen, aber trotzdem die Kosten und den Energieverbrauch senken. Dies schließt eine Load/Store-Architektur ein, sowie Bit-Muster, um die Multiplexer in einer CPU zu vereinfachen, vereinfachte Standard-basierte Gleitkommazahlen, einen architekturneutralen Entwurf und das Setzen des höchstwertigen Bits an eine festgelegte Position, um die Vorzeichenerweiterung zu beschleunigen. Vorzeichenerweiterung wird häufig als kritisch eingestuft. Im Jahre 2019 wurde die Version 2.2 des Userspace-ISA[5] und im Jahre 2021 die Version 1.12 des privilegierten ISA[6] festgelegt und ermöglichen es Software- und Hardwareherstellern, diesen zu nutzen oder zu implementieren. Eine Fehlersuch-Spezifikation ist in der Spezifikation der privilegierten ISA enthalten.

Architektur

Der RISC-V-Befehlssatz steht in der Tradition der RISC-Prozessoren, die sich auf möglichst wenige, einfach zu dekodierende Maschinenbefehle konzentrieren. Dementsprechend hat der einfachste RISC-V-Befehlssatz (RV32I) nur 40 Befehle.

RISC-V hat in allen Varianten eine Wortgröße von 32 bit. Demnach sind alle regulären standardisierten Befehle 32 bit groß, und die kleinstmögliche Registergröße ist 32 bit. Für einige Befehle gibt es in der C-Erweiterung (siehe unten) alternative Kodierungen, die nur 16 bit (Halbwort) groß sind, allerdings dasselbe Verhalten aufweisen wie der entsprechende 32-bit-Befehl. Die Größe eines Maschinenbefehls kann an den untersten Bit des Befehls abgelesen werden, und Maschinenbefehle mit 64 und 128 bit Größe sind hier bereits vorgesehen. Ist die C-Erweiterung nicht implementiert, müssen Befehle an 4-Byte-Grenzen ausgerichtet sein, andernfalls können es auch 2-Byte-Grenzen sein (selbst für 32-bit-Befehle).

RISC-V ist eine Little-Endian-Architektur. Befehle werden immer in Little-Endian-Reihenfolge gelesen; daher auch die Kodierung der Befehlsgröße in den untersten Befehlsbits, die sich immer im ersten gelesenen Byte befinden. Falls die Implementierung dies unterstützt, kann nur für Datenzugriffe im Hauptspeicher auf Big-Endian umgeschaltet werden.

Architekturen und Erweiterungen

RISC-V ist nicht eine einzige Architektur, sondern eine ganze Familie an Architekturen, die modular aufeinander aufbauen. So gibt es die drei Grundarchitekturen namens RV32I, RV64I und RV128I, die entsprechend der Zahl im Namen eine Register- und Speicherbreite von 32, 64 bzw. 128 bit besitzen. Auch wenn streng genommen RV64I keine einfache Erweiterung von RV32I ist, werden alle existierenden Befehle mit neuer Bedeutung übernommen; der ADD-Befehl addiert beispielsweise nun statt zweier 32-bit Zahlen zwei 64-bit Zahlen. Die Grundarchitekturen enthalten entsprechend des „I“ im Namen nur Integer-Befehle, d. h. Befehle, die mit Ganzzahlen rechnen. Dazu kommen andere, fast immer benötigte Befehle wie bedingte und unbedingte Sprungbefehle, Speicherzugriffsbefehle und Software-Interrupt-Befehle. Alle weiteren Funktionalitäten sind in standardisierte Befehlssatzerweiterungen zusammengefasst, die jeweils eine 32-bit, 64-bit und 128-bit-Version besitzen. Wichtige Erweiterungen und ihre Namen sind:

  • M für Ganzzahl-Multiplikation und -Division
  • A für atomare Speicheroperationen in Multiprozessorsystemen
  • F, D und Q für Gleitkommaoperationen nach IEEE 754: binary32, binary64 bzw. binary128
  • Zicsr für Control and Status Registers (CSRs) (siehe unten)
  • C für komprimierte Befehle, das sind 16-bit-Kodierungen häufig verwendeter Befehle, die somit den Speicherverbrauch reduzieren.

Es ist explizit vorgesehen, dass proprietäre bzw. Drittanbieter-Erweiterungen für RISC-V verfasst werden, die einen mit X beginnenden Namen führen. Beispiele dafür sind XTheadBb, XTheadSync oder XVentanaCondOps.[7]

Verfügt eine RISC-V-Implementierung nun über eine bestimmte Sammlung an Erweiterungen, so kann diese entsprechend der Kurznamen kompakt bezeichnet werden, beispielsweise RV64IMCZicsr für einen Prozessor, der über die 64-bit-Basisarchitektur mit Ganzzahlmultiplikationen, komprimierten Befehlen und CSR-Unterstützung verfügt. Manche Erweiterungen hängen wiederum von anderen ab; so ist die Unterstützung von 64-bit-Gleitkommazahlen (D) nur gleichzeitig mit CSRs (Zicsr) und 32-bit-Gleitkommazahlen (F) möglich. Für eine CPU, die ein Endbenutzer-Betriebssystem ausführen kann, werden eine ganze Reihe an Erweiterungen benötigt, die unter der Pseudo-Erweiterung G (general purpose) zusammengefasst werden. RV64G bedeutet demnach eigentlich RV64IMAFDCZicsr_Zifencei, also die Basisarchitektur inklusive sieben Erweiterungen.

Basisarchitektur

RISC-V besitzt 32 Register, die ganze Zahlen enthalten. Die Basisarchitektur bestimmt deren Größe; so hat RV32 eben 32-bit Register und RV64 64-bit Register. Die Register werden mit den Architekturnamen x0 bis x31 bezeichnet. Dabei ist x0 ein besonderes Register, da es beim Lesen immer 0 enthält und alle Schreibvorgänge auf x0 ignoriert werden. Dies wird genutzt, um verschiedene Funktionen ohne zusätzliche Befehle möglich zu machen:

# Subtrahiert x6 von x0, d.h. negiert x6
sub x5, x0, x6
# Prüft, ob x0 kleiner als x13 ist, d.h. ob x13 größer als 0 ist
slt x2, x0, x13
# Speichert die Addition von 0 und x0 in x0; kanonisches NOP
addi x0, x0, 0

Viele dieser Funktionen sind in diversen Assembler-Pseudobefehlen verfügbar; für die drei Befehle oben wären es neg, sgtz bzw. nop. Rechenbefehle verfügen immer über drei Operanden: ein Quellregister rs1, ein zweites Quellregister rs2, und ein Zielregister rd. Anders als bei anderen Architekturen ist das erste Quellregister nicht automatisch auch das Zielregister, wobei es natürlich möglich ist, dasselbe Register für Quelle und Ziel anzugeben. Befehle mit konstanten Operanden, sogenannte Immediate-Befehle, ersetzen rs2 durch eine Konstante, die im Befehl selbst enthalten ist. Einige Beispiele für Rechenbefehle:

# Addiert x0 (0) und 42 und speichert das Ergebnis in x7
# d.h. lädt die Konstante 42 in x7
addi x7, x0, 42
# Konstante 10 wird in x6 gespeichert
addi x6, x0, 10
# Subtrahiert x7 von x6 und speichert das Ergebnis in x5
sub x5, x6, x7
# Exklusives Oder mit Immediate
xori x4, x5, 0x1111
# Arithmetische Bitverschiebung nach rechts
sra x8, x4, x5
# Multipliziert x5 mit x4 und speichert das Ergebnis in x10
mul x10, x5, x4

Konstanten, LUI und AUIPC

Gewöhnliche Immediate-Befehle können aufgrund der Befehlskodierung ausschließlich 12-bit-Konstanten enthalten. Je nachdem, ob die Konstante vorzeichenlos oder vorzeichenbehaftet ist, bedeutet dies einen Wertebereich von 0 bis 4096 bzw. -2048 bis 2047. Um auch größere Konstanten kodieren zu können, gibt es den Befehle Load Upper Immediate (lui). lui lädt eine 32-bit-Konstante, deren obere 20 bit dem Immediate entstammen und deren untere 12 bit auf 0 gesetzt werden. Mittels einer darauffolgenden Addition kann so in zwei Befehlen jede 32-Bit-Zahl geladen werden:

# Die Zahl 123456 (0x1E240) soll in x20 geladen werden.

# Achtung: Für Assembler muss die LUI-Konstante ohne 12-Bit-Shift geschrieben werden.
# konzeptionell:
lui x20, 0x1E000
# im Assembler:
lui x20, 0x1E

# Untere 12 bit
addi x20, x20, 0x240

# Assembler-Pseudobefehl:
li x20, 0x1E240

Der Befehl Add Upper Immediate to Program Counter (auipc) addiert einen solchen 20-Bit-Immediate stattdessen zum aktuellen Programmzähler (Program Counter), womit effizient Speicheradressen in der Nähe des Programmcodes abgerufen werden können und der Code positionsunabhängig wird.

Speicherzugriffe

RISC-V hat als Load/Store-Architektur keine Befehle, die direkt auf Daten im Speicher Rechenoperationen durchführen können. Eine Ausnahme hiervon bilden die atomaren Befehle aus der A-Erweiterung, die solche Funktionalität zur Prozessorsynchronisierung benötigen (amoadd, amoor, amoswap, etc.). Für reguläre Speicherzugriffe ist nur ein einfaches Laden oder Speichern vom/zum Hauptspeicher möglich, und der Addressierungsmodus ist immer Register+Konstante. Beispielsweise kann das Register die Startadresse einer Struktur enthalten und die Konstante den Offset eines Felds in der Struktur.

# Lade Byte von Adresse 0x40
lb x11, 0x40(x0)
# Lade erstes Wort auf dem Stack (x2 ist der Stack Pointer)
lw x12, 4(x2)
# Lade Halbwort (16 bit) ohne Vorzeichenerweiterung
lhu x13, 2(x2)

# Speichere Doppelwort (nur RV64 und RV128)
sd x13, 8(x2)
# Speichere Wort ohne Vorzeichenerweiterung (nur RV64 und RV128)
swu x12, 0(x2)

Speicherzugriffe müssen ausgerichtet sein, z. B. Wortzugriffe auf Vielfache von 4 Byte und Doppelwortzugriffe auf 8 Byte. Eine Implementierung kann auch unausgerichtete Speicherzugriffe unterstützen, dies ist jedoch in der Regel nicht der Fall und wird eventuell in der Firmware emuliert (fast trap and emulate).

Kontrollfluss

RISC-V besitzt anders als die meisten heutzutage verbreiteten Architekturen kein Statusregister und keine Flags. Kontrollflussentscheidungen werden immer auf der Basis eines konkreten Vergleichs durchgeführt, zum Beispiel:

# Springe falls x4 < x5 (ganze Zahlen)
blt x4, x5, label1
# Springe falls x7 >= x9 (natürliche Zahlen)
bgeu x7, x9, label2
# Springe falls x1 = 0 (Pseudobefehl beqz)
beq x1, x0, label3

Das Sprungziel wird im Maschinenbefehl als Offset vom aktuellen Befehl angegeben und kann bis zu ±4KiB betragen. Für bedingungslose Sprünge, Prozeduraufruf und Rückkehr aus einer Prozedur dienen Jump And Link (jal) und Jump And Link Register (jalr). jal verwendet ein Offset wie die bedingten Branch-Befehle, wobei dank 20-bit-Offset jetzt Sprünge ±1MiB möglich sind. jalr benutzt ein kleineres Offset addiert zu einem Register und kann somit auf den gesamten Speicherbereich springen. Beide Befehle speichern die Adresse des folgenden Befehls im Zielregister, was später einen Rücksprung ermöglicht.

# Sprung ohne Speichern der Rücksprungadresse (Pseudobefehl j)
jal x0, label1
# Rücksprungadresse wird im Return-Address-Register x1 gespeichert (Pseudobefehl call)
jal x1, my_procedure
# Sprung zur Return-Adresse aus x1 (Pseudobefehl ret)
jalr x0, x1, 0

Gleitkommazahlen

RISC-V unterstützt mit den F-, D-, und Q-Erweiterungen Gleitkommazahlen nach dem IEEE 754-2008-Standard. 32 separate Register für Gleitkommazahlen sind verfügbar, f0-f31 genannt, wobei das Register f0 keine Sonderstellung wie x0 einnimmt. Je nach konkreter Erweiterung haben die Register eine Größe von 32, 64 oder 128 bit, und Gleitkommazahlen kleinerer Größe (bspw. 32-bit-Gleitkommazahlen auf einer Implementierung mit D-Unterstützung) werden mittels NaN-Packing „eingebettet“.

Gleitkommaoperationen haben analog zu den Ganzzahloperationen drei Operanden (zwei Quellregister und ein Zielregister). Ein Quadratwurzelbefehl existiert (fsqrt), aber beispielsweise kein Sinus oder Kosinus. Es existieren direkte Speicherzugriffsbefehle, die Gleitkommaregister laden und speichern können. Es können sowohl Ganzzahlen in Gleitkommazahlen umgewandelt werden und zurück (fcvt), als auch die IEEE-754-Darstellung einer Kommazahl direkt aus einem Ganzzahlregister geladen oder in ein solches gespeichert werden (fmv). Mittels der Sign-Injection-Befehle (fsgnj, fsgnjx, fsgnjn), die den Betrag des ersten Quellregisters und das Vorzeichen des zweiten Quellregisters kombinieren, können zusätzlich die Operationen Negation, Betrag und Register-Transfer (fmv) implementiert werden.

In den Basiserweiterungen F, D, und Q sind Fused-Multiply-Add-Befehle enthalten (fmadd, fmsub, fnmadd, fnmsub), die als einzige Standardbefehle überhaupt vier Operanden (drei Quellregister) enthalten. Diese benötigen einen wesentlichen Anteil des 32-bit-Befehlsraums, sorgen aber in mathematischen Operationen und Multimediaanwendungen für einen deutlichen Geschwindigkeitsgewinn[8].

# Ausschnitt aus einer asinh-Implementierung
# Programmkonstante laden
auipc   x12,0xfffbf
fld     f11,-1154(x12)
# Diese Befehle nutzen alle dynamische Rundung
fmadd.d f5,f4,f5,f6
fmadd.d f5,f4,f5,f7
fmadd.d f5,f4,f5,f10
fmadd.d f5,f4,f5,f11
fld     f6,-426(x10)
fmul.d  f4,f4,f5
fmul.d  f4,f3,f4
fmadd.d f2,f3,f2,f4
fmul.d  f2,f2,f6

IEEE-754-Exceptions lösen keine Interrupts aus (was vom Standard auch erlaubt ist). Stattdessen dient das fflags-CSR der Auflistung aller aufgetretenen Gleitkommaausnahmen. Der Rundungsmodus kann in den meisten Befehlen fest angegeben werden oder aber auf dynamisch (dyn, 1112) gesetzt werden. In diesem Fall spezifiziert das frm-CSR, welcher Rundungsmodus genutzt wird.

Control and Status Registers (Zicsr)

Um das Verhalten des Prozessors und verschiedener Befehle zu steuern, verfügt ein RISC-V-Prozessor mit der Zicsr-Erweiterung über bis zu 4096 sogenannter Control and Status Register, d. h. Kontroll- und Statusregister, abgekürzt CSRs. Die CSRs werden mit eigenen Befehlen wie csrrw und csrrci modifiziert, die in der Regel gleichzeitig ein CSR lesen und schreiben, außer es wird x0 als Operand genutzt. Abhängig vom Prozessormodus und der Implementierung sind manche CSRs nur lesbar, oder Schreibzugriffe werden ignoriert. Wichtige CSRs sind beispielsweise:

  • IEEE 754 Exceptions (fflags) und Rundungsmodi (frm)
  • Performance-Counter: Verstrichene Taktzyklen (cycle), Monotoner Zeitzähler beliebiger Auflösung (time), abgearbeitete Befehle (instret) und 29 weitere Zähler mit unspezifizierter Funktion

Der Großteil der CSRs wird für Systemfunktionalitäten benötigt und ist daher in üblichen Benutzeranwendungen nicht verfügbar. Dazu gehören beispielsweise:

  • Interruptsteuerung für S-, H- oder M-Mode (sstatus, sie, stvec, ...)
  • Informationen für den Interrupthandler (sepc/mepc, scause/mcause, stval/mtval, ...)
  • Konfiguration der Physical Memory Protection (PMP) (pmpcfg0-pmpcfg15, pmpaddr0-pmpaddr63)
  • Verfügbare RISC-V-Erweiterungen (misa)

ABI

Die ABI für RISC-V wird, anders als bei vielen Architekturen, gemeinsam mit der ISA spezifiziert und standardisiert.[9] Je nach Basisarchitektur und genauer Prozeduraufrufkonvention, besonders zur Behandlung von Gleitkommaparametern, gibt es verschiedene inkompatible ABIs, die wie die Architekturen mit Kürzeln wie LP64D, ILP32 oder ILP32E bezeichnet werden. Teil der standardisierten ABI ist auch die Spezifikation zur Verwendung des ELF-Binärformats für RISC-V.

Die ABI weist einigen Registern besondere Bedeutungen zu, und teilt die übrigen Register in die Kategorien Saved, Argument und Temporary ein. Jedes Register, ob Ganzzahl- oder Gleitkommaregister, erhält entsprechend einen ABI-Namen, der die Assemblerprogrammierung vereinfacht.

RegisterABI-Name(n)BezeichnungErklärung
x0zeroZeroKonstantes Nullregister.
x1raReturn addressRücksprungadresse; wird in Pseudobefehlen wie ret und call implizit genutzt.
x2spStack pointerStapelzeiger. Einige Erweiterungen wie C besitzen spezialisierte Befehle hierfür.
x3gpGlobal pointerZeiger auf die Liste globaler Programmsymbole.
x4tpThread pointerZeiger auf den TLB des aktuellen Programmthreads, siehe Thread-local storage.
x8fpFrame pointerFramezeiger, zeigt auf die Startadresse des aktuellen Stackframes. Optional; entspricht auch s0.
x5-x7, x28-x31t0-t6Temporary registersRegister für temporäre Daten, die beim Prozeduraufruf nicht erhalten bleiben müssen.
x8-x9, x18-x27s0-s11Callee-saved registersRegister, die von aufgerufenen Prozeduren gesichert werden, falls sie diese benötigen.
x10-x17a0-a7Argument registersRegister für die ersten 8 Prozedurargumente und Rückgabewerte.
f0-f7, f28-f31ft0-ft11Floating-point Temporary registersTemporäre Register für Gleitkommazahlen.
f8-f9, f18-f27fs0-fs11Floating-point Callee-saved registersGesicherte Register für Gleitkommazahlen.
f10-f17fa0-fa7Floating-point Argument registersRegister für die ersten 8 Gleitkomma-Argumente und -Rückgabewerte von Prozeduren.

Prozeduraufruf (Calling Convention)

Bei einem Prozeduraufruf werden nur die gesicherten bzw. unveränderlichen Register wie s0-s11 oder gp erhalten. So viele Argumente wie möglich werden in den Argumentregistern übergeben, weitere Argumente kommen auf den Stack. Rückgabewerte werden genauso wie Argumente übergeben.

Prozeduraufrufe (mit Pseudobefehlen ret und call) interagieren nicht ohne weiteres mit dem Stack, was die manuelle Sicherung der Rücksprungadresse spätestens direkt vor einem weiteren Prozeduraufruf erfordert. In der Praxis werden Register nach aufsteigender Nummer auf dem Stack gesichert, sodass die Rücksprungadresse auf dem Stack ganz unten liegt. Führt eine Prozedur allerdings keinen weiteren Prozeduraufruf auf, so erübrigt sich auch die Sicherung der Rücksprungadresse.

Ein RISC-V-Stack wächst „nach unten“ (Richtung absteigender Adressen) und der Stapelzeiger zeigt immer auf den obersten in Verwendung befindlichen Speicher.

# Beginn der asinh-Prozedur von oben
# Stack um zwei Doppelworte vergrößern...
addi x2, -16
# ... damit zwei Register gesichert werden können.
sd   x1, 8(x2) # Rücksprungadresse (diese Prozedur ruft noch andere Prozeduren auf)
sd   x8, 0(x2) # Frame Pointer des Aufrufers
# Neuen Frame Pointer einrichten (entsprechend der Stackadresse beim Prozedureintritt)
addi x8, x2, 16

# ...

# Ende von asinh
# f10 (=fa0) enthält den Rückgabewert
fdiv.d f10, f0, f1
# Rücksprungadresse und Frame Pointer wiederherstellen
ld     x1, 8(x2)
ld     x8, 0(x2)
# Stack verkleinern und damit wiederherstellen
addi   x2, 16
# Rücksprung (ret)
jalr   x0, x1, 0

Auszeichnungen

  • 2017: The Linley Group's Analyst's Choice Award for Best Technology (für den Befehlssatz)[10]

Implementierungen

RISC-V ist ein offener Standard, welcher eine Befehlssatzarchitektur spezifiziert, aber weder eine Mikroarchitektur noch ein Lizenzmodell vorgibt. Aus diesem Grund wurden sowohl RISC-V Kerne mit kommerzieller Lizenz als auch mit Open-Source-Lizenz entwickelt. Die RISC-V-Stiftung pflegt eine Liste aller RISC-V-CPU- und -SoC-Implementierungen.[11]

Proprietäre RISC-V-Kerne

  • Das Fraunhofer IPMS war die erste Organisation, die einen RISC-V Kern entwickelt hat, der den Anforderungen nach funktionaler Sicherheit gerecht wird. Der IP Core EMSA5 ist ein 32-Bit-Prozessor mit fünfstufiger Pipeline und ist als General Purpose Variante (EMSA5-GP) und als Safety Variante (EMSA5-FS) mit einer ASIL-D ready Zertifizierung nach der ISO 26262:2018 für funktionale Sicherheit erhältlich.[12]
  • Andes Technology Corporation bietet mehrere Familien von RISC-V-Kernen an, mit unterschiedlichen optionalen Erweiterungen, darunter einige mit Multiprozessorfähigkeiten:[13]
    • Die “N(X)”-Familie besteht sowohl aus 32-bit (N) als auch 64-bit (NX) Kernen. Deren Pipeline-Länge variiert dabei von zwei Stufen im N22 bis zu acht Stufen im N45. Der NX27V unterstützt die RISC-V “V”-Erweiterung.[14]
    • Die “D(X)”-Familie besteht aus Kernen mit “P”-Erweiterung für SIMD-Instruktionen und verfügt sowohl über 32-bit (D) als auch 64-bit (DX) Kerne.
    • Die “A(X)”-Familie besteht aus Linux-fähigen Prozessorkernen mit Pipelines von fünf bis acht Stufen. Die Kerne integrieren Gleitkommaeinheiten und MMUs.
  • Codasip war das erste Unternehmen, welches einen RISC-V-konformen, kommerziellen Prozessorkern im Januar 2016 auf den Markt brachte (Codix)[15] und bietet seitdem eine Reihe von Prozessorkernen für eingebettete Systeme sowie betriebssystembasierte Anwendungen an. Codasips Prozessorkerne sind mittels der Entwicklungsumgebung “Codasip Studio” in CodAL[16] entwickelt, einer Architektur-Beschreibungssprache (Architecture Description Language):
    • Die “L”-Familie besteht aus energiesparenden 32-bit-Kernen für eingebettete Systeme mit optionaler Gleitkommaeinheit und entweder drei- oder fünfstufiger Pipeline.
    • Die “H”-Familie besteht aus leistungsfähigen 64-bit-Kernen für eingebettete Systeme mit optionaler Gleitkommaeinheit, ebenfalls mit drei- oder fünfstufiger Pipeline.
    • Die “A”-Familie besteht aus Linux-fähigen 64-bit-Kernen mit optionaler “P”-Erweiterung. Die Prozessorkerne haben eine siebenstufige Pipeline, eine Gleitkommaeinheit und eine MMU. Zusätzlich unterstützen die “MP”-Versionen mit L1- und L2-Caches bis zu vier Kerne pro Cluster.[17]
    • Die “uRISC-V”-Kerne sind einfache Kerne, verfügbar als Teil von Codasip Studio und gedacht für Lehr- und Selbstlernzwecke.[18]
  • SiFive war das erste Unternehmen, welches mit dem FE310 einen RISC-V basierten-SoC auf den Markt brachte.[19] Aktuell bietet SiFive drei Produktfamilien an:
    • Die “E”-Kerne sind 32-bit-Kerne für eingebettete Systeme mit zwei- bis achtstufiger Pipeline. Das fortschrittlichste Produkt dieser Familie ist der vierkernige E76-MC.
    • Die “S”-Kerne sind 64-bit-Kerne für eingebettete Systeme mit zwei- bis achtstufiger Pipeline. Das fortschrittlichste Produkt aus dieser Familie ist der vierkernige S76-MC.
    • Die “U”-Kerne sind Linux-fähige 64-bit-Kerne mit fünf bis zwölf Pipelinestufen. Der U54 und der U74 sind auch in multiprozessorfähigen Versionen verfügbar. Der performanteste Kern dieser Familie ist der dreifach superskalare U84.[20]
    • Der “Intelligence X280” ist ein von der “U”-Familie abgeleiteter, ebenfalls Linux-fähiger Prozessorkern, welcher zusätzlich die “V”-Erweiterung für Vektorberechnungen unterstützt.[21]

Quelloffene RISC-V-Kerne

  • Die University of California, Berkeley hat eine Reihe RISC-V-Kerne unter Verwendung von Chisel, einer Hardware-Beschreibungssprache, entwickelt. Dies sind unter anderem:
    • Der 64-bit-Kern “Rocket”,[22] geeignet für kompakte und energiesparende Anwendungen mit mittleren Performanzanforderungen, z. B. elektronischen Kleingeräten für den persönlichen Bedarf.
    • Der 64-bit-Kern “Berkeley Out of Order Machine” oder “BOOM”, ein synthetisier- und parametrisierbarer, quelloffener RV64GC-RISC-V-Kern, welcher für Anwendungen im Bereich Personal Computing, aber auch für Rechenzentren und Serverfarmen geeignet ist.
    • Fünf 32-bit “Sodor” CPU-Designs[23] wurden für Bildungszwecke entworfen.
  • PULPino (“Riscy” und “Zero-Riscy”) der ETH Zürich / Universität Bologna.[24] Die Prozessorkerne des PULPino-Projekts implementieren einen simplen “RV32IMC”-RISC-V-Befehlssatz für Mikrocontroller (“Zero-Riscy”) oder einen leistungsfähigeren “RV32IMFC”-RISC-V-Befehlssatz mit individuellen DSP-Erweiterungen für eingebettete Signalverarbeitung.
  • CVA6 der OpenHWGroup.[25] Die Prozessorkerne der CVA6-Familie sind quelloffene, in SystemVerilog geschriebene sogenannte Application-Class-Prozessoren. Dies bedeutet, dass sie einen Großteil der privilegierten Spezifikation implementieren und in der Lage sind, übliche Embedded-Betriebssysteme wie Embedded Linux oder FreeRTOS auszuführen. Sie besitzen eine sechsstufige In-Order-Pipeline und unterstützen je nach Konfiguration RV32GC bzw. RV64GC und diverse andere Erweiterungen. Das CVA6-Projekt entstammt dem ARIANE-Prozessor der ETH Zürich / Universität Bologna, die nach den einfacheren PULPino-Prozessoren einen praktisch einsetzbaren Prozessor entwickeln wollten.[26]
  • Western Digital hat seine “SweRV” genannten RISC-V-Kerne durch die “CHIPS Alliance” als quelloffen verfügbar gemacht. Des Weiteren kündigte Western Digital eine Kooperation mit Codasip an, um den kommerziellen Support der Prozessoren zu ermöglichen.[27] Diese Kerne sind für anspruchsvolle eingebettete Anwendungen konzipiert und unterstützen den “RV32IMC”-RISC-V-Befehlssatz. Im Detail sind es:
    • Der “SweRV Core EH1”, welcher zweifach superskalar ist und eine neunstufige Pipeline hat.
    • Der “SweRV Core EH2”,[28] welcher ebenfalls zweifach superskalar ist und eine neunstufige Pipeline hat, aber auch Hardwareunterstützung für zwei parallele Threads bietet.
    • Der “SweRV Core EL2”, als einfach skalarer Kern mit vierstufiger Pipeline.

Hersteller entsprechender Chips

Siehe auch

Weblinks

Commons: RISC-V – Sammlung von Bildern, Videos und Audiodateien

Einzelnachweise

  1. RISC-V ISA - RISC-V Foundation. In: RISC-V Foundation. (amerikanisches Englisch, riscv.org [abgerufen am 3. Februar 2018]).
  2. FAQ - RISC-V Foundation. In: RISC-V Foundation. (amerikanisches Englisch, riscv.org [abgerufen am 3. Februar 2018]). FAQ - RISC-V Foundation (Memento desOriginals vom 19. Februar 2016 im Internet Archive)  Info: Der Archivlink wurde automatisch eingesetzt und noch nicht geprüft. Bitte prüfe Original- und Archivlink gemäß Anleitung und entferne dann diesen Hinweis.@1@2Vorlage:Webachiv/IABot/riscv.org
  3. Wolf, Clifford: Alternative proposal for instruction length encoding. Archiviert vom Original am 20. Oktober 2019; abgerufen am 20. Oktober 2019.
  4. Contributors - RISC-V Foundation. In: RISC-V Foundation. (riscv.org [abgerufen am 3. Februar 2018]).
  5. Andrew Waterman, Krste Asanović, RISC-V Foundation: The RISC-V Instruction Set Manual, Volume I: User-Level ISA, Document Version 20191213. (pdf) 13. Dezember 2019, abgerufen am 18. Juli 2023 (englisch).
  6. Andrew Waterman, Krste Asanović, John Hauser, RISC-V International: The RISC-V Instruction Set Manual, Volume II: Privileged Architecture, Document Version 20211203. (pdf) 4. Dezember 2021, abgerufen am 18. Juli 2023 (englisch).
  7. RISC-V-CustomExts (Using as). Abgerufen am 12. Dezember 2023.
  8. R. K. Montoye, E. Hokenek, S. L. Runyon: Design of the IBM RISC System/6000 floating-point execution unit. In: IBM Journal of Research and Development. Band 34, Nr. 1, Januar 1990, ISSN 0018-8646, S. 59–70, doi:10.1147/rd.341.0059 (ieee.org [abgerufen am 12. Dezember 2023]).
  9. Alex Bradbury, Andrew Burgess, Chih-Mao Chen, Zakk Chen, Kito Cheng, Nelson Chu, Michael Clark, Jessica Clarke, Palmer Dabbelt, Sam Elliott, Gonzalo Brito Gadeschi, Sebastian Huber, Roger Ferrer Ibanez, Quey-Liang Kao, Nick Knight, Luís Marques, Evandro Menezes, Max Nordlund, Stefan O’Rear, Konrad Schwarz, Fangrui Song, Hsiangkai Wang, Andrew Waterman, Jim Wilson: RISC-V ABIs Specification Version 1.0: Ratified. (PDF; 268 KB) November 2022, abgerufen am 12. Dezember 2023 (englisch).
  10. The Linley Group Announces Winners of Annual Analysts' Choice Awards. 12. Januar 2017 (linleygroup.com [abgerufen am 21. Januar 2018]).
  11. riscv/riscv-cores-list. RISC-V, 16. Mai 2021, abgerufen am 17. Mai 2021.
  12. Michael Eckstein: Bis ASIL-D: Erster nach ISO 26262 zertifizierbarer RISC-V-Core. Abgerufen am 13. April 2022.
  13. Andes Technology Corporation: Andes Announces New RISC-V Processors: Superscalar 45-Series with Multi-core Support and 27-Series with Level-2 Cache Controller. 30. November 2020, abgerufen am 17. Mai 2021 (englisch).
  14. Nitin Dahad: Andes’ Core has RISC-V Vector Instruction Extension. In: EE Times. 12. September 2019, abgerufen am 17. Mai 2021 (englisch).
  15. Codasip Joins RISC-V Foundation and Announces Availability of RISC-V Compliant Codix Processor IP. Abgerufen am 17. Mai 2021 (englisch).
  16. What is CodAL? 26. Februar 2021, abgerufen am 21. Mai 2021 (amerikanisches Englisch).
  17. Codasip announces RISC-V processor cores providing multi-core and SIMD capabilities. Abgerufen am 17. Mai 2021.
  18. Codasip Releases a Major Upgrade of Its Studio Processor Design Toolset with a Tutorial RISC-V core. Abgerufen am 17. Mai 2021 (englisch).
  19. RISC-V Available in Silicon. Abgerufen am 17. Mai 2021 (englisch).
  20. SiFive Announces U8-Series 2.6GHz High-Performance Out-of-Order RISC-V Core IP. Abgerufen am 17. Mai 2021 (englisch).
  21. Andreas Schilling: Neuer Intelligence X280 von SiFive verbindet RISC-V mit Vektorbeschleunigung. Abgerufen am 17. Mai 2021.
  22. chipsalliance/rocket-chip. CHIPS Alliance, 15. Mai 2021, abgerufen am 17. Mai 2021.
  23. ucb-bar/riscv-sodor. UC Berkeley Architecture Research, 9. Mai 2021, abgerufen am 17. Mai 2021.
  24. PULP platform. Abgerufen am 17. Mai 2021.
  25. CVA6: An application class RISC-V CPU core — CVA6 documentation. Abgerufen am 12. Dezember 2023.
  26. Luca Benini: Ariane: An open-source 64-bit RISC-V Application-Class Processor and latest Improvements. 9. Mai 2018 (riscv.org [PDF; 2,6 MB]).
  27. Codasip partners with Western Digital on open‑source processors. 10. Dezember 2019, abgerufen am 17. Mai 2021 (englisch).
  28. Anton Shilov: Western Digital Rolls-Out Two New SweRV RISC-V Cores For Microcontrollers. Abgerufen am 17. Mai 2021.
  29. Espressif kündigt Wi-Fi-6- und Bluetooth-5-SoC mit RISC-V-Kern an. In: all-electronics.de. 23. April 2021, abgerufen am 18. November 2021.
  30. Sebastian Grüner: Googles Security-Chip nutzt RISC-V. In: golem.de. 28. Oktober 2021, abgerufen am 9. November 2021.
  31. Christof Windeck: Deutsches Projekt entwickelt quelloffenen Sicherheits-Chip in zwei Jahren. In: heise online. 20. Oktober 2023, abgerufen am 22. Oktober 2023.

Auf dieser Seite verwendete Medien

RISC-V-logo.svg
RISC-V logo
Yunsup Lee holding RISC V prototype chip.jpg
Autor/Urheber: Derrick Coetzee (User:Dcoetzee), Lizenz: CC0
Yunsup Lee holding RISC V prototype chip. At UC Berkeley Par Lab Winter Retreat, January 2013.