RISC-V (RISC-Five) on avoin ja vapaa RISC-suoritinarkkitehtuuri, joka on kehitetty Berkeleyn yliopistossa. Arkkitehtuuri on julkaistu vuonna 2010. Suoritinta voi valmistaa ja käyttää vapaasti.

RISC-V:n etu kilpailevaan ARM-suorittimeen on sen avoimuus: OEM-valmistajat voivat käyttää määrittelyä suunnitteluun ja valmistukseen joko kokonaan ilman tai pienillä rojaltimaksuilla, joka on suuri osa kustannuksesta ARM-suorittimessa. Muilla suorittimilla on patentteja käskykannan erikoisuuksiin, joka estää muita käyttämästä niitä ilman lisenssiä. Neuvottelut lisensseille voivat viedä useita kuukausia ja maksaa miljoonia dollareita, jotka tekevät niistä epäsopivia muun muassa akateemisille tahoille. Muiden suorittimien valmistamiseen tarvitaan ytimen tai käskykannan lisensoinnin lisäksi muuta immateriaalista kuten muistiohjaimia, IO-liityntöjä ja niin edelleen. Muiden suorittimien lisensointiin liittyy normaalisti etukäteismaksu sekä rojaltimaksu jokaista myytyä piiriä kohden.

RISC-V:n laittoivat alkuun David Patterson ja Krste Asanović tutkimusryhmineen University of Californian Berkeleyn kampuksella vuonna 2010. Käskykantaa kehittämään perustettiin vuonna 2015 voittoatuottamaton RISC-V Foundation -säätiö. Säätiö siirsi syksyllä 2019 toimintansa Delawaresta Sveitsiin johtuen useiden jäsenten huolista koskien Yhdysvaltain kauppapolitiikkaa. Säätiöllä oli tuolloin 325 jäsentä.https://www.reuters.com/article/us-usa-china-semiconductors-insight-idUSKBN1XZ16L/ Sveitsissä toimiva RISC-V International Association perustettiin maaliskuussa 2020.

RISC-V tukee 32- ja 64-bittisiä osoiteavaruuksia ja lisäksi on hahmotelma 128-bittiselle tulevalle osoiteavaruudelle.

Käskykanta

RISC-V-käskykanta on suunniteltu laajennettavaksi ja modulaariseksi.

Käskykannan perustana on minimaaliseksi rajoitettu kokonaislukukäskykanta, joka jokaisen suorittimen on toteutettava. Siitä on kaksi perusversiota, RV32I ja RV64I, jotka käyttävät 32- ja 64-bittistä muistiavaruutta. Lisäksi on olemassa RV32E, joka on RV32I:n alijoukko puolella rekisterien määrällä vieläkin pienempiin mikrokontrollereihin. Yleisempi ohjelmistokehitys vaatii laajennuksia, jotka toteuttavat esimerkiksi kokonaislukujen kerto- ja jakolaskut (laajennus M), atomiset operaatiot (laajennus A) moniajokäyttöjärjestelmiä ja säikeitä varten ja liukulukumatematiikan (laajennus F ja D kaksoistarkkuuden luvuille).1.3 RISC-V ISA Overview

On huomattava, että ei taata, että RV64I on täysin alaspäin yhteensopiva 32-bittisen RV32I:n kanssa, kuten esimerkiksi SPARC- ja MIPS-arkkitehtuureissa tehtiin kun näihin suorittimiin lisättiin 64-bittinen toimintatila. Siten 64-bittinen RV64I-käskykantaa käyttävä suoritin ei voi suoraan ajaa 32-bittistä RV32I-koodia.kts. 1.3 RISC-V ISA Overview alaviitteet

