RISC-V

A RISC-V (angolul „risk-five”[1](p1), azaz „ötös számú RISC”) egy nyílt szabványú utasításkészlet-architektúra (ISA), amely a modern, megalapozott RISC elveken alapul. A legtöbb más ISA-tervezettel ellentétben a RISC-V nyílt forráskódú licencek alatt áll, amelyek használatáért nem kell fizetni. Számos cég kínál vagy jelentett be RISC-V hardvert, elérhetőek RISC-V támogatással rendelkező nyílt forráskódú operációs rendszerek, és az utasításkészletet számos népszerű szoftver eszközlánc is támogatja.

RISC-V
TervezőKaliforniai Egyetem, Berkeley
Bitek száma32, 64, 128
Bevezetés2010
Verzió
  • nem privilegizált ISA 20191213,[1]
  • privilegizált ISA 20211203[2]
KialakításRISC
Típusload-store
Kódolásváltozó, 32 bites, 16 bites tömörített
ElágazásCompare-and-branch
Bájtsorrendlittle-endian[1](p9)[3]
Utasításkészlet- kiterjesztések
  • M: Szorzás (Multiplication)
  • A: Atomi utasítások (Atomics – LR/SC & fetch-and-op)
  • F: Lebegőpontos (Floating point) (32 bites)
  • D: FP dupla (64 bites)
  • Q: FP quad (128 bites)
  • Zicsr:vezérlő- és állapotregiszter-támogatás
  • Zifencei: Load/store fence
  • C: Tömörített utasítások (Compressed instructions)(16 bites)
  • J: Interpretált vagy JIT fordítású nyelvek támogatása
Nyíltigen, jogdíjmentes
Regiszterek 
Általános célú
  • 16
  • 32
(benne egy mindig 0 értékű regiszter)
Lebegőpontos
  • 32 (F kiterjesztés)
  • 64 (D kiterjesztés)
  • 128 (Q kiterjesztés) (opcionális)

A RISC elveknek megfelelően a RISC-V ISA egy load-store (betöltő-tároló) architektúra, tehát a memória csak a betöltő és tároló utasításokon keresztül elérhető. Lebegőpontos utasításai az IEEE 754 szabványnak megfelelőek. A RISC-V ISA tervezésében több teljesítményfokozó fogást alkalmaztak, példáulaz utasításkészlet kódolásában az utasítás részeit kódoló bitmezőket úgy választották meg, hogy architekturálisan semleges módon minimalizálják a multiplexerek használatát a CPU dekódoló hardverében,[1](p17)és a közvetlen értékek legmagasabb helyiértékű bitjei is úgy lettek elhelyezve, hogy gyorsítsák az előjelkiterjesztést.[1](p17)

Az utasításkészletet a felhasználás széles skálájára tervezték. Az alap utasításkészlet 32 bites, azonos hosszú, 4 bájtos határra igazított utasításokból áll, de az ISA támogatja a változó utasításhosszú kiterjesztéseket is, amelyekben minden utasítás tetszőleges számú 16 bites csomagból állhat.[1](pp7-10)Az utasításkészlet részhalmazai támogatják a kis beágyazott rendszereket, a személyi számítógépeket, a vektorprocesszoros szuperszámítógépeket és az adattárházakat kiszolgáló, 19 hüvelykes rackbe szerelt párhuzamos számítógépeket.

Az utasításkészlet specifikációja 32 bites és 64 bites címtartomány-változatokat definiál.A specifikáció tartalmaz egy 128 bites folytonos (lapos, flat) címtér-változatot, a 32 és 64 bites változatok kiterjesztéseként,de a 128 bites ISA továbbra is szándékosan "nem befagyasztott" állapotban maradt, mert még igen kevés gyakorlati tapasztalat van az ilyen nagy memóriarendszerekkel kapcsolatban.[1](p41)

A projekt 2010-ben indult a Kaliforniai Egyetemen, Berkeleyben, de jelenleg több közreműködő az egyetemhez nem kötődő önkéntes.[4]Más akadémiai tervekkel ellentétben, amelyek jellemzően csak az egyszerűségre optimalizáltak, itt a tervezők célja az volt, hogy a RISC-V utasításkészlet a gyakorlatban alkalmazható számítógépek számára is megfelelő legyen.

2019 júniusi állapot szerint a felhasználói tér ISA 2.2-es verziója[5] és a privilegizált ISA 1.11-es verziója[2] befagyasztásra került, lehetővé téve a szoftver- és hardverfejlesztés folytatását.A felhasználói tér ISA-t, amelyet ekkor nem-privilegizált ISA-ra (Unprivileged ISA) neveztek át, frissítették, ratifikálták és a 20191213-as verzióban befagyasztották.[1]A külső hibakeresési specifikáció 0.13.2 verziójú tervezetként áll rendelkezésre.[6]

Alapvetés

RISC-V processzor prototípus, 2013 januárjában

A CPU tervezés számos egyéb területen meglévő jártasságot, szakértelmet igényel, mint például az elektronikus digitális logika, fordítóprogramok és operációs rendszerek.A tervezési költségek fedezésére a számítógép- ill. processzortervek kereskedelmi forgalmazói, mint például az Arm Ltd. és a MIPS Technologies, jogdíjat számítanak fel a terveik, szabadalmaik és szerzői jogaik használatáért.[7][8][9]Gyakran titoktartási megállapodásokat is megkövetelnek, mielőtt kiadnák a tervezetük részletes előnyeit leíró dokumentumokat. Sok esetben egyáltalán nem teszik közzé a tervezési döntéseik okait.

A RISC-V azzal a céllal indult, hogy egy olyan gyakorlati ISA-t hozzon létre, amely nyílt forráskódú, elméleti szinten használható, és bármilyen hardver- vagy szoftvertervezetben jogdíjak nélkül felhasználható.[1](p1)[10]A projektben minden egyes tervezési döntés indoklását is kifejtik, legalábbis nagy vonalakban.A RISC-V szerzői a számítógéptervezés terén jelentős tapasztalattal rendelkező kutatók, és a RISC-V ISA egy sor akadémiai számítógép-tervezési projekt, de leginkább a Berkeley RISC közvetlen továbbfejlesztése.A RISC-V részben azért jött létre, hogy segítse az ilyen projekteket.[1](p1)[10]

A nagy és jelentékeny felhasználói közösség kiépítése és ezáltal a tervek és szoftverek felhalmozása érdekében a RISC-V ISA tervezői szándékosan támogatják a gyakorlati felhasználási esetek széles skáláját: a kompakt, a nagy teljesítményű és az alacsony fogyasztású valós megvalósításokat,[1](pp1-2,153-154)[11]elkerülve a túltervezettséget az adott mikroarchitektúra körében.[1](p1)[12][13][14]A RISC-V sokrétűsége, számos lehetséges felhasználási területet lefedő tulajdonságarészben éppen a számos közreműködő által támasztott követelmények tervezett következménye.

A tervezők fő állítása az, hogy az utasításkészlet a számítógép kulcsfontosságú interfésze, mivel a hardver és a szoftver közötti kapcsolódási ponton helyezkedik el.Ha egy jó utasításkészlet nyílt és mindenki által elérhető lenne, akkor lehetővé válna a jelentősen nagyobb mértékű újrafelhasználás, ami drámaian csökkentené a szoftverköltségeket.Ez a hardvergyártók között is fokozottabb versenyt keltene,akik így több erőforrást fordíthatnának a (hardver-) tervezésre és kevesebbet a szoftvertámogatásra.[10]

A tervezők azt állítják, hogy az utasításkészletek tervezésében egyre ritkábban bukkannak fel új elvek,mivel az elmúlt negyven év legsikeresebb tervei egyre jobban hasonlítanak egymásra.A megbukott tervezetek többsége az azokat finanszírozó cégek pénzügyi sikertelensége miatt hiúsult meg, nem pedig azért, mert az utasításkészletek technikailag gyengék voltak.Így egy jól megtervezett, jól megalapozott elvek alapján kialakított nyílt utasításkészletnek hosszú távú támogatást kell kapnia számos gyártótól.[10]

A RISC-V ösztönzi a tudományos felhasználást is. Az integer részhalmaz egyszerűsége lehetővé teszi az alapszintű hallgatói gyakorlatokat, és elég egyszerű ISA ahhoz, hogy a kutatási gépek vezérlésére szolgáló szoftverek használhatók legyenek. A változó hosszúságú ISA teret nyit az utasításkészlet-bővítéseknek mind a hallgatói gyakorlatok, mind a kutatás számára,[1](p7)a különálló privilegizált utasításkészlet pedig lehetővé teszi az operációs rendszerek támogatását célzó kutatást a fordítóprogramok újratervezése nélkül.[15]A RISC-V nyílt szellemi tulajdon paradigmája lehetővé teszi a járulékos, származtatott tervek közzétételét, újrafelhasználását és módosítását.[16]

Történet

A RISC kifejezés körülbelül 1980-ból származik.[17] Már korábban is volt némi ismeret arról, hogy az egyszerűbb számítógépek hatékonyak lehetnek (pl. John Cocke kutatása az IBM Research-nél, IBM 801 processzor), de a tervezési elveket nem tették közzé széles körben. Az egyszerű, hatékony számítógépek mindig is tudományos érdeklődésre tartottak számot, és ennek eredményeként született meg a DLX RISC utasításkészlet a Computer Architecture: A Quantitative Approach c. mű[18] első, 1990-es kiadásához, amelynek egyik szerzője David A. Patterson, aki később részt vett a RISC-V létrehozásában. A DLX-et oktatási célokra szánták; akadémikusok és amatőrök valósították meg programozható kaputömbökkel, de sohasem szánták kereskedelmi célú forgalmazásra. Az ARM ISA licencdíjai igen magasak és az újabb processzortervek zárt forrásúak. Az ARM CPU-k 2. és korábbi verzióinak utasításkészlete nyilvános, a GNU Compiler Collection (GCC), egy népszerű szabad szoftveres fordítóprogram még mindig támogatja őket. Az ARM ISA-hoz három nyílt forráskódú processzormag létezik, de azokat soha nem gyártották.[19][20][21] Az OpenRISC egy DLX-en alapuló nyílt forráskódú ISA, a hozzá tartozó RISC tervek nyilvánosak, és teljes mértékű fordító- (GCC) és operációs rendszer (Linux) támogatással rendelkezik, bár ennek is kevés kereskedelmi implementációja van.

Az első 28 nm-es technológiával készült Raven1 processzor a próbapanelen a Berkeley Wireless Research Centerben (BWRC) 2012 júniusában

