RISC-V | |
---|---|
Fejlesztő | UC Berkeley |
Bit mélység | 32 bites, 64 bites, 128 bites |
Bemutatták | 2010 |
Verziók | Privileged ver.20191213, privileged ver. 20190608 |
Építészet | RISC |
Típusú | lajstrom-nyilvántartás |
SK kódolás | változó |
Átmenet végrehajtása | Összehasonlítás és átmenet |
Byte sorrend | kis-endian |
Oldalméret | 4 KiB |
Kiterjesztések | M, A, F, D, Q, C |
nyisd ki? | Igen |
Regisztrálok | |
Általános rendeltetésű | 16, 32 (beleértve, hogy x0 mindig nulla) |
Igazi | 32 (F, D, G mellék) |
SIMD | 32 vektorregiszter, egyenként 1024 bitig (V kiterjesztés) |
Médiafájlok a Wikimedia Commons oldalon |
A RISC-V egy nyílt és ingyenes utasításkészlet és processzorarchitektúra , amely a RISC koncepción [1] alapul mikroprocesszorokhoz és mikrokontrollerekhez . A specifikációk ingyenesen és ingyenesen használhatók, beleértve a kereskedelmi megvalósításokat közvetlenül szilícium- vagy FPGA - konfigurációban . Beépített képességekkel rendelkezik a parancsok listájának bővítésére, és számos alkalmazáshoz alkalmas.
2010-ben hozták létre a Berkeley-i Kaliforniai Egyetem Számítástechnikai Tanszékének kutatói David Patterson közvetlen részvételével [2] [3] .
A RISC-V fejlesztésére és népszerűsítésére 2015-ben egy nemzetközi RISC-V alapítványt [4] és egy zürichi székhelyű egyesületet [5] hoztak létre ; 2018 óta a RISC-V Alapítvány szoros együttműködésben dolgozik a Linux Foundationnel . Az irányítási és technikai bizottságokba két orosz cég tartozik, amelyek processzormagokat fejlesztenek – a Syntacore [6] és a CloudBEAR.
2022 februárjában az Intel bejelentette [7] , hogy egymilliárd dollárt fektet be a RISC-V fejlesztésébe, és csatlakozott a RISC-V vezetéséhez.
2022 szeptemberében megalakult a RISC-V Szövetség [8] Oroszországban .
A RISC-V leírása viszonylag kis számú szabványos utasítást tartalmaz, körülbelül 50 darabot, amelyek közül sok az 1980 eleji RISC-I-re jellemző. A szabványos kiterjesztések (M, A, F és D) 53 utasítással bővítik a halmazt, a tömörített C formátum 34 utasítást határoz meg. 6 típusú utasításkódolást (formátumot) használnak.
A RISC-V architektúra az utasítások egy kis részhalmazával (az I-Integer utasításkészlettel) rendelkezik, amelyeket végre kell hajtani, és számos szabványos opcionális bővítményt.
Az alapkészlet tartalmazza a vezérlés/elágazás feltételes és feltétel nélküli átadására vonatkozó utasításokat, a regisztereken végzett aritmetikai/bitműveletek minimális készletét, a memóriaműveleteket (betöltés/tárolás), valamint néhány szervizutasítást.
Az elágazási műveletek nem használnak közös zászlókat a korábban elvégzett összehasonlítási műveletek eredményeként, hanem közvetlenül összehasonlítják a regiszter-operandusokat. Az összehasonlítási műveletek alapja minimális, és az operandusokat egyszerűen felcserélik a kiegészítő műveletek támogatására.
Az utasítások alapvető részhalmaza a következő regiszterkészletet használja: egy speciális x0 regiszter (nulla), 31 általános célú egész regiszter (x1 - x31), egy programszámláló regiszter (PC, csak közvetetten használva), és egy CSR-készlet ( Vezérlési és állapotregiszterek, legfeljebb 4096 CSR címezhetők.
Beágyazott alkalmazásokhoz az RV32E (beágyazott) architektúra-változat használható általános célú regiszterek csökkentett készletével (az első 16). A regiszterek számának csökkentése nem csak a hardver erőforrások megtakarítását teszi lehetővé, hanem a memória és a regiszterek mentésére/visszaállítására fordított idő csökkentését is a környezetváltás során.
Ugyanezzel az utasításkódolással a RISC-V 32, 64 és 128 bites általános célú regiszterekkel és műveletekkel rendelkező architektúrák megvalósítását biztosítja (RV32I, RV64I és RV128I).
A regiszterműveletek bitessége mindig megfelel a regiszter méretének, és a regiszterekben ugyanazok az értékek egész számként kezelhetők, előjeles és előjel nélküli is.
Nincsenek műveletek a regiszterek részein, nincsenek dedikált "regiszterpárok".
A műveletek sehol nem tárolnak átviteli vagy túlcsordulási biteket, ami közel áll a C programozási nyelv műveleti modelljéhez. A túlcsordulás, sőt a 0-val való osztás kivételét sem hardver generálja, hanem az operandusok és a műveletek eredményeinek minden szükséges ellenőrzését szoftverben kell elvégezni.
A kiterjesztett pontosságú egész aritmetikának (a regiszter bitszélességénél nagyobb) kifejezetten műveleteket kell használnia az eredmény magasabb rendű bitjeinek kiszámításához. Például vannak speciális utasítások egy regiszter és egy regiszter szorzatának felső bitjeinek lekérésére.
Az operandus mérete csak a memóriaműveletek során térhet el a regiszter méretétől. A memóriatranzakciókat blokkokban hajtják végre, amelyek bájtban megadott mérete 2 nem negatív egész hatványa kell, hogy legyen, egy bájttól egészen a regiszter méretéig. A memóriában lévő operandusnak "természetes igazítással" kell rendelkeznie (a cím az operandus méretének többszöröse).
Az architektúra csak a kis végű modellt használja - a memóriában lévő operandus első bájtja megfelel a regiszter-operandus értékeinek legkevésbé jelentős bitjeinek.
Regisztermentés/betöltés utasításpár esetén a memóriában lévő operandust a kiválasztott architektúra regiszterének mérete határozza meg, nem pedig az utasításkódolás (az utasításkód ugyanaz az RV32I, RV64I és RV128I esetén, hanem az operandusok mérete 4, 8 és 16 bájt), ami megfelel a mutató méretének, a C programozási nyelv size_t típusainak vagy a mutató különbségének.
A regiszter méreténél kisebb memóriában lévő operandusok minden megengedett méretéhez külön utasítások vannak a regiszter alsó bitjeinek betöltésére/mentésére, beleértve a memóriából a regiszterbe történő betöltést is, az utasításoknak vannak páros verziói, amelyek lehetővé teszik értelmezze a betöltött értéket előjelesnek (a memóriából a legmagasabb előjelű bitek a regiszter magas bitjeivel vannak feltöltve) vagy előjel nélküliként (a regiszter magas bitjei 0-ra vannak állítva).
Az alapvető utasításkészlet 32 bites, 32 bites szóhatárhoz igazítva, de az általános formátum különböző hosszúságú utasításokat biztosít (normál – 16 bittől 192 bitig 16 bites lépésekben), 16 bites szóhatárhoz igazítva. Az utasítás teljes hossza egységesen dekódolásra kerül az első 16 bites szótól kezdve.
A leggyakrabban használt utasítások esetében szabványosították a megfelelőik használatát egy kompaktabb 16 bites kódolásban (C - Compressed kiterjesztés).
A szorzás, osztás és a maradék kiszámításának műveletei nem szerepelnek a minimális utasításkészletben, hanem külön kiterjesztésben vannak kiosztva (M - Multiply extension). Számos érv szól amellett, hogy ezt a halmazt két különálló részre kell osztani (szorzás és osztás).
Az atomi műveletek külön sorozatát szabványosították (A - Atomic kiterjesztése).
Mivel az alapvető utasításkészlet kódolása nem függ az architektúra bitességétől, ugyanaz a kód potenciálisan különböző RISC-V architektúrákon futhat, meghatározhatja az aktuális architektúra bitességét és egyéb paramétereit, az utasításrendszer kiterjesztésének jelenlétét. , majd automatikusan konfigurálja a célvégrehajtási környezetet.
A RISC-V specifikáció több területet biztosít az utasításkódolási térben az architektúra egyéni "X-kiterjesztéseinek" számára, amelyek az összeállító szintjén custom0 és custom1 utasításcsoportként támogatottak.
Csökkentés | Név | Változat | Állapot |
---|---|---|---|
Alapkészletek | |||
RVWMO | Alapvető memória konzisztencia modell | 2.0 | Ratifikálva |
RV32I | Alapkészlet egész műveletekkel, 32 bites | 2.1 | Ratifikálva |
RV64I | Alapkészlet egész műveletekkel, 64 bites | 2.1 | Ratifikálva |
RV32E | Alapkészlet egész számokkal végzett műveletekkel beágyazott rendszerekhez , 32 bites, 16 regiszter | 1.9 | Piszkozat |
RV128I | Alapkészlet egész műveletekkel, 128 bites | 1.7 | Piszkozat |
1. rész Szabványos nem privilegizált parancskészletek | |||
M | Egész számok szorzása és osztása | 2.0 | Ratifikálva |
A | Atomic utasítások | 2.1 | Ratifikálva |
F | Egypontos lebegőpontos lebegőpontos aritmetika | 2.2 | Ratifikálva |
D | Lebegőpontos aritmetika kettős pontosságú számokon (Double-Precision Floating-Point) | 2.2 | Ratifikálva |
K | Négyszeres lebegőpontos aritmetika | 2.2 | Ratifikálva |
C | Parancsok rövid nevei (tömörített utasítások) | 2.2 | Ratifikálva |
Számlálók | Útmutató a teljesítményszámlálókhoz és időzítőkhöz -- Zicntr és Zihpm készletek | 2.0 | Piszkozat |
L | Aritmetikai műveletek decimális lebegőpontos számokkal (Decimal Floating-Point) | 0.0 | nyisd ki |
B | Bitműveletek _ | 0,36 | nyisd ki |
J | Bináris fordítás és a dinamikus fordítás támogatása (dinamikusan lefordított nyelvek) | 0.0 | nyisd ki |
T | Tranzakciós memória | 0.0 | nyisd ki |
P | Rövid SIMD műveletek (Csomagolt SIMD utasítások) | 0.1 | nyisd ki |
V | Vektoros műveletek | 1.0 | Fagyott |
Zicsr | Vezérlési és állapotnyilvántartási (CSR) utasítások | 2.0 | Ratifikálva |
Zifencei | Utasítások a parancs- és adatfolyamok szinkronizálásához (Instruction-Fetch Fence) | 2.0 | Ratifikálva |
Zihintpause | Szünet Tipp | 2.0 | Ratifikálva |
Zihintntl | Nem időbeli lokalitási tippek | 0.2 | Piszkozat |
Zam | Kiterjesztés rosszul igazított atomokhoz | 0.1 | Piszkozat |
Zfh | Kiterjesztések félpontos lebegőpontoshoz | 1.0 | Ratifikálva |
Zfhmin | Kiterjesztések félpontos lebegőpontoshoz | 1.0 | Ratifikálva |
Zfinx | Szabványos kiterjesztések a lebegőpontos integer regiszterekben | 1.0 | Ratifikálva |
Zdinx | Szabványos kiterjesztések a lebegőpontos integer regiszterekben | 1.0 | Ratifikálva |
Zhinx | Szabványos kiterjesztések a lebegőpontos integer regiszterekben | 1.0 | Ratifikálva |
Zhinxmin | Szabványos kiterjesztések a lebegőpontos integer regiszterekben | 1.0 | Ratifikálva |
Ztso | Kiterjesztés az RVTSO (Extension for Total Store Ordering) memória konzisztencia modelljéhez | 0.1 | Fagyott |
G | = IMAFD Zicsr Zifencei Kiterjesztések halmazának általánosított/rövidített elnevezése | n/a | n/a |
2. rész Standard parancskészletek privilegizált módokhoz | |||
Gép ISA | Hardverszintű utasítások | 1.12 | Ratifikálva |
ISA felügyelő | Felügyelői szintű utasítások | 1.12 | Ratifikálva |
Svnapot bővítmény | (A NAPOT fordítási kontiguitás kiterjesztése) | 1.0 | Ratifikálva |
Svpbmt kiterjesztés | (Kiterjesztés oldal alapú memóriatípusokhoz) | 1.0 | Ratifikálva |
Svinval kiterjesztés | (Kiterjesztés a finomszemcsés címfordítás gyorsítótár érvénytelenítéséhez) | 1.0 | Ratifikálva |
Hypervisor ISA | Hypervisor szintű utasítások | 1.0 | Ratifikálva |
A 32 bites mikrokontrollerekhez és más beágyazott alkalmazásokhoz az RV32EC készletet használják. A 64 bites processzorokban lehet egy csoport RV64GC, ugyanaz teljes jelöléssel - RV64IMAFDC.
32 bites gépi utasításformátum (jellemzők - az alacsony bitek mindig "11" és a 2-4 bitek ≠̸ "111")
Típusú | 31 | harminc | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | húsz | 19 | tizennyolc | 17 | 16 | tizenöt | tizennégy | 13 | 12 | tizenegy | tíz | 9 | nyolc | 7 | 6 | 5 | négy | 3 | 2 | egy | 0 |
Regisztráció/Regisztráció | funkció7 | rs2 | rs1 | funkció3 | rd | műveleti kód | egy | egy | ||||||||||||||||||||||||
operandussal | ± | imm[10:0] | rs1 | funkció3 | rd | műveleti kód | egy | egy | ||||||||||||||||||||||||
Hosszú operandusszal | ± | imm[30:12] | rd | műveleti kód | egy | egy | ||||||||||||||||||||||||||
Megőrzés | ± | imm[10:5] | rs2 | rs1 | funkció3 | imm[4:0] | műveleti kód | egy | egy | |||||||||||||||||||||||
elágazó | ± | imm[10:5] | rs2 | rs1 | funkció3 | imm[4:1] | [tizenegy] | műveleti kód | egy | egy | ||||||||||||||||||||||
Átmenet | ± | imm[10:1] | [tizenegy] | imm[19:12] | rd | műveleti kód | egy | egy |
A RISC-V 32 (vagy beágyazott alkalmazások esetén 16) egész regiszterrel rendelkezik. Valós parancscsoportok implementálásakor további 32 valós regiszter van.
Egy lehetőség fontolóra veszi egy további 32 vektorregiszterből álló, változó hosszúságú feldolgozott értékeket tartalmazó készletet a szabványba, amelyek hosszát a CSR vlenb [9] jelzi .
A bináris lebegőpontos formátumú számokkal végzett műveletekhez további 32 FPU (Floating Point Unit) regisztert használnak, amelyeket az alapvető utasításkészlet kiterjesztései osztanak meg három precíziós opcióhoz: single - 32 bit (F kiterjesztés), dupla. - 64 bit (D - Dupla precíziós kiterjesztés), valamint négyszeres - 128 bit (Q - Négyszeres precíziós kiterjesztés).
Regisztráció | Név az ABI -ban | Leírás | Típusú |
---|---|---|---|
32 egész regiszter | |||
x0 | Nulla | mindig nulla | |
x1 | ra | visszaszállítási cím | Dacos |
x2 | sp | veremmutató | hívott |
x3 | gp | globális mutató | |
x4 | tp | menetmutató | |
x5 | t0 | Ideiglenes/alternatív visszaküldési cím | Dacos |
x6–7 | t1–2 | Ideiglenes | Dacos |
x8 | s0/fp | Mentett regiszter / keretmutató | hívott |
x9 | s1 | mentett regiszter | hívott |
x10-11 | a0–1 | A függvény argumentuma / visszatérési értéke | Dacos |
x12–17 | a2–7 | függvény argumentum | Dacos |
x18–27 | s2–11 | mentett regiszter | hívott |
x28–31 | t3–6 | Ideiglenes | Dacos |
32 további lebegőpontos regiszter | |||
f0–7 | ft0–7 | Lebegőpontos ideiglenesek | Dacos |
f8–9 | fs0-1 | Lebegőpontos mentett regiszterek | hívott |
f10–11 | fa0–1 | lebegőpontos argumentumok/visszatérési értékek | Dacos |
f12–17 | fa2–7 | lebegőpontos argumentumok | Dacos |
f18–27 | fs2-11 | Lebegőpontos mentett regiszterek | hívott |
f28–31 | ft8-11 | Lebegőpontos ideiglenesek | Dacos |
A projekt részeként hat RISC-V architektúrájú mikroprocesszor-terv készült és jelent meg ingyenes licenc alatt: egy 64 bites Rocket generátor (2014. október 7. [10] [11] ) és öt egyszerűsített Sodor oktatómag különféle mikroarchitektúrák.
Számos szimulátor is megjelent (többek között a qemu és az ANGEL, a böngészőben futó JavaScript-szimulátor), fordítók (LLVM, GCC), a Linux kernel egy változata RISC-V-n futtatásra, valamint egy Chisel tervezési fordító, amely lehetővé teszi hogy megkapja a Verilog kódot. Ellenőrző teszteket is publikáltak [12] .
A lowRISC non-profit szervezet egy chipen alapuló rendszer létrehozását tervezi a 64 bites Rocket RISC-V magon, majd a chipek tömeggyártását [13] [14] .
A RISC-V Workshop 2017 konferencián ismertté vált, hogy az Esperanto Technologies 64 bites, nagy teljesítményű, általános célú processzort fejleszt a RISC-V utasításkészleten heterogén architektúrával , nagy fokú párhuzamossággal (amely a Cell processzorra hasonlít). szerkezetben ), amely a maximális konfigurációban 16 ET-Maxion magot (az utasítások rendhagyó végrehajtásával és lebegőpontos adatokkal dolgozó pipeline-okat reprezentál) és 4096 ET-Minion magot (a csővezetékek szekvenciális utasítások végrehajtásával, ill. egy blokk vektorszámításokkal minden magban) [15] .
A Western Digital közölte, hogy az Esperantóval együttműködve a RISC-V processzorarchitektúra jelenlegi állapotát a mikrokontrollerről a nagy teljesítményű megoldásokká emeli , és egy következő generációs számítási architektúrát hoz létre a „ nagy adatok ” [16] feldolgozására , valamint az adatokhoz való gyors hozzáférést biztosító ökoszisztéma – speciális RISC-V-magok létrehozásáról beszélünk a processor-in- Memory architektúra (processzor-in-memory) felépítéséhez [17] .
Számos cég kínál kész IP-magblokkokat a RISC-V architektúrán, többek között:
A RISC-V architektúrán alapuló, sorozatgyártású processzorok és mikrokontrollerek chipen rendszeres formátumban .
Mikroprocesszorok:
2017-2019 között kiadott mikrokontrollerek:
2020-ban megjelent mikrokontrollerek:
2021-ben megjelent mikrokontrollerek:
![]() | |
---|---|
Fotó, videó és hang |
processzortechnológiák | Digitális|||||||||
---|---|---|---|---|---|---|---|---|---|
Építészet | |||||||||
Instruction Set Architecture | |||||||||
gépszó | |||||||||
Párhuzamosság |
| ||||||||
Megvalósítások | |||||||||
Alkatrészek | |||||||||
Energiagazdálkodás |
Mikrokontrollerek | ||||||||
---|---|---|---|---|---|---|---|---|
Építészet |
| |||||||
Gyártók |
| |||||||
Alkatrészek | ||||||||
Periféria | ||||||||
Interfészek | ||||||||
OS | ||||||||
Programozás |
|
RISC technológiákon alapuló processzorarchitektúrák | |
---|---|