Peruskäskykanta käyttää 32-bittisiä kiinteän mittaisia käskyjä. Käskyjen koodaus on kuitenkin suunniteltu toimimaan 16-bittisiin parcel-yksikköihin pakattuna (alignment), joita käsky voi sisältää mielivaltaisen määrän. Tätä käytetään lyhyemmät pakatut käskyt sisältävän käskykantalaajennuksen kanssa (laajennus C). Parcel on aina little-endian ja suorittimen tavujärjestys voidaan toteuttaa kummalla tavalla tahansa.1.5 Base Instruction-Length Encoding

RV32I

RV32I:n peruskäskykanta sisältää 40 konekielistä käskyä. Toteutuksesta riippuen se voidaan toteuttaa 38 käskyllä yhdistämällä ECALL ja EBREAK-käskyt (järjestelmäkutsu, debuggerikutsu) ja jättämällä FENCE toteuttamalla. Peruskäskykanta pystyy emuloimaan laajennettuja käskykantoja, joskin A-laajennus tarvitsee laitteistotukea. Peruskäskyt ovat kaikki 32 bittiä pitkiä.The RISC-V Instruction Set Manual. Volume I: Unprivileged ISA § 2 RV32I Base Integer Instruction Set, Version 2.1

RV32I määrittelee 32 32-bittistä rekisteriä. Rekisterin x0 sisältö on aina nolla. Ohjelmalaskuri PC pitää kirjaa kulloinkin suoritettavasta käskystä. Rekistereihin x1–x31 voi tallentaa kahden komplementin etumerkillisen kokonaisluvun, etumerkittömän kokonaisluvun tai boolean-totuusarvon (1 tai 0).

Normaali kutsukäytäntö tallentaa rekisteriin x1 aliohjelman paluuosoitteen ja rekisteriin x2 pino-osoittimen. Pakattu käskykanta on suunniteltu tätä käyttöä varten. x5 on alternate link register. Tätä on tarkoitus käyttää hypyn jälkeen kutsumaan rutiinia, joka tallentaa rekisterit pinoon tai lataa ne (millicode routines).

Kokonaislukumatematiikka sisältää lisäys- ja vähennysoperaattorit ja bittioperaatiot XOR, OR ja AND-operaattorit. Lisäksi on bittien siirto vasemmalle ja oikealle (kertominen tai jako kahdella) ja pienempi kuin -vertailu. Operaatiot voivat tapahtua rekisterien välillä tai immediate-lukuarvoa vastaan. Koska immediate on koodattu käskyyn, sen pituus voi olla vain osan käskyn pituudesta, yleisemmin 12 bittiä aritmetiikassa tai haarautumisissa tai 20 bittiä ehdottomassa hyppykäskyssä jal (Jump and Link). Kokonaislukumatematiikka ei sisällä ylivuotojen tarkastuksia tai käsittelyä. Ylivuodon tarkistus ja käsittely tapahtuu ainoastaan ehdollisella haarautumisella.

Aritmeettisten käskyjen lisäksi käskykannassa on ehdolliset haarautumiset, hypyt ja lataus muistista ja tallennus muistiin tavuittain, 16-bittisinä tai 32-bittisinä sanoina (load-store-arkkitehtuuri). RISC-V:n RVWMO-muistimallissa (RISC-V Weak Memory Ordering) yhden säikeen suorittamien latausten ja tallennusten järjestys voi olla erilainen kuin ohjelmassa.16 RVWMO Memory Consistency Model, Version 2.0 Tämä mahdollistaa muistijärjestelmän suorituskyvyn parantamisen. Käsky fence takaa ennen sitä tehtyjen operaatioiden tapahtumisen.

Ehdottomat hypyt (hyppykäskyt) ovat suhteessa ohjelmalaskuriin, eivätkä ne sotke ehdollisen haarautumisen ennustusta. Käskykanta ei toteuta pinon käsittelyä. Käsky ret (paluu aliohjelmasta) on alias käskylle jalr x0, x1, 0, koska paluuosoite on rekisterissä x1.