Krste Asanović a Berkeley-i Kaliforniai Egyetem professzora. Kutatásaiban felmerült az igény egy nyílt forráskódú számítógépes rendszerre, és 2010-ben úgy döntött, hogy egy rövid, három hónapos nyári projekt keretében több végzős hallgatójával együtt kifejleszt és közzétesz egy ilyet. A terv egy mind az akadémiai, mind az ipari felhasználókat segítő utasításkészlet létrehozása volt.[10]A Berkeley-n dolgozó David Patterson csatlakozott az együttműködéshez, mivel ő volt a Berkeley RISC megalkotója,[17] és a RISC-V az ötödik generáció Patterson RISC-alapú kooperatív kutatási projektjeinek hosszú sorában – a RISC-V innen kapta a nevét: a V mint a római 5-ös szám az ötödik változatot jelenti.Ebben a szakaszban a diákok alkották meg a kezdeti szoftvereket, szimulációkat és CPU-kialakításokat.[4]

A RISC-V szerzői és az intézmény az ISA dokumentációt és számos CPU-tervet eredetileg BSD-licencek alá helyezték,[22]ami lehetővé tette, hogy a származtatott művek – például a RISC-V csiptervek – akár nyíltak és szabadok, vagy zártak és szabadalmilag védettek legyenek.Magát az ISA specifikációt (azaz az utasításkészlet kódolását) 2011-ben nyílt forráskódúként tették közzé, minden jogot fenntartva.[23]A tényleges technikai jelentést (más szóval a specifikációt) később Creative Commons licenc alá helyezték, hogy lehetővé tegyék a külső közreműködők által végezhető továbbfejlesztésta RISC-V Alapítvány, majd a RISC-V International szervezeteken keresztül.

A RISC-V teljes történetét és előzményeit a RISC-V International honlapján tették közzé.[24]

 

A RISC-V Alapítvány és a RISC-V International

A kereskedelmi felhasználók megkövetelik, hogy az ISA stabil legyen, mielőtt egy olyan termékben használnák, amely hosszú évekig is eltarthat.E probléma megoldására 2015-ben megalakult a RISC-V Alapítvány, amely a RISC-V definíciójával kapcsolatos szellemi tulajdon birtoklására, fenntartására és közzétételére jött létre.[25]Az eredeti szerzők és tulajdonosok átadták jogaikat az alapítványnak.[26]Az alapítványt Calista Redmond vezérigazgató vezeti, aki 2019-ben vette át a szerepet, miután az IBM-nél nyílt infrastrukturális projekteket vezetett.[27]

2019 novemberében a RISC-V Alapítvány bejelentette, hogy Svájcba költözik, az amerikai kereskedelmi szabályozásokkal kapcsolatos aggodalmakra hivatkozva.[28]2020 márciusától a szervezet egy svájci nonprofit üzleti szövetséggé alakult, és a nevét RISC-V International-ra változtatta.[29]

2019-től a RISC-V International szabadon közzéteszi a RISC-V-t meghatározó dokumentumokat, és engedélyezi az ISA korlátlan használatát szoftverek és hardverek tervezéséhez. A módosítások jóváhagyásáról azonban csak a RISC-V International tagjai szavazhatnak, és csak a tagszervezetek használhatják a védjegyoltalom alatt álló kompatibilitási logót.[26]

Díjak

  • 2017: Az utasításkészlet megkapta a Linley Group elemzői díját a legjobb technológiáért[30]

Tervezés

ISA alap és kiterjesztések

A RISC-V moduláris felépítésű, alternatív alaprészekből áll, amelyekhez opcionális bővítések járulhatnak.Az ISA alapot és a bővítményeket az ipar, a kutatóközösség és az oktatási intézmények közös erőfeszítésével fejlesztik.Az alap határozza meg az utasításokat (és azok kódolását), a vezérlési folyamatot, a regisztereket (és azok méretét), a memóriát és a címzést, a logikai ill. egész számokon végzett műveleteket és a segédműveleteket.Az alap önmagában megvalósít egy egyszerűsített általános célú számítógépet, teljes körű szoftveres támogatással, beleértve egy általános célú fordítóprogramot is.

A szabványos kiterjesztések úgy vannak meghatározva, hogy az összes szabványos bázissal és egymással is konfliktusmentesen együttműködjenek.

Több RISC-V számítógépen megvalósítható a tömörített utasításkierjesztés az energiafogyasztás, a kódméret és a memóriahasználat csökkentése érdekében.[1](pp97-99)Vannak jövőbeli tervek a hipervizorok és a virtualizáció támogatására is.[15]

Az R, V, G, C az S jelű felügyelői (supervisor) utasításkészlet kiterjesztésével együtt definiálja az összes olyan utasítást, amely egy általános célú operációs rendszer teljes körű támogatásához szükséges.

ISA alap és kiterjesztések
NévLeírásVerzióÁllapot[a]Utasítások száma
Alap
RVWMOgyenge memória rendezés2.0ratifikált
RV32Ialap integer utasításkészlet, 32 bites2.1ratifikált40
RV32Ealap integer utasításkészlet (beágyazott), 32 bites, 16 regiszter1.9nyitott40
RV64Ialap integer utasításkészlet, 64 bites2.1ratifikált15
RV128Ialap integer utasításkészlet, 128 bites1.7nyitott15
Kiterjesztés
Mszabványos kiterjesztés: integer szorzás és osztás2.0ratifikált8 (RV32) / 13 (RV64)
Aszabványos kiterjesztés: atomi utasítások2.1ratifikált11 (RV32) / 22 (RV64)
Fszabványos kiterjesztés: egyszeres pontosságú lebegőpontos utasítások2.2ratifikált26 (RV32) / 30 (RV64)
Dszabványos kiterjesztés: dupla pontosságú lebegőpontos utasítások2.2ratifikált26 (RV32) / 32 (RV64)
Zicsrvezérlő- és állapotregiszterek (CSR)2.0ratifikált6
Zifenceiutasítás-lehívás "fence" utasítás2.0ratifikált1
Gaz IMAFDZicsr Zifencei alap és kiterjesztések rövidítése, amely egy szabványos általános célú ISA-t reprezentál
Qszabványos kiterjesztés: négyszeres pontosságú lebegőpontos utasítások (Quad-Precision Floating Point)2.2ratifikált28 (RV32) / 32 (RV64)
Lszabványos kiterjesztés: decimális lebegőpontos utasítások0.0nyitott
Cszabványos kiterjesztés: tömörített utasítások2.0ratifikált40
Bszabványos kiterjesztés: bitműveletek1.0ratifikált43
Jszabványos kiterjesztés a dinamikusan fordított nyelvek támogatására0.0nyitott
Tszabványos kiterjesztés a tranzakciós memória támogatására0.0nyitott
Pszabványos kiterjesztés: pakolt-SIMD utasítások0.9.10nyitott
Vszabványos kiterjesztés: vektorműveletek1.0ratifikált187
Kszabványos kiterjesztés: skalár kriptográfia1.0.1ratifikált49
Nszabványos kiterjesztés: felhasználói szintű megszakítások1.1nyitott3
Hszabványos kiterjesztés: hipervizor1.0ratifikált15
Sszabványos kiterjesztés: felügyelői szintű utasítások1.12ratifikált4
Zamrosszul igazított atomi utasítások (Misaligned Atomics)0.1nyitott
Ztsoteljes tároló rendezés0.1befagyasztva
32 bites RISC-V utasításformátumok
formátumbit
313029282726252423222120191817161514131211109876543210
regiszter/regiszterfunct7rs2rs1funct3rdopkód
közvetlenimm[11:0]rs1funct3rdopkód
felső közvetlenimm[31:12]rdopkód
tárolásimm[11:5]rs2rs1funct3imm[4:0]opkód
elágazás[12]imm[10:5]rs2rs1funct3imm[4:1][11]opkód
ugrás[20]imm[10:1][11]imm[19:12]rdopkód
  • opkód (7 bit): részben meghatározza, hogy melyik legyen a 6 utasításformátum típusból
  • funct7, és funct3 (10 bit): ez a két mező, az opkód mezőn felül, meghatározza az elvégzendő műveletet
  • rs1, rs2, vagy rd (5 bit): index, meghatározza az első operandust (azaz a forrásregisztert), a második operandust, és a célregisztert, amelybe a számítás eredménye kerül

A megvalósítható funkciók kombinációinak kezelhetősége érdekében a jelenleg ratifikált, nem privilegizált ISA-specifikáció 27. fejezetében meghatározásra került egy nómenklatúra.Először az utasításkészlet alapját, a RISC-V kódolását, a regiszter bitszélességét és a változatot kell megadni; pl. RV64I vagy RV32E.Ezután a fenti táblázat sorrendjében a végrehajtott kiterjesztéseket jelölő betűk következnek.Minden betűt követhet egy fő verziószám, amely után következhet egy "p", ezután egy alverziószám (minor ~) állhat.Alapértelmezés szerint 0, ha nincs alverziószám, és 1.0, ha a teljes verziószám hiányzik. Így pl. az RV64IMAFD írható RV64I1p0M1p0A1p0F1p0D1p0 vagy egyszerűbben RV64I1M1A1F1D1 alakban is.Az olvashatóság érdekében a kiterjesztések között aláhúzásokat lehet használni, például RV32I2_M2_A2.

Az RV32IMAC ISA moduláris utasításkészlete

Az alap, a kiterjesztett egész- és lebegőpontos számítások, valamint a többmagos számítások szinkronizációs primitívjei, az alap és a MAFD kiterjesztések az általános célú számításokhoz szükségesnek tekinthetők, és ezért a rövidítésük G.

Egy beágyazott rendszerhez szükséges kis 32 bites számítógép konfigurációja lehet RV32EC. Egy nagy 64 bites számítógéphez konfigurációja lehet RV64GC; ami a RV64IMAFDZicsrZifenceiC rövidítése.

A kiterjesztések számának növekedésével a szabvány előírja, hogy a kiterjesztéseket egyetlen "Z" betűvel kell megnevezni, amelyet egy alfabetikus név és egy opcionális verziószám követ. Például a Zifencei az utasításlehívó kiterjesztés elnevezése. A Zifencei2 és a Zifencei2p0 ugyanennek a 2.0-s verzióját nevezi meg. A "Z" betű utáni első betű egyezményesen a legközelebbi alfabetikus kiterjesztési kategóriát jelöli (IMAFDQLCBJTPVN). Így a Zam kiterjesztés a rosszul igazított atomi utasítások esetében az "A" szabványos kiterjesztéshez kapcsolódik. Az egykarakteres kiterjesztésekkel ellentétben a Z kiterjesztéseket aláhúzással kell elválasztani, és kategóriánként, majd az egyes kategóriákon belül is betűrendben csoportosítani. Például: Zicsr Zifencei Zam.

A felügyelői (supervisor) jogosultsági szinthez tartozó kiterjesztések elnevezése ugyanígy történik, az "S" előtagot használva. A hipervizor szintre jellemző kiterjesztések elnevezése "H" előtaggal történik. A gépi szintű kiterjesztések előtagja a "Zxm" három betűje. A supervisor, hypervisor és gépi szintű utasításkészlet-bővítmények a kevésbé privilegizált bővítmények után kapják a nevüket.

A RISC-V fejlesztők létrehozhatják saját, nem szabványos utasításkészlet-bővítményeiket. Ezek a "Z" elnevezési konvenciót követik, de "X" előtaggal. Ezeket a szabványos kiterjesztések után kell megadni, és ha több nem szabványos kiterjesztés szerepel a listán, akkor azokat ábécérendben kell felsorolni.

