RISC-V | |
---|---|
Utvecklaren | UC Berkeley |
Lite djup | 32-bitars, 64-bitars, 128-bitars |
Presenteras | 2010 |
versioner | Oprivilegierad ver.20191213, privilegierad ver. 20190608 |
Arkitektur | RISC |
Sorts | register-register |
SK-kodning | variabel |
Övergångsimplementering | Jämförelse och övergång |
Byte-ordning | liten endian |
Sidstorlek | 4 KiB |
Tillägg | M, A, F, D, Q, C |
öppna? | Ja |
Register | |
generell mening | 16, 32 (inklusive x0 är alltid noll) |
Verklig | 32 (tillägg F, D, G) |
SIMD | 32 vektorregister upp till 1024 bitar vardera (V-förlängning) |
Mediafiler på Wikimedia Commons |
RISC-V är en öppen och fri instruktionsuppsättning och processorarkitektur baserad på RISC - konceptet [1] för mikroprocessorer och mikrokontroller . Specifikationerna är tillgängliga för fri och fri användning, inklusive kommersiella implementeringar direkt i silikon- eller FPGA- konfiguration . Den har inbyggda möjligheter för att utöka listan med kommandon och är lämplig för ett brett spektrum av applikationer.
Den skapades 2010 av forskare från Institutionen för datavetenskap vid University of California i Berkeley med direkt deltagande av David Patterson [2] [3] .
För utveckling och marknadsföring av RISC-V 2015 skapades en internationell RISC-V-stiftelse [4] och en förening med huvudkontor i Zürich [5] ; sedan 2018 har RISC-V Foundation arbetat i nära samarbete med The Linux Foundation . I lednings- och tekniska kommittéerna ingår två ryska företag som utvecklar processorkärnor - Syntacore [6] och CloudBEAR.
I februari 2022 meddelade Intel [ 7] att de investerade en miljard dollar i utvecklingen av RISC-V och gick med i ledningen för RISC-V.
I september 2022 bildades RISC-V-alliansen [8] i Ryssland .
Beskrivningen av RISC-V innehåller ett relativt litet antal standardinstruktioner, cirka 50 stycken, av vilka många var typiska för RISC-I i början av 1980-talet. Standardtilläggen (M, A, F och D) utökar uppsättningen med 53 instruktioner, det komprimerade C-formatet definierar 34 instruktioner. 6 typer av instruktionskodning (format) används.
RISC-V-arkitekturen har en liten delmängd av instruktioner (I-Integer-instruktionsuppsättningen) som måste implementeras och flera standardtillägg.
Grunduppsättningen innehåller instruktioner för villkorlig och ovillkorlig överföring av kontroll/gren, en minsta uppsättning aritmetiska/bitoperationer på register, minnesoperationer (ladda/lagra), samt ett litet antal serviceinstruktioner.
Grenoperationerna använder inte några gemensamma flaggor som ett resultat av tidigare utförda jämförelseoperationer, utan jämför direkt deras registeroperander. Grunden för jämförelseoperationer är minimal, och operander byts helt enkelt ut för att stödja kompletterande operationer.
Den grundläggande underuppsättningen av instruktioner använder följande uppsättning register: ett speciellt register x0 (noll), 31 allmänna heltalsregister (x1 - x31), ett programräknareregister (PC, används endast indirekt) och en uppsättning CSR:er ( Kontroll- och statusregister, kan adresseras upp till 4096 CSR).
För inbäddade applikationer kan arkitekturvarianten RV32E (Embedded) med en reducerad uppsättning allmänna register (de första 16) användas. Att minska antalet register tillåter inte bara att spara hårdvaruresurser, utan också att minska minnet och tiden som spenderas på att spara/återställa register under kontextväxlingar.
Med samma instruktionskodning tillhandahåller RISC-V implementeringar av arkitekturer med 32, 64 och 128-bitars register och operationer för allmänna ändamål (RV32I, RV64I respektive RV128I).
Bitheten för registeroperationer motsvarar alltid registrets storlek, och samma värden i register kan behandlas som heltal, både signerade och osignerade.
Det finns inga operationer på delar av register, inga dedikerade "registerpar".
Operationer lagrar inte bär- eller spillbitar någonstans, vilket är nära operationsmodellen i programmeringsspråket C. Undantag vid spill och även vid division med 0 genereras inte av hårdvaran Alla nödvändiga kontroller av operander och operationsresultat måste utföras i mjukvara.
Heltalsaritmetik med utökad precision (större än registrets bitbredd) måste explicit använda operationer för att beräkna resultatets bitar av hög ordning. Det finns till exempel särskilda instruktioner för att få de övre bitarna av produkten av ett register och ett register.
Operandstorleken kan skilja sig från registerstorleken endast vid minnesoperationer. Minnestransaktioner utförs i block, vars storlek i byte måste vara en icke-negativ heltalspotens på 2, från en byte till och med registrets storlek. En operand i minnet måste ha "naturlig justering" (adressen är en multipel av operandens storlek).
Arkitekturen använder endast little-endian- modellen - den första byten av operanden i minnet motsvarar de minst signifikanta bitarna av värdena för registeroperanden.
För ett register spara/ladda instruktionspar, bestäms operanden i minnet av storleken på den valda arkitekturens register, inte av instruktionskodningen (instruktionskoden är densamma för RV32I, RV64I och RV128I, men storleken på operanderna är 4, 8 respektive 16 byte), vilket motsvarar storleken på pekaren , C-programmeringsspråk size_t-typer eller pekarskillnaden.
För alla tillåtna storlekar av operander i minnet som är mindre än registrets storlek, finns det separata instruktioner för att ladda / spara de nedre bitarna i registret, inklusive för att ladda från minnet till registret, det finns parade versioner av instruktioner som gör att du kan tolka det laddade värdet som med ett tecken (högsta teckenbitvärden från minnet fylls med höga bitar av registret) eller osignerat (höga bitar i registret är satt till 0).
Grundläggande instruktioner är 32 bitar långa, anpassade till en 32-bitars ordgräns, men det vanliga formatet ger instruktioner av olika längder (standard - från 16 till 192 bitar i 16-bitars steg) anpassade till en 16-bitars ordgräns. Hela längden av en instruktion avkodas på ett enhetligt sätt från dess första 16-bitars ord.
För de mest använda instruktionerna har användningen av deras motsvarigheter i en mer kompakt 16-bitars kodning (C - Compressed extension) standardiserats.
Operationerna multiplikation, division och beräkning av återstoden ingår inte i minimiuppsättningen av instruktioner, utan allokeras i en separat förlängning (M - Multiplicera förlängning). Det finns ett antal argument för att dela upp denna mängd i två separata (multiplikation och division).
En separat uppsättning atomoperationer har standardiserats (A - Atomic extension).
Eftersom kodningen av den grundläggande instruktionsuppsättningen inte beror på arkitekturens bithet, kan samma kod potentiellt köras på olika RISC-V-arkitekturer, bestämma bitheten och andra parametrar för den aktuella arkitekturen, närvaron av tillägg av instruktionssystemet , och autokonfigurera sedan för målexekveringsmiljön.
RISC-V-specifikationen tillhandahåller flera områden i instruktionskodningsutrymmet för anpassade "X-extensions" av arkitekturen, som stöds på assemblernivå som instruktionsgrupperna custom0 och custom1.
Minskning | namn | Version | Status |
---|---|---|---|
Grundsatser | |||
RVWMO | Grundläggande minneskonsistensmodell | 2.0 | Ratifierad |
RV32I | Basuppsättning med heltalsoperationer, 32-bitars | 2.1 | Ratifierad |
RV64I | Basuppsättning med heltalsoperationer, 64-bitars | 2.1 | Ratifierad |
RV32E | Basset med heltalsoperationer för inbyggda system , 32-bitars, 16 register | 1.9 | Förslag |
RV128I | Basuppsättning med heltalsoperationer, 128-bitars | 1.7 | Förslag |
Del 1 Standard icke-privilegierade kommandouppsättningar | |||
M | Heltalsmultiplikation och division | 2.0 | Ratifierad |
A | Atominstruktioner _ | 2.1 | Ratifierad |
F | Enprecision flytande punkt flytande punkt aritmetik | 2.2 | Ratifierad |
D | Flyttalsaritmetik på dubbelprecisionsnummer (Double-Precision Floating-Point) | 2.2 | Ratifierad |
F | Aritmetik med fyrdubbla flyttals | 2.2 | Ratifierad |
C | Korta namn för kommandon (komprimerade instruktioner) | 2.2 | Ratifierad |
Räknare | Instruktioner för prestandaräknare och timer -- ställer in Zicntr och Zihpm | 2.0 | Förslag |
L | Aritmetiska operationer på decimaltal med flyttal (Decimal Flyttal) | 0,0 | öppna |
B | Bitoperationer _ | 0,36 | öppna |
J | Binär översättning och stöd för dynamisk kompilering (Dynamiskt översatta språk) | 0,0 | öppna |
T | Transaktionsminne _ | 0,0 | öppna |
P | Korta SIMD -operationer (packade SIMD-instruktioner) | 0,1 | öppna |
V | Vektoroperationer _ | 1.0 | Frysta |
Zicsr | Instruktioner för kontroll och statusregister (CSR). | 2.0 | Ratifierad |
Zifencei | Instruktioner för synkronisering av kommando- och dataströmmar (Instruction-Fetch Fence) | 2.0 | Ratifierad |
Zihintpause | Paustips | 2.0 | Ratifierad |
Zihintntl | Icke-temporala lokalitetstips | 0,2 | Förslag |
Zam | Förlängning för feljusterade atomer | 0,1 | Förslag |
Zfh | Förlängningar för halvprecision flytande punkt | 1.0 | Ratifierad |
Zfhmin | Förlängningar för halvprecision flytande punkt | 1.0 | Ratifierad |
Zfinx | Standardtillägg för flytande poäng i heltalsregister | 1.0 | Ratifierad |
Zdinx | Standardtillägg för flytande poäng i heltalsregister | 1.0 | Ratifierad |
Zhinx | Standardtillägg för flytande poäng i heltalsregister | 1.0 | Ratifierad |
Zhinxmin | Standardtillägg för flytande poäng i heltalsregister | 1.0 | Ratifierad |
Ztso | Tillägg för RVTSO (Extension for Total Store Ordering) minneskonsistensmodell | 0,1 | Frysta |
G | = IMAFD Zicsr Zifencei Generaliserad/förkortad beteckning för en uppsättning förlängningar | n/a | n/a |
Del 2 Standardkommandouppsättningar för privilegierade lägen | |||
Maskin ISA | Instruktioner för hårdvarunivå | 1.12 | Ratifierad |
Handledare ISA | Instruktioner på arbetsledarenivå | 1.12 | Ratifierad |
Svnapot Förlängning | (Förlängning för NAPOT Translation Contiguity) | 1.0 | Ratifierad |
Svpbmt förlängning | (Tillägg för sidbaserade minnestyper) | 1.0 | Ratifierad |
Svinval Extension | (Tillägg för finkornig adress-översättningscache ogiltigförklaring) | 1.0 | Ratifierad |
Hypervisor ISA | Instruktioner på hypervisornivå | 1.0 | Ratifierad |
För 32-bitars mikrokontroller och andra inbyggda applikationer används RV32EC-setet. I 64-bitars processorer kan det finnas en uppsättning grupper RV64GC, samma i full notation - RV64IMAFDC.
32-bitars maskininstruktionsformat (funktioner - låga bitar är alltid "11" och bitar 2-4 ≠̸ "111")
Sorts | 31 | trettio | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | tjugo | 19 | arton | 17 | 16 | femton | fjorton | 13 | 12 | elva | tio | 9 | åtta | 7 | 6 | 5 | fyra | 3 | 2 | ett | 0 |
Registrera/Registrera dig | funktion 7 | rs2 | rs1 | funktion 3 | rd | operationskod | ett | ett | ||||||||||||||||||||||||
med operand | ± | imm[10:0] | rs1 | funktion 3 | rd | operationskod | ett | ett | ||||||||||||||||||||||||
Med lång operand | ± | imm[30:12] | rd | operationskod | ett | ett | ||||||||||||||||||||||||||
Bevarande | ± | imm[10:5] | rs2 | rs1 | funktion 3 | imm[4:0] | operationskod | ett | ett | |||||||||||||||||||||||
förgrening | ± | imm[10:5] | rs2 | rs1 | funktion 3 | imm[4:1] | [elva] | operationskod | ett | ett | ||||||||||||||||||||||
Övergång | ± | imm[10:1] | [elva] | imm[19:12] | rd | operationskod | ett | ett |
RISC-V har 32 (eller 16 för inbäddade applikationer) heltalsregister. Vid implementering av verkliga grupper av kommandon finns det ytterligare 32 verkliga register.
Ett alternativ övervägs att inkludera i standarden ytterligare en uppsättning av 32 vektorregister med en variabel längd av bearbetade värden, vars längd anges i CSR vlenb [9] .
För operationer på tal i binära flyttalsformat används en uppsättning ytterligare 32 FPU (Floating Point Unit) register, som delas av förlängningar av den grundläggande instruktionsuppsättningen för tre precisionsalternativ: enkel - 32 bitar (F förlängning), dubbel - 64 bitar (D - Dubbel precisionsförlängning), samt fyrdubbla - 128 bitar (Q - Fyrdubbel precisionsförlängning).
Registrera | Namn i ABI | Beskrivning | Sorts |
---|---|---|---|
32 heltalsregister _ | |||
x0 | Noll | alltid noll | |
x1 | ra | returadress | Trotsig |
x2 | sp | stackpekare | kallad |
x3 | gp | global pekare | |
x4 | tp | trådpekare | |
x5 | t0 | Tillfällig/alternativ returadress | Trotsig |
x6–7 | t1–2 | Temporär | Trotsig |
x8 | s0/fp | Sparat register / rampekare | kallad |
x9 | s1 | sparat register | kallad |
x10-11 | a0–1 | Funktionsargument / returvärde | Trotsig |
x12–17 | a2–7 | funktionsargument | Trotsig |
x18–27 | s2–11 | sparat register | kallad |
x28–31 | t3–6 | Temporär | Trotsig |
32 ytterligare flyttalsregister | |||
f0–7 | 0–7 fot | Flytande komma tillfälligt | Trotsig |
f8–9 | fs0–1 | Flyttalssparade register | kallad |
f10–11 | fa0–1 | flyttalsargument/returvärden | Trotsig |
f12–17 | fa2–7 | flyttalsargument | Trotsig |
f18–27 | fs2–11 | Flyttalssparade register | kallad |
f28–31 | ft8-11 | Flytande komma tillfälligt | Trotsig |
Som en del av projektet skapades och publicerades sex konstruktioner av mikroprocessorer med RISC-V-arkitekturen under en fri licens: en 64-bitars raketgenerator (7 oktober 2014 [10] [11] ) och fem förenklade Sodor-träningskärnor med olika mikroarkitekturer.
Flera simulatorer har också publicerats (inklusive qemu och ANGEL, en JavaScript-simulator som körs i webbläsaren), kompilatorer (LLVM, GCC), en variant av Linux-kärnan för att köras på RISC-V och en Chisel-designkompilator som låter dig för att få Verilog -kod. Verifikationstester har också publicerats [12] .
Den ideella organisationen lowRISC planerar att skapa ett system-på-ett-chip baserat på 64-bitars Rocket RISC-V-kärnan, följt av massproduktion av chips [13] [14] .
Vid konferensen RISC-V Workshop 2017 blev det känt att Esperanto Technologies utvecklar en 64-bitars högpresterande processor för allmänna ändamål på RISC-V-instruktionsuppsättningen med en heterogen arkitektur med hög grad av parallellitet (liknar cellprocessorn ) i struktur ), som i den maximala konfigurationen kommer att innehålla 16 ET-Maxion-kärnor (representerar pipelines med out-of-order exekvering av instruktioner och arbetar med flyttalsdata) och 4096 ET-Minion-kärnor (pipelines med sekventiell exekvering av instruktioner och ett block med vektorberäkningar i varje kärna) [15] .
Western Digital sa att det i samarbete med Esperanto kommer att höja den nuvarande statusen för RISC-V-processorarkitekturen från mikrokontroller till högpresterande lösningar och skapa en nästa generations datorarkitektur för bearbetning av " big data " [16] , samt ett ekosystem för snabb åtkomst till data - vi talar om skapandet av specialiserade RISC-V-kärnor för att bygga processor-i- minne -arkitekturen (processor-in-memory) [17] .
Ett antal företag erbjuder färdiga block av IP-kärnor baserade på RISC-V-arkitekturen, bland annat:
Massproducerade processorer och mikrokontroller baserade på RISC-V-arkitekturen i system-on-a-chip- format .
Mikroprocessorer:
Mikrokontroller som släpptes 2017-2019:
Mikrokontroller släppta 2020:
Mikrokontroller som släpptes 2021:
![]() | |
---|---|
Foto, video och ljud |
Processor Technologies | Digital|||||||||
---|---|---|---|---|---|---|---|---|---|
Arkitektur | |||||||||
Instruktionsuppsättning arkitektur | |||||||||
maskinord | |||||||||
Parallellism |
| ||||||||
Genomföranden | |||||||||
Komponenter | |||||||||
Energihantering |
Mikrokontroller | ||||||||
---|---|---|---|---|---|---|---|---|
Arkitektur |
| |||||||
Tillverkare |
| |||||||
Komponenter | ||||||||
Periferi |
| |||||||
Gränssnitt | ||||||||
OS | ||||||||
Programmering |
|
RISC -teknologier | Processorarkitekturer baserade på|
---|---|