RISC-V | |
---|---|
Vývojář | UC Berkeley |
Bitová hloubka | 32-bit, 64-bit, 128-bit |
Prezentováno | 2010 |
Verze | Neprivilegovaný ver.20191213, privilegovaný ver. 20190608 |
Architektura | RISC |
Typ | registrovat-registrovat |
SK kódování | variabilní |
Implementace přechodu | Srovnání a přechod |
Pořadí bajtů | malý Endian |
Velikost stránky | 4 KiB |
Rozšíření | M, A, F, D, Q, C |
OTEVŘENO? | Ano |
Registry | |
obecný účel | 16, 32 (včetně x0 je vždy nula) |
Nemovitý | 32 (nástavce F, D, G) |
SIMD | 32 vektorových registrů až 1024 bitů každý (rozšíření V) |
Mediální soubory na Wikimedia Commons |
RISC-V je otevřená a bezplatná instrukční sada a architektura procesoru založená na konceptu RISC [1] pro mikroprocesory a mikrokontroléry . Specifikace jsou k dispozici zdarma a zdarma, včetně komerčních implementací přímo v křemíkové nebo FPGA konfiguraci . Má vestavěné možnosti pro rozšíření seznamu příkazů a je vhodný pro širokou škálu aplikací.
Byl vytvořen v roce 2010 výzkumníky z Katedry počítačových věd Kalifornské univerzity v Berkeley za přímé účasti Davida Pattersona [2] [3] .
Pro rozvoj a propagaci RISC-V v roce 2015 byla vytvořena mezinárodní nadace RISC-V [4] a sdružení se sídlem v Curychu [5] ; od roku 2018 RISC-V Foundation úzce spolupracuje s The Linux Foundation . Mezi řídící a technické výbory patří dvě ruské společnosti, které vyvíjejí procesorová jádra – Syntacore [6] a CloudBEAR.
V únoru 2022 Intel oznámil [7] , že investuje jednu miliardu dolarů do vývoje RISC-V a připojil se k vedení RISC-V.
V září 2022 vznikla v Rusku Aliance RISC-V [8] .
Popis RISC-V zahrnuje relativně malý počet standardních instrukcí, asi 50 kusů, z nichž mnohé byly typické pro RISC-I z roku 1980. Standardní rozšíření (M, A, F a D) rozšiřují sadu o 53 instrukcí, komprimovaný formát C definuje 34 instrukcí. Používá se 6 typů kódování instrukcí (formátů).
Architektura RISC-V má malou podmnožinu instrukcí (instrukční sadu I-Integer), která musí být implementována, a několik standardních volitelných rozšíření.
Základní sada obsahuje instrukce pro podmíněný a nepodmíněný přenos řízení/větve, minimální sadu aritmetických/bitových operací s registry, paměťové operace (načtení/uložení) a také malý počet servisních instrukcí.
Operace větvení nepoužívají žádné společné příznaky jako výsledek dříve provedených porovnávacích operací, ale přímo porovnávají své registrové operandy. Základ srovnávacích operací je minimální a operandy se jednoduše zaměňují, aby podporovaly doplňkové operace.
Základní podmnožina instrukcí používá následující sadu registrů: speciální registr x0 (nula), 31 univerzálních celočíselných registrů (x1 - x31), registr programového čítače (PC, používá se pouze nepřímo) a sadu CSR ( Řídicí a stavové registry, lze adresovat až 4096 CSR).
Pro embedded aplikace lze použít variantu architektury RV32E (Embedded) s redukovanou sadou univerzálních registrů (prvních 16). Snížení počtu registrů umožňuje nejen šetřit hardwarové zdroje, ale také snížit paměť a čas strávený ukládáním/obnovováním registrů během přepínání kontextu.
Se stejným kódováním instrukcí poskytuje RISC-V implementace architektur s 32, 64 a 128bitovými obecnými registry a operacemi (RV32I, RV64I a RV128I, v tomto pořadí).
Bitovost operací registru vždy odpovídá velikosti registru a se stejnými hodnotami v registrech lze zacházet jako s celými čísly, se znaménkem i bez znaménka.
Neexistují žádné operace s částmi registrů, žádné vyhrazené „páry registrů“.
Operace nikde neukládají bity přenosu nebo přetečení, což se blíží operačnímu modelu v programovacím jazyce C. Hardware také negeneruje výjimky na přetečení a dokonce ani na dělení 0. Všechny potřebné kontroly operandů a výsledků operací je nutné provádět softwarově.
Aritmetika celého čísla s rozšířenou přesností (větší než bitová šířka registru) musí explicitně používat operace k výpočtu bitů vyššího řádu ve výsledku. Například existují speciální instrukce pro získání horních bitů součinu registru a registru.
Velikost operandu se může lišit od velikosti registru pouze v operacích s pamětí. Paměťové transakce se provádějí v blocích, jejichž velikost v bajtech musí být nezáporná celá číslo 2, od jednoho bajtu až po velikost registru včetně. Operand v paměti musí mít "přirozené zarovnání" (adresa je násobkem velikosti operandu).
Architektura používá pouze model little-endian - první bajt operandu v paměti odpovídá nejméně významným bitům hodnot operandu registru.
U páru instrukcí uložení/načtení registru je operand v paměti určen velikostí registru vybrané architektury, nikoli kódováním instrukce (kód instrukce je stejný pro RV32I, RV64I a RV128I, ale velikost operandů je 4, 8 a 16 bajtů, v tomto pořadí), což odpovídá velikosti ukazatele , typem size_t programovacího jazyka C nebo rozdílu ukazatele.
Pro všechny přípustné velikosti operandů v paměti menší než velikost registru existují samostatné instrukce pro načtení / uložení spodních bitů registru, včetně načtení z paměti do registru, existují párové verze instrukcí, které umožňují interpretovat načtenou hodnotu jako se znaménkem (nejvyšší bitové hodnoty z paměti jsou vyplněny vysokými bity registru) nebo bez znaménka (nejvyšší bity registru jsou nastaveny na 0).
Instrukce základní sady jsou 32 bitů dlouhé, zarovnané do 32bitové hranice slova, ale běžný formát poskytuje instrukce různých délek (standardní – od 16 do 192 bitů v 16bitových krocích) zarovnané na 16bitovou hranici slova. Celá délka instrukce je dekódována jednotným způsobem od jejího prvního 16bitového slova.
Pro nejčastěji používané instrukce bylo standardizováno použití jejich protějšků v kompaktnějším 16bitovém kódování (C - Compressed extension).
Operace násobení, dělení a výpočtu zbytku nejsou zahrnuty v minimálním souboru instrukcí, ale jsou přiděleny v samostatném rozšíření (M - Rozšíření Multiply). Existuje řada argumentů ve prospěch rozdělení této množiny na dvě samostatné (násobení a dělení).
Byla standardizována samostatná sada atomových operací (A - Atomic extension).
Vzhledem k tomu, že kódování základní instrukční sady nezávisí na bitovosti architektury, stejný kód může potenciálně běžet na různých architekturách RISC-V, určovat bitovost a další parametry aktuální architektury, přítomnost rozšíření instrukčního systému a poté autokonfigurujte pro cílové spouštěcí prostředí.
Specifikace RISC-V poskytuje několik oblastí v prostoru pro kódování instrukcí pro vlastní "X-extensions" architektury, která jsou podporována na úrovni assembleru jako skupiny instrukcí custom0 a custom1.
Snížení | název | Verze | Postavení |
---|---|---|---|
Základní sady | |||
RVWMO | Základní model konzistence paměti | 2,0 | Ratifikováno |
RV32I | Základní sada s celočíselnými operacemi, 32bitová | 2.1 | Ratifikováno |
RV64I | Základní sada s celočíselnými operacemi, 64bitová | 2.1 | Ratifikováno |
RV32E | Základní sada s celočíselnými operacemi pro vestavěné systémy , 32-bit, 16 registrů | 1.9 | Návrh |
RV128I | Základní sada s celočíselnými operacemi, 128bitová | 1.7 | Návrh |
Část 1 Standardní neprivilegované sady příkazů | |||
M | Násobení a dělení celých čísel | 2,0 | Ratifikováno |
A | Atomové instrukce | 2.1 | Ratifikováno |
F | Jednopřesná aritmetika s plovoucí desetinnou čárkou | 2.2 | Ratifikováno |
D | Aritmetika s plovoucí desetinnou čárkou na číslech s dvojitou přesností (Double-Precision Floating-Point) | 2.2 | Ratifikováno |
Q | Čtyřnásobná aritmetika s pohyblivou řádovou čárkou | 2.2 | Ratifikováno |
C | Krátké názvy příkazů (komprimované instrukce) | 2.2 | Ratifikováno |
Počítadla | Pokyny pro čítače výkonu a časovače -- sady Zicntr a Zihpm | 2,0 | Návrh |
L | Aritmetické operace s desetinnými čísly s plovoucí desetinnou čárkou (Decimal Floating-Point) | 0,0 | OTEVŘENO |
B | Bitové operace | 0,36 | OTEVŘENO |
J | Binární překlad a podpora dynamické kompilace (Dynamicky přeložené jazyky) | 0,0 | OTEVŘENO |
T | Transakční paměť | 0,0 | OTEVŘENO |
P | Krátké SIMD operace (Instrukce zabalené SIMD) | 0,1 | OTEVŘENO |
PROTI | Vektorové operace | 1,0 | Zamrzlý |
Zicsr | Pokyny pro řídicí a stavový registr (CSR). | 2,0 | Ratifikováno |
Zifencei | Pokyny pro synchronizaci příkazových a datových toků (Instruction-Fetch Fence) | 2,0 | Ratifikováno |
Zihint pauza | Pozastavit Tip | 2,0 | Ratifikováno |
Zihintntl | Nečasové místní rady | 0,2 | Návrh |
Zam | Rozšíření pro Misaligned Atomics | 0,1 | Návrh |
Zfh | Rozšíření pro Half-Precision Floating-Point | 1,0 | Ratifikováno |
Zfhmin | Rozšíření pro Half-Precision Floating-Point | 1,0 | Ratifikováno |
Zfinx | Standardní rozšíření pro plovoucí desetinnou čárku v celočíselných registrech | 1,0 | Ratifikováno |
Zdinx | Standardní rozšíření pro plovoucí desetinnou čárku v celočíselných registrech | 1,0 | Ratifikováno |
Zhinx | Standardní rozšíření pro plovoucí desetinnou čárku v celočíselných registrech | 1,0 | Ratifikováno |
Zhinxmin | Standardní rozšíření pro plovoucí desetinnou čárku v celočíselných registrech | 1,0 | Ratifikováno |
Ztso | Rozšíření pro model konzistence paměti RVTSO (Extension for Total Store Ordering). | 0,1 | Zamrzlý |
G | = IMAFD Zicsr Zifencei Zobecněné/zkrácené označení pro sadu rozšíření | n/a | n/a |
Část 2 Standardní sady příkazů pro privilegované režimy | |||
Stroj ISA | Pokyny na úrovni hardwaru | 1.12 | Ratifikováno |
Vedoucí ISA | Pokyny na úrovni supervizora | 1.12 | Ratifikováno |
Rozšíření Svnapot | (Rozšíření pro kontiguitu překladu NAPOT) | 1,0 | Ratifikováno |
Rozšíření Svpbmt | (Rozšíření pro typy paměti založené na stránce) | 1,0 | Ratifikováno |
Rozšíření Svinval | (Rozšíření pro zneplatnění mezipaměti jemného překladu adres) | 1,0 | Ratifikováno |
Hypervisor ISA | Pokyny na úrovni hypervizoru | 1,0 | Ratifikováno |
Pro 32bitové mikrokontroléry a další embedded aplikace se používá sada RV32EC. V 64bitových procesorech může být sada skupin RV64GC, stejná v plné notaci - RV64IMAFDC.
32bitový formát strojové instrukce (vlastnosti - nízké bity jsou vždy "11" a bity 2-4 ≠̸ "111")
Typ | 31 | třicet | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | dvacet | 19 | osmnáct | 17 | 16 | patnáct | čtrnáct | 13 | 12 | jedenáct | deset | 9 | osm | 7 | 6 | 5 | čtyři | 3 | 2 | jeden | 0 |
Registrovat/Registrovat | funkce7 | rs2 | rs1 | funkce3 | rd | operační kód | jeden | jeden | ||||||||||||||||||||||||
s operandem | ± | imm[10:0] | rs1 | funkce3 | rd | operační kód | jeden | jeden | ||||||||||||||||||||||||
S dlouhým operandem | ± | imm[30:12] | rd | operační kód | jeden | jeden | ||||||||||||||||||||||||||
Zachování | ± | imm[10:5] | rs2 | rs1 | funkce3 | imm[4:0] | operační kód | jeden | jeden | |||||||||||||||||||||||
větvení | ± | imm[10:5] | rs2 | rs1 | funkce3 | imm[4:1] | [jedenáct] | operační kód | jeden | jeden | ||||||||||||||||||||||
Přechod | ± | imm[10:1] | [jedenáct] | imm[19:12] | rd | operační kód | jeden | jeden |
RISC-V má 32 (nebo 16 pro embedded aplikace) celočíselných registrů. Při implementaci reálných skupin příkazů je k dispozici dalších 32 reálných registrů.
Uvažuje se o možnosti zařadit do standardu další sadu 32 vektorových registrů s proměnnou délkou zpracovávaných hodnot, jejichž délka je uvedena v CSR vlenb [9] .
Pro operace s čísly v binárních formátech s pohyblivou řádovou čárkou se používá sada dalších 32 registrů FPU (Floating Point Unit), které jsou sdíleny rozšířeními základní instrukční sady pro tři možnosti přesnosti: jednoduchá - 32 bitů (rozšíření F), dvojitá - 64 bitů (D - Rozšíření s dvojnásobnou přesností), stejně jako čtyřnásobné - 128 bitů (Q - Rozšíření se čtyřnásobnou přesností).
Registrovat | Jméno v ABI | Popis | Typ |
---|---|---|---|
32 celočíselných registrů | |||
x0 | Nula | vždy nula | |
x1 | ra | zpáteční adresa | Vzdorný |
x2 | sp | ukazatel zásobníku | volala |
x3 | gp | globální ukazatel | |
x4 | tp | ukazatel vlákna | |
x5 | t0 | Dočasná/alternativní zpáteční adresa | Vzdorný |
x6–7 | t1–2 | Dočasný | Vzdorný |
x8 | s0/fp | Uložený ukazatel registru / rámce | volala |
x9 | s1 | uložený registr | volala |
x10-11 | a0–1 | Argument funkce / návratová hodnota | Vzdorný |
x12–17 | a2–7 | argument funkce | Vzdorný |
x18–27 | s2–11 | uložený registr | volala |
x28–31 | t3–6 | Dočasný | Vzdorný |
32 dalších registrů s pohyblivou řádovou čárkou | |||
f0–7 | 0–7 stop | Provizoria s pohyblivou řádovou čárkou | Vzdorný |
f8–9 | fs0-1 | Uložené registry s plovoucí desetinnou čárkou | volala |
f10–11 | fa0–1 | argumenty s plovoucí desetinnou čárkou/návratové hodnoty | Vzdorný |
f12–17 | fa2–7 | argumenty s plovoucí desetinnou čárkou | Vzdorný |
f18–27 | fs2–11 | Uložené registry s plovoucí desetinnou čárkou | volala |
f28–31 | 8–11 stop | Provizoria s pohyblivou řádovou čárkou | Vzdorný |
V rámci projektu bylo vytvořeno a pod volnou licencí zveřejněno šest návrhů mikroprocesorů s architekturou RISC-V: 64bitový generátor Rocket (7. října 2014 [10] [11] ) a pět zjednodušených výukových jader Sodor s různé mikroarchitektury.
Bylo také publikováno několik simulátorů (včetně qemu a ANGEL, simulátor JavaScriptu, který běží v prohlížeči), kompilátory (LLVM, GCC), varianta linuxového jádra pro běh na RISC-V a designový kompilátor Chisel, který vám umožňuje získat kód Verilog . Publikovány byly i ověřovací testy [12] .
Nezisková organizace lowRISC plánuje vytvořit systém na čipu založený na 64bitovém jádře Rocket RISC-V s následnou masovou výrobou čipů [13] [14] .
Na konferenci RISC-V Workshop 2017 vyšlo najevo, že Esperanto Technologies vyvíjí 64bitový vysoce výkonný univerzální procesor na instrukční sadě RISC-V s heterogenní architekturou s vysokým stupněm paralelismu (připomínající procesor Cell ve struktuře ), která v maximální konfiguraci bude obsahovat 16 jader ET-Maxion (představující pipeline s mimo pořadí prováděním instrukcí a pracující s daty s plovoucí desetinnou čárkou) a 4096 jader ET-Minion (potrubí se sekvenčním prováděním instrukcí a blok s vektorovými výpočty v každém jádru) [15] .
Společnost Western Digital uvedla, že ve spolupráci s esperantem povýší současný stav architektury procesorů RISC-V z mikrokontroléru na vysoce výkonná řešení a vytvoří výpočetní architekturu nové generace pro zpracování „ velkých dat “ [16] . ekosystém pro rychlý přístup k datům - mluvíme o vytvoření specializovaných RISC-V-jádrů pro budování architektury procesor-in- paměť (processor-in-memory) [17] .
Řada společností nabízí hotové bloky IP jader založených na architektuře RISC-V, mezi nimi:
Masově vyráběné procesory a mikrokontroléry založené na architektuře RISC-V ve formátu system-on-a-chip .
Mikroprocesory:
Mikrokontroléry vydané v letech 2017-2019:
Mikrokontroléry vydané v roce 2020:
Mikrokontroléry vydané v roce 2021:
![]() | |
---|---|
Foto, video a zvuk |
procesorů | Technologie digitálních|||||||||
---|---|---|---|---|---|---|---|---|---|
Architektura | |||||||||
Architektura instrukční sady | |||||||||
strojové slovo | |||||||||
Rovnoběžnost |
| ||||||||
Implementace | |||||||||
Komponenty | |||||||||
Řízení spotřeby |
Mikrokontroléry | ||||||||
---|---|---|---|---|---|---|---|---|
Architektura |
| |||||||
Výrobci |
| |||||||
Komponenty | ||||||||
Obvod |
| |||||||
Rozhraní | ||||||||
OS | ||||||||
Programování |
|
RISC | Architektury procesorů založené na technologiích|
---|---|