RISC-V ei tue ehdollisia siirtoja kuten CMOV, jota muissa arkkitehtuureissa käytetään hyppyjen välttämiseen. Kehittäjien mukaan nykyiset nopeat suorittimet toteuttavat jo haarautumisen ennakoinnin, ja muiden ehdollisten käskyjen lisäys vain monimutkaistaisi käskykantaa ja suoritinta.kts. The RISC-V Instruction Set Manual. Volume I: Unprivileged ISA, Document Version 20191213 § Conditional Branches alaviitteet Poikkeuksena ovat ehdolliset Load-Reserved/Store-Conditional (LR/SC) -käskyt A-laajennuksessa.

nop-käsky (no operation) on enkoodattu muodossa addi x0, x0, 0 (lisää nollarekisteri ja nolla nollarekisteriin).The RISC-V Instruction Set Manual. Volume I: Unprivileged ISA § 2.4 Integer Computational Instructions

System-käskyt on tarkoitettu monen käyttäjän käyttöjärjestelmän toteuttamiseen. Näihin kuuluvat CSR-käskyt (control and status registers), jotka muuttavat käyttäjäoikeustilaa ja ecall käyttöjärjestelmäkutsua varten.The RISC-V Instruction Set Manual. Volume I: Unprivileged ISA § 2.8 Environment Call and Breakpoints

Käskykannan laajennoksia

Yleisiin ja standardoituihin laajennoksia kuuluu M, joka sisältää kokonaislukujen kerto- ja jakolaskut. RISC-V:n jakolasku nollalla ei aiheuta poikkeusta, vaan se on tarkistettava jakolaskun jälkeen ehdollisella haarautumisella.The RISC-V Instruction Set Manual. Volume I: Unprivileged ISA § 7.2 Division Operations On olemassa myös spesifikaatio pelkälle Zmmul-laajennukselle kertolaskua varten.

Atomisuuden toteuttavat käskyt (laajennus A) ovat tarpeen moniajokäyttöjärjestelmiä ja säikeitä varten. Atominen käsky on "lue, muuta ja kirjoita" -tyyppinen käsky, joita tarvitaan synkronointiin samassa muistiavaruudessa toimivia ohjelmia varten.9 “A” Standard Extension for Atomic Instructions, Version 2.1

RISC-V tuntee useita laajennoksia liukulukumatematiikkaa varten. Peruslaajennus F lisää suorittimeen 32 liukulukurekisteriä f0–f31, joihin mahtuu 32-bittinen IEEE 754-2008 -standardin mukainen liukuluku (float) ja statusrekisterin fcsr. Liukulukujen lataus- ja tallennuskäskyt muistuttavat peruskäskykannan käskyjä ja rekisterissä olevan muistiosoitteen lisäksi latauksen osoitteeseen voidaan lisätä 12-bittinen etumerkillinen immediate-arvo. Operaatiot ovat lisäys, vähennys, kertolasku, jakolasku, neliöjuuri, vertailut ja muunnos kokonaisluvuksi tai kokonaisluvusta. RISC-V mahdollistaa myös liukulukurekisterin siirron kokonaislukurekisteriin.The RISC-V Instruction Set Manual. Volume I: Unprivileged ISA § 11 “F” Standard Extension for Single-Precision Floating-Point, Version 2.2

Laajennus D laajentaa rekisterit 64 bittiä leveiksi kaksoistarkkuuden luvuille (double). Liukulukurekisteri voidaan siirtää kokonaislukurekisteriin, jos suoritin on 64-bittinen.The RISC-V Instruction Set Manual. Volume I: Unprivileged ISA § 12 “D” Standard Extension for Double-Precision Floating-Point, Version 2.2

