RISC-V
Tervező | Kaliforniai Egyetem, Berkeley |
---|---|
Bitek száma | 32, 64, 128 |
Bevezetés | 2010 |
Verzió | |
Kialakítás | RISC |
Típus | load-store |
Kódolás | változó, 32 bites, 16 bites tömörített |
Elágazás | Compare-and-branch |
Bájtsorrend | little-endian[1](p9)[3] |
Utasításkészlet- kiterjesztések |
|
Nyílt | igen, jogdíjmentes |
Regiszterek | |
Általános célú |
|
Lebegőpontos |
|
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.
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ául az 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
[szerkesztés]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ága ré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
[szerkesztés]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.
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ést a 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
[szerkesztés]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
[szerkesztés]- 2017: Az utasításkészlet megkapta a Linley Group elemzői díját a legjobb technológiáért[30]
Tervezés
[szerkesztés]ISA alap és kiterjesztések
[szerkesztés]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.
Név | Leírás | Verzió | Állapot[a] | Utasítások száma |
---|---|---|---|---|
Alap | ||||
RVWMO | gyenge memória rendezés | 2.0 | ratifikált | |
RV32I | alap integer utasításkészlet, 32 bites | 2.1 | ratifikált | 40 |
RV32E | alap integer utasításkészlet (beágyazott), 32 bites, 16 regiszter | 1.9 | nyitott | 40 |
RV64I | alap integer utasításkészlet, 64 bites | 2.1 | ratifikált | 15 |
RV128I | alap integer utasításkészlet, 128 bites | 1.7 | nyitott | 15 |
Kiterjesztés | ||||
M | szabványos kiterjesztés: integer szorzás és osztás | 2.0 | ratifikált | 8 (RV32) / 13 (RV64) |
A | szabványos kiterjesztés: atomi utasítások | 2.1 | ratifikált | 11 (RV32) / 22 (RV64) |
F | szabványos kiterjesztés: egyszeres pontosságú lebegőpontos utasítások | 2.2 | ratifikált | 26 (RV32) / 30 (RV64) |
D | szabványos kiterjesztés: dupla pontosságú lebegőpontos utasítások | 2.2 | ratifikált | 26 (RV32) / 32 (RV64) |
Zicsr | vezérlő- és állapotregiszterek (CSR) | 2.0 | ratifikált | 6 |
Zifencei | utasítás-lehívás "fence" utasítás | 2.0 | ratifikált | 1 |
G | az IMAFDZicsr Zifencei alap és kiterjesztések rövidítése, amely egy szabványos általános célú ISA-t reprezentál | N/A | N/A | |
Q | szabványos kiterjesztés: négyszeres pontosságú lebegőpontos utasítások (Quad-Precision Floating Point) | 2.2 | ratifikált | 28 (RV32) / 32 (RV64) |
L | szabványos kiterjesztés: decimális lebegőpontos utasítások | 0.0 | nyitott | |
C | szabványos kiterjesztés: tömörített utasítások | 2.0 | ratifikált | 40 |
B | szabványos kiterjesztés: bitműveletek | 1.0 | ratifikált | 43 |
J | szabványos kiterjesztés a dinamikusan fordított nyelvek támogatására | 0.0 | nyitott | |
T | szabványos kiterjesztés a tranzakciós memória támogatására | 0.0 | nyitott | |
P | szabványos kiterjesztés: pakolt-SIMD utasítások | 0.9.10 | nyitott | |
V | szabványos kiterjesztés: vektorműveletek | 1.0 | ratifikált | 187 |
K | szabványos kiterjesztés: skalár kriptográfia | 1.0.1 | ratifikált | 49 |
N | szabványos kiterjesztés: felhasználói szintű megszakítások | 1.1 | nyitott | 3 |
H | szabványos kiterjesztés: hipervizor | 1.0 | ratifikált | 15 |
S | szabványos kiterjesztés: felügyelői szintű utasítások | 1.12 | ratifikált | 4 |
Zam | rosszul igazított atomi utasítások (Misaligned Atomics) | 0.1 | nyitott | |
Ztso | teljes tároló rendezés | 0.1 | befagyasztva |
- ↑ A befagyasztott részeknek várhatóan meglesz a végleges funkciókészletük; a ratifikálás előtt csak pontosításokat kapnak.
formátum | bit | |||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 | 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
regiszter/regiszter | funct7 | rs2 | rs1 | funct3 | rd | opkód | ||||||||||||||||||||||||||
közvetlen | imm[11:0] | rs1 | funct3 | rd | opkód | |||||||||||||||||||||||||||
felső közvetlen | imm[31:12] | rd | opkód | |||||||||||||||||||||||||||||
tárolás | imm[11:5] | rs2 | rs1 | funct3 | imm[4:0] | opkód | ||||||||||||||||||||||||||
elágazás | [12] | imm[10:5] | rs2 | rs1 | funct3 | imm[4:1] | [11] | opkód | ||||||||||||||||||||||||
ugrás | [20] | imm[10:1] | [11] | imm[19:12] | rd | opkód | ||||||||||||||||||||||||||
|
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 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
[szerkesztés]Regiszter név |
Szimbolikus név |
Leírás | Menti |
---|---|---|---|
32 egész (integer) regiszter | |||
x0 | Zero | nulla állandó | |
x1 | ra | visszatérési cím | hívó |
x2 | sp | veremmutató | hívott |
x3 | gp | globális mutató (global pointer) | |
x4 | tp | szál mutató (thread pointer) | |
x5 | t0 | ideiglenes visszatérési cím | hívó |
x6–7 | t1–2 | ideiglenes regiszterek | hívó |
x8 | s0/fp | mentett regiszter / keretmutató | hívott |
x9 | s1 | mentett regiszter | hívott |
x10–11 | a0–1 | függvényparaméter / visszaadott érték | hívó |
x12–17 | a2–7 | függvényparaméter | hívó |
x18–27 | s2–11 | mentett regiszter | hívott |
x28–31 | t3–6 | ideiglenes regiszter | hívó |
32 lebegőpontos regiszter, kiterjesztésben | |||
f0–7 | ft0–7 | lebegőpontos ideiglenes értékek | hívó |
f8–9 | fs0–1 | lebegőpontos mentett regiszterek | hívott |
f10–11 | fa0–1 | lebegőpontos argumentumok / visszaadott értékek | hívó |
f12–17 | fa2–7 | lebegőpontos argumentumok | hívó |
f18–27 | fs2–11 | lebegőpontos mentett regiszterek | hívott |
f28–31 | ft8–11 | lebegőpontos ideiglenes regiszterek | hí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 pc
– programszá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
[szerkeszté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
[szerkesztés]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
[szerkesztés]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
[szerkesztés]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
[szerkesztés]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
[szerkesztés]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
[szerkesztés]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
[szerkesztés]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:
- csak gépi üzemmóddal rendelkező rendszerek, esetleg beágyazott rendszerek,
- 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.
- 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
[szerkesztés]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
[szerkeszté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 a P 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 AndeStar V3 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
[szerkesztés]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
[szerkesztés]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
[szerkesztés]A RISC-V szervezete listát vezet a RISC-V CPU és egylapkás rendszer (SoC) megvalósításokról.[56]
Létező
[szerkesztés]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
[szerkesztés]- 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]
- 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ú
[szerkeszté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
[szerkesztés]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
[szerkesztés]- 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
[szerkesztés]- Nyílt forrású hardverek listája
Hivatkozások
[szerkesztés]- ↑ a b c d e f g h i j k l m n o p q r s t u v w x y z aa ab ac ad ae af ag ah ai aj ak al am an ao ap aq ar as at au av aw ax ay The RISC-V Instruction Set Manual, Volume I: Unprivileged ISA version 20191213. RISC-V International, 2019. december 13. (Hozzáférés: 2021. november 5.)
- ↑ a b c The RISC-V Instruction Set Manual Volume II: Privileged Architecture Document Version 20211203. RISC-V International, 2021. december 3. (Hozzáférés: 2021. november 5.)
- ↑ big-endian és kettős bájtsorrend támogatott a kiterjesztésekben
- ↑ a b Contributors. riscv.org . Regents of the University of California. [2018. szeptember 7-i dátummal az eredetiből archiválva]. (Hozzáférés: 2014. augusztus 25.)
- ↑ a b The RISC-V Instruction Set Manual, Volume I: Base User-Level ISA version 2.2. RISC-V International, 2017. május 7. (Hozzáférés: 2021. november 5.)
- ↑ RISC-V External Debug Support Version 0.13.2 d5029366d59e8563c08b6b9435f82573b603e48e. RISC-V International, 2019. március 22. (Hozzáférés: 2021. november 7.)
- ↑ Demerjian, Chuck: A long look at how ARM licenses chips: Part 1. SemiAccurate, 2013. augusztus 7.
- ↑ Demerjian, Chuck: How ARM licenses its IP for production: Part 2. SemiAccurate, 2013. augusztus 8.
- ↑ Wave Computing Closes Its MIPS Open Initiative with Immediate Effect, Zero Warning, 2019. november 15.
- ↑ a b c d e f Asanović, Krste: Instruction Sets Should be Free. U.C. Berkeley Technical Reports . Regents of the University of California. (Hozzáférés: 2016. november 15.)
- ↑ Rocket Core Generator. RISC-V . Regents of the University of California. [2014. szeptember 26-i dátummal az eredetiből archiválva]. (Hozzáférés: 2014. október 1.)
- ↑ ucb-bar/riscv-sodor. GitHub . Regents of the University of California. (Hozzáférés: 2015. február 12.)
- ↑ a b SHAKTI Processor Program. Indian Institute of Technology Madras. (Hozzáférés: 2019. szeptember 3.)
- ↑ Celio, Christopher: CS 152 Laboratory Exercise 3. UC Berkeley . Regents of the University of California. (Hozzáférés: 2015. február 12.)
- ↑ a b c d e f g h i Draft Privileged ISA Specification 1.9. RISC-V . RISC-V International. [2018. augusztus 26-i dátummal az eredetiből archiválva]. (Hozzáférés: 2016. augusztus 30.)
- ↑ a b c d e The RISC-V Instruction Set Manual, Volume I: Base User-Level ISA version 2.1. University of California, Berkeley, 2016. május 31. (Hozzáférés: 2021. november 5.)
- ↑ a b (1980. október 1.) „The Case for the Reduced Instruction Set Computer”. ACM SIGARCH Computer Architecture News 8 (6), 25. o. DOI:10.1145/641914.641917.
- ↑ „Számítógép-architektúra: Kvantitatív megközelítés”, magyarul nem jelent meg.
- ↑ Amber ARM-compatible core. OpenCores . (Hozzáférés: 2014. augusztus 26.)
- ↑ ARM4U. OpenCores . OpenCores. (Hozzáférés: 2014. augusztus 26.)
- ↑ Free and Instant Access to Cortex-M CPUs on FPGA, ingyenes ARM Cortex-M1 és Cortex-M3 magok FPGA-ra
- ↑ Asanović, Krste: The RISC-V Instruction Set Manual, Volume I: Base User-Level ISA. U.C. Berkeley Technical Reports . Regents of the University of California. (Hozzáférés: 2011. május 13.)
- ↑ Hruska, Joel. „RISC rides again: New RISC-V architecture hopes to battle ARM and x86 by being totally open source”, 2014. augusztus 21.
- ↑ RISC-V History. (Hozzáférés: 2019. november 19.)
- ↑ „A new blueprint for microprocessors challenges the industry's giants”, The Economist , 2019. október 3. (Hozzáférés: 2019. november 10.)
- ↑ a b RISC-V Foundation. RISC-V Foundation. (Hozzáférés: 2019. március 15.)
- ↑ Design Automation Conference. dac.com . (Hozzáférés: 2021. február 6.)
- ↑ „U.S.-based chip-tech group moving to Switzerland over trade curb fears”, Reuters, 2019. november 26. (Hozzáférés: 2019. november 26.) (angol nyelvű)
- ↑ RISC-V History - RISC-V International. RISC-V International . (Hozzáférés: 2020. május 14.)
- ↑ The Linley Group (12 January 2017). "The Linley Group Announces Winners of Annual Analysts' Choice Awards". Sajtóközlemény.
- ↑ a b Andrew Waterman, Krste Asanović, SiFive Inc.: The RISC-V Instruction Set Manual Volume I: User-Level ISA. riscv.org . University of California, Berkeley. (Hozzáférés: 2022. május 30.) „The AUIPC instruction ... The current PC can be obtained by setting the U-immediate to 0.”
- ↑ a b c d e f g h i Waterman, Andrew. Improving Energy Efficiency and Reducing Code Size with RISC-V Compressed. U.C. Berkeley: Regents of the University of California, 32. o. (2011. május 13.)
- ↑ Waterman, Andrew: The RISC-V Compressed Instruction Set Manual Version 1.9 (draft). RISC-V . (Hozzáférés: 2016. július 18.)
- ↑ Hasonlóan pl. a DEC Alpha processzorhoz, ahol szintén kiküszöbölték az állapotjelzőket.
- ↑ a b A Complete 16-bit RVC. Google Groups . RISC-V Foundation. (Hozzáférés: 2019. július 18.)
- ↑ a b Brussee, Rogier: Proposal: Xcondensed, [a ... Compact ... 16 bit standalone G-ISA]. RISC-V ISA Mail Server . Google Groups. (Hozzáférés: 2016. november 10.)
- ↑ Improved Xcondensed. Google Groups . RISC-V Foundation. (Hozzáférés: 2019. július 18.)
- ↑ Ionescu, Liviu: The RISC-V Microcontroller Profile. GitHub . (Hozzáférés: 2018. április 5.)
- ↑ Barros, Cesar, "Proposal: RV16E"
- ↑ Bonzini, Paolo & Waterman, Andrew, "Proposal for Virtualization without H mode"
- ↑ riscv/riscv-bitmanip, RISC-V, 2021-02-24, <https://github.com/riscv/riscv-bitmanip>. Hozzáférés ideje: 2021-03-09
- ↑ riscv-bitmanip. GitHub . RISC-V Foundation, 2021. január 11. (Hozzáférés: 2021. március 9.)
- ↑ [Geelnard]: Three fundamental flaws of SIMD ISA:s (angol nyelven). Bits'n'Bites, 2021. augusztus 9. (Hozzáférés: 2022. május 28.) „specifically, I refer to non-predicated packed SIMD ISA:s”
- ↑ (1996. február 25.) „64-bit and Multimedia Extensions in the PA-RISC 2.0 Architecture”. Proceedings of Compcon 96, 152–160. o. DOI:10.1109/CMPCON.1996.501762.
- ↑ Lee, Ruby B. (1995. április 1.). „Accelerating Multimedia with Enhanced Microprocessors”. IEEE Micro 15 (2), 22–32. o. DOI:10.1109/40.372347. (Hozzáférés: 2014. szeptember 21.)
- ↑ Andrew Waterman, Yunsup Lee, David Patterson, Krste Asanović: The RISC-V Instruction Set Manual, Volume I: UserLevel ISA, Version 2.0 (angol nyelven). CS Division, EECS Department, University of California, Berkeley, 2014. május 6. (Hozzáférés: 2022. május 28.) 89.o.
- ↑ a b Instruction Summary for a "P" ISA Proposal. Google Groups . ANDES Technologies. (Hozzáférés: 2020. január 13.)
- ↑ Comprehensive RISC-V Solutions. RISC-V Content . RISC-V Foundation. (Hozzáférés: 2020. január 13.)
- ↑ a b c d e f g RISC-V Vector Extension Proposal. RISC-V . Regents of the University of California. (Hozzáférés: 2016. március 14.)
- ↑ A Case for MVPs: Mixed-Precision Vector Processors. UC Berkeley EECS . Regents of the University of California. [2016. március 15-i dátummal az eredetiből archiválva]. (Hozzáférés: 2016. március 14.)
- ↑ Exploring the Design Space of SPMD Divergence Management on Data-Parallel Architectures. Berkeley's EECS Site . Regents of the University of California. [2014. november 14-i dátummal az eredetiből archiválva]. (Hozzáférés: 2016. március 14.)
- ↑ a b c d e RISC-V Run Control Debug. Google Docs . RISC-V Foundation. (Hozzáférés: 2017. január 20.)
- ↑ Newsome, Tim: RISC-V Debug Group > poll results. Google Groups, RISC-V Debug Group . RISC-V Foundation. (Hozzáférés: 2017. január 20.)
- ↑ riscv-trace-spec. GitHub . (Hozzáférés: 2020. január 13.)
- ↑ UltraSoC Tackles RISC-V Support Challenge by Donating Trace Encoder. EE Times . Aspencore. (Hozzáférés: 2020. január 13.)
- ↑ RISC-V Cores and SoC Overview. RISC-V, 2019. szeptember 25. (Hozzáférés: 2019. október 5.)
- ↑ D1. (Hozzáférés: 2021. szeptember 30.)
- ↑ a b c RISC-V International Members. RISC-V International . (Hozzáférés: 2021. január 22.)
- ↑ At CES2022 Bouffalo Shows its Matter Turnkey Solution. www.eetimes.com . (Hozzáférés: 2022. január 20.)
- ↑ CloudBEAR. (Hozzáférés: 2018. október 16.)
- ↑ riscv/riscv-cores-list, RISC-V, 2021-02-06, <https://github.com/riscv/riscv-cores-list>. Hozzáférés ideje: 2021-02-09
- ↑ Codasip announces RISC-V processor cores providing multi-core and SIMD capabilities. www.newelectronics.co.uk . [2020. december 23-i dátummal az eredetiből archiválva]. (Hozzáférés: 2021. február 9.)
- ↑ 3.6.2 Ultra-Low-Power Co-Processor, ESP32-S2 Family Datasheet V1.1. Espressif Systems (2020. november 28.)
- ↑ ESP32-C3 Family Datasheet V0.4. Espressif Systems, 2020 (Hozzáférés: 2020. december 27.) (November 27, 2020). "Introducing ESP32-C3". Sajtóközlemény.
- ↑ Manners, David: Fraunhofer licensing fault-tolerant RISC core for safety-critical applications (angol nyelven). Electronics Weekly , 2021. június 8. (Hozzáférés: 2022. április 13.)
- ↑ GigaDevice Unveils The GD32V Series With RISC-V Core in a Brand New 32-bit General Purpose Microcontroller. www.gigadevice.com . [2019. augusztus 29-i dátummal az eredetiből archiválva]. (Hozzáférés: 2019. augusztus 29.)
- ↑ Sipeed Longan Nano - RISC-V GD32VF103CBT6 Development Board (angol nyelven). www.seeedstudio.com . (Hozzáférés: 2019. augusztus 29.)
- ↑ Grüner, Sebastian: Googles Security-Chip nutzt RISC-V (german nyelven). Golem.de: IT-News für Profis , 2021. október 28.
- ↑ GreenWaves GAP8 is a Low Power RISC-V IoT Processor Optimized for Artificial Intelligence Applications. CNXSoft: Embedded Systems News , 2018. február 27. (Hozzáférés: 2018. március 4.)
- ↑ Yoshida, Junko. „AI Comes to Sensing Devices”, EE Times, 2018. február 26. (Hozzáférés: 2018. július 10.)
- ↑ (2018-05-22). "GreenWaves Technologies Announces Availability of GAP8 Software Development Kit and GAPuino Development Board". Sajtóközlemény.
- ↑ Instant SoC, 2022. január 1. (Hozzáférés: 2022. május 28.)
- ↑ Seagate Develops Own RISC-V Cores for Storage Controllers. Tom's Hardware, 2020. december 9.
- ↑ HiFive1. SiFive . [2017. február 26-i dátummal az eredetiből archiválva]. (Hozzáférés: 2018. július 10.)
- ↑ SiFive: Hi-Five1: Open-source Arduino-Compatible Development Kit. Crowd Supply . (Hozzáférés: 2016. december 2.)
- ↑ FU540 SoC CPU. SiFive . (Hozzáférés: 2018. október 24.)
- ↑ Syntacore. (Hozzáférés: 2018. december 11.)
- ↑ SCR1, open-source RISC-V core. GitHub . (Hozzáférés: 2018. december 11.)
- ↑ RISC-V workshop proceedings, 2016. december 11. (Hozzáférés: 2018. december 11.)
- ↑ Manners, David: Codasip and UltraSoC Combine on RISC-V. Electronics Weekly . Metropolis International Group, Ltd., 2016. november 23. (Hozzáférés: 2016. november 23.)
- ↑ Desikan, Shubashree. „IIT-Madras powers up a desi chip”, The Hindu, 2018. augusztus 6. (Hozzáférés: 2020. szeptember 25.) (Indian English nyelvű)
- ↑ a b Meet India's Atmanirbhar Microprocessor chip 'Moushik', meant for IoT devices (angol nyelven). WION . (Hozzáférés: 2020. szeptember 25.)
- ↑ Ashenden, Peter (9 November 2016), "Re: [isa-dev RISC V ISA for embedded systems"]
- ↑ C-DAC announces Tech Conclave 2019. The Times of India . (Hozzáférés: 2019. április 12.)
- ↑ Sharwood, Simon: India selects RISC-V for semiconductor self-sufficiency contest: Use these homegrown cores to build kit (angol nyelven). The Register , 2020. augusztus 19. (Hozzáférés: 2021. július 9.)
- ↑ VEGA MICROPROCESSORS. Vega Processor - CDAC , 2021. július 9. [2022. május 10-i dátummal az eredetiből archiválva]. (Hozzáférés: 2021. július 9.)
- ↑ NOEL-V Processor. Cobham Gaisler . (Hozzáférés: 2020. január 14.)
- ↑ a b FreeBSD Foundation: Initial FreeBSD RISC-V Architecture Port Committed, 2016. február 4.
- ↑ Esperanto exits stealth mode, aims at AI with a 4,096 core 7nm RISC-V monster. wikichip.org , 2018. január 1. (Hozzáférés: 2018. január 2.)
- ↑ PULPino GitHub project. GitHub . (Hozzáférés: 2018. február 2.)
- ↑ PULP Platform. PULP Platform . (Hozzáférés: 2018. február 2.)
- ↑ Accelerator Stream. European Processor Initiative (EPI) . (Hozzáférés: 2020. február 22.)
- ↑ Redmond, Calista: How the European Processor Initiative is Leveraging RISC-V for the Future of Supercomputing. RISC-V International News. RISC-V International, 2019. augusztus 20.
- ↑ Halfacree, Gareth: RISC-V boffins lay out a plan for bringing the architecture to high-performance computing (angol nyelven). The Register , 2021. június 10. (Hozzáférés: 2021. július 9.)
- ↑ IIT Madras Open Source Processor Project. Rapid IO . IIT Madras, 2014. augusztus 26. [2014. szeptember 14-i dátummal az eredetiből archiválva]. (Hozzáférés: 2014. szeptember 13.)
- ↑ IIT Madras Develops and Boots up MOUSHIK Microprocessor for IoT Devices. IIT Madras , 2020. szeptember 24. (Hozzáférés: 2021. július 9.)
- ↑ lowRISC website. (Hozzáférés: 2015. május 10.)
- ↑ NVIDIA RISC V Evaluation Story. Youtube.
- ↑ RV64X: A Free, Open Source GPU for RISC-V. EETimes . (Hozzáférés: 2021. február 9.)
- ↑ Frumusanu, Andrei: SiFive Announces First RISC-V OoO CPU Core: The U8-Series Processor IP. Anandtech , 2019. október 30.
- ↑ Esperanto ET-SoC-1 1092 RISC-V AI Accelerator Solution at Hot Chips 33, 2021. augusztus 24.
- ↑ Asanović, Krste: rocket-chip. GitHub . RISC-V International. (Hozzáférés: 2016. november 11.)
- ↑ Celio, Christopher: riscv-boom. GitHub . Regents of the University of California. (Hozzáférés: 2020. március 29.)
- ↑ Celio, Christopher: riscv-sodor. GitHub . Regents of the University of California. (Hozzáférés: 2016. november 11.)
- ↑ ucb-bar/riscv-sodor. github . Regents of the University of California. (Hozzáférés: 2019. október 25.)
- ↑ picorv32. GitHub . (Hozzáférés: 2020. február 27.)
- ↑ scr1. GitHub . Syntacore. (Hozzáférés: 2020. január 13.)
- ↑ SERV - The serial RISC-V CPU. github . (Hozzáférés: 2021. november 7.)
- ↑ Bit by Bit, how to fit 8 RISC-V cores in a $28 FPGA (Video, 4:23). YouTube . RISC-V Foundation. [2022. június 3-i dátummal az eredetiből archiválva]. (Hozzáférés: 2021. november 8.)
- ↑ SERV M extension (Video, at 2:39). Diode Zone . (Hozzáférés: 2021. november 7.)
- ↑ New CoreScore World Record Crams 6,000 SERV RISC-V Cores Into a Single FPGA. hackster.io . Avnet. (Hozzáférés: 2021. november 7.)
- ↑ Traber, Andreas: PULP: Parallel Ultra Low Power. ETH Zurich, University of Bologna. (Hozzáférés: 2016. augusztus 5.)
- ↑ Shilov, Anton: Western Digital Rolls-Out Two New SweRV RISC-V Cores For Microcontrollers. www.anandtech.com . (Hozzáférés: 2021. február 9.)
- ↑ Shilov, Anton: Western Digital Reveals SweRV RISC-V Core, Cache Coherency over Ethernet Initiative. www.anandtech.com . (Hozzáférés: 2019. május 23.)
- ↑ Western Digital Releases SweRV RISC-V Core Source Code (amerikai angol nyelven). AB Open , 2019. január 28. [2019. május 21-i dátummal az eredetiből archiválva].
- ↑ chipsalliance/Cores-SweRV a GitHub-on
- ↑ neorv32. GitHub . (Hozzáférés: 2021. szeptember 9.)
- ↑ China's Alibaba is making a 16-core, 2.5 GHz RISC-V processor. www.techspot.com . (Hozzáférés: 2019. július 30.)
- ↑ Alibaba open sources four RISC-V cores: XuanTie E902, E906, C906 and C910, 2021. október 20. (Hozzáférés: 2021. október 20.)
- ↑ XiangShan repository on Github
- ↑ XiangShan open-source 64-bit RISC-V processor to rival Arm Cortex-A76 - CNX Software
- ↑ riscv - FreeBSD Wiki. wiki.freebsd.org
- ↑ Montezelo, Manuel: Debian GNU/Linux port for RISC-V 64. Google Groups . (Hozzáférés: 2018. július 19.)
- ↑ Architectures/RISC-V. Fedora Wiki . Red Hat. (Hozzáférés: 2016. szeptember 26.)
- ↑ My Haiku RISC-V port progress. Haiku Community , 2021. május 12.
- ↑ Begari, Padmarao: U-Boot port on RISC-V 32-bit is available. Google Groups . Microsemi. (Hozzáférés: 2017. február 15.)
- ↑ HewlettPackard/RiscVEdk2 (GitHub)
- ↑ Almatary, Hesham: RISC-V, seL4. seL4 Documentation . Commonwealth Scientific and Industrial Research Organisation (CSIRO). (Hozzáférés: 2018. július 13.)
- ↑ Almatary, Hesham: heshamelmatary. GitHub . (Hozzáférés: 2018. július 13.)
- ↑ MultiZone Secure IoT Stack, the First Secure IoT Stack for RISC-V. Hex Five Security . Hex Five Security, Inc., 2019. február 22. (Hozzáférés: 2019. március 3.)
- ↑ Pharos (angol nyelven). SourceForge . (Hozzáférés: 2020. április 1.)
- ↑ ANGEL is a Javascript RISC-V ISA (RV64) Simulator that runs riscv-linux with BusyBox.. RISCV.org . [2018. november 11-i dátummal az eredetiből archiválva]. (Hozzáférés: 2019. január 17.)
- ↑ Lee, Yunsup: Boot RISC-V Linux in your web browser! (amerikai angol nyelven). RISC-V International , 2014. március 5. (Hozzáférés: 2020. szeptember 4.)
- ↑ ANGEL – RISC-V. riscv.org.s3-website-us-west-1.amazonaws.com . [2020. december 1-i dátummal az eredetiből archiválva]. (Hozzáférés: 2020. szeptember 4.)
- ↑ Documentation/Platforms/RISCV. QEMU Wiki. (Hozzáférés: 2020. május 7.)
- ↑ (2021. július 23.) „CREATOR: Simulador didáctico y genérico para la programación en ensamblador”. XXXI Jornadas de Paralelismo (JP20/21). doi:10.5281/zenodo.5130302.
- ↑ CREATOR Web with RISC-V example: https://creatorsim.github.io/creator/?example_set=default_rv&example=e12
- ↑ CREATOR source code on GitHub: https://github.com/creatorsim/creator
- ↑ WepSIM with RISC-V_im example. WepSIM
- ↑ Chisel: Constructing Hardware in a Scala Embedded Language. UC Berkeley . Regents of the University of California. (Hozzáférés: 2015. február 12.)
- ↑ Codasip Studio (amerikai angol nyelven). Codasip . (Hozzáférés: 2021. február 19.)
- ↑ riscv/riscv-compliance, RISC-V, 2021-02-12, <https://github.com/riscv/riscv-compliance>. Hozzáférés ideje: 2021-02-19
- ↑ RISC-V Debugger. www.lauterbach.com TRACE32 Debugger for RISC-V
- ↑ Lauterbach and SiFive Bring TRACE32 Support for High-Performance RISC-V Cores. www.sifive.com
- ↑ TRACE32 supports SiFive's RISC-V trace. www.lauterbach.com . [2022. június 2-i dátummal az eredetiből archiválva]. (Hozzáférés: 2022. május 29.)
- ↑ SEGGER Adds Support for SiFive's Coreplex IP to Its Industry Leading J-Link Debug Probe. (Hozzáférés: 2017. szeptember 19.)
- ↑ PR: SEGGER Embedded Studio supports RISC-V architecture. (Hozzáférés: 2017. november 23.)
- ↑ PR: SEGGER presents RTOS, stacks, middleware for RISC-V. (Hozzáférés: 2017. december 8.)
További olvasmányok
[szerkesztés]- The RISC-V Instruction Set Manual. RISC-V
- RISC-V Assembly Language Programming. GitHub , 2019. november 8.
- Design of the RISC-V Instruction Set Architecture. EECS Department, University of California, Berkeley
- Instruction Sets Should Be Free: The Case For RISC-V. EECS Department, University of California, Berkeley , 2014. augusztus 6.
- (2013 augusztus) „The RISC-V Instruction Set”. Hot Chips 25, 25–27 August 2013. [2020. augusztus 6-i dátummal az eredetiből archiválva]. Hozzáférés: 2022. május 29.
- Dabbelt, Palmer (2015 02). „RISC-V Software Ecosystem”. High-Performance Computer Architecture (HPCA) 2015, 2015 február 7–11.
- Lee, Yunsup (2015 február). „RISC-V "Rocket Chip" SoC Generator in Chisel”. High-Performance Computer Architecture (HPCA) 2015, 7–11 February 2015.
- The RISC-V Compressed Instruction Set Manual Version 1.9 (draft). RISC-V , 2015. november 5.
További információk
[szerkesztés]- Hivatalos weboldal
- RISC-V utasításkészlet referenciakártya a GitHub on
- RISC-V: An Open Standard for SoCs: The case for an open ISA. EETimes , 2014. július 8.
- Analyzing the RISC-V Instruction Set Architecture. Adapteva , 2014. augusztus 11.
- Celio, Christopher; Dabbelt, Palmer; Patterson, David A.; Asanović, Krste (8 July 2016). The Renewed Case for the Reduced Instruction Set Computer: Avoiding ISA Bloat with Macro-Op Fusion for RISC-V (Technical report). University of California, Berkeley. arXiv:1607.02318. UCB/EECS-2016-130.
- What is RISC-V?. Electromaker , 2021. július 14.
- RISC-V architektúrás számítógépeket akar alkalmazni a NASA (magyar nyelven). IT/Tech. SG.hu, 2022. szeptember 9.
Fordítás
[szerkeszté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.