Regiszterkészletek

Regiszter
név
Szimbolikus
név
LeírásMenti
32 egész (integer) regiszter
x0Zeronulla állandó
x1ravisszatérési címhívó
x2spveremmutatóhívott
x3gpglobális mutató (global pointer)
x4tpszál mutató (thread pointer)
x5t0ideiglenes visszatérési címhívó
x6–7t1–2ideiglenes regiszterekhívó
x8s0/fpmentett regiszter / keretmutatóhívott
x9s1mentett regiszterhívott
x10–11a0–1függvényparaméter / visszaadott értékhívó
x12–17a2–7függvényparaméterhívó
x18–27s2–11mentett regiszterhívott
x28–31t3–6ideiglenes regiszterhívó
32 lebegőpontos regiszter, kiterjesztésben
f0–7ft0–7lebegőpontos ideiglenes értékekhívó
f8–9fs0–1lebegőpontos mentett regiszterekhívott
f10–11fa0–1lebegőpontos argumentumok / visszaadott értékekhívó
f12–17fa2–7lebegőpontos argumentumokhívó
f18–27fs2–11lebegőpontos mentett regiszterekhívott
f28–31ft8–11lebegőpontos ideiglenes regiszterekhívó

A RISC-V 32 (vagy a beágyazott változatban 16) egész értékű/fixpontos regiszterrel rendelkezik, és a lebegőpontos bővítmény megvalósítása esetén külön 32 lebegőpontos regiszterrel. A memóriahozzáférési utasítások kivételével az összes utasítás csak regisztereket címez.

Az első integer regiszter egy állandó null-regiszter, a többi általános célú regiszter. A nullregiszterbe történő írásnak nincs semmilyen hatása, annak tartalma nem változik.A belőle való olvasás mindig a 0 értéket adja. A nullregiszter helyőrzőként való használata egyszerűbb utasításkészletet eredményez. Így move rx to ry helyett add immediate 0 to rx and store in ry utasítás alkalmazható.[1](p18)

Vezérlő- és állapotregiszterek léteznek az architektúrában, de a felhasználói módú programok csak a teljesítményméréshez és a lebegőpontos rendszer kezeléshez használt regiszterekhez férhetnek hozzá.

A pcprogramszámláló – egy különálló regiszter, amely az architektúra bitszélességével ill. a fixpontos regiszterekkel megegyező méretű. A PC értékét az ugróutasítások változtathatják, aktuális értéke kiolvasható az auipc utasítással.[31](p14) A PC értékét a processzor automatikusan növeli az utasításdekódolási fázis után, az aktuális utasítás bájthosszával (4-gyel a 32 bites utasításoknál, 2-vel a tömörített utasításoknál, de 4-nél több is lehetséges, ui. az utasításkészlet kódolása hosszabb utasításokat is megenged).[31](p5,6,7)

Több regiszter mentésére és visszaállítására nincsenek utasítások. Ezeket a tervezők feleslegesnek, túl bonyolultnak és feltehetőleg túl lassúnak tartották.[16]

Memóriaelérés

Sok egyéb RISC kialakításhoz hasonlóan a RISC-V is load-store architektúra: az utasítások csak regisztereket címeznek, a betöltő és tároló utasítások a memóriába és a memóriából mozgatnak adatokat.

A legtöbb betöltő és tároló utasítás 12 bites eltolással és két regiszterazonosítóval rendelkezik. Az egyik regiszter az alapregiszter, a másik regiszter a forrás (tárolásnál) vagy a cél (betöltésnél).

Az eltolás hozzáadódik egy alapregiszterhez, így képződik az effektív memóriacím.[1](p24) A cím alapregiszter plusz eltolásként történő megadása lehetővé teszi az adatstruktúrák elérését egyetlen utasítással. Ha például az alapregiszter egy verem tetejére mutat, akkor az egyes utasítások elérhetik egy alprogram helyi változóit a veremben. Hasonlóképpen a betöltő és tároló utasítások elérhetnek egy rekord típusú struktúrát vagy egy memóriával leképezett I/O eszközt. Az állandó nulla regiszter báziscímként való használata lehetővé teszi, hogy az egyes utasítások a nullás cím közelében lévő memóriához férjenek hozzá.

A memória címzése 8 bites bájt egységenként történik, az utasítások „kicsi az elején” (little-endian) sorrendben,[1](pp9-10) az adatok pedig a végrehajtási környezet interfésze által definiált bájtsorrendben, amelyben a kód fut.[1](pp3,9-10,24)A memóriaszavak a célzott regiszter méretéig a betöltő és tároló utasításokkal érhetők el.

A RISC-V-t eredetileg növekvő (little-endian) bájtsorrendre specifikálták, hogy hasonlítson más ismert, sikeres számítógépekhez, például az x86-hoz.[1](pp9-10) Ez valamennyire csökkenti a CPU bonyolultságát és költségeit is, mivel minden szóméretet ugyanabban a sorrendben olvas be. A RISC-V utasításkészlet például az utasítás legalacsonyabb címen álló bájtjával kezdve dekódol. A big-endian és a kettős bájtsorrendet támogató (bi-endian) változatokat a big-endian igazítást feltételező régi kódbázisok támogatására definiálták.[1](pp9-10)

A memóriacímeket nem kötelező az adott környezet szószélességéhez (pl. 4 bájtos szóhatárra) igazítani, ezt a végrehajtási környezet interfésze megengedheti, de az igazított címekhez való hozzáférés gyorsabb lehet; például lehetséges, hogy az egyszerűbb CPU-k az igazítási hiba megszakítás által vezérelt lassú szoftveres emulációval valósítják meg az igazítás nélküli hozzáférést.[1](pp3,24-25)

Sok RISC-utasításkészlethez (és néhány komplex utasításkészletű processzor (CISC) utasításkészlethez, mint például az x86 és az IBM System/360 és utódai, a z/Architecture rendszerek) hasonlóan a RISC-V-nek nincsenek olyan címzési módjai, amelyek visszaírnak a regiszterekbe. Tehát például nincs autoinkremetáló (automatikus címnövelő) címzés.[1](p24)

A RISC-V úgy kezeli a CPU-k vagy szálak között megosztott memóriarendszereket, hogy biztosítja, hogy egy végrehajtó szál mindig a programozott sorrendben lássa a memóriaműveleteket. A szálak és a be/kimeneti eszközök közötti kommunikációban azonban a RISC-V egyszerűbb módon működik: nem garantálja a memóriaműveletek sorrendjét, kivéve néhány specifikus utasítást, mint például a fence.

A fence utasítás garantálja, hogy a megelőző műveletek eredményei láthatóak más szálak vagy be/kimeneti eszközök rákövetkező műveletei számára. A fence garantálja a memória- és memóriába leképezett be-kiviteli műveletek kombinációinak sorrendjét. Például szét tudja választani a memóriaolvasási és -írási műveleteket anélkül, hogy az be-kiviteli műveleteket befolyásolná. Vagy ha egy rendszer a be/kimeneti eszközöket párhuzamosan működtetheti a memóriával, a fence nem kényszeríti őket arra, hogy egymásra várjanak. Egy egyszálas CPU nop utasításként dekódolhatja a fence-t.

Egyes RISC CPU-k (például a MIPS, a PowerPC, a DLX és a Berkeley RISC-I) 16 bites eltolás-értéket (offsetet) tartalmaznak a betöltő és tároló utasításokban. Egy 32 bites cím felső 16 bitjét valamilyen "felső szó betöltése", "betöltés magas helyiértékre" utasítással állítják be. Ez lehetővé teszi a felső félszó értékek egyszerű beállítását, bitek eltolása nélkül. A felső félszavas utasítások azonban leggyakrabban 32 bites konstansokat, például címeket állítanak elő. A RISC-V a SPARC-szerű 12 bites eltolás és a 20 bites set upper (felső rész beállítása) utasítások kombinációját használja. A kisebb 12 bites eltolás jelentősége az, hogy lehetővé teszi a kompakt 32 bites betöltő/tároló utasításokban a 32-ből 2 regiszter kiválasztását (ez 10 bitet igényel), és még mindig maradjon elég bit a RISC-V változó hosszúságú utasításkódolásának támogatásához.[1](p16)

Közvetlen értékek

A RISC-V a 32 bites konstansokat és címeket olyan utasításokkal kezeli, amelyek egy 32 bites regiszter felső 20 bitjét állítják be. A load upper immediate lui utasítás 20 bitet tölt be a 31-től 12-ig terjedő bitekbe. Ezután egy második utasítás, például az addi, beállíthatja az alsó 12 bitet. Kis számok vagy címek a lui helyett a nullás regiszter használatával képezhetők.

Ez a módszer kiegészül a pozíciófüggetlen kód lehetővé tételével egy auipc utasítással, amely 20 felső címbitet generál úgy, hogy a programszámlálóhoz hozzáad egy eltolást és az eredményt a bázisregiszterbe írja. Ez lehetővé teszi, hogy a program a programszámlálóhoz viszonyított 32 bites címeket generáljon.

Az alapregiszter gyakran változtatás nélkül használható, a betöltés és tárolás 12 bites eltolási értékeivel. Szükség esetén az addi beállíthatja a regiszter alsó 12 bitjét. A 64 és 128 bites ISA-kban a lui és az auipc kiterjeszti az eredmény előjelét, hogy megkapja a nagyobb címet.[1](p37)

Egyes gyors CPU-k az utasítások bizonyos kombinációit egyesített, összeolvasztott (fused) utasításként értelmezhetik. A lui vagy az auipc jó jelöltek az addi-val, a betöltéssel vagy a tárolással való egyesítésre.

Szubrutinhívások, ugrások és elágazások

A RISC-V szubrutinhívás utasítása a jal (jump and link), ami a visszatérési címet egy regiszterbe helyezi. Ez sok számítógépkonstrukcióban gyorsabb, mert megtakarít egy memória-hozzáférést a visszatérési címet közvetlenül a memóriában lévő veremben tároló rendszerekhez képest. A jal 20 bites előjeles (kettes komplemens) eltolással rendelkezik. Az eltolást (offsetet) 2-vel szorozva, majd a PC-hez hozzáadva áll elő egy 32 bites utasítást célzó relatív cím. Amennyiben az eredmény nem 32 bites (azaz a 4 egész számú többszöröse) címen van, a CPU kivételt kényszeríthet ki.[1](Section 2.5)

A RISC-V CPU-k a számított címekre a jalr (jump and link-register) utasítással ugranak. A jalr hasonló a jal-hez, de a célcímet egy 12 bites eltolás egy bázisregiszterhez való hozzáadásával állítja elő. (Ezzel szemben a jal egy nagyobb, 20 bites eltolást ad hozzá a PC-hez).