RISC-V-standardiin hyväksytty osa The RISC-V Instruction Set Manual Volume II: Privileged Architecture sisältää laajennukset, joita tarvitaan muistinsuojauksen, monen käyttäjän käyttöjärjestelmän ja hypervisorin toteuttamiseen (H-laajennus). Tämä määrittelee rajattujen oikeuksien CSR-rekisterit (control and status registers) ja niitä käyttävät käskyt. RISC-V määrittelee kolme käyttöoikeustasoa (Privilege Levels), jotka ovat käyttäjä/sovellusohjelma (U), käyttöjärjestelmän ydin (supervisor, S), kone (machine, M) ja yksi on varattu tila.

Laajennokset I, M, A, F, D, Zicsr ja Zifencei toteuttavaa käskykantaa pidetään yleiskäyttöisenä ja sen tunnetaan myös nimellä G (general).27.3 Instruction-Set Extension Names

Pakatut käskyt sisältävä laajennus C vähentää muistikäyttöä lisäämällä lyhyet 16-bittiset käskyt yleisille operaatioille. Yleisesti noin 50-60% konekielikäskyistä voidaan korvata lyhyillä vaihtoehdoilla, mikä vähentää koodin kokoa 25-30%. Kaikki käskyt voivat nyt alkaa 16 bitin rajalta.17 “C” Standard Extension for Compressed Instructions, Version 2.0

“Q” Standard Extension for Quad-Precision Floating-Point mahdollistaa 128 bittiä leveiden nelinkertaisen tarkkuuden lukujen käsittelyn. "Zfh" and "Zfhmin" Standard Extensions for Half-Precision Floating-Point sisältää 16 bittiä leveiden liukulukujen käsittelyn. RISC-V Bit-Manipulation ISA-extensions (Zba, Zbb, Zbc, Zbs) sisältää mm. roll-käskyt ja bittien laskentaahttps://wiki.riscv.org/pages/viewpage.action?pageId=16458762 Lisäys sisältää erilaisia käskyjä, joiden päämäärä on koodin koon pienentäminen, suorituskyvyn parantaminen tai energiatehokkuus. Zba sisältää käskyjä bittien siirtoon (kertomiseen 2,4 tai 8:lla) ja summaukseen samalla käskyllä. Zbb sisältää käskyjä sanan asetettujen bittien laskemiseen, sanan alussa olevien nollabittien laskemiseen., valitse suurempi tai pienempi arvo (MAX, MIN), vaihda sanan tavujärjestys, bittien rotate-operaatio. Käskyt mahdollisestavat esimerkiksi C-kielen merkkijonojen käsittelyyn tarkoitettujen strlen() tai strcmp() -tyylisten operaatioiden optimoinnin. Zbc sisältää käskyt muistinumerottomaan kertolaskuun, jota käytetään eräissä salakirjoitus- ja tarkistussumma-algoritmeissa. Zbs sisältää sanan yksittäisten bittien lukemisen tai asettamisen.RISC-V Bit-Manipulation ISA-extensions, Version 1.0.0-38-g865e7a7, 2021-06-28: rc “Zicntr” Standard Extension for Base Counters and Timers sisältää suorituskykylaskureita ja kellonajan

Suunniteltuja laajennoksia ovat mm. “J” Standard Extension for Dynamically Translated Languages “P” Standard Extension for Packed-SIMD Instructions 5. RISC-V konferenssi päätti hylätä SIMD-käskyt vektorikäskyjen hyväksi. Löytyi kuitenkin halua määrittää SIMD-käskyt kokonaisluvuille pieniin suorittimiin, mikä on mahdollisesti uusi toteutus. “V” Standard Extension for Vector Operations “Zam” Standard Extension for Misaligned Atomics, v0.1 “Zfinx”, “Zdinx”, “Zhinx”, “Zhinxmin”: Standard Extensions for Floating-Point in Integer Registers, Version 1.0.0-rc Mahdollinen laajennus yksinkertaisen tarkkuuden liukulukujen laskemiseksi ilman liukulukulaajennoksen rekistereitä.

Käyttökohteet

Vuonna 2022 valmistettiin 10 miljardia RISC-V-ydintä, joista puolet Kiinassa.