See artikkel ootab keeletoimetamist. (August 2022) |

RISC-V on kärbitud käsustik (RISC), mida hakati arendama 2010. aastal. RISC-V on avatud standard ning selle spetsifikatsioon on avalikult saadaval vastavalt Creative Commons litsentsile. Käsustiku litsents lubab igaühel luua implementatsiooni ilma litsentsitasu maksmata, ka ärieesmärgil. Käsustikku arendab RISC-V Foundation.
2020. aasta seisuga on olemas mõned RISC-V protsessori tuumad ja süsteemikiibid.
RISC-V sai alguse USA California Ülikooli Berkeleys paralleelsete arvutuste laboris, kus Krste Asanović, Yunsup Lee ja Andrew Waterman alustasid 2010. aastal vaba käsustiku arendamise projekti. 13. mail 2011 avaldati esimene RISC-V-d käsitlev publikatsioon. Samal aastal tehti esimene RISC-V kiibi disain.
2015. aastal loodi sihtasutus RISC-V Foundation käsustiku edasiseks arendamiseks. Alates 2018. aastast teeb RISC-V Foundation koostööd Linux Foundationiga.
RISC-V käsustiku disain on modulaarne, st implementatsiooni loojad saavad valida, millised käsuhulgad on tarvis realiseerida: kas ainult baaskäskude hulk või lisada ka lisakäsud. See potentsiaalselt võimaldab RISC-V kasutada seadete loomiseks alates mikrokontrolleritest kuni superarvutiteni.
Sõna pikkus on 32 baiti.
RISC-V võimaldab kuni 128-bitise mälu adresseerimist. Üks RISC-V riistvaraline lõim omab mäluaadressiruumi suurusega 2n baiti, kus n on täisarvu registri suurus bittides (nt 32-bitises mäluaadressiruumis on registri suurus 32 bitti). Mäluaadressiruum on n-ö ringkujuline ehk aadressis 2n-1 asuv bait külgneb aadressil 0 asuva baitiga.
Iga käsu täitmine toob kaasa ühe või rohkem mällupöördumist. Mällupöördumine võib olla kas kaudne (implicit) või ilmne (explicit). Kaudse mällupöördumise korra sooritatakse mälust lugemise operatsioon käsu aadressi äratoomiseks (instruction fetch). Ilmse mällupöördumise puhul sooritatakse kas lugemise või kirjutamise operatsiooni käsus määratud mäluaadressil.
RISC-V saab käsitleda mitte ühte käsustikuna, vaid nelja baaskäsustikkude perekonnana:
Iga RISC-V implementatsioon peab realiseerima mingit baaskäsustikku. Peale baaskäske on olemas ka muud käskude hulgad, mida nimetatakse laiendusteks. Sellised laiendused sisaldavad käske lisafunktsionaalsuse realiseerimiseks. Näiteks kui implementatsioon kasutab RV32I käsustikku, siis sellele implementatsioonile saab lisada järgmisi laiendusi:
Nende laienduste kogumi koos baaskäsustikuga nimetatakse RV32G. Laiendused teiste baaskäsustikkude jaoks on nimetatud samal moel nagu eeltoodud näites: viimane täht tähendab millise funktsionaalsuse realiseerimiseks seda käsustikku kasutatakse (nt 64-bitise mäluaadressiruumiga käsustik korrutamise ja jagamise käskude jaoks on nimetatud RV64M jne).
RISC-V käsud on väga lühikesed. Baaskäsud on 32-bitised ning peavad olema joondutud 32 biti piiris. RISC-V toetab ka käske, milliste pikkus on 16*n biti (n on positiivne täisarv). Kui tegemist on 16-bitiste käskudega siis joondus on 16 bitti, vastasel juhul on see tavaliselt 32 bitti. RISC-V implementatsiooni maksimaalne käsu pikkus on võrdne positiivse täisarvuga korrutatud joondusega ning sõltub sellest milliseid käskude hulki (baaskäsud koos laiendustega) implementatsioon realiseerib. Sõltuvalt käsu pikkusest omavad käsu vähima kaaludega bitid erinevaid kindlaid väärtusi:
Basskäsustikud sisaldavad 6 käsuformaati:
Allpool on toodud käsuformaatide tabel RV32I näitel:
| Formaat | 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 | |
| R (Register) | funct7 | rs2 | rs1 | funct3 | rd | opcode | ||||||||||||||||||||||||||
| I (Immediate) | imm[11:0] | rs1 | funct3 | rd | opcode | |||||||||||||||||||||||||||
| U (Upper immediate) | imm[31:12] | rd | opcode | |||||||||||||||||||||||||||||
| S (Store) | imm[11:5] | rs2 | rs1 | funct3 | imm[4:0] | opcode | ||||||||||||||||||||||||||
| B (Branch) | [12] | imm[10:5] | rs2 | rs1 | funct3 | imm[4:1] | [11] | opcode | ||||||||||||||||||||||||
| J (Jump) | [20] | imm[10:1] | [11] | imm[19:12] | rd | opcode | ||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||||||
Käskude üldkuju on KÄSK rd, operand1, operand2. Näiteks kui sooritatakse operatsiooni registri väärtuse ja otsese väärtuse peale, siis käsu kuju on KÄSK rd, rs1, imm.
I-tüüpi formaadi käsud:
R-tüüpi formaadi käsud:
Load käsk sooritab andmete ülekannet mälust registrisse. Store käsk sooritab andmete ülekannet registrist mällu. Load on I-tüüpi formaadi käsk; Store on S-tüüpi formaadi käsk.
Baaskäsustikus on olemas ka teised käsud:
RISC-V sisaldab laiendused korrutamise ja jagamise jaoks. Kõikide laienduste ühised käsud on sellised:
RISC-V saab toetada erinevaid tarkvaravirnu, mis võimaldavad implementeerida privilegeeritud täitmist. On olemas 3 täitmise keskkonna (execution environment) tüüpi:
Iga RISC-V riistvaraline lõim töötab mingisugusel hetkel mingi privileegitasemel, mis on määratud kontroll- ja staatusregistrites. Kokku on olemas 3 privileegitaset: U (User/Application; Kasutaja/Rakendus); S (Supervisor; Superviisor); M (Machine; Masin). Mõned käsud on võimalik sooritada ainult juhul, kui riistvaraline lõim töötab mingil privileegitasemel. Kui proovitakse sooritada mingit käsku, mis ei saa sooritada jooksva privileegitasemel, siis visatakse erindit.
Ülalpool kirjeldatud käsud saab RISC-V implementatsioon täita olenemata sellest milles privileegitasemel antud implementatsioon töötab.
Vaatamata sellele, et RISC-V 2020. aasta seisuga ei ole laikasutusel mõne tarkvara toetab seda käsustikku või oli RISC-V käsustikusse porditud:
{{netiviide}}: CS1 hooldus: tundmatu keel (link){{netiviide}}: CS1 hooldus: mitu nime: autorite loend (link) CS1 hooldus: tundmatu keel (link){{netiviide}}: CS1 hooldus: tundmatu keel (link)