A jalr utasítás formátuma olyan, mint a regiszter-relatív betöltés- és tárolásé (I formátumú). Ezekhez hasonlóan a jalr is használható azokkal az utasításokkal, amelyek egy alapregiszter felső 20 bitjét állítják be 32 bites elágazásokhoz, akár abszolút címre (lui használatával), akár PC-relatív címre (auipc használatával pozíciófüggetlen kód esetén). (Az állandó nulla báziscím használata lehetővé teszi az egy utasítással történő hívásokat egy kis (az offset), fix pozitív vagy negatív címre.)

A RISC-V újrahasznosítja a jal és jalr utasításokat a feltétel nélküli 20 bites PC-relatív ugrások és a feltétel nélküli regiszteralapú 12 bites ugrások végrehajtására. Az ugrások csak a (link) kapcsolóregisztert állítják 0-ra, így a visszatérési cím nem kerül elmentésre.[1](Section 2.5)

A RISC-V a jalr utasítást használja az alprogramokból történő visszatéréshez is. Ekkor a jalr alapregisztere a jal vagy a jalr által a híváskor elmentett kapcsolóregiszter lesz, a jalr offsetje nulla, a kapcsoló regiszter pedig a nulla regiszter, így nincs offset, és nem kerül elmentésre újabb visszatérési cím, csak egy ugrás hajtódik végre.[1](Section 2.5)

Sok RISC kialakításhoz hasonlóan a RISC-V fordítónak egy szubrutinhívás során egyedi utasításokkal kell a regisztereket a veremre menteni a szubrutin kezdetekor, majd kilépéskor visszaállítani a veremről. A RISC-V nem rendelkezik többszörös regisztermentő és -visszatöltő utasításokkal. A tervezők úgy vélték, hogy ezek túl bonyolulttá teszik és feltehetően lassítják is a processzor működését.[32]A regiszterek mentése így nagyobb kódmérettel jár. Erre egy lehetséges megoldás, hogy a regiszterek mentésére és visszaállítására szolgáló könyvtári rutinokkal csökkentik a kódméretet.[33]

A RISC-V-ben nincs állapotregiszter vagy átvitelbit.[34] A tervezők szerint a feltételkódok bonyolultabbá teszik a gyors CPU-kat azáltal, hogy a végrehajtás különböző szakaszaiban lévő utasítások között kölcsönhatásokat kényszerítenek ki. Ez a tervezési döntés bonyolultabbá teszi a többszörös pontosságú aritmetikát. Emellett néhány numerikus feladat több energiát igényel. Ennek eredményeképpen a predikáció (az utasítások feltételes végrehajtása) nem támogatott. A tervezők azt állítják, hogy a nagyon gyors, sorrenden kívüli (out-of-order) CPU-tervek egyébként is végeznek jóslást, az összehasonlító elágazás és a feltételes kód párhuzamos végrehajtásával, majd a nem használt útvonalak hatásainak elvetésével. Azt is állítják, hogy még az egyszerűbb CPU-kban is kevésbé értékes a jóslás/predikció, mint az elágazás-előrejelzés, amely a feltételes elágazásokkal kapcsolatos legtöbb elakadást megelőzheti. A predikció nélküli kód ugyan nagyobb és több elágazással jár, de állítják, hogy egy tömörített utasításkészlet (mint például a RISC-V C jelű készlete) a legtöbb esetben megoldja ezt a problémát.[16]

Ehelyett a RISC-V rövid elágazásokkal rendelkezik, amelyek összehasonlításokat végeznek: egyenlő, nem egyenlő, kisebb mint, előjel nélküli kisebb mint, nagyobb vagy egyenlő és előjel nélküli nagyobb vagy egyenlő. Tíz összehasonlító elágazási művelet mindössze hat utasítással van megvalósítva, az operandusok sorrendjének megfordításával az assemblerben.Például az elágazás, ha nagyobb, mint művelet a kisebb, mint művelet operandusai sorrendjének megfordításával végezhető.[1](Section 2.5)

Az összehasonlító ágak 12 bites előjeles tartományúak, és az ugrások a PC-hez képest relatívak.[1](Section 2.5)

Néhány RISC-architektúrával ellentétben a RISC-V nem tartalmaz elágazási késleltetési rést (branch delay slot), amely az elágazási utasítás utáni pozíció, amelyet olyan utasítással lehet kitölteni, amely attól függetlenül végrehajtásra kerül, hogy az elágazás megtörténik-e vagy sem.[1](Section 2.5)A RISC-V-ben elhagyták az elágazási késleltetési rést, mert az bonyolítja a többciklusú CPU-kat, a szuperskalár CPU-kat és a hosszú futószalagokat. A dinamikus elágazás-előrejelzők (branch predictor) már elég fejlettek ahhoz, hogy szükségtelenné tegyék a késleltetett elágazások használatát.[16]

Mikor a RISC-V processzorokban a végrehajtás első alkalommal egy elágazáshoz ér, azt feltételezi, hogy az egy negatív relatív elágazás (azaz a címeltolás előjelbitje "1")[1](Section 2.5) – tehát hogy a visszafelé történő elágazás egy ciklus, és megad egy alapértelmezett irányt, amelynek megfelelően az egyszerű futószalagos CPU-k fel tudják tölteni a futószalagjukat utasításokkal. Ennek ellenére a RISC-V kialakítás nem követeli meg az elágazás-előrejelzést, de a magok implementációi hozzáadhatják azt. Az RV32I fenntart egy "HINT" utasításteret, amely jelenleg nem tartalmaz elágazásokra vonatkozó utalásokat.[1](Section 2.9) Az RV64I ugyanezt teszi.[1](Section 5.4)

Aritmetikai és logikai készletek

A RISC-V a számtant az egész számok utasításainak minimális készletére (I készlet) korlátozza, amely tartalmaz összeadást, kivonást, eltolást, bitműveleteket és összehasonlító elágazásokat. Ezekkel szoftveresen szimulálható a legtöbb egyéb RISC utasításkészlet. (Az atomi utasítások figyelemre méltó kivételt képeznek.) A RISC-V utasításkészletében jelenleg nincsenek olyan vezető nullák számlálása (count leading zero) és bitmező-kezelő műveletek, amiket általában a lebegőpontos számítások szoftveres gyorsítására használnak a tisztán egész értékű processzorokban.

Az egész számok szorzási utasításai (M készlet) tartalmazzák az előjeles és előjel nélküli szorzást és osztást. Van kétszeres pontosságú egész számú szorzás és osztás is, mint olyan műveletek, amelyek az eredmény magas szavát adják. Az ISA dokumentum azt ajánlja, hogy a CPU-k és a fordítóprogramok megvalósítói lehetőség szerint a magas és alacsony szorzási és osztási utasítások szabványosított sorozatát vonják össze egy műveletbe.[1](pp43-45)

A lebegőpontos utasítások (F készlet) tartalmaznak egyszeres pontosságú aritmetikát és az egész értékű aritmetikához hasonló összehasonlító elágazásokat is. A lebegőpontos csomag további 32 lebegőpontos regisztert igényel. Ezek elkülönülnek az fixpontos regiszterektől. A kétszeres pontosságú lebegőpontos utasítások (D készlet) általában feltételezik, hogy a lebegőpontos regiszterek 64 bitesek (azaz dupla szélességűek), és az F alkészletet a D készlettel hangolják össze. Egy négyszeres pontosságú 128 bites lebegőpontos ISA (Q) is definiálva van.[1](pp63-82) A lebegőpontos utasítások nélküli RISC-V gépek lebegőpontos szoftverkönyvtárat használhatnak.

A RISC-V nem okoz kivételeket aritmetikai hibák esetén, beleértve a túlcsordulást,[1](pp17-20)az alulcsordulást, a szubnormális számokat és a nullával való osztást.[1](pp44-45)Ehelyett mind az egész-, mind a lebegőpontos aritmetika észszerű alapértelmezett értékeket produkál, és a lebegőpontos utasítások állapotbiteket állítanak be.[1](p66)A nullával való osztás az osztás után egy elágazással kimutatható.[1](pp44-45)Az állapotbitek az operációs rendszerben vagy periodikus megszakítással tesztelhetők.

Atomi memóriaműveletek

A RISC-V támogatja azokat a számítógéptípusokat, amelyekben több CPU és szál osztozik a memórián. A RISC-V szabványos memóriakonzisztencia-modellje a feloldó konzisztencia (release consistency). Ez azt jelenti, hogy a betöltések és tárolások általában átrendezhetők, de egyes betöltések lehetnek olyan megszerzési műveletek, amelyeknek meg kell előzniük a későbbi memóriahozzáféréseket, és egyes tárolások lehetnek olyan felszabadítási műveletek, amelyeknek korábbi memóriahozzáféréseket kell követniük.[1](pp83-94)

A memóriasorrend kikényszerítésére az alap utasításkészlet minimális támogatást tartalmaz egy fence utasítás formájában.[1](pp26-27)Habár ez elegendő (a fence r, rw biztosítja az igénylést (acquire), a fence rw, w pedig a feloldást (release)), a kombinált műveletek hatékonyabbak lehetnek.[1](Chapter 8)

Az atomi memóriaművelet kiterjesztés kétféle atomi memóriaműveletet támogat a feloldó (elengedési) konzisztencia érdekében. Először is, általános célú load-reserved lr és store-conditional sc utasításokat biztosít. Az lr elvégzi a betöltést, és megpróbálja lefoglalni az adott címet a szál számára. Egy későbbi feltételes tároló sc utasítás a lefoglalt címre csak akkor kerül végrehajtásra, ha a foglalást nem töri meg egy közbenső tárolás egy másik forrásból. Ha a tárolás sikeres, akkor egy nullát helyez el egy regiszterben. Ha nem sikerült, egy nem nulla érték jelzi, hogy a szoftvernek újra kell próbálnia a műveletet. Mindkét esetben a foglalás fel lesz oldva.[1](Chapter 8)

Az atomi utasítások második csoportja olvasás-módosítás-írás szekvenciákat hajt végre: betöltés (load, ami opcionálisan betöltés-igénylés, load-acquire) egy célregiszterbe, majd művelet a betöltött érték és egy forrásregiszter között, majd az eredmény tárolása (ami opcionálisan lehet tárolás-feloldás, store-release). A memóriakorlátok opcionálissá tétele lehetővé teszi a műveletek kombinálását. Az opcionális műveleteket a minden atomi utasításban jelenlévő acquire és release bitek engedélyezik. A RISC-V kilenc lehetséges műveletet határoz meg: swap (forrásregiszter értékének közvetlen használata); add (összeadás); bitenkénti és; vagy és exkluzív vagy; valamint előjeles és előjel nélküli minimum és maximum.[1](Chapter 8)

Egy rendszerkialakítás ezeket a kombinált műveleteket az lr és sc utasításoknál jobban is optimalizálhatja. Ha például egy swap célregisztere a nulla konstans, a betöltés kihagyható. Ha a tárolt érték a betöltés óta nem változott, a tárolás kihagyható.[5](p44)

