RISC-V

**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ä.
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).

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.

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.

### 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ä.

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. 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.
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).

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.

### 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.
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.

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.

Laajennus D laajentaa rekisterit 64 bittiä leveiksi kaksoistarkkuuden luvuille (*double*).
Liukulukurekisteri voidaan siirtää kokonaislukurekisteriin, jos suoritin on 64-bittinen.

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*).

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.

* “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 laskentaa
**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.
*“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.

Western Digital on ilmoittanut siirtyvänsä käyttämään suoritinta. Western Digital valmistaa vuosittain noin miljardi ydintä ja odottaa sen kasvavan kahteen miljardiin: yhtiö siirtää koko tuotantolinjansa RISC-V:lle.
Nvidia käyttää suoritinta grafiikkaprosessorien ohjaamiseen samalla piirilevyllä. Qualcomm käyttää RISC-V:tä mikrokontrollereissa.
ETH Zürichin Trikarenos-piiri on kolmiytiminen RISC-V-suoritin, joka on suunniteltu vähäiselle virrankäytölle satelliitteihin. Piiri käyttää kolmea ytimenä redundanttisena säteilyn aiheuttamilta häiriöiltä suojautumiseen. Nasa käyttää SiFiven suunnittelemia RISC-V-ytimiä High-Performance Spaceflight Computer (HPSC) -tietokoneessa. Lokakuussa 2023 Qualcomm ilmoitti ensimmäisestä massatuotantoon tarkoitetusta Androidia varten kehitetystä järjestelmäpiiristä, mutta piirillä ei vielä ollut nimeä.

Linux-ytimeen tuki on lisätty ytimen versiossa 4.15.
Wind River Systems on ilmoittanut VxWorks-tuesta joulukuussa 2019. OpenBSD lisäsi tuen versiossa 7.0. Myös Xv6 on siirretty RISC-V:lle. Google ilmoitti Android-tuesta tammikuussa 2023.

## Suoritinten kehittäjät ja valmistajat

SiFive ja StarFive ovat varhaisimpia RISC-V-koneiden kehittäjiä.
SiFive on Santa Clarassa Kaliforniassa toimiva suoritinytimiä ja suorittimia suunnitteleva yhtiö, StarFive taas Kiinassa toimiva niiden jakelija, joka kehittää järjestelmäpiirejä Jinghong-nimellä.

Joulukuussa 2022 MIPS Technologies julkaisi ensimmäinen RISC-V-käskykantaan perustuvan suorittimensa MIPS eVocore P8700.

Alibaba Groupin T-Head Semiconductor suunnittelee RISC-V-ytimiä.

Elokuussa 2023 kerrottiin, että viisi suurta yritystä perustaa yhteisyrityksen, jonka tehtävä on kehittää referenssisuunnitelmia RISC-V -arkkitehtuurilla. Perustaminen riippuu alan sääntelystä eikä investoinnin suuruus ole vielä tiedossa. Yrityksessä ovat mukana Infineon Technologies, Qualcomm, NXP Semiconductors, Bosch ja Nordic Semiconductor. Kesäkuussa 2023 kerrottiin RISE-projektista (RISC-V Software Ecosystem), jossa mukana olevat tahot pyrkivät tuomaan lisää ohjelmistoa RISC-V -laitteistolle. RISE-projektissa ovat alusta lähtien mukana Google, Intel, Imagination Technologies, MediaTek, Nvidia, Qualcomm, Red Hat, Samsung, SiFive ja Ventana Micro Systems.

X-Silicon on ilmoittanut kehittäneensä suorittimen, jossa on samalla piirillä RISC-V-suoritin ja grafiikkaprosessori (GPU). X-Siliconin piiri on avoin standardi. Aiemmin markkinoilla ei ole ollut avointa grafiikkaprosessoria. Ratkaisu ei ole vastaava kuin muiden valmistajien, joilla on kaksi erillistä ydintä eri tehtäviä varten, vaan X-Siliconin ratkaisussa sama ydin suorittaa molempia tehtäviä.

Intialainen Centre for Development of Advanced Computing on ilmoittanut kehittäneensä RISC-V-suorittimen DHRUV64. Suorittimen testejä on vielä suoritettavana eikä laajemmasta käytöstä vielä ole tietoa, mutta tavoitteeksi ilmoitetaan kuluttajaelektroniikka, 5G-verkot, autoteollisuus, teollisuusautomaatio ja IoT. Suorittimeen perustuvia järjestelmäpiirejä on suunnitteilla sekä kehittyneempiä valmistusprosesseja.

## Ensimmäiset RISC-V-tietokoneet

Ensimmäiset RISC-V-pohjaiset yleiskäyttöiset tietokoneet harrastajille julkaistiin vuosien 2021&ndash;2022 aikana.
Nämä ovat yhden piirilevyn tietokoneita, joissa massamuistina on muistikortti samaan tapaan kuin ARM-prossoriin perustuvat Raspberry Pi -mallit. Kaikki nämä perustuvat 64-bittiseen RV64GC-käskykantaan.

