RISC-V | |
---|---|
Dezvoltator | UC Berkeley |
Adâncime de biți | 32 de biți, 64 de biți, 128 de biți |
Prezentat | 2010 |
Versiuni | Unprivileged ver.20191213, privilegiat ver. 20190608 |
Arhitectură | RISC |
Tip de | registru-registru |
Codare SK | variabil |
Implementarea tranziției | Comparație și tranziție |
Ordinea octetilor | little-endian |
Mărimea paginii | 4 KiB |
Extensii | M, A, F, D, Q, C |
deschis? | da |
Registrele | |
scop general | 16, 32 (inclusiv x0 este întotdeauna zero) |
Real | 32 (extensiile F, D, G) |
SIMD | 32 de registre vectoriale de până la 1024 de biți fiecare (extensie V) |
Fișiere media la Wikimedia Commons |
RISC-V este un set de instrucțiuni deschis și gratuit și o arhitectură de procesor bazată pe conceptul RISC [1] pentru microprocesoare și microcontrolere . Specificațiile sunt disponibile pentru utilizare gratuită și gratuită, inclusiv implementări comerciale direct în configurație silicon sau FPGA . Are capabilități încorporate pentru extinderea listei de comenzi și este potrivit pentru o gamă largă de aplicații.
A fost creat în 2010 de cercetători de la Departamentul de Informatică de la Universitatea din California din Berkeley , cu participarea directă a lui David Patterson [2] [3] .
Pentru dezvoltarea și promovarea RISC-V în 2015, au fost create o fundație internațională RISC-V [4] și o asociație cu sediul în Zurich [5] ; din 2018, Fundația RISC-V lucrează în parteneriat strâns cu Fundația Linux . Comitetele tehnice și de management includ două companii rusești care dezvoltă nuclee de procesor - Syntacore [6] și CloudBEAR.
În februarie 2022, Intel a anunțat [7] că investește un miliard de dolari în dezvoltarea RISC-V și s-a alăturat conducerii RISC-V.
În septembrie 2022, Alianța RISC-V [8] a fost formată în Rusia .
Descrierea RISC-V include un număr relativ mic de instrucțiuni standard, aproximativ 50 de bucăți, dintre care multe erau tipice RISC-I de la începutul anilor 1980. Extensiile standard (M, A, F și D) extind setul cu 53 de instrucțiuni, formatul C comprimat definește 34 de instrucțiuni. Sunt utilizate 6 tipuri de codare a instrucțiunilor (formate).
Arhitectura RISC-V are un mic subset de instrucțiuni (setul de instrucțiuni I-Integer) care trebuie implementat și mai multe extensii opționale standard.
Setul de bază include instrucțiuni pentru transferul condiționat și necondiționat al controlului/ramificației, un set minim de operații aritmetice/biți pe registre, operații de memorie (încărcare/stocare), precum și un număr mic de instrucțiuni de service.
Operațiile de ramificație nu folosesc niciun semnal comun ca rezultat al operațiilor de comparație efectuate anterior, ci compară direct operanzii lor de registru. Baza operațiilor de comparare este minimă, iar operanzii sunt pur și simplu schimbati pentru a suporta operațiuni complementare.
Subsetul de bază de instrucțiuni folosește următorul set de registre: un registru special x0 (zero), 31 de registre întregi de uz general (x1 - x31), un registru de contor de program (PC, utilizat doar indirect) și un set de CSR-uri ( Registre de control și stare, pot fi adresate până la 4096 CSR).
Pentru aplicațiile încorporate, poate fi utilizată varianta de arhitectură RV32E (Embedded) cu un set redus de registre de uz general (primii 16). Reducerea numărului de registre permite nu numai salvarea resurselor hardware, ci și reducerea memoriei și a timpului petrecut cu salvarea/restaurarea registrelor în timpul comutărilor de context.
Cu aceeași codificare a instrucțiunilor, RISC-V oferă implementări de arhitecturi cu registre și operații de uz general pe 32, 64 și 128 de biți (RV32I, RV64I și, respectiv, RV128I).
Bitness-ul operațiunilor de registru corespunde întotdeauna cu dimensiunea registrului, iar aceleași valori din registre pot fi tratate ca numere întregi, atât semnate, cât și nesemnate.
Nu există operațiuni pe părți ale registrelor, nici „perechi de registre” dedicate.
Operațiile nu stochează biți de transport sau de overflow nicăieri, ceea ce este aproape de modelul de operare în limbajul de programare C. De asemenea, excepțiile la overflow și chiar la împărțirea cu 0 nu sunt generate de hardware.Toate verificările necesare ale operanzilor și rezultatelor operațiilor trebuie efectuate în software.
Aritmetica numerelor întregi cu precizie extinsă (mai mare decât lățimea de biți a registrului) trebuie să folosească în mod explicit operații pentru a calcula biții de ordin înalt ai rezultatului. De exemplu, există instrucțiuni speciale pentru a obține biții superiori ai produsului unui registru și a unui registru.
Mărimea operandului poate diferi de dimensiunea registrului numai în operațiunile de memorie. Tranzacțiile cu memorie sunt efectuate în blocuri, a căror dimensiune în octeți trebuie să fie o putere întreagă nenegativă de 2, de la un octet până la dimensiunea registrului inclusiv. Un operand din memorie trebuie să aibă „aliniere naturală” (adresa este un multiplu al mărimii operandului).
Arhitectura folosește doar modelul little-endian - primul octet al operandului din memorie corespunde celor mai puțin semnificativi biți ai valorilor operandului de registru.
Pentru o pereche de instrucțiuni de salvare/încărcare a registrului, operandul din memorie este determinat de dimensiunea registrului arhitecturii selectate, nu de codificarea instrucțiunii (codul de instrucțiune este același pentru RV32I, RV64I și RV128I, dar dimensiunea operanzilor). este de 4, 8 și, respectiv, 16 octeți), care corespunde mărimii pointerului, tipurilor de limbaj de programare C size_t sau diferenței de pointer.
Pentru toate dimensiunile admisibile ale operanzilor din memorie mai mici decât dimensiunea registrului, există instrucțiuni separate pentru încărcarea / salvarea biților inferiori ai registrului, inclusiv pentru încărcarea din memorie în registru, există versiuni pereche de instrucțiuni care vă permit să interpretați valoarea încărcată ca cu un semn (cele mai mari valori ale biților de semn din memorie sunt umplute cu biți înalți ai registrului) sau nesemnați (biții înalți ai registrului sunt setați la 0).
Instrucțiunile setului de bază sunt lungi de 32 de biți, aliniate la o limită de cuvânt de 32 de biți, dar formatul comun oferă instrucțiuni de diferite lungimi (standard - de la 16 la 192 de biți în incremente de 16 biți) aliniate la o limită de cuvânt de 16 biți. Lungimea completă a unei instrucțiuni este decodificată într-un mod unificat din primul său cuvânt de 16 biți.
Pentru instrucțiunile cele mai frecvent utilizate, utilizarea omologilor lor într-o codificare mai compactă de 16 biți (C - Extensie comprimată) a fost standardizată.
Operațiile de înmulțire, împărțire și calcul al restului nu sunt incluse în setul minim de instrucțiuni, ci sunt alocate într-o extensie separată (M - Extensie multiplicare). Există o serie de argumente în favoarea împărțirii acestui set în două separate (înmulțire și împărțire).
Un set separat de operații atomice a fost standardizat (A - Extensie atomică).
Deoarece codificarea setului de instrucțiuni de bază nu depinde de bitness-ul arhitecturii, același cod poate rula pe diferite arhitecturi RISC-V, poate determina bitness și alți parametri ai arhitecturii curente, prezența extensiilor sistemului de instrucțiuni. , apoi autoconfigurați pentru mediul de execuție țintă.
Specificația RISC-V prevede mai multe zone din spațiul de codificare a instrucțiunilor pentru „extensiile X” personalizate ale arhitecturii, care sunt suportate la nivel de asamblare ca grupuri de instrucțiuni custom0 și custom1.
Reducere | Nume | Versiune | stare |
---|---|---|---|
Seturi de bază | |||
RVWMO | Modelul de bază al consistenței memoriei | 2.0 | Ratificat |
RV32I | Set de bază cu operații întregi, pe 32 de biți | 2.1 | Ratificat |
RV64I | Set de bază cu operații întregi, pe 64 de biți | 2.1 | Ratificat |
RV32E | Set de bază cu operații întregi pentru sisteme încorporate , 32 de biți, 16 registre | 1.9 | Proiect |
RV128I | Set de bază cu operații întregi, 128 de biți | 1.7 | Proiect |
Partea 1 Seturi standard de comenzi fără privilegii | |||
M | Înmulțirea și împărțirea întregilor | 2.0 | Ratificat |
A | Instructiuni atomice | 2.1 | Ratificat |
F | Aritmetică cu virgulă mobilă cu precizie unică | 2.2 | Ratificat |
D | Aritmetică în virgulă mobilă pe numere cu precizie dublă (virgula mobilă cu precizie dublă) | 2.2 | Ratificat |
Q | Aritmetică cvadruple în virgulă mobilă | 2.2 | Ratificat |
C | Nume scurte pentru comenzi (Instrucțiuni comprimate) | 2.2 | Ratificat |
Contoare | Instrucțiuni pentru contoare de performanță și cronometre -- setează Zicntr și Zihpm | 2.0 | Proiect |
L | Operații aritmetice pe numere zecimale în virgulă mobilă (virgula mobilă zecimală) | 0,0 | deschis |
B | Operații cu biți | 0,36 | deschis |
J | Traducere binară și suport pentru compilarea dinamică (limbi traduse dinamic) | 0,0 | deschis |
T | Memoria tranzacțională | 0,0 | deschis |
P | Operații SIMD scurte (Instrucțiuni SIMD împachetate) | 0,1 | deschis |
V | Operații vectoriale | 1.0 | Îngheţat |
Zicsr | Instrucțiuni pentru Registrul de control și stare (CSR). | 2.0 | Ratificat |
Zifencei | Instrucțiuni pentru sincronizarea fluxurilor de comandă și date (Instruction-Fetch Fence) | 2.0 | Ratificat |
Zihintpause | Pauză Sugestie | 2.0 | Ratificat |
Zihintntl | Sugestii de localitate non-temporale | 0,2 | Proiect |
Zam | Extensie pentru atomii nealiniați | 0,1 | Proiect |
Zfh | Extensii pentru Half-Precision Floating-Point | 1.0 | Ratificat |
Zfhmin | Extensii pentru Half-Precision Floating-Point | 1.0 | Ratificat |
Zfinx | Extensii standard pentru virgulă mobilă în registrele întregi | 1.0 | Ratificat |
Zdinx | Extensii standard pentru virgulă mobilă în registrele întregi | 1.0 | Ratificat |
Zhinx | Extensii standard pentru virgulă mobilă în registrele întregi | 1.0 | Ratificat |
Zhinxmin | Extensii standard pentru virgulă mobilă în registrele întregi | 1.0 | Ratificat |
Ztso | Extensie pentru modelul de consistență a memoriei RVTSO (Extension for Total Store Ordering). | 0,1 | Îngheţat |
G | = IMAFD Zicsr Zifencei Denumirea generalizată/abreviată pentru un set de extensii | N / A | N / A |
Partea 2 Seturi de comenzi standard pentru moduri privilegiate | |||
Masina ISA | Instrucțiuni la nivel hardware | 1.12 | Ratificat |
Supraveghetor ISA | Instrucțiuni la nivel de supraveghetor | 1.12 | Ratificat |
Extensia Svnapot | (Extensie pentru contiguitatea traducerii NAPOT) | 1.0 | Ratificat |
Extensia Svpbmt | (Extensie pentru tipurile de memorie bazate pe pagini) | 1.0 | Ratificat |
Extensia Svinval | (Extensie pentru invalidarea cache-ului de adresă-traducere fină) | 1.0 | Ratificat |
Hypervisor ISA | Instrucțiuni la nivel de hipervisor | 1.0 | Ratificat |
Pentru microcontrolere pe 32 de biți și alte aplicații încorporate, se utilizează setul RV32EC. În procesoarele pe 64 de biți, poate exista un set de grupuri RV64GC, aceleași în notație completă - RV64IMAFDC.
Format de instrucțiuni de mașină pe 32 de biți (caracteristici - biții mici sunt întotdeauna „11” și biții 2-4 ≠̸ „111”)
Tip de | 31 | treizeci | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | douăzeci | 19 | optsprezece | 17 | 16 | cincisprezece | paisprezece | 13 | 12 | unsprezece | zece | 9 | opt | 7 | 6 | 5 | patru | 3 | 2 | unu | 0 |
Înregistrare/Înregistrare | funct7 | rs2 | rs1 | funct3 | rd | codul de operare | unu | unu | ||||||||||||||||||||||||
cu operand | ± | imm[10:0] | rs1 | funct3 | rd | codul de operare | unu | unu | ||||||||||||||||||||||||
Cu operand lung | ± | imm[30:12] | rd | codul de operare | unu | unu | ||||||||||||||||||||||||||
Conservare | ± | imm[10:5] | rs2 | rs1 | funct3 | imm[4:0] | codul de operare | unu | unu | |||||||||||||||||||||||
ramificare | ± | imm[10:5] | rs2 | rs1 | funct3 | imm[4:1] | [unsprezece] | codul de operare | unu | unu | ||||||||||||||||||||||
Tranziție | ± | imm[10:1] | [unsprezece] | imm[19:12] | rd | codul de operare | unu | unu |
RISC-V are 32 (sau 16 pentru aplicații încorporate) registre întregi. Când implementați grupuri reale de comenzi, există încă 32 de registre reale.
Se are în vedere o opțiune de a include în standard un set suplimentar de 32 de registre vectoriale cu o lungime variabilă a valorilor procesate, a căror lungime este indicată în CSR vlenb [9] .
Pentru operațiunile pe numere în formate binare cu virgulă mobilă, se utilizează un set de registre suplimentare de 32 FPU (Floating Point Unit), care sunt partajate de extensii ale setului de instrucțiuni de bază pentru trei opțiuni de precizie: simplu - 32 de biți (extensie F), dublu - 64 de biți (D - Extensie dublă precizie), precum și cvadruplu - 128 de biți (Q - Extensie de precizie cvadruplă).
Inregistreaza-te | Numele în ABI | Descriere | Tip de |
---|---|---|---|
32 de registre întregi | |||
x0 | Zero | întotdeauna zero | |
x1 | ra | adresa expeditorului | Sfidător |
x2 | sp | indicator de stivă | numit |
x3 | gp | indicator global | |
x4 | tp | indicator de fir | |
x5 | t0 | Adresă de retur temporară/alternativă | Sfidător |
x6–7 | t1–2 | Temporar | Sfidător |
x8 | s0/fp | Registrul salvat / indicatorul de cadru | numit |
x9 | s1 | registrul salvat | numit |
x10-11 | a0–1 | Argumentul funcției / valoarea returnată | Sfidător |
x12–17 | a2–7 | argumentul funcției | Sfidător |
x18–27 | s2–11 | registrul salvat | numit |
x28–31 | t3–6 | Temporar | Sfidător |
32 de registre suplimentare în virgulă mobilă | |||
f0–7 | ft0–7 | Temporare în virgulă flotantă | Sfidător |
f8–9 | fs0-1 | Registre salvate în virgulă mobilă | numit |
f10–11 | fa0–1 | argumente în virgulă mobilă/valori returnate | Sfidător |
f12–17 | fa2–7 | argumente în virgulă mobilă | Sfidător |
f18–27 | fs2-11 | Registre salvate în virgulă mobilă | numit |
f28–31 | ft8-11 | Temporare în virgulă flotantă | Sfidător |
Ca parte a proiectului, șase modele de microprocesoare cu arhitectura RISC-V au fost create și publicate sub o licență gratuită: un generator Rocket pe 64 de biți (7 octombrie 2014 [10] [11] ) și cinci nuclee de antrenament Sodor simplificate cu diverse microarhitecturi.
Au fost publicate, de asemenea, mai multe simulatoare (inclusiv qemu și ANGEL, un simulator JavaScript care rulează în browser), compilatoare (LLVM, GCC), o variantă a nucleului Linux pentru a rula pe RISC-V și un compilator de design Chisel care vă permite pentru a obține codul Verilog . Au fost publicate și teste de verificare [12] .
Organizația non-profit lowRISC intenționează să creeze un sistem-on-a-chip bazat pe nucleul Rocket RISC-V pe 64 de biți, urmat de producția în masă de cipuri [13] [14] .
La conferința RISC-V Workshop 2017, a devenit cunoscut faptul că Esperanto Technologies dezvoltă un procesor de uz general de înaltă performanță pe 64 de biți pe setul de instrucțiuni RISC-V cu o arhitectură eterogenă cu un grad ridicat de paralelism (asemănător procesorului Cell ). în structură ), care în configurația maximă va conține 16 nuclee ET-Maxion (reprezentând conducte cu execuție neregulată a instrucțiunilor și lucru cu date în virgulă mobilă) și 4096 nuclee ET-Minion (conducte cu execuție secvențială a instrucțiunilor și un bloc cu calcule vectoriale în fiecare nucleu) [15] .
Western Digital a spus că, în parteneriat cu Esperanto, va ridica statutul actual al arhitecturii procesorului RISC-V de la microcontroler la soluții de înaltă performanță și va crea o arhitectură de calcul de ultimă generație pentru procesarea „ bilor date ” [16] , precum și un ecosistem pentru acces rapid la date – vorbim despre crearea de nuclee RISC-V specializate pentru construirea arhitecturii procesor-in- memorie (procesor-in-memory) [17] .
O serie de companii oferă blocuri gata făcute de nuclee IP bazate pe arhitectura RISC-V, printre care:
Procesoare și microcontrolere produse în serie bazate pe arhitectura RISC-V în format system-on-a-chip .
Microprocesoare:
Microcontrolere lansate în 2017-2019:
Microcontrolere lansate în 2020:
Microcontrolere lansate în 2021:
![]() | |
---|---|
Foto, video și audio |
Tehnologii de procesoare digitale | |||||||||
---|---|---|---|---|---|---|---|---|---|
Arhitectură | |||||||||
Arhitectura set de instrucțiuni | |||||||||
cuvânt mașină | |||||||||
Paralelism |
| ||||||||
Implementări | |||||||||
Componente | |||||||||
Gestionare a energiei |
Microcontrolere | ||||||||
---|---|---|---|---|---|---|---|---|
Arhitectură |
| |||||||
Producătorii |
| |||||||
Componente | ||||||||
Periferie | ||||||||
Interfețe | ||||||||
OS | ||||||||
Programare |
|
RISC | Arhitecturi de procesoare bazate pe tehnologii|
---|---|