Az IBM System/370 és leszármazottai, beleértve a z/Architecture-t és az x86-ot is, egyaránt egy compare-and-swap (cas) utasítást valósít meg, amely tesztel és feltételesen frissít egy memóriahelyet: ha a hely egy várt régi értéket tartalmaz, a cas lecseréli azt egy adott új értékre; ezután visszajelzi, hogy végrehajtotta-e a módosítást. A cas előtt azonban általában egy egyszerű betöltés típusú utasítást kell végrehajtani a régi érték lekérdezésére. A klasszikus probléma az, hogy ha egy szál beolvas (betölt) egy A értéket, kiszámít egy új C értéket, majd cas segítségével kicseréli A-t C-re, akkor nem képes megállapítani, hogy egy másik szál párhuzamos tevékenysége nem cserélte-e ki A-t valamilyen más B értékre, majd közben visszaállította az A-t. Egyes algoritmusokban (pl. olyanokban, amelyekben a memóriában lévő értékek dinamikusan kiosztott blokkok mutatói) ez az ABA-probléma hibás eredményekhez vezethet.A leggyakoribb megoldás egy dupla széles cas utasítást alkalmaz a mutató és egy szomszédos számláló frissítésére; sajnos egy ilyen utasítás speciális utasításformátumot igényel több regiszter megadásához, több olvasást és írást hajt végre, és bonyolult sínműveletekkel járhat.[1](pp48-49)

Az lr/sc alternatíva hatékonyabb. Általában csak egy memóriabetöltést igényel, és a lassú memóriaműveletek minimalizálása kívánatos. Emellett pontos is: a memóriacellához való minden hozzáférést ellenőriz, ahelyett, hogy csak egy bitmintát biztosítana. Ugyanakkor a cas-től eltérően megengedheti a livelockot, amelyben két vagy több szál ismételten/felváltva egymás utasításainak sikertelenségét okozza. A RISC-V garantálja az előrehaladást (nincs livelock), ha a kód követi az utasítások időzítésére és sorrendjére vonatkozó következő szabályokat:1) Csak az I részhalmazt használhatja.2) Az ismétlődő gyorsítótár-találati hibák elkerülése érdekében a kód mérete (beleértve az újrapróbáló hurkot is) legfeljebb 16 egymást követő utasítás lehet.3) Nem tartalmazhat rendszer- vagy fence utasításokat, illetve nem tehet visszafelé történő elágazásokat az lr és sc között.4) Az újrakezdési hurokhoz tartozó vissza-elágazásnak az eredeti utasítássorozathoz kell vezetnie.[1](pp48-49)

A specifikáció példát ad arra, hogyan lehet a read-modify-write atomi utasításokat egy adatstruktúra zárolására használni.[1](p54)

Tömörített utasításkészlet

A szabványos RISC-V ISA előírja, hogy minden utasítás 32 bites.Ez különösen egyszerű megvalósítást tesz lehetővé, de hasonlóan a többi 32 bites utasításkódolású RISC processzorhoz, nagyobb kódméretet eredményez, mint a változó hosszúságú utasításkészletek.[1](p99)[32]

Ennek ellensúlyozására a RISC-V 32 bites utasításai valójában 30 bitesek; az opkód terület 3⁄4-e egy opcionális (de ajánlott) változó hosszúságú tömörített utasításkészlet, az RVC számára van fenntartva, amely 16 bites utasításokat (is) tartalmaz. Az opkód legalsó két bitje az utasításhossz kódolására van fenntartva, így a kiterjesztési lehetőséget már eleve tartalmazza.Az ARM Thumbhoz és a MIPS16-hoz hasonlóan a tömörített utasítások egyszerűen a nagyobb utasítások egy részhalmazának megfelelői (aliasai). Az ARM Thumb vagy a MIPS tömörített készletétől eltérően a helyet kezdettől fogva lefoglalták, így nincs külön működési mód; a szabványos és a tömörített utasítások szabadon keverhetők egymással.[1](p97)[32] (A kiterjesztés betűjele C)[1](p97)

Mivel (a Thumb-1-hez és a MIPS16-hoz hasonlóan) a tömörített utasítások egyszerűen a nagyobb utasítások egy kiválasztott részhalmazának alternatív kódolásai (aliasok), a tömörítés megvalósítható az assemblerben, és a fordítóprogramnak egyáltalán nem is kell tudnia róla.

Az RVC prototípusát 2011-ben tesztelték.[32]A prototípus kódja 20%-kal kisebb volt, mint egy x86-os PC és MIPS tömörített kód, és 2%-kal nagyobb, mint az ARM Thumb-2 kódja.[32]Emellett jelentősen csökkentette mind a szükséges gyorsítótárazott memóriát, mind a memóriarendszer becsült energiafelhasználását.[32]

A kutatók a bináris kód méretét kívánták csökkenteni a kis számítógépek, különösen a beágyazott rendszerek számára.A prototípus a leggyakrabban használt utasítások közül 33-at tartalmazott, amelyeket kompakt 16 bites formátumban, korábban a tömörített készlet számára fenntartott műveleti kódok felhasználásával átkódoltak.[32]A tömörítést az assemblerben végezték, a fordítóprogramon nem kellett változtatni.A tömörített utasításokból kihagytak olyan mezőket, amelyek gyakran nullák, kis közvetlen értékeket használnak, vagy a regiszterek (16 vagy 8) részhalmazaihoz férnek hozzá.Az addi utasítás nagyon gyakori és gyakran tömöríthető.[32]

Az ARM Thumb készletéhez képest a méretbeli különbség nagy része azért alakult ki, mert a RISC-V és a prototípus nem rendelkezik több regiszter mentésére és visszaállítására szolgáló utasításokkal. Ehelyett a fordító hagyományos utasításokat generált, amelyek a veremhez férnek hozzá. A prototípus RVC assemblere aztán gyakran alakította át ezeket tömörített formába, amely fele akkora volt. Ez azonban még mindig több kódterületet igényelt, mint a több regisztert mentő és visszaállító ARM utasítások. A kutató azt javasolta, hogy a fordítót úgy módosítsák, hogy a regiszterek mentéséhez és visszaállításához könyvtári rutinokat hívjon meg. Ezek a rutinok általában a kód gyorsítótárában maradnának, és így gyorsan futnának, bár valószínűleg nem olyan gyorsan, mint a többszörös mentés utasítás.[32]

A szabványos RVC esetenként 32 bites utasítások használatát igényli. Számos nem szabványos RVC javaslat létezik, amely teljes, nem igényel 32 bites utasításokat, és állítólag nagyobb sűrűségű, mint a szabványos RVC.[35][36]Egy másik javaslat ezekre épül, és azt állítja, hogy kisebb kódolási tartományt is használ.[37]

Beágyazott utasításkészlet

A legkisebb, beágyazott CPU-kra vonatkozó utasításkészlet (E készlet) méretét másképp csökkentették: a 32 egész/fixpontos regiszterből csak 16 támogatott.[1](Chapter 4)Minden aktuális kiterjesztés használható; egy érdekes lebegőpontos kiterjesztést, amely a fixpontos regisztereket lebegőpontos értékek tárolására használja, fontolóra veszik. A privilegizált utasításkészlet csak a gépi üzemmódot, a felhasználói üzemmódot és azokat a memóriasémákat támogatja, amelyek báziscím és kötött cím-relokációt használnak.[15]

Folyt egy vita a RISC-V mikrovezérlő-profiljáról, hogy megkönnyítse a mélyen beágyazott rendszerek fejlesztését. Ennek középpontjában a megszakítások gyorsabb, egyszerű C nyelvi támogatása, az egyszerűsített biztonsági módok és egyszerűsített POSIX bináris alkalmazásillesztő interfész állt.[38]

A hozzászólók kisebb, nem szabványos, alternatív 16 bites RV16E ISA-t javasoltak: több komoly javaslat a RISC-V 16 bites C (tömörített kiterjesztés) utasításait használná 8 × 16 bites regiszterekkel.[35][36]Egy komolytalan javaslat (áprilisi tréfa) felvetett egy praktikus elrendezést: 16 × 16 bites fixpontos regiszter használata, szabványos EIMC ISA-val (a 32 bites utasításokkal együtt.) A tréfa lényege az volt, hogy bankváltást alkalmazzanak, miközben egy 32 bites CPU egyértelműen jobb megoldás lenne, a nagyobb címtartomány miatt.[39]

Privilegizált utasításkészlet

A RISC-V ISA külön privilegizált utasításkészlet-specifikációt tartalmaz. 2019 augusztusában az 1.11-es verziót a RISC-V International ratifikálta.[2][15]

A specifikáció 1.11-es verziója többféle számítógépes rendszert támogat:

  1. csak gépi üzemmóddal rendelkező rendszerek, esetleg beágyazott rendszerek,
  2. gépi üzemmóddal (felügyelőprogram, supervisor számára) és felhasználói üzemmóddal egyaránt rendelkező rendszerek; olyan operációs rendszerek megvalósításához, amelyek a rendszermagot kiváltságos üzemmódban futtatják.
  3. gépi üzemmóddal, hipervizorokkal, több felügyelővel és felhasználói üzemmóddal rendelkező rendszerek minden felügyelő alatt.

Ezek közelítőleg megfelelnek a legfeljebb négy jogosultsági és biztonsági gyűrűvel rendelkező rendszereknek, általában: gép, hipervizor, felügyelő és felhasználó. Minden rétegnek rendelkeznie kell egy vékony, szabványosított támogató szoftverrel is, amely egy magasabb jogosultságú réteggel vagy a hardverrel kommunikál.[15]

Az ISA egy hipervizor üzemmódot is tartalmaz, amely ortogonális a felhasználói és a felügyelői üzemmódhoz képest.[40] Alapvető jellemzője egy konfigurációs bit, amely vagy lehetővé teszi a felügyelői szintű kód számára a hipervizor regisztereihez való hozzáférést, vagy megszakítást okoz a hozzáféréskor. Ez a bit lehetővé teszi, hogy a felügyelői üzemmód közvetlenül kezelje a hipervizor által igényelt hardvert. A módszer leegyszerűsíti az operációs rendszer által üzemeltetett hipervizorok megvalósítását. Ez népszerű üzemmód az adattárház-léptékű számítógépek működtetéséhez. A nem hosztolt hipervizorok támogatása érdekében a bit hatására ezeket a hozzáféréseket a hipervizor megszakíthatja. A kialakítás leegyszerűsíti a hipervizorok egymásba ágyazását is, amelyben egy hipervizor egy másik hipervizor alatt fut, és szükség esetén lehetővé teszi, hogy a kernel a hipervizor funkcióit a saját kernelkódján belül használja. Ennek eredményeképpen az ISA hipervizoros formája öt üzemmódot támogat: gépi, felügyelői, felhasználói, hipervizor alatti felügyelői és hipervizor alatti felhasználói módokat.

