RISC-V (uttalas "risk-five" på engelska) är en öppen processorarkitektur. Den finns huvudsakligen i två varianter: RV32 för 32 bitar och RV64 för 64 bitar. Det finns också en preliminär definition av en 128-bitarsvariant.[1]

Utvecklingen startade på University of California, Berkeley sommaren 2010. Namnet RISC-V kommer av att det är universitetets femte arkitektur av RISC-typ.[1] Nu drivs utvecklingen av RISC-V Foundation och dess medlemmar.[2]

Arkitekturen designades för att vara flexibel och enkel att utöka. Ett av de ursprungliga målen med utvecklingen av RISC-V var att underlätta forskning och utbildning kring processorarkitekturer.[1]

Design redigera

Tillägg redigera

Den mest grundläggande formen av RISC-V (RV32I eller RV64I) har endast ett fåtal instruktioner som utför några vanliga heltalsoperationer och läser och skriver till minnet, med mera. Andra funktioner definieras i separata tillägg som är valfria att implementera.

För att underlätta utvecklingen av program till RISC-V har en delmängd av standardtilläggen utsetts till "general-purpose". Dessa tillägg är:

  • "I": Grundläggande heltalsinstruktioner.
  • "M": Instruktioner för heltalsmultiplikation.
  • "A": Instruktioner för atomisk minnesmodifikation.
  • "F": Instruktioner för 32-bitars flyttalsberäkningar + nya register för 32-bitars flyttal.
  • "D": Instruktioner för 64-bitars flyttalsberäkningar + flyttalsregistren har plats för 64 bitar.
  • "Zicsr": Lägger till 4096 kontroll- och statusregister.
  • "Zifencei": Lägger till instruktionen fence.i som synkroniserar skrivningar till instruktionsminnet.

Körlägen redigera

En processorkärna i RISC-V kan innehålla en eller flera hårdvarutrådar (engelska: hardware thread eller hart).

En hårdvarutråd har upp till tre olika lägen som den kan köras i: machine (M), supervisor (S) samt user (U). Det enda av dessa som måste stödas är machine-läget men för att kunna köra vanliga operativsystem (exempelvis Linux) behövs oftast alla tre.

När processorn startas börjar alla hårdvarutrådar att exekvera i machine-läget på en implementationsdefinierad minnesadress.

Instruktioner redigera

En instruktion har oftast storleken 32 bitar (både i RV32 och RV64), eller 16 bitar om komprimerade instruktioner används.

De flesta instruktioner kan inte läsa eller skriva till minnet, utan bara till register. För att läsa eller skriva till minnet används separata load- och store-instuktioner.

Det finns även ett antal pseudoinstruktioner definierade. Dessa instruktioner har inga egna kodningar, utan är endast alias för en eller flera andra instruktioner.

Register redigera

RISC-V definierar processorregister x0-31 för heltal, f0-31 för flyttal, pc (programräknare) samt ett antal kontroll- och statusregister. Storleken på heltalsregistren och programräknaren är 64 bitar i RV64 och 32 bitar i RV32. Storleken på flyttalsregistren är 64 bitar om D-tillägget används, annars 32 bitar om endast F-tillägget används.

Namn ABI-namn Beskrivning
32 Heltalsregister
x0 zero Alltid 0 vid läsning. Inget händer vid skrivning.
x1 ra Returadress
x2 sp Stackpekare
x3 gp Global pekare
x4 tp Trådpekare
x5 t0 Temporär / alt. länkregister
x6-7 t1-2 Temporära
x8 s0/fp Sparat register / rampekare
x9 s1 Sparat register
x10-11 a0-1 Funktionsargument / returvärden
x12-17 a2-7 Funktionsargument
x18-27 s2-11 Sparade register
x28-31 t3-6 Temporära
32 Flyttalsregister
f0-7 ft0-7 Temporära
f8-9 fs0-1 Sparade register
f10-11 fa0-1 Funktionsargument / returvärden
f12-17 fa2-7 Funktionsargument
f18-27 fs2-11 Sparade register
f28-31 ft8-11 Temporära

Minne redigera

Varje hårdvarutråd har en adressrymd tillgänglig. En adress kan antingen vara oanvändbar eller leda till antingen primärminne eller en annan enhet. Byteordningen som används i RISC-V är little-endian.

Det finns ingen garanti att minnesåtkomster som utförs av en hårdvarutråd kommer att ses i samma ordning av andra hårdvarutrådar eller andra enheter som kan komma åt minnet. För att garantera ordningen behöver en hårdvarutråd använda fence-instruktioner. En fence-instruktion kan göra så att en instruktion som utförs före fence och en instruktion som utförs efter inte kan se ut att ha utförts i motsatt ordning av andra hårdvarutrådar eller enheter.

Referenser redigera

Externa länkar redigera