### SiFive/StarFive

SiFive julkaisi 2018 joukkorahoitettuna HiFive Unleashed -kehitysalustan, joka oli ensimmäinen Linuxia tukeva RISC-V-kehitysalusta. Tämä käytti SiFive Freedom U540 -suoritinta neljällä U54-ytimellä ja sisälsi 8 GB DDR4-muistia. Laite esiteltiin FOSDEM 2018 -tapahtumassa. Se maksoi 999 dollaria.

Loppuvuodesta 2021 SiFive julkaisi HiFive Unmatched -Mini-ITX-kokoisen emolevyn, joka sisältää neliytimisen SiFive Freedom FU740 -suorittimen (neljä U74 -ydintä), 8/16 GB muistia ja PCIe-korttipaikan. Laite esiteltiin Linley Fall Processor Conference 2020 -konferenssissa ja sitä nimitettiin "ensimmäiseksi RISC-V-PC:ksi".

Debian käyttää yhdeksää konetta käännösfarmissaan Debian 13 "Trixie" -julkaisun kehittämiseen.

StarFive Tech julkaisi marraskuussa 2021 VisionFive-koneen, joka perustuu kaksiytimiseen JH7100 -järjestelmäpiiriin (kaksiytiminen SiFive U74 -suoritin) ja sisältää 8 GB RAM -muistia, näyttö-, USB 3.0, gigabit ethernet -liitännät.
Canonical julkaisi Ubuntu Linuxin koneelle elokuussa 2022.

StarFive VisionFive2 on valmistajan mukaan ensimmäinen RISC-V-kone, joka sisältää 3D-grafiikkaa tukevan näytönohjaimen, joka tukee myös H.264/H.265 -videon purkua ja Vulkan ja OpenCL-rajapintoja 3D-grafiikkaan ja GPGPU-rinnakkaislaskentaan esim. tekoälysovelluksiin.
Koneessa on neliytiminen StarFive JH7110 -piiri 1,5 GHz kellotaajuudella ja siihen saa 2/4/8 GB muistia. Lisäksi siinä on kaksi Ethernet-porttia ja M.2-liitin.
Canonical julkaisi Ubuntu Linuxin koneelle toukokuussa 2023.
Pine64 on julkaissut StarFive JH7110 -järjestelmäpiiriin perustuvan Star64-koneen.

### Allwinner D1

Allwinner D1 -piiri eli sun20iw1p1 eli D1-H (mallina jossa HDMI) perustuu Alibaba Groupin T-Head Semiconductor -yhtiön suunnittelemaan XuanTie C906 -suoritinytimeen.
Allwinner D1 -järjestelmäpiiri sisältää 1 GHz 64-bittisen yksiytimisen RISC-V-suorittimen ja tukee 512 MB, 1 GB tai 2 GB muistia.

D1-H Nezha oli ensimmäinen sarjavalmisteinen 64-bittistä RISC-V -käskykantaa ja Linuxia tukeva kehitysalusta.
Ensimmäinen saatavissa oleva käyttöjärjestelmä oli Tina Linux, joka perustui OpenWrt-jakeluun.
Lokakuussa 2021 julkaistiin Fedora Linuxiin perustuva (epävirallinen) käyttöjärjestelmä Allwinner D1 Nezha -koneelle.
Canonical julkaisi Ubuntu Linuxin Allwinner D1 -koneille elokuussa 2022.

MangoPi-projekti julkaisi Allwinner D1 -piiriin perustuvan MangoPi MQ Pro -koneen tammikuussa 2022.

Yksi Allwinner D1 -piiriin perustuvia koneita rakentava valmistaja on 
Sipeed Lichee -sarjan koneilla. Lichee RV -koneessa on 1 gigatavu RAM-muistia, HDMI ja SPI -näyttöliitännät, USB ja wifi.

### Milk-V

Toukokuussa 2023 kiinalainen startup Milk-V julkaisi RISC-V-tuotesarjan. Sarja alkaa 9 $ hintaisesta Milk-V Duo:sta ja käsittää Raspberry Pi -kokoisen koneen neliytimisellä suorittimella.
Huippumallina on Micro-ATX-kokoinen ja PC:n ATX-virtalähdettä käyttävä Milk-V Pioneer, joka voi korvata suoraan PC-emolevyn. Emolevyllä on kiinteästi asennettu 64-ytiminen T-Head XuanTie C920 -suoritin ja korkeintaan 128 GB DDR-4-muistia. Emolevyllä on myös PC-koneille tyypilliset liittimet, kuten 16xPCIe-korttipaikka, M.2 ja SATA-portit kiintolevyille.

### DeepComputing
Kesäkuussa 2024 DeepComputing ilmoitti kannettavasta tietokoneeesta, joka käyttää RISC-V-suoritinta. DC-Roma RISC-V Laptop II käyttää kiinalaisen SpacemiT:n järjestelmäpiiriä.

## Lähteet

## Aiheesta muualla
* Kotisivut 
* The RISC-V Instruction Set Manual Volume I: Unprivileged ISA, Version 20191213