A privilegizált utasításkészlet specifikációja határozott formában definiálja a hardveres szálakat, amit a RISC-V terminológiában hart-oknak neveznek. Több hardveres szál futtatása általános gyakorlat a nagyobb teljesítményű számítógépeken. Amikor egy szál végrehajtása elakad, memóriára várva, a többi szál gyakran tovább tud haladni. A gyors, soron kívüli végrehajtású processzorokban a hardveres szálak segítségével jobban kihasználható a sok regiszter és végrehajtó egység.Végül a hardveres szálak egyszerű és hatékony módot kínálnak a megszakítások kezelésére: nincs szükség regiszterek mentésére vagy visszaállítására, egyszerűen egy másik hardveres szál végrehajtása kezdődik meg. Ugyanakkor egy RISC-V számítógépben szükséges követelmény legalább egy hardverszál, a nulladik szál megléte.[15]

A meglévő vezérlő- és állapotregiszter-definíciók támogatják a RISC-V hiba- és memóriakivételeit, valamint egy kis számú megszakítást.Az ennél több megszakítással rendelkező rendszerek számára a specifikáció definiál egy külön megszakításvezérlőt is.A megszakítások mindig a legmagasabb jogosultságú gépi szinten kezdődnek,és az egyes szintek vezérlőregiszterei explicit továbbító bitekkel rendelkeznek a megszakítások alacsonyabb jogosultsági szintű kódhoz való továbbítására. A hipervizornak például nem kell tartalmaznia olyan kódot, amely minden megszakításkor végrehajtódik, hogy továbbítsa a megszakítást az operációs rendszerhez. Ehelyett a indításkor vagy a beállítási fázisban biteket állíthat be a megszakítások továbbítására.[15]

A specifikáció többféle memóriarendszert támogat. A csak fizikai memória megfelelő a legegyszerűbb beágyazott rendszerek számára.Három UNIX-stílusú virtuális memória-rendszer is létezik a nagyméretű tárolórendszerekben tárolt gyorsítótár-memóriához.A virtuális memóriarendszereknek három mérete van, 32, 39 és 48 bites címekkel. Minden virtuális memóriarendszer támogatja a 4 KiB méretű lapokat, a többszintű laptábla-fákat, és hasonló algoritmusokat használnak a laptábla-fák bejárására.Mindegyik rendszert úgy tervezék hogy támogassa mind a hardveres, mind a szoftveres laptábla-bejárást.A laptábla-bejárás költségeinek opcionális csökkentése érdekében a szuperméretű lapok a rendszer laptábla-fájának magasabb szintjein levél-lapokként is szerepelhetnek. Az SV32 kétszintű laptábla-fával rendelkezik, és támogatja a 4 MiB-os szuperlapokat. Az SV39 háromszintű laptáblával rendelkezik, és 2 MiB-os szuperalapokat és 1 GiB-os gigalapokat támogat.Az SV48 támogatáshoz szükséges az SV39. Ez négyszintű laptáblával rendelkezik, és 2 MiB-os szuperlap, 1 GiB-os gigalap és 512 GiB-os teralap típusú lapokat támogat. A szuperalapok a legközelebbi legkisebb méretű laphatárhoz vannak igazítva.[15]

Bitműveletek

A RISC-V számára folyamatban van egy nem jóváhagyott bitmanipulációs – B jelű – ISA definiálása, amely 2021 januárjában felülvizsgálat alatt állt.[41]Egy jól kialakított bitmanipulációs műveletkészlet nagy mértékben segítheti a kriptográfiai, grafikai és matematikai műveleteket.A tervezetben dokumentált bekerülési kritériumok a következők voltak: az RV5 filozófiájának és ISA-formátumainak való megfelelés, a kódsűrűség vagy sebesség jelentős javítása (az utasításoknál legalább 3 az 1-hez arányban), valamint jelentős valós alkalmazások, beleértve a már meglévő fordítói támogatást.A 0.93-as verzió a következő típusú utasításokat tartalmazza:[42]vezető nullák számlálása, beállított bitek számlálása (populációszámlálás), logikai műveletek negálással, két szó egy regiszterbe pakolása, minimum, maximum, előjelkiterjesztés, egybites műveletek, eltolási műveletek, forgatások, általános bitsorrend-fordítás, keverési és crossbar permutációk, általánosított vagy-kombinációk, bitmező elhelyezése, kivonás és beírás (deposit), átvitel nélküli szorzás, CRC utasítások, bitmátrix műveletek (csak RV64), feltételes keverés, feltételes mozgatás, univerzális kiválasztás-eltolás (funnel shifts) és előjel nélküli címszámítások.

Pakolt SIMD / DSP kiterjesztés

A "pakolt SIMD" vagy "csomagolt SIMD" architektúrák közös jellemzője, hogy több adatelemet egyetlen, rögzített szélességű regiszterbe csomagolnak. Például egy 64 bit széles csomagolt SIMD regiszter tartalmazhat 8x8, 4x16 vagy 2x32 bit szélességű adatokat. Ilyen típusúak például az x86 MMX, 3DNow!, SSE, SSE2; az ARM NEON, POWER: AltiVec, MIPS: MDMX, SPARC: VIS, Alpha: MVI utasításkészlet-kiterjesztések. Ezek igen népszerűek voltak az 1990-es években.[43]

1994-ben jött létre a 64 bites PA-RISC CPU-k jól működő multimédiás utasításkészlete, a Multimedia Acceleration eXtensions, avagy MAX.Ez legalább 48-szorosára növelte a CPU teljesítményét a digitális jelfeldolgozási feladatokban, és 1995-ben lehetővé tette a gyakorlati valós idejű videokodekek használatát.[44][45]A PA-RISC MAX2 CPU a natív 64 bites matematika mellett egyszerre négy 16 bites rész-szón tudott műveleteket végezni, többféle túlcsorduláskezelő módszerrel;emellett képes volt a részszavakat különböző pozíciókba mozgatni.A PA-RISC MAX2-t szándékosan egyszerűsítették.Nem támogatta a 8 bites vagy 32 bites részszavak használatát. A 16 bites részszóméretet a legtöbb digitális jelfeldolgozási feladat támogatására választották. Ezeket az utasításokat olcsón lehetett megtervezni és beépíteni.

Látható, hogy a pakolt SIMD utasításokat a kereskedelmi CPU-k széles körben használják a multimédia és más digitális jelfeldolgozás olcsó felgyorsítására.[16]A RISC-V architektúrában aP nevű utasításalcsoportot foglalták le a csomagolt SIMD kiterjesztések jövőbeli szabványos készletének.Az egyszerű, olcsó RISC-V rendszerek esetében az alap ISA specifikációja azt javasolta, hogy a lebegőpontos regiszterek bitjeit használják a párhuzamos SIMD (egy utasítás, több adat) utasításokban a szóméret alatti aritmetikára.[46]

2017-ben az ANDES Technology (a RISC-V International egyik alapító tagja)részletesebb javaslatot tett közzé a RISC-V kiterjesztésekkel foglalkozó Google csoportban. A javaslat az AndeStarV3 DSP ISA-n alapult. Ezt a javaslatot tették meg később a 0.1-es verziónak.[47] 2019-től kezdve ennek a javasolt ISA-nak a hatékonysága 2- és 5-szörös közötti lehet egy alap CPU, valamint a különböző DSP kodekek viszonylatában.[48]A 2019-es javaslatból még hiányoztak az utasításformátumok és a RISC-V International licenckiosztása, de a levelezőlistán felülvizsgálták a javaslatot.[47]A javaslat több népszerűtlen részt is tartalmazott, például feltételkódot adott hozzá az utasításokhoz, ami korábban egyetlen RISC-V tervben sem volt, összekapcsolt szomszédos regisztereket (szintén előzmény nélküli fogás), és egy ciklusszámlálót is tartalmazott, ami néhány mikroarchitektúrában nehezen megvalósítható.

Vektoros készlet

A javasolt vektorfeldolgozó utasításkészlet elavulttá teheti a csomagolt SIMD-készletet.A tervezők remélik, hogy elég rugalmas lesz ahhoz, hogy egy CPU a vektoros utasításokat a processzor szabványos regisztereiben is megvalósíthassa.Ez lehetővé tenné a multimédiás ISA-khoz hasonló teljesítményű minimális megvalósításokat (ld. a fentiekben).Egy valódi vektoros koprocesszor azonban ugyanazt a kódot nagyobb teljesítménnyel tudná végrehajtani.[49]

A 2015. június 29-i állapot szerint a vektorfeldolgozó javaslat egy általános célú, vegyes pontosságú vektorprocesszor konzervatív, rugalmas kialakítását tartalmazza, amely alkalmas számító/feldolgozó kernelek végrehajtására. A kód könnyen portolható lenne eltérő vektorhosszúságú CPU-kra, ideális esetben újrafordítás nélkül.[49]

Ezzel szemben a rövid vektoros (short-vector) SIMD kiterjesztések kevésbé kényelmesek.Ilyen típusú kiterjesztéseket használnak az x86, az ARM és a PA-RISC rendszerekben.Ezekben a szószélesség változása az utasításkészlet módosítását kényszeríti ki a vektorregiszterek bővítéséhez (az x86 esetében 64 bites MMX regiszterekről való átmenet a 128 bites Streaming SIMD Extensions (SSE), 256 bites Advanced Vector Extensions (AVX) és AVX-512 utasításkészleteket).Az eredmény egy növekvő méretű utasításkészlet, és a működő kód portolásának szükségessége az új utasítások használatához. Ez mindenképpen szembe megy a RISC elvekkel.

A RISC-V vektoros ISA-ban ahelyett, hogy az architektúrában rögzítenék a vektor hosszát, rendelkezésre áll egy utasítás (setvl), amelynek paramétere a kért méret, és a vektor hosszát a hardveres korlát és a kért méret minimumára állítja be.A RISC-V javaslat tehát inkább hasonlít a Cray hosszú vektoros kialakítására vagy az ARM Scalable Vector Extension készletére. Vagyis a vektorok száma legfeljebb 32, és minden egyes vektor azonos hosszúságú.[49]

Az alkalmazás megadja az általa igényelt teljes vektorszélességet, a processzor pedig meghatározza, hogy a rendelkezésre álló, lapkára integrált erőforrásokkal mekkora vektorhosszúságot tud biztosítani. Ez egy utasítás (vsetcfg) formájában történik négy közvetlen operandussal, amely megadja a szükséges vektorregiszterek számát az egyes rendelkezésre álló szélességekben. A teljes szám nem lehet több, mint a címezhető határérték, azaz 32, de lehet kevesebb is, ha az alkalmazásnak nincs szüksége az összesre. A vektor hosszát limitálja az elérhető, lapkára integrált tár mérete elosztva az egyes bejegyzések tárolásához szükséges bájtok számával.(További hardveres korlátok is létezhetnek, amelyek viszont lehetővé tehetik a SIMD-stílusú megvalósításokat).[49]

A vektoros hurkokon kívül az alkalmazás nullázhatja a kért vektorregiszterek számát, így az operációs rendszer kihagyhatja azok mentését a kontextusváltáskor.[49]

A vektorhossz nem csak architekturálisan változik/változhat, hanem futási időben is változtathatóra tervezték.E rugalmasság elérése érdekében az utasításkészlet valószínűleg változó szélességű adatutakat és változó típusú műveleteket fog használni a polimorfikus túlterhelés segítségével.A cél az, hogy ezzel is csökkentsék az ISA és a fordítóprogram méretét és bonyolultságát.[49]

A legújabb kísérleti vektorprocesszorok változó szélességű adatútvonalakkal szintén javulást mutatnak a másodpercenkénti műveletek száma (sebesség), a terület (alacsonyabb költség) és a fogyasztás (watt, hosszabb akkumulátor-üzemidő) tekintetében.[50]

A tipikus modern grafikus feldolgozóegységekkel ellentétben nem tervezik, hogy speciális hardverrel támogassák az elágazás-jóslást.Ehelyett alacsonyabb költségű, fordító-alapú predikciót fognak használni.[49][51]

Külső hibakereső (debug) rendszer

A RISC-V hardverrel segített hibakeresőjének (debugger) előzetes specifikációja létezik. A hibakereső/nyomkövető a hibakeresési regiszterekhez való hozzáféréshez olyan szállítási rendszert használ, mint a Joint Test Action Group (JTAG) vagy az Universal Serial Bus (USB). A szabványos hardveres hibakeresési interfész támogathatja a szabványosított absztrakt interfészt vagy az utasítás-táplálást (instruction feeding).[52][53]

2017 januárjában az absztrakt interfész pontos formája még nem került meghatározásra, de a javaslatok között szerepel egy memóriatérképes rendszer a hibakereső eszközök regisztereinek szabványosított címeivel, vagy a kommunikációs rendszer számára elérhető parancs- és adatregiszter.[52] A szakértők állítása szerint hasonló rendszereket használ a Freescale egyes processzoraihoz készült háttérbeli hibakeresési interfésze (BDM), az ARM, az OpenRISC és az Aeroflex LEON processzora.[52]

Az utasításadagolás során a CPU egy hibakeresési kivételt dolgoz fel, hogy a regiszterbe írt egyes utasításokat végre tudja hajtani. Ezt kiegészítheti egy adattovábbító regiszter és egy modul a memória közvetlen eléréséhez. Az utasításbetáplálás lehetővé teszi, hogy a hibakereső pontosan úgy férjen hozzá a számítógéphez, ahogyan a szoftver tenné. Emellett minimalizálja a CPU-ban végzett változtatásokat, és számos CPU-típushoz alkalmazkodik. Úgy vélik, hogy ez különösen alkalmas a RISC-V-hez, mivel kifejezetten sokféle számítógéphez tervezték. Az adattovábbító regiszter lehetővé teszi, hogy a hibakereső egy adatmozgató hurkot írjon a RAM-ba, majd a hurkot végrehajtva a hibakereső rendszer adatcsatornájának maximális sebességéhez közeli sebességgel mozgatja az adatokat a számítógépbe vagy a számítógépből.[52] A megfigyelők állítása szerint hasonló rendszereket használ a MIPS Technologies MIPS, az Intel Quark, a Tensilica Xtensa, valamint a Freescale Power ISA CPU-k háttérbeli hibakeresési módú interfésze (BDM, background debug mode interface).[52]

Egy gyártó egy hardveres nyomkövető alrendszert javasolt szabványosításra, adományozott egy megfelelő kialakítást, és felülvizsgálatot kezdeményezett.[54][55] A javaslat egy olyan hardveres modulra vonatkozik, amely a legtöbb RV5 CPU-n képes nyomon követni a kód végrehajtását. Az adatátviteli sebesség csökkentése és a nyomkövetési adatok egyszerűbb vagy kevésbé költséges útvonalainak lehetővé tétele érdekében a javaslat nem generál a kód bináris képéből kiszámítható nyomkövetési adatokat. Csak olyan adatokat küld, amelyek a "nem kiköveztethető" útvonalakat jelzik a programfutásban, például azt, hogy milyen feltételes elágazások történtek. Az adatátviteli sebesség csökkentése érdekében a kiszámítható elágazások, például a feltétel nélküli elágazások nem lesznek nyomon követve. A modul és a vezérlőegység közötti javasolt interfész minden egyes nem átvihető utasítástípushoz egy logikai jel. A címeket és egyéb adatokat egy külön speciális sínen kell biztosítani, amely a CPU megfelelő adatforrásaihoz kapcsolódik. A külső nyomkövető egységnek küldött adatszerkezet a szükséges adatokat tartalmazó rövid üzenetek sorozata. Az adatcsatorna részleteit a javaslat szándékosan nem írja le, valószínűleg a több megvalósítási lehetőség miatt.

Implementációk

A RISC-V szervezete listát vezet a RISC-V CPU és egylapkás rendszer (SoC) megvalósításokról.[56]

Létező

A meglévő szabadalmazott megvalósítások az alábbiak:

  • Allwinner Technology – a XuanTie C906 CPU-t beépítette a D1 alkalmazásprocesszorába.[57]
  • Andes Technology Corporation, a RISC-V International alapító tagja.[58] A cég RISC-V CPU-családjai a kisebb 32 bites magoktól a fejlett 64 bites magokig terjednek, DSP, FPU, vektor, Linux, szuperskalár és/vagy többmagos képességekkel.
  • Bouffalo Lab – rendelkezik egy sor RISC-V alapú MCU-val (RV32IMACF, BL60x/BL70x sorozat).[59]
  • CloudBEAR – egy processzor IP-vel foglalkozó vállalat, amely saját RISC-V magokat fejleszt különböző alkalmazásokhoz.[60]
  • Codasip – a RISC-V International alapító tagja,[58] kifejlesztett egy sorozat kis fogyasztású beágyazott, nagyteljesítményű beágyazott és alkalmazási processzormagot.[61][62]
  • Cortus – a RISC-V International alapító platina tagja,[58] számos RISC-V implementációval és egy teljes IDE/eszközlánc/debug ökoszisztémával rendelkezik, amelyet SoC-tervezési üzletágának részeként ingyenesen kínál.
  • Espressif – egy RISC-V ULP koprocesszorral egészítette ki az ESP32-S2 mikrovezérlőjét.[63] 2020 novemberében a cég bejelentette az ESP32-C3 egymagos, 32 bites, RISC-V (RV32IMC) alapú MCU-ját.[64]
  • Fraunhofer Institute for Photonic Microsystems (IPMS) – az első szervezet amely olyan RISC-V magot fejlesztett ki, amely képes megfelelni a funkcionális biztonsági követelményeknek. Az EMSA5 szintetizálható processzormag (IP core) egy 32 bites processzor ötfokozatú futószalaggal; elérhető általános célú változatban (EMSA5-GP) és biztonsági változatban (EMSA5-FS), amely képes megfelelni az ISO 26262 Automotive Safety Integrity Level-D szabványnak.[65]
  • GigaDevice – rendelkezik egy sorozat RISC-V alapú MCU-val (RV32IMAC, GD32V sorozat),[66] melyeket a Sipeed kínai elektronikai cég által gyártott Longan Nano lapkán használnak.[67]
  • Google Inc. által kifejlesztett Titan M2 biztonsági modul a Pixel 6 számára[68]
  • GreenWaves Technologies – 2018 februárjában jelentette be a GAP8 32 bites, 1 vezérlőt és 8 számítási magot tartalmazó processzorát, a 32 bites RV32IMC SoC és fejlesztői kártya elérhetőségét. A GAPuino GAP8 fejlesztői lapjukat 2018 májusában kezdték el szállítani.[69][70][71]
  • FPGA Cores – Instant SoC: C++ nyelven definiált, közvetlenül szintetizálható VHDL-re fordítható egylapkás rendszerek, RISC-V magokkal is elérhető.[72]
  • Micro Magic Inc. – bejelentette a világ leggyorsabb 64 bites RISC-V magját, amely 5 GHz-et és 13 000 CoreMark-ot ért el 2020 októberében.
  • Seagate – 2020 decemberében bejelentette, hogy két RISC-V általános célú magot fejlesztett ki, amelyeket a tárolóeszközeihez készülő vezérlőkben használ majd.[73]
  • SiFive – kifejezetten RISC-V hardverek fejlesztésére létrehozott vállalat, 2017-ben megjelent processzormodellekkel rendelkezik.[74][75] Ezek között van egy négymagos, 64 bites (RV64GC) egylapkás rendszer (SoC), amely képes általános célú operációs rendszerek, például Linux futtatására.[76]
  • Syntacore,[77] – a RISC-V International alapító tagja, az egyik első kereskedelmi RISC-V IP-szolgáltató, 2015 óta RISC-V IP-családot fejleszt és licencel. A termékcsalád 2018-tól nyolc 32 és 64 bites magot tartalmaz, köztük a nyílt forráskódú SCR1 MCU magot (RV32I/E[MC]). 2016-ban bemutatták az első, Syntacore IP-n alapuló kereskedelmi SoC-ket.[78][79]
  • Codasip és UltraSoC – teljes mértékben támogatott szellemi tulajdont fejlesztett ki a RISC-V beágyazott SOC-ok számára, amelyek a Codasip RISC-V magjait és egyéb IP-it az UltraSoC hibakeresési, optimalizálási és analitikai szolgáltatásaival kombinálják.[80]
  • 2020-tól az indiai védelmi és stratégiai szektorban elkezdték használni az IIT Madras által kifejlesztett 64 bites RISC-V alapú 100–350 MHz-es Risecreek processzort, amelyet az Intel 22 nm-es FinFET eljárással gyárt.[81][82]

Fejlesztés alatt

  • ASTC – kifejlesztett egy RISC-V CPU-t beágyazott IC-k számára.[83]
  • Az indiai Centre for Development of Advanced Computing (C-DAC) egy egymagos 32 bites sorrendi végrehajtású (in-order), egy egymagos 64 bites sorrendi végrehajtású és három sorrenden kívüli végrehajtású (out-of-order) egy-, két- és négymagos RISC-V processzort fejleszt a VEGA mikroprocesszor-sorozatban.[84][85][86]
  • Cobham Gaisler – NOEL-V 64 bites processzor.[87]
  • A Cambridge-i Egyetem Számítástechnikai Laboratóriuma a FreeBSD projekttel együttműködve portolta ezt az operációs rendszert 64 bites RISC-V-re, hogy hardver-szoftver kutatási platformként használja.[88]
  • Az Esperanto Technologies bejelentette, hogy három RISC-V alapú processzort fejleszt: az ET-Maxion nagy teljesítményű magot, az ET-Minion energiatakarékos magot és az ET-Graphics grafikai processzort.[89]
  • Az ETH Zürich és a Bolognai Egyetem közösen fejlesztette ki a nyílt forráskódú RISC-V PULPino processzort[90] a PULP (Parallel Ultra-Low Power, párhuzamos ultra-kisfogyasztású) projekt részeként az energiahatékony IoT-számítástechnika számára.[91]
Az EPI első működő RISC-V mintájának illusztrációja, 2021
  • European Processor Initiative (EPI) – RISC-V Accelerator Stream processzorfejlesztő tervezet.[92][93]
  • Az IIT-Madras Reconfigurable Intelligent Systems Engineering Group (RISE) csoport hat Shakti sorozatú RISC-V nyílt forráskódú CPU-tervet fejleszt hat különböző felhasználási területre, a dolgok internetéhez (IoT) szánt kis 32 bites CPU-tól a RapidIO és a Hybrid Memory Cube technológiákon alapuló, adattárház-kategóriájú számítógépekhez, például szerverfarmokhoz tervezett nagy, 64 bites CPU-kig.[13][94][95] A RISE sikeresen indította a 32 bites Moushik kialakítást hitelkártyák, elektronikus szavazógépek (EVM India), megfigyelő kamerák, széfzárak vezérlésére és személyre szabott egészségügyi rendszerekben való alkalmazáshoz.[82][96]
  • A lowRISC nonprofit projekt célja egy teljesen nyílt forráskódú hardver, 64 bites RISC-V ISA-n alapuló egylapkás rendszer (SoC) megvalósítása.[97]
  • Az Nvidia azt tervezi, hogy RISC-V architektúrájú processzorral váltja fel a GeForce grafikus kártyáiban alkalmazott Falcon processzort.[98]
  • Az RV64X konzorcium RISC-V grafikus kiterjesztéseken dolgozik, és bejelentette, hogy nyílt forráskódú RISC-V magot fejleszt GPU egységgel.[99]
  • A SiFive bejelentette első sorrenden kívüli végrehajtású (out-of-order) nagyteljesítményű RISC-V processzormagját, az U8 Series Processor IP-t.[100]
  • Esperanto – ET-SoC-1, egy 200 TOPS "kilocore" egycsipes szuperszámítógép, 1088 kis 64 bites sorrendi ET-Minion maggal, tensor/vector egységekkel és 4 nagy 64 bites sorrenden kívüli ET-Maxion maggal.[101]

Nyílt forrású

Számos nyílt forráskódú RISC-V CPU kialakítás létezik, mint az alábbiak.

  • A Berkeley CPU-k. Ezeket egy egyedi hardvertervezési nyelven, a Chisel nyelven valósították meg, és néhányat híres vasúti mozdonyokról neveztek el:
    • 64 bites Rocket.[102] A Rocket alkalmas lehet kompakt, kis fogyasztású köztes számítógépekhez, például személyi eszközökhöz. Nevüket Stephenson Rocket gőzmozdonyáról kapták.
    • A 64 bites Berkeley Out-of-Order Machine (BOOM).[103] A BOOM egy szintetizálható és paraméterezhető nyílt forráskódú , Chisel hardvertervező nyelven írt RV64GC RISC-V mag. A BOOM nagyrészt a Rocket számára létrehozott infrastruktúrát használja, és alkalmas lehet személyi, szuperszámítógépek és adattárház-típusú számítógépek számára.
    • Öt 32 bites Sodor CPU terv,[104] oktatási projektekhez.[105] Sodor a Thomas, a gőzmozdony mesesorozatban szereplő vonatok fiktív szigete.
  • picorv32 – tervezője Claire Wolf,[106] egy 32 bites mikrovezérlő (MCU) osztályú RV32IMC, Verilog-ban készült implementáció.
  • scr1 a Syntacore-tól,[107] egy 32 bites mikrovezérlő (MCU) osztályú RV32IMC, Verilog implementáció.
  • SERV[108] egy kis geometriai méretű, validált egybites soros (bit-serial) RV32I mag, Verilog forrásban. A LiteX és a FuseSoC SoC szerkesztőrendszerekbe is integrálható. Egy FPGA implementáció[109] 354 LUT-ot (lookup table) és 345 flip-flopot tartalmazott és 1,5 MIPS sebességgel működött. Egy 130 nm-es csomópont (node) ASIC-ben 0,04 mm² méretű volt[110], egy felsőkategóriás FPGA pedig 6000 magot tartalmazott.[111]
  • PULPino (Riscy és Zero-Riscy) – az ETH Zürich és a Bolognai Egyetem közösen fejlesztett magjai.[112] A PULPino magok egyszerű RV32IMC ISA-t valósítanak meg mikrokontrollerekhez (Zero-Riscy) vagy egy erősebb RV32IMFC ISA-t egyedi DSP-bővítésekkel a beágyazott jelfeldolgozáshoz.
  • A Western Digital 2018 decemberében jelentette be a SweRV EH1 nevű RV32IMC magot, amely sorrendi 2-utas szuperskalár és kilencfokozatú futószalagos kialakítású. 2019 decemberében a WD bejelentette a SweRV EH2 sorrendi végrehajtású magot, ami két hardveres szálat és kilencfokozatú futószalagot tartalmaz, valamint a SweRV EL2 egyszeres kibocsátású magot négyfokozatú futószalaggal.[113] A WD SweRV alapú processzorok használatát tervezi flash-vezérlőiben és SSD-kben, és 2019 januárjában nyílt forráskódúként kiadta szolgáltatók számára.[114][115][116]
  • A NEORV32, tervezője Stephan Nolting,[117] egy nagymértékben konfigurálható, 32 bites mikrovezérlő (MCU) osztályú RV32[I/E]MACUX_Zbb_Zfinx_Zicsr_Zifencei CPU, amely platformfüggetlen VHDL nyelven készült, és chipen belüli hibakereső/nyomkövető támogatással rendelkezik. A projekt megjelenése egy mikrovezérlő-szerű egylapkás rendszer, amely olyan általános modulokat is tartalmaz, mint az UART, időzítők, SPI, TWI (Two-Wire Interface, I²C származtatott technológia), TRNG (hardveres v. valódi véletlenszám-generátor) és beágyazott memóriák.
  • Az Alibaba Group 2019 júliusában jelentette be a XuanTie 910-es processzort, amely 2,5 GHz-es, 16 magos, 64 bites (RV64GCV) soron kívüli végrehajtású processzor.[118] 2021 októberében a XuanTie 910-et nyílt forráskódúvá tették.[119]
  • A Kínai Tudományos Akadémia Számítástechnikai Intézete (Institute of Computing Technology of the Chinese Academy of Sciences, ICT CAS) 2020 júniusában indította el a XiangShan nagy teljesítményű RISC-V processzor projektet.[120][121]

Szoftver

Az új utasításkészletek megjelenésekor általános probléma a CPU-tervek és a szoftver hiánya, ami nagy mértékben csökkenti az új rendszer elfogadását és korlátozza a használhatóságát.[10] A RISC-V nagyszámú CPU-kialakítással rendelkezik. A RISC-V szoftverek közé tartoznak az eszközláncok, az operációs rendszerek, a köztes szoftverek és a tervezőszoftverek.

A rendelkezésre álló RISC-V szoftvereszközök közé tartozik a GNU Compiler Collection (GCC) eszköztár (a GDB hibakeresővel együtt), az LLVM eszköztár, az OVPsim szimulátor (és a RISC-V gyors processzormodellek könyvtára), a Spike szimulátor és a QEMU szimulátor (RV32GC/RV64GC). Az OpenJDK JEP 422: Linux/RISC-V port már integrálva van a központi OpenJDK tárolóba.

Az operációs rendszerek közül a Linux, a FreeBSD, a NetBSD és az OpenBSD támogatja a processzort, de a szupervizor-módú utasítások 2019 júniusa előtt nem voltak szabványosítva,[15] így ez a támogatás ideiglenes. Az előzetes FreeBSD portot a RISC-V architektúrára 2016 februárjában upstreamelték, és a FreeBSD 11.0-ban szállították.[88][122] A Debian[123] és a Fedora[124] Linux-disztribúciók portjai, valamint a Haiku portja[125] stabilizálódtak (mindkettő csak a 64 bites RISC-V-t támogatja, a 32 bites változat támogatását nem tervezik). Létezik a Das U-Boot portja is.[126] Az UEFI Spec v2.7 definiálta a RISC-V kapcsolódást, a TianoCore portját pedig a HPE mérnökei készítették el,[127] és várhatóan upstreamelni fogják. Létezik a seL4 mikrokernel előzetes portja.[128][129] A Hex Five kiadta az első Secure IoT Stack-et RISC-V-hez FreeRTOS-támogatással.[130] Az xv6-ot is portolták, a Hatodik kiadású Unix modern újraimplementációját ANSI C-ben, amelyet pedagógiai célokra használnak az MIT-ben. A Pharos RTOS-t portolták 64 bites RISC-V-re (beleértve az idő- és memóriavédelmet is).[131]

Létezik még böngészőben futó, JavaScript-ben írt RISC-V Linux szimulátor (újabban elérhetetlen),[132][133][134] QEMU támogatás,[135] natív tervezői szimulátorok,[136][137][138] oktatási szimulátor (WepSIM).[139]

Számos nyelvet alkalmaztak a RISC-V IP-magok létrehozására, köztük egy Scala-alapú hardverleíró nyelvet, a Chisel-t,[140] amely képes a terveket Verilog forrásként exportálni az eszközökben való felhasználáshoz, valamint a CodAL processzorleíró nyelvet, amelyet a RISC-V processzormagok leírására és a megfelelő HDK-k (RTL, tesztbench és UVM) és SDK-k létrehozására használtak.[141] A RISC-V International Compliance Task Group GitHub tárat tart fenn az RV32IMC számára.[142]

Fejlesztőeszközök

  • Az IAR Systems kiadta az IAR Embedded Workbench for RISC-V első verzióját, amely támogatja az RV32 32 bites RISC-V magokat és bővítéseket. A későbbi kiadások tartalmazni fogják a 64 bites támogatást, a kisebb RV32E alaputasításkészlet támogatását, valamint a funkcionális biztonsági tanúsítványokat és a biztonsági megoldásokat.
  • A Lauterbach GmbH a TRACE32 JTAG hibakeresőjéhez hozzáadta a RISC-V támogatását.[143][144] A cég bejelentette a SiFive RISC-V NEXUS alapú nyomkövetés támogatását is.[145]
  • A SEGGER hozzáadta a RISC-V magok támogatását a J-Link hibakereső szondájukhoz,[146] az Embedded Studio integrált fejlesztőkörnyezethez,[147] valamint az embOS RTOS-hez és beágyazott szoftverhez.[148]
  • Az UltraSOC szabványos nyomkövető rendszert javasolt és egy implementációt adományozott.

Lásd még

  • Nyílt forrású hardverek listája

Hivatkozások

További olvasmányok

További információk

A Wikimédia Commons tartalmaz RISC-V témájú médiaállományokat.

Fordítás

Ez a szócikk részben vagy egészben a RISC-V című angol Wikipédia-szócikk ezen változatának fordításán alapul. Az eredeti cikk szerkesztőit annak laptörténete sorolja fel. Ez a jelzés csupán a megfogalmazás eredetét és a szerzői jogokat jelzi, nem szolgál a cikkben szereplő információk forrásmegjelöléseként.

Kapcsolódó szócikkek