# RISC-V

RISC-V és un conjunt d'instruccions o ISA de codi obert i de tipus RISC. RISC-V fou creada el 2010 per investigadors de la Universitat de Berkeley a Califòrnia. L'any 2024 hi havia un conflicte obert per Estats Units per tal d'evitar l'ús de RISC-V per part de Xina.

## Motivació

Les noves ISA acostumen a ser molt cares, pels costos en dissenyadors de computadors. A més, desenvolupar una CPU requereix coneixements en múltiples especialitats: lògica digital electrònica, compiladors i sistemes operatius. És difícil trobar un equip com aquest fora d'una organització d'enginyers professional. L'equip normalment és pagat amb els diners que cobren pels seus dissenys. Per tant, els venedors de dissenys de computadors, com ARM Holdings i MIPS Technologies cobren regalies per l'ús dels seus dissenys, patents i drets d'autor. Sovint requereixen acords de confidencialitat abans d'entregar documents que descriuen els avantatges detallats dels seus dissenys i el joc d'instruccions. En molts casos, no es descriuen les raons les decisions de disseny. Tot aquests costos i secretisme fan que el desenvolupament de nou hardware i software sigui molt més difícil. També dificulta les auditories de seguretat. Un altre resultat és que els jocs d'instruccions moderns, d'alta qualitat i de propòsit general no s'han explicat ni han estat disponibles, excepte per motius acadèmics.
RISC-V es va iniciar per donar solució a aquests problemes. L'objectiu era fer una ISA pràctica, de codi obert, utilitzable en qualsevol disseny de hardware o software sense càrrecs. A més, s'expliquen les raons de cadascuna de les parts del projecte, com a mínim en termes generals. Els autors de RISC-V són acadèmics però amb una experiència considerable en el disseny de computadors. La ISA de RISC-V és un desenvolupament directe d'un conjunt de projectes acadèmics en l'àrea del disseny d'ordinadors. En part es va originar per ajudar aquests projectes.
Per fer front al cost de disseny, el projecte es va iniciar com una recerca acadèmica finançada per DARPA. Per tal de construir una gran comunitat continuada d'usuaris i, per tant, acumular dissenys i programari, els dissenyadors de RISC-V ISA planegen donar suport a una àmplia varietat d'usos pràctics. Son petits, ràpids i redueixen el consum de les implementacions en el món real, sense haver-se de dissenyar per cada micro-arquitectura en particular. La necessitat d'una àmplia base de col·laboradors és part del motiu pel qual RISC-V ha estat dissenyat per adaptar-se a tants usos. Per aquesta raó, molts col·laboradors de RISC-V veuen el projecte com un esforç unificat de la comunitat.

## Història
### Predecessors

El terme RISC data del 1980. Abans d'això, hi havia un cert coneixement que els ordinadors més simples podrien ser eficaços, però els principis de disseny no van ser descrits àmpliament. Els ordinadors simples i efectius sempre han estat d'interès acadèmic.
Els acadèmics varen crear el joc d'instruccions DLX per la primera edició de Computer Architecture: A Quantitative Approach al 1990. David Patterson n'era un dels autors, i posteriorment va col·laborar en RISC-V. DLX va ser dissenyat amb propòsit educacional. Els acadèmics i aficionats l'implementaven utilitzant matrius de portes programables. Aquesta ISA no va tenir èxit comercial.
Les versions 2 i anteriors dels processadors ARM tenien un joc d'instruccions de domini públic, i segueixen sent suportades per la GNU Compiler Collection (GCC), un compilador de codi obert. Per aquesta ISA existeixen 3 nuclis de codi obert, però no s'ha fabricat mai.
OpenRISC es una ISA de codi obert basada en DLX, associaciada amb dissens de RISC. Es troba completament suportada per implementacions de GCC i Linux. Tot i així, disposa de poques implementacions comercials.

### Ús acadèmic

Krste Asanović de la Universitat de Califòrnia, Berkeley, va trobar múltiples usos per a un sistema basat en codi obert. Al 2010 va decidir desenvolupar i publicar en "short, three-month project over the summer". El pla era ajudar tant als usuaris acadèmics com industrials. David Patterson a Berkeley també hi va contribuir. Originalment va identificar les propietats del Berkeley RISC. RISC-V és una de les seves sèries cooperatives dels projectes de recerca RISC. En aquest punt, els estudiants varen proporcionar programari, simulacions i dissenys de CPUs econòmics.
Originalment, els autors de RISC-V i la seva institució, oferien els documents de la ISA i diversos dissenys de CPU sota llicencies BSD, la qual permet treballs derivats—per exemple dissenys de xips RISC-V—per ser tant oberts i gratuïts, o bé tancats i propietaris.
Inicialment es trobaven finançats per DARPA.

### Fundació

Per motius comercials, cal que una ISA sigui estable abans de poder utilitzar-lo en un producte que pot durar molt anys. Per abordar aquest problema, es va formar la fundació RISC-V per posseir, mantenir i publicar la propietat intel·lectual relacionada amb la definició de RISC-V. Els autors originals i els propietaris han cedit els seus drets a la fundació.
Al 2019 la fundació va publicar els documents que defineixen RISC-V i permeten la utilització sense restriccions de la ISA tant per disseny hardware com software. Tot i així, nomes els membres pagats de la fundació RISC-V poden votar per aprovar canvis o utilitzar el logotip de compatibilitat de marca registrada.

### Premis

* 2017: Premi a la elecció del analista de THe Linley Group a la millor tecnologia (per al conjunt d'instruccions)

## Requisits

Els dissenyadors diuen que el conjunt d'instruccions és la interfície principal d'un ordinador, ja que es troba entre el maquinari i el programari. Si un bon conjunt d'instruccions estigués obert, disponible per a tothom, hauria de reduir dràsticament el cost del programari permetent una reutilització molt més gran. També hauria d'incrementar la competència entre els proveïdors de maquinari, que poden utilitzar més recursos per al disseny i menys per al suport de programari.
Els dissenyadors afirmen també que les grans innovacions són poc freqüents en el disseny de conjunt d'instruccions, ja que els dissenys més exitosos dels últims quaranta anys s'han fet cada vegada més semblants. De les que van fallar, la majoria ho va fer perquè les seves empreses patrocinadores van fallar comercialment, no perquè els conjunts d'instruccions tècnicament fossin pobres. Per tant, un conjunt d'instruccions obertes ben dissenyat dissenyat amb principis ben establerts hauria d'atreure un suport a llarg termini per molts proveïdors.
La majoria de les ISA obertes anteriors van utilitzar la GNU General Public Licence (GPL), animant els usuaris a obrir les seves implementacions per copiar-les i utilitzar-les altres persones.
A diferència d'altres dissenys acadèmics que només estan optimitzats per simplificar l'exposició, els dissenyadors afirmen que el conjunt d'instruccions RISC-V és per a ordinadors pràctics. Segons diuen, té funcions per augmentar la velocitat de l'ordinador tot i que redueix el cost i l'ús de l'energia. Aquests inclouen una arquitectura de load-store, patrons de bits per simplificar els multiplexors en una CPU, un punt flotant basat en estàndards simplificats, un disseny que és arquitectònicament neutre i que situa els bits més significatius en una ubicació fixa per accelerar la extensió de signes. Es diu que l'extensió de signes sovint es troba en la ruta crítica a lo que en temps respecte.
El conjunt d'instruccions està dissenyat per a una àmplia gamma d'usos. Admet tres amplades de paraules, 32, 64 i 128 bits, i una varietat de subconjunts. Les definicions de cada subconjunt varien lleugerament per a les tres amplades de paraules. Els subconjunts donen suport a petits sistemes encastats, ordinadors personals, supercomputadors amb processadors vectorials i computadores en paral·lel, muntades en rack, a escala de magatzem.
El conjunt d'instruccions és molt varialbe i extensible, de manera que sempre es poden afegir més bits de codificació. L'espai per a la versió ampliada de l'ISA de 128 bits es va reservar perquè 60 anys d'experiència en la indústria han demostrat que l'error més irrecuperable en el disseny d'instruccions és la manca d'espai d'adreça de memòria. A partir de 2016, l'ISA de 128 bits no es defineix intencionadament, ja que encara hi ha poca experiència pràctica amb sistemes de memòria tan grans. Hi ha propostes per implementar instruccions d'amplada variable fins a 864 bits.
RISC-V també dona suport als usos acadèmics dels dissenyadors. La simplicitat del subconjunt sencer permet realitzar exercicis bàsics als estudiants. El subconjunt sencer és un programari ISA senzill que permet controlar les màquines d'investigació. L'ISA de longitud variable permet extensions tant per a estudis com per a investigació. El conjunt d'instruccions privilegiat separades permet la investigació en el suport del sistema operatiu, sense redissenyar els compiladors. La propietat intel·lectual oberta de RISC-V permet publicar, reutilitzar i modificar els seus dissenys.

## Innovadors
### Comercials

* SiFive, una companyia especialitzada en el desenvolupament de hardware RISC-V, la companyia te models de processador publicats en el 2017. Aquests inclouen un sistema quad-core SoCa de 64-bit en un chip (SoC).
* Syntacore, un membre fundador de la Fundació RISC-V i un dels primers proveïdors comercials de RISC-V IP, desenvolupadors de llicències de RISC-V IP des de 2015. EN 2018, els productes que incorporen en el mercat incloeixen vuit cores de 32 i 64 bits, incloent SCR MCU core de codi obert. Els primers SoCs comercialitzats, basats en el Syntacore IP van ser demostrats en el 2016.
* Andes Technology Corporation, membre fundador de la Fundació RISC-V, es va unir al consorci el 2016, va llançar els seus dos primers nuclis RISC-V el 2017. Els nuclis, el N25 i el NX25, venen amb un ecosistema de disseny complet i un nombre de socis RISC-V. Andes està impulsant activament el desenvolupament de l'ecosistema RISC-V i espera llançar diversos nous productes RISC-V el 2018.
* Codasip i UltraSoC han desenvolupat una propietat intel·lectual totalment compatible per als SOC integrats RISC-V que combinen els nuclis RISC-V de Codasip i altres IP amb depuració, optimització i anàlisi d'UltraSoC.
* Imperas ha desenvolupat una família de models de processadors ràpids per als diferents subconjunts de les variants ISV RV32GC i RV64GC que formen part de les distribucions simuladores del controlador OVPsim que s'utilitzen per al desenvolupament de programari encastat.
* GreenWaves Technologies va anunciar la disponibilitat de GAP8, un controlador de 32 bits 1 i 8 nuclis de càlcul, SoC de 32 bits i placa de desenvolupadors el febrer de 2018. La seva placa de desenvolupament GAPuino GAP8 va començar a comercialitzar-se el maig de 2018.
* Hex Five va anunciar la disponibilitat general de MultiZone Security: el primer entorn d'execució de confiança RISC-V (TEE) que utilitza les extensions de mode RISC-V ISA i les modalitats privilegiades.
* CloudBEAR és una empresa de processadors IP que desenvolupa els seus propis nuclis RISC-V per a una àmplia gamma d'aplicacions.
* T-Head, una semiconductora de la BU d'Alibaba Group (NYSE: BABA), té un MCU comercial, Scorpio, en producció el 2019.

### En desenvolupament

* El Centre per al Desenvolupament d'Informàtica Avançada (C-DAC) està desenvolupant un processador RISC-V amb quatre nuclis fora d'ordre de 64 bits.
* Indian Institute of Technology Madras està desenvolupant sis dissenys de CPU de codi obert RISC-V per a sis usos diferents, des d'una petita CPU de 32 bits per a Internet de les coses (IoT) fins a grans CPU's de 64 bits dissenyades per a ordinadors aplicats en granges de servidors basades en tecnologies RapidIO i Hybrid Memory Cube.
* Nvidia planeja utilitzar RISC-V per substituir el processador Falcon de les seves targetes gràfiques GeForce.
* ASTC va desenvolupar una CPU RISC-V per a circuits encastats.
* Adapteva planeja utilitzar RISC-V, en un successor del seu producte accelerador manycore.
* lowRISC és un projecte sense ànim de lucre per implementar un sistema de maquinari de codi obert totalment en un xip (SoC) basat en el RISC-V ISA de 64 bits.
* Computer Laboratory, de la Universitat de Cambridge, en col·laboració amb FreeBSD Project, ha portat aquest sistema operatiu a 64-bit RISC-V per utilitzar-lo com a plataforma de recerca de maquinari i programari.
* ETH Zurich i la Universitat de Bolonya han desenvolupat cooperativament el processador PIS PULPino de codi obert RISC-V com a part del projecte Parallel Ultra-Low Power (PULP) per a la computació IoT eficient energèticament.
* Western Digital va anunciar un pla per incorporar processadors RISC-V en els seus futurs productes.
* Esperanto Technologies ha anunciat que estan desenvolupant tres processadors basats en RISC-V: el nucli d'alt rendiment ET-Maxion, el nucli E-Minion eficient i el processador gràfic ET-Graphics.

## Programari

Un problema comú per un nou conjunt d'instruccions és la falta de dissenys de CPUs i programari. Aquests dos problemes limiten la usabilitat i redueixen l'adopció del conjunt.
La pàgina web de RISC-V té una especificació per les instruccions de mode usuari, i una especificació preliminar per un conjunt d'instruccions privilegiat de propòsit general per donar suport als sistemes operatius.
Hi ha varis dissenys oberts de CPUs RISC-V, incloent la 64-bit Berkeley Out of Order Machine (BOOM), la 64-bit Rocket, cinc dissenys 32-bit Sodor CPU de Berkeley, la picorv32 de Clifford Wolf, la scr1 de Syntacore, la PULPino (Riscy i Zero-Riscy) de ETH Zürich / Univertitat de Bologna, i d'altres. La Sodor CPU de tres escenaris sembla apta per a ser una petita CPU encastada. En canvi, la Rocket es pot utilitzar en computadors mitjans, compactes i baix consum, com poden ser dispositius personals. La BOOM utilitza gran part de la infrastructura creada per Rocket i es pot utilitzar per computadors personals, supercomputadors i servidors. A més, tant picorv com src1 son implementacions en Verilog de microcontroladors (MCU) de 32 bits de classe RV32IMC. Finalment, els nuclis en PULPino implementen una RV32IMC ISA simple per microcontroladors (Zero-Riscy) o una RV32IMFC ISA (més potent) amb extensions DSP personalitzades per processament de senyals encastat.
El disseny del programari inclou un disseny de compilador, Chisel, que pot reduir els altres dissenys a Verilog per l'ús en dispositius. La pàgina web inclou dades per verificar les implementacions bàsiques.
Les eines de programari disponibles per a RISC-V inclouen una "toolchain" GNU Compiler Collection (GCC) amb GDB (el debugger), una altra de LLVM, el simulador OVPsim (juntament amb la llibreria RISC-V Fast Processor Models), el simulador Spike i un simulador en QEMU.
A nivell de sistema operatiu, hi ha suport per al kernel de Linux, per FreeBSD i NetBSD. No obstant, les instruccions de mode supervisor estan desestandaritzades des del 14 de març de 2019, el que fa que aquest suport sigui provisional. L'adaptació preliminar de FreeBSD a l'arquitectura RISC-V es va llençar al febrer de 2016, a la versió FreeBSD 11.0. Les adaptacions de Debian i Fedora s'estan estabilitzant. Existeix una adaptació de Das U-Boot. La especifiació UEFI v2.7 ha definit la vinculació RISC-V i uns enginyers d'HPE han fet una adaptació de TianoCore que esta en espera de llençament. Hi ha una adaptació preliminar del microkernel seL4. Existeix un simulador que executa un sistema Linux RISC-V en un navegador web utilitzant JavaScript. Hex Five ha publicat el primer "Stack" de programació IoT segur per RISC-V amb suport per FreeRTOS.

## Disseny
### Base i extensions ISA

RISC-V té un disseny modular, format per peces de base alternatives, amb extensions opcionals afegides. La base ISA i les seves extensions es desenvolupen en un esforç col·lectiu entre la indústria, la comunitat investigadora i les institucions educatives. La base especifica les instruccions (i la seva codificació), el flux de control, els registres (i les seves mides), la memòria i l'adreça, la manipulació lògica (és a dir, sencer) i accessoris. La base només pot implementar un equip simplificat d'ús general, amb suport de programari complet, incloent un compilador d'ús general.
Les extensions estàndard s'especifiquen per treballar amb totes les bases estàndard i entre elles sense conflicte.
Molts ordinadors RISC-V poden implementar l'extensió compacta per reduir el consum d'energia, la mida del codi i l'ús de memòria. També hi ha plans futurs per donar suport als hipervisors i la virtualització.
Juntament amb una extensió del conjunt d'instruccions del supervisor, S, un RVGC defineix totes les instruccions necessàries per donar suport convenientment a un sistema operatiu de la interfície del sistema operatiu Portable (POSIX) a l'estil Unix.
Es defineixen les següents regles de disseny:
Base i extensions ISA :
| Nom | Descripció | Versió | Estat |
| Base ||||
| RV32I | Conjunt d'instruccions bàsic per enters, 32 bits | 2.0 | Congelat |
| RV32E | Conjunt d'Instruccions Bàsic per Enters (encastat), 32 bits, 16 registres | 1.9 | Obert |
| RV64I | Conjunt d'instruccions bàsic per enters, 64 bits | 2.0 | Congelat |
| RV128I | Conjunt d'instruccions bàsic per enters, 128 bits | 1.7 | Obert |
| Extensió ||||
| M | Extensió Estàndard per a la Multiplicació i Divisió d'Enters | 2.0 | Congelat |
| A | Extensió Estàndard per Operacions Atòmiques | 2.0 | Congelat |
| F | Extensió Estàndard per als Nombres en Punt Flotant (Precisió Simple) | 2.0 | Congelat |
| D | Extensió Estàndard per als Nombres en Punt Flotant (Precisió Doble) | 2.0 | Congelat |
| G | Drecera per a les ISA Base i les Extensions Anteriors | N/D | N/D |
| Q | Extensió Estàndard per als Nombres en Punt Flotant (Precisió Quàdruple) | 2.0 | Congelat |
| L | Extensió Estàndard per als Nombres en Punt Flotant (Decimals) | 0.0 | Obert |
| C | Extensió Estàndard per a les Instruccions Comprimides | 2.0 | Congelat |
| B | Extensió Estàndard per a la Manipulació de Bits | 0.37 | Obert |
| J | Extensió Estàndard per als Llenguatges Traduits Dinàmicament | 0.0 | Obert |
| T | Extensió Estàndard per a la Memòria Transaccional | 0.0 | Obert |
| P | Extensió Estàndard per les Instruccions SIMD Empaquetades | 0.1 | Obert |
| V | Extensió Estàndard per a les Operacions Vectorials | 0.2 | Open |
| N | Extensió Estàndard per a les Interrupcions a Nivell d'Usuari | 1.1 | Obert |
Format de les Instruccions RISC-V de 32 bits :
| Format de les Instruccions | 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 |
| Registre | funct7 | funct7 | funct7 | funct7 | funct7 | funct7 | funct7 | rs2 | rs2 | rs2 | rs2 | rs2 | rs1 | rs1 | rs1 | rs1 | rs1 | funct3 | funct3 | funct3 | rd | rd | rd | rd | rd | opcode | opcode | opcode | opcode | opcode | opcode | opcode |
| Immediat | imm[11:0] | imm[11:0] | imm[11:0] | imm[11:0] | imm[11:0] | imm[11:0] | imm[11:0] | imm[11:0] | imm[11:0] | imm[11:0] | imm[11:0] | imm[11:0] | rs1 | rs1 | rs1 | rs1 | rs1 | funct3 | funct3 | funct3 | rd | rd | rd | rd | rd | opcode | opcode | opcode | opcode | opcode | opcode | opcode |
| Immediat Superior | imm[31:12] | imm[31:12] | imm[31:12] | imm[31:12] | imm[31:12] | imm[31:12] | imm[31:12] | imm[31:12] | imm[31:12] | imm[31:12] | imm[31:12] | imm[31:12] | imm[31:12] | imm[31:12] | imm[31:12] | imm[31:12] | imm[31:12] | imm[31:12] | imm[31:12] | imm[31:12] | rd | rd | rd | rd | rd | opcode | opcode | opcode | opcode | opcode | opcode | opcode |
| Emmagatzematge | imm[11:5] | imm[11:5] | imm[11:5] | imm[11:5] | imm[11:5] | imm[11:5] | imm[11:5] | rs2 | rs2 | rs2 | rs2 | rs2 | rs1 | rs1 | rs1 | rs1 | rs1 | funct3 | funct3 | funct3 | imm[4:0] | imm[4:0] | imm[4:0] | imm[4:0] | imm[4:0] | opcode | opcode | opcode | opcode | opcode | opcode | opcode |
| Condicionals | [12] | imm[10:5] | imm[10:5] | imm[10:5] | imm[10:5] | imm[10:5] | imm[10:5] | rs2 | rs2 | rs2 | rs2 | rs2 | rs1 | rs1 | rs1 | rs1 | rs1 | funct3 | funct3 | funct3 | imm[4:1] | imm[4:1] | imm[4:1] | imm[4:1] | [11] | opcode | opcode | opcode | opcode | opcode | opcode | opcode |
| Salts | [20] | imm[10:1] | imm[10:1] | imm[10:1] | imm[10:1] | imm[10:1] | imm[10:1] | imm[10:1] | imm[10:1] | imm[10:1] | imm[10:1] | [11] | imm[19:12] | imm[19:12] | imm[19:12] | imm[19:12] | imm[19:12] | imm[19:12] | imm[19:12] | imm[19:12] | rd | rd | rd | rd | rd | opcode | opcode | opcode | opcode | opcode | opcode | opcode |
| opcode (7 bits): Especifica parcialment el tipus de format d'instrucció (d'entre els 6 possibles). funct7 + funct3 (10 bits): combinat amb l'opcode, aquests dos camps descriuen l'operació a realitzar rs1 (5 bits): especifica el registre que conté el primer operand rs2 (5 bits): especifica el registre que conté el segon operand rd (5 bits): especifica el registre que rebrà el resultat de l'operació |||||||||||||||||||||||||||||||||
Per tal d'adreçar les combinacions de funcionalitats que poden ser implementades, s'ha definit una nomenclatura per especificar-les. Primer s'especifica el conjunt d'instruccions base, el codi per RISC-V, la mida en bits dels registres i la variant (Per Exemple, RV64I o RV32E). Després s'assignen lletres especificant les extensions implementades en ordre canònic (com a la taula anterior). La base, les extensions de càlcul de nombres enters i amb punt flotant, les primitives de sincronització per la computació amb múltiples nuclis, i la base i les extensiosn MAFD són considerades necessàries pel còmput de propòsit general i, per tant, tenen la drecera "G".
Un computador petit de 32 bits per sistemes encastats podria ser el RV32EC. Un computador gran de 64 bits podria ser el RV64GC (abreviació de RV64IMAFDC).
S'ha proposat un esquema de nomenclatura amb Zxxx per les extensions estàndard i Yxxx per les que no ho són (específiques del fabricant). Per exemple, s'està discutint la extensió Ztso, una extensió que implementa una ordenació total d'emmagatzematge (una alternativa al model de consistència de memòria feble).

### Conjunt de registres

| Register name | Symbolic name | Description | Owner |
| 32 integer registers ||||
| x0 | Zero | Sempre Zero | - |
| x1 | ra | Adreça de Retorn | Caller |
| x2 | sp | Apuntador a "l'Stack" | Callee |
| x3 | gp | Apuntador Global | - |
| x4 | tp | Apuntador de Fil | - |
| x5 | t0 | Adreça de Retorn Temporal/Alternativa | Caller |
| x6–7 | t1–2 | Registre Temporal | Caller |
| x8 | s0/fp | Registre Guardat / Frame Pointer | Callee |
| x9 | s1 | Registre Guardat | Callee |
| x10–11 | a0–1 | Argument de Funció / Valor de Retorn | Caller |
| x12–17 | a2–7 | Argument de Funció | Caller |
| x18–27 | s2–11 | Registre Guardat | Callee |
| x28–31 | t3–6 | Registre Temporal | Caller |
| 32 floating-point extension registers ||||
| f0–7 | ft0–7 | Registre Temporal (Punt Flotant) | Caller |
| f8–9 | fs0–1 | Registres Guardats (Punt Flotant) | Callee |
| f10–11 | fa0–1 | Arguments / Valors de Retorn (Punt Flotant) | Caller |
| f12–17 | fa2–7 | Arguments (Punt Flotant) | Caller |
| f18–27 | fs2–11 | Registres Guardats (Punt Flotant) | Callee |
| f28–31 | ft8–11 | Registres Temporals (Punt Flotant) | Caller |
RISC-V té 32 registres per a nombres enters (o 16 en la versió embedded). Quan s'implementa l'extensió per a nombres amb punt flotant, també té 32 per aquests. Totes les instruccions llegeixen i escriuen dades només a registre (a excepció d'aquelles per accedir a memòria).
El primer registre enter és el registre reservat pel zero, i la resta són de propòsit general. Un "store" al registre zero no té cap efecte, i una lectura sempre proporciona el nombre 0. Utilitzar aquest registre com a reserva permet tenir un conjunt d'instruccions més simple.
move rx to ry es converteix en add r0 to rx and store in ry.
Els registres de control i estat existeixen, però els programes executats en mode usuari només tenen accés a aquells per a la mesura del rendiment i la gestió dels nombres en punt flotant.
No hi ha instruccions per guardar i recuperar múltiples registres degut a que quan es va dissenyar l'arquitectura es va pensar que no eren necessaris, eren complexes i possiblement massa lents.

### Accés a memòria

Com altres dissenys RISC, RISC-V té una arquitectura load-store machine Arxivat 2016-12-20 a Wayback Machine., és a dir, que les instruccions operen només sobre registres i s'utilitzen els "load" i "store" per llegir i escriure a memòria.
La major part de les instruccions "load" i "store" inclouen un "offset" de 12 bits i dos identificadors de registres: un està reservat pel registre base i l'altre per la font de dades en cas d'escriptura o pel destí d'aquestes en cas de lectura.
L'offset s'afegeix al registre base per obtenir l'adreça d'on llegir o escriure. Això permet accedir a estructures de dades amb instruccions simples. Per exemple, si el registre base apunta al final d'una pila, es pot accedir a les variables locals d'aquesta amb instruccions simples. De la mateixa manera, les instruccions "load" i "store" poden accedir a estructures d'estil "record" en dispositius d'entrada i sortida. Utilitzant el registre zero com a adreça base permet a aquestes instruccions accedir a la memòria propera a aquesta adreça.
La memòria està adreçada com a bytes de 8 bits, amb les "words" seguint l'ordre little-endian. Aquestes words poden ser accedides amb operacions "load" i "store".
Les adreces de memòria accedides no necessiten estar alineades amb la mida de les "word". No obstant, l'accés a direccions alineades pot arribar a ser més ràpid. Per exemple, les CPU senzilles podrien implementar accessos no alineats amb emulació software feta amb interrupcions de fallades d'alineació (una solució lenta).
RISC-V gestiona sistemes de memòria que es comparteixen entre CPUs o fils assegurant que el fil d'execució sempre veu les seves operacions de memòria en l'ordre programat. No obstant, entre els fils i els dispositius d'entrada i sortida, RISC-V és simplificat: no garanteix l'ordre de les operacions de memòria, excepte per instruccions específiques, com la fence.
Una instrucció fence garanteix que els resultats de les operacions predecessores són visibles per a les operacions successives d'altres fils o dispositius d'entrada i sortida. Aquesta instrucció pot garantir l'ordre de combinacions de les operacions d'entrada i sortida de memòria i de mapes de memòria. Per exemple, pot separar les operacions de lectura i escriptura de memòria sense afectar les operacions d'entrada i sortida. O, si un sistema pot operar dispositius d'entrada i sortida en paral·lel amb la memòria, fence no els obliga a esperar els uns als altres. Una CPU amb un fil pot decodificar la instrucció fence com a nop.
De la mateixa manera que molts conjunts d'instruccions RISC (i alguns conjunts d'instruccions complexes (CISC), com ara les famílies x86 i IBM System/360), RISC-V no té modes d'adreçament que escriuen als registres. Per exemple, no té implementat l'autoincrement.
RISC-V és little-endian per assemblar-se a altres equips familiars i reeixits, per exemple, x86. Això també redueix la complexitat i els costos de les CPUs lleugerament, ja que llegeix totes les mides de paraules en el mateix ordre. Per exemple, el conjunt d'instruccions RISC-V descodifica començant en el byte més baix de la instrucció. L'especificació deixa oberta la possibilitat de sistemes no estàndard de big-endian o bi-endian.
Algunes CPUs RISC (com MIPS, PowerPC, DLX i RISC-I de Berkeley) situen 16 bits de "offset" en els "load" i "store". Aquests 16 bits superiors s'assignen amb una instrucció de "upper word load". Això permet establir fàcilment els valors de la "upper word", sense canvis de bits. No obstant, la major part dels usos d'aquesta instrucció genera constants de 32 bits, com ara les adreces. RISC-V utilitza una combinació similar a SPARC de desplaçaments de 12 bits i instruccions "set upper" de 20 bits. El menor desplaçament de 12 bits ajuda a les instruccions de "load" i "store" compactes (32 bits) a seleccionar dos dels 32 registres i encara tenen bastants bits per donar suport a la codificació d'instruccions de longitud variable de RISC-V.

### Immediats

RISC-V gestiona les constants de 32 bits i les direccions amb instrucvcions que assignen els 20 bits superiors d'un registre de 32 bits. La instrucció "load upper immediate" lui carrega els 20 bits als bits 31-12 del registre. Després una segona instrucció com, per exemple, addi pot carregar els 12 bits restants.
Aquest mètode s'ha estès per permetre codi independent de la posició afegint una instrucció, auipc, que genera 20 bits de direcció afegint un offset al comptador de programa i guardant el resultat en un registre base. Això permet a un programa generar adreces de 32 bits relatives al comptador de programa.
El registre base es pot utilitzar cm a tal amb els "offsets" de 12 bits en els "load" i "store". Si es necessari, es poden assignar els 12 bits inferiors d'un registre amb l'instrucció addi. En arquitectures de 64 i 128 bits, lui i auipc estenen el resultat per obtenir les adreces més grans.
Algunes CPU ràpides poden interpretar combinacions d'instruccions en instruccions singulars fusionades. lui o auipc podrien ser bons candidats a fusionar amb addi, "loads" o "stores".

### Crides a subrutines i salts

La crida a subrutina jal(jump and link) de RISC-V posiciona la seva adressa de retorn a un registre, la qual cosa és més ràpida que amb molts altres dissenys, ja que guarda un acces a memoria comparat a sistemes que fan un push de l'adreça de retorn directament en un stack dins de memoria. Genera una adreça relativa a una instrucció 32-bit.
La CPU fa el salt a la adreça calculada utilitzant una instrucció jalr(jump and link-register). El format d'un jarl es igual que els loads i stores de registres relatius, per tan, jarl pot utilitzar-se en instruccions que estableixen els 20 bits superiors de un registre base per fer branques de 32 bits, ja sigui a una adreça absoluta (utilitzant lui) o bé a una adreça relativa a un PC.
RISC-V recicla jali jalrper obtenir salts incondicionals relatius a PC de 20 bits i salts incondicionals basats en registres de 12 bits. Els salts només fan el registre d'enllaç 0 perquè no es guardi cap adreça de retorn.
RISC-V també recicla jalrper tornar d'una subrutina: per fer-ho, el registre base de jalrés el registre d'enllaços guardat per jal o jalr. El desplaçament de jalrés zero i el registre de vinculació és zero, de manera que no hi ha cap desplaçament i no es guarda cap adreça de retorn.
L'ISA de RISC-V requereix prediccions predeterminades de les branques per a les CPU: s'haurien de predir les branques condicionades cap enrere. Les prediccions són fàcils de descodificar en una CPU pipelinada: les adreces de branques són números signats afegits al PC. Les branques posteriors tenen adreces complementàries de dos negatius i, per tant, tenen un en el bit més significatiu de l'adreça. Les branques cap endavant tenen un zero. El bit més significatiu es troba en una ubicació fixa del codi d'operació per accelerar el gasoducte. Les CPU complexes poden afegir predictors de branques per funcionar bé fins i tot amb dades o situacions inusuals.
Per evitar la càrrega innecessària de l'electrònica de predicció de branques, (i, per tant, les parades de canonades innecessàries), la comparació de codis de branca no s'utilitzarà mai per a salts incondicionals.
RISC-V no suporta predicacions (l'execució condicional de les instruccions), ja que els seus dissenyadors afirmen que les CPU sense predicació són més fàcils de dissenyar i que l'optimització de compiladors és menys probable que utilitzi la predicació per error quan no s'utilitzi. Els dissenyadors afirmen que els dissenys de CPU fora de l'ordre, molt ràpids, fan predicació de totes maneres, fent la branca de comparació i el codi condicional en paral·lel, i després descarten els efectes de la ruta no utilitzada. També afirmen que fins i tot en les CPU més senzilles, la predicació és menys valuosa que la predicció de la branca, la qual cosa pot impedir que la majoria de parades estiguin associades a les branques condicionals. El codi sense predicació és més gran, amb més branques, però també afirmen que un conjunt d'instruccions comprimides (com el conjunt de RISC-V C) resol aquest problema en la majoria dels casos.
Molts dissenys de RISC han inclòs una ranura de retard de la branca, una posició després d'una instrucció de branca que es pot omplir amb una instrucció que s'executa tant si es pren o no la branca. Aquesta característica pot millorar el rendiment de les CPU pipelines absorbint part del temps que es perd si una CPU no valora el funcionament d'una branca condicional i el gasoducte de la CPU s'atura. RISC-V omet una ranura de retard de la branca perquè complica les CPU multicicletes, les CPU superescalares i els canonades llargues. Els predictors de branques dinàmiques han aconseguit prou bé com per reduir la necessitat de ramificacions retardades.

### Conjunts aritmètic i lògic

RISC-V segrega les operacions matemàtiques en mínim grup de instruccions d'enters en suma, resta, desplaça, bit-wise logic i comparació de braques. Això permet simular la majoria de instruccions establertes per programari de RISC-V.
Les instruccions de multiplicació d'enters inclouen multiplicar i dividir. El document ISA recomana que els implementadors de CPU i compiladors fusionin una seqüència estandarditzada d'instruments de multiplicar i dividir (high and low) a una operació si és possible.
Les instruccions de punt flotant (conjunt F) inclouen aritmètica de precisió única i també branques de comparació similars a l'aritmètica sencera. Requereix un conjunt addicional de 32 registres de punt flotant. Aquests són separats dels registres sencers. Les instruccions de punt flotant de doble precisió (conjunt D) generalment assumeixen que els registres de punt flotant són de 64 bits (és a dir, de doble amplada) i el subconjunt F es coordina amb el conjunt D. També es defineix un ISA (Q) de punt flotant de 128 bits de quatre precisions. Els equips RISC-V sense coma flotant poden utilitzar una biblioteca de programari de punt flotant.
RISC-V no provoca excepcions sobre errors aritmètics, incloent desbordament, desbordament, subnormal i es divideix per zero. En comptes d'això, els dos sencers i l'aritmètica de coma flotant produeixen valors per defecte raonables i configura els bits d'estat. Una divisió per zero es pot descobrir per una branca després de la divisió. Els bits d'estat es poden provar mitjançant un sistema operatiu o una interrupció periòdica.

### Operacions de memòria atòmiques

L'arquitectura RISC-V dona suport als ordinadors que utilitzen memòria compartida entre múltiples CPUs i fils d'execució.
El model estàndard de consistència de memòria que utilitza és el model consistència d'alliberament. Consisteix en el fet que generalment les operaciones de lectura i escriptura es guarden, pero algunes lectures poden ser assignades com operacions d'adquisició que poden precedir accessos a memòria posteriors i algunes escriptures poden ser assignades com a operacions d'alliberament, les quals han de seguir accessos a memòria anteriors.
El conjunt d'instruccions base, inclou un suport mínim en forma de instrucció de barrera, per assegurar l'ordenació de la memòria. Tot i que això es suficient (fence r, rw ofereix la adquisició i fence rw, wofereix la lliberació), les operacions combinades poden ser més eficients.
La extensió de les operacions de memòria atòmiques dona suport a dos tipus de operacions per la consistència d'alliberament. La primera aporta les instruccions de lectura-reservada lri la escritura-condicional sc. L'operació lr realitza una lectura, i intenta reservar aquesta adreça per al seu fil. Posteriorment, una escriptura-condicional sca la adreça reservada es realitzara únicament si la reserva no s'ha trencat degut a la escriptura per part d'un altre fil. Si la escriptura es realitzada correctament, es posa un zero en el registre. En cas d'error, es posa un valor diferent de zero, que indica al software que ha de re-intentar l'operació. En els dos casos la reserva s'allibera.
El segon grup d'operacions atòmiques realitza la seqüència llegir-modificar-escriure: Una escriptura (de manera opcional de adquisició) al registre de destí, aleshores l'operació entre el valor carregat i el registre d'origen, i finalment la escriptura (la qual pot ser escriptura-alliberació). Fent que les barreres de memòria siguin opcionals permet combinar les operacions. Les operacions opcionals s'habiliten amb els bits de alliberació i adquisició, els quals es troben presents en totes les instruccions atòmiques. RISC-V ofereix nou operacions possibles: intercanvi (utilitza el valor del registre d'origen directament); suma; and bit a bit, or i or-exclusiu; mínim i màxim amb signe i sense signe.
Un disseny de sistema ha d'optimitzar aquestes operacions combinades més que lr i sc. Per exemple, si el registre de destí és constantment zero, la lectura s'hauria d'evitar. Si el valor guardat no s'ha modificat desde la lectura, la escriptura s'hauria d'evitar.
El sistema IBM System/370i els seus successors, incluint z/Architecture i x86, els dos implementant la instrucció de comparació i canvi (cas), la qual prova i actualitza una posició de memòria de manera condicional: si la posició conte el valor esperat, cas el canvia amb el nou valor, retorna un indicador de si el canvi s'ha realitzat. Tot i així, una operació simple de lectura, normalment es realitza abans del cas per tal de obtenir el valor anterior. El problema clàssic sorgeix quant un fil llegeix el valor A, calcula el nou valor C, i aleshores utilitza el cas per intercanviar A amb C, el fil no té cap manera de saber quina activitat concurrent esta realitzant un altre fil, que ha canviat el valor de A amb un altre valor B i aleshores es restableix el valor A. En alguns algoritmes (p.e. en els que els valor són punters a memòria que reserven blocs de manera dinàmica), el problema ABA pot dur a resultats incorrectes. La solució més comuna a aquest problema utilitza una instrucció cas doble amplada per actualitzar el apuntador i el contador adjacent, desafortunadament, tal instrucció requereix un format específic per a indicar múltiples registres, i realitza múltiples lectures i escriptures, que poden resultar en operacions de bus complicades.
L'alternativalr/sc és més eficient. Habitualment, necessitat únicament una lectura de memòria, minimitzan les operacions lentes. A més és exacte: controla tots els accessos a una cel·la de memòria, en comptes de assumir un patró de bits. Tot i així, a diferencia de cas, pot permetre l'interbloqueig, en el que un o més fils provoquen que les instruccions dels altres fallin de manera repetida. RISC-V assegura que no es produeix interbloqueig, sempre que el codi segueixi les següents normes: 1) Només ha d'utilitzar el subconjunt /. 2) per prevenir múltiples fallades de caché, el codi (incluint el bucle de reintent) ha de ocupar més de 16 instruccions consecutives. 3) No ha d'incloure instruccions del sistema o de bloqueig, o agafar branques anteriors entre lr i sc. 4) Les branques anteriors al bucle de reintent ha d'incloure la seqüència original.
La especificació dona exemples de com s'ha d'utilitzar el subconjunt per bloquejar una estructura de dades.

### Conjunt d'instruccions comprimit

L'estàndard RISC-V ISA especifica que totes les instruccions són de 32 bits. Això fa que es faci una implementació particularment senzilla, però igual que altres processadors RISC amb tal codificació d'instruccions, resulta en una mida de codi més gran que en altres conjunts d'instruccions.Per compensar, les instruccions de 32 bits de RISC-V són en realitat de 30 bits; 3⁄4 de l'espai opcode està reservat per a un conjunt d'instruccions comprimit de longitud variable opcional (però recomanat), RVC, que inclou instruccions de 16 bits. Igual que ARM Thumb i el MIPS16, les instruccions comprimides són per a un subconjunt de les instruccions més grans. A diferència del polze ARM o del conjunt comprimit MIPS, l'espai es va reservar des del principi, de manera que no hi ha un mode de funcionament separat. Les instruccions estàndard i comprimides es poden barrejar lliurement.
Com que (com Thumb-1 i MIPS16) les instruccions comprimides són simplement codificacions alternatives per a un subconjunt seleccionat d'instruccions més grans, la compressió es pot implementar en l'ensamblador i no és essencial que el compilador en sàpiga.
El 2011 es va provar un prototip de RVC. El codi del prototip era un 20% més petit que un PC x86 i un codi comprimit MIPS, i un 2% més gran que el codi ARM Thumb-2. També va reduir substancialment la memòria caché necessària i l'ús estimat de potència del sistema de memòria.
L'investigador pretenia reduir la grandària binària del codi per a ordinadors petits, especialment sistemes informàtics encastats. El prototip incloïa 33 de les instruccions més freqüentment utilitzades, recodificades com a formats compactes de 16 bits utilitzant codis d'operació prèviament reservats per al conjunt comprimit. La compressió es va fer a l'assemblador, sense canvis al compilador. Les instruccions comprimides omeses de camps que sovint són zero, utilitzen petits valors immediats o subconjunts accedits (16 o 8) dels registres. addi és molt comú i sovint compressible.
Gran part de la diferència de mida en comparació amb el conjunt de Thumb de Arm va ocórrer perquè RISC-V i el prototip no tenen instruccions per guardar i restaurar diversos registres. En canvi, el compilador va generar instruccions convencionals que accedeixen a la pila. El prototip de l'assemblador RVC sovint els va convertir en formes comprimides que eren la meitat de la mida. Tanmateix, això encara necessitava més espai de codi que les instruccions ARM que guardaven i restauraven diversos registres. L'investigador va proposar modificar el compilador per trucar a rutines de biblioteca per guardar i restaurar registres. Aquestes rutines tendeixen a romandre en una memòria caché i, per tant, a córrer mes ràpid.

### Conjunt d'instruccions embedded o incrustat

El conjunt d'instruccions per els sistemes incrustats més petits es redueix de les següents maneres: Només es suporten 16 dels 32 bits dels registres d'enters. No es suporten les instruccions amb nombres de punt flotant (l'especificació ho prohibeix per ser poc econòmic), per tant aquesta part s'ha de fer per software. Es recomana utilitzar el conjunt C comprimit. A més, el conjunt d'instruccions amb privilegis només admet codi màquina, mode usuari i esquemes de memòria que utilitzen recolocació d'addreces de memòria "base-and-bound".
Hi ha discussions per als perfils de microcontroladors a RISC-V, per tal de facilitar el desenvolupament de sistemes profundament incrustats. Aquesta discussió se centra en el suport de interrupcions ràpides, simples en el llenguatge C; modes de seguretat simplificats i una interfície binària POSIX simplificada.
També s'han proposat ISAs de 16 bits (RV16E) més petites i no estàndards. Una proposta seria utilitzaria el conjunt d'instruccions "C" de 16 bits amb 8 registres. En la mateixa discussió, es va proposar la possibilitat d'un RV16EG complet amb un ISA recodificat per complet. Una broma del dia dels innocents proposava un esquema molt pràctic: Utilitzar 16 registres de 16 bits amb les ISAs estàndard EIMC (incloent instruccions de 32 bits). La broma consistia en proposar canvis de registres quan una CPU de 32 bits seria superior en tots els casos).

### Conjunt d'instruccions amb privilegis

L'ISA de RISC-V inclou una especificació del conjunt d'instruccions privilegiat. A partir de juliol del 2017, és preliminar.
La versió 1.10 de l'especificació admet diversos tipus de sistemes informàtics:
1. Sistemes que només tenen mode de màquina, potser per a sistemes encastats,
2. Sistemes amb mode de màquina (per al supervisor) i amb mode d'usuari, potser per implementar Linux.
3. Sistemes amb mode de màquina, hipervisors, supervisors múltiples i modes d'usuari sota cada supervisor.
Aquests corresponen aproximadament a sistemes amb fins a quatre anells de privilegi i seguretat, com a màxim: màquina, hipervisor, supervisor i usuari. S'espera que cada capa tingui una capa fina de programari de suport estandarditzat que es comuniqui amb una capa o maquinari més privilegiat.
El pla general d'aquesta ISA és fer que el mode d'hipervisor sigui ortogonal als modes d'usuari i supervisor.La característica bàsica és un bit de configuració que permeti al codi del supervisor accedir als registres d'hipervisor o provocar una interrupció en els accessos. Aquest bit permet al mode supervisor gestionar directament el maquinari que necessita un hipervisor. Això simplifica un hipervisor de tipus 2, allotjat per un sistema operatiu. Aquest és un mode popular per executar ordinadors a escala de magatzem. Per donar suport als hipervisors de tipus 1, sense oposició, el bit pot fer que aquests accessos s'interrompen a un hipervisor. El bit simplifica l'annidament d'hipervisors, en què l'hipervisor s'executa sota un hipervisor. També es diu que simplifica el codi de supervisor deixant que el nucli utilitzi les seves pròpies funcions d'hipervisor amb el seu propi codi del nucli. Com a resultat, la forma d'hipervisor de l'ISA suporta cinc modes: màquina, supervisor, usuari, supervisor-hipervisor i usuari-hipervisor.
L'especificació del conjunt d'instruccions privilegiat defineix explícitament els threads hardware o els harts. Diversos threads hardware són una pràctica habitual en ordinadors amb mes capacitats. Quan un thread està en ase de interrupció, esperant la memòria, els altres poden procedir. Els threads hardware poden ajudar a fer un millor ús del gran nombre de registres i unitats d'execució en un processador. Finalment, els threads hardware poden ser una manera senzilla i potent de gestionar les interrupcions: no cal cap estalvi o restauració de registres, simplement executant un thread hardare diferent. No obstant això, l'únic thread hardwarerequerit en una computadora RISC-V és el thread zero.
Les definicions de registres d'estat i de control existents donen suport a les excepcions d'error i memòria de RISC-V i a un nombre reduït d'interrupcions. Per als sistemes amb més interrupcions, l'especificació també defineix un controlador d'interrupcions. Les interrupcions sempre comencen en el nivell de màquina més privilegiat, i els registres de control de cada nivell tenen bits de reenviament explícits per encaminar les interrupcions a un codi menys privilegiat. Per exemple, l'hipervisor no necessita incloure programari que s'executa en cada interrupció per reenviar una interrupció a un sistema operatiu. En canvi, en la configuració, es poden establir bits per reenviar l'interrupció.
A l'especificació s'admeten diversos sistemes de memòria. la memoria física només s'adapta als sistemes encastats més senzills. També hi ha tres sistemes de memòria virtual d'estil UNIX per a memoria catcheada en sistemes d'emmagatzematge massiu. Els sistemes de memòria virtual tenen tres mides, amb adreces de 32, 39 i 48 bits. Tots els sistemes de memòria virtual admeten 4 pàgines de KiB, arbres de taules de diversos nivells i utilitzen algorismes molt similars per a recórrer els arbres de la taula de pàgines. Tots estan dissenyats per a la taula de pàgines de maquinari o programari.

### Manipulació de bits

Hi ha una quantitat substancial de feina feta per produir una ISA per a la manipulació de bits (B) per RISC-V (encara no està aprovada). Si es fa correctament, un subconjunt d'instruccions de manipulació de bits pot ajudar a les operacions matemàtiques, gràfiques i criptogràfiques. El criteri per a la inclusió documentat en l'esbòs és que es compleixi amb les filosofies RV5 i els formats de ISA. S'han fet millores en la densitat del codi o la velocitat (per exemple, almenys una reducció 3 a 1 en instruccions), i s'han implementat aplicacions reals, incloent suport per a compiladors preexistents. La versió 0.37 inclou instruccions per a comptar zeros a l'inici del registre, comptar el nombre de bits amb valor 1, realitzar l'operació and amb complements, desplaçar uns, rotacions, un revertiment de bits generalitzats i barreja, intercanvi de bytes, extracció i ubicació de bits, i algunes adicions de manipulació de bits al conjunt d'instruccions comprimides (not, neg i reverse). També inclou una proposta controvertida per l'extracció i ubicació de zones de bits utilitzant un format d'instruccions no estàndard de 48 bits.

### Empaquetament SIMD

Per als sistemes RISC-V simples i de cost reduït, hi ha una proposta d'utilitzar els registres de nombres de punt flotant per implementar les operacions SIMD en paral·lel. Aquesta tècnica és àmpliament utilitzada per accelerar multimedia i altres processaments de senyal digital. Avui en dia, aquesta ISA encara no està definida, però podria assemblar-se a les instruccions multimedia PA-RISC: Multimedia Acceleration eXtensions. A més de les operacions matemàtiques natives de 64 bits, la CPU PA-RISC MAX2 pot realitzar operacions aritmètiques en quatre "subwords" de 16 bits alhora, amb diferents mètodes de sobrecàrrega. També pot moure "subwords" a posicions diferents. Aquesta CPU s'ha simplificat de manera intencionada, i no té suport per "subwords" de 8 o 32 bits. La mida de 16 bits s'ha triat perquè permet la major part de les tasques de processament de senyal digital. Aquestes instruccions eren poc costoses de dissenyar i implementar. No obstant, han incrementat el rendiment d'aquestes CPU per a les tasques de processament de senyal digital 48 vegades o més, permetent que hi hagi còdecs de vídeo pràctics en temps real al 1995.

### Conjunt d'instruccions vectorial

El conjunt d'instruccions de processament vectorial proposat pot fer que el paquet SIMD quedi obsolet. Els dissenyadors esperen tenir prou flexibilitat perquè una CPU pugui implementar instruccions vectorials en els registres d'un processador estàndard. Això permetria implementacions mínimes amb un rendiment similar a una ISA multimèdia. No obstant això, un veritable coprocessador vectorial podria executar el mateix codi amb un rendiment superior.
El 29 de juny de 2015, la proposta de processament de vectors és un disseny conservador i flexible d'un processador vectorial de precisió mixta d'ús general, adequat per executar nuclis de càlcul. El codi es portaria fàcilment a CPUs amb longituds vectorials diferents, idealment sense recompilar-les.
En canvi, les extensions SIMD de vector curt són menys convenients. S'utilitzen en x86, ARM i PA-RISC. En aquests casos, un canvi en l'amplada de paraules obliga a canviar el conjunt d'instruccions per ampliar els registres vectorials (en el cas de x86, des de registres MMX de 64 bits a Streaming SIMD Extensions (SSE) de 128 bits, a 256 bits Advanced Vector Extensions (AVX) i AVX-512). El resultat és un conjunt d'instruccions més gran i una necessitat de implementar nou codi per a les noves instruccions.
Al vector ISA de RISC-V, en lloc de fixar la longitud del vector a l'arquitectura, hi ha disponible una instrucció (setvl) que pren la mida sol·licitada i estableix la longitud del vector al mínim del límit de maquinari i la mida sol·licitada. Així doncs, la proposta RISC-V s'assembla més aviat al disseny de llargmetratge de Cray. És a dir, cada vector de fins a 32 vectors té la mateixa longitud.
L'aplicació especifica l'amplada total del vector que requereix i el processador determina la longitud del vector que pot proporcionar amb els recursos disponibles al xip. Això pren la forma d'una instrucció (vsetcfg) amb quatre operands immediats, especificant el nombre de registres vectorials de cada amplada disponible necessària. El total no ha de ser superior al límit dirigible de 32, però pot ser menor si l'aplicació no els requereix tots. La longitud del vector està limitada per l'emmagatzematge disponible al xip dividit pel nombre de bytes d'emmagatzematge necessaris per a cada entrada.
Fora dels bucles vectorials, l'aplicació pot sol·licitar registres de vector zero, deixant al sistema operatiu la tasca de preservar-los en commutadors de context.
La longitud del vector no només és arquitectònicament variable, sinó que també està dissenyada per variar en temps d'execució. Per aconseguir aquesta flexibilitat, és probable que el conjunt d'instruccions utilitzi camins de dades d'amplada variable i operacions de tipus variable. El pla és que aquests poden reduir la mida i la complexitat de l'ISA i del compilador.
Els processadors de vectors experimentals recents amb camins de dades d'ample variable també mostren increments rendibles en les operacions per: segon (velocitat), àrea (menor cost) i watts (major durada de la bateria).
A diferència de la unitat de processament de gràfics moderna típica, no hi ha plans per proporcionar maquinari especial per donar suport a la predicació de branques. En canvi, s'utilitzarà una predicació basada en compiladors de menor cost.

### Sistema de depuració extern

Hi ha una especificació preliminar per al depurador "Hardware-assisted" de RISC-V. El depurador utilitzarà un sistema de transport com Joint Test Action Group (JTAG) o Universal Serial Bus (USB) per accedir als registres de depuració. Una interfície estàndard de depuració de maquinari pot suportar una interfície abstracta normalitzada o una alimentació d'instruccions.
A partir de gener de 2017, la forma exacta de la interfície abstracta no es defineix, però les propostes inclouen un sistema de memòria amb adreces estandarditzades per als registres dels dispositius de depuració o un registre de comandes i un registre de dades accessible al sistema de comunicació. Els corresponsals afirmen que els sistemes similars són utilitzats per la interfície del mode de depuració de fons de Freescale (BDM) per a algunes CPUs, ARM, OpenRISC i LEON d'Aeroflex.
En el procés "d'alimentació" de instruccions, la CPU processarà una excepció de depuració per executar instruccions individuals escrites en un registre. Es pot complementar amb un registre de pas de dades i un mòdul per accedir directament a la memòria. "L'alimentació" d'instruccions permet al depurador accedir a l'ordinador exactament com ho faria el programari. Això també minimitza els canvis en la CPU i s'adapta a molts tipus de CPU la qual cosa és especialment idonia per a RISC-V, ja que està dissenyat explícitament per a molts tipus d'ordinadors. El registre de transmissió de dades permet que un depurador escrigui un bucle de moviment de dades a la memòria RAM, i després executeu el bucle per moure les dades cap a l'ordinador o sortir a una velocitat propera a la velocitat màxima del canal de dades del sistema de depuració. [69] Els corresponsals diuen que els sistemes similars són utilitzats per MIPS Technologies, Intel Quark, Tensilica's Xtensa i per a la interfície del mode de depuració en segon pla (BDM) de les Freescale Power ISA CPU's.

## Implementacions

| Creadors | Referència | Data | Descripció |
| SiFive | SoC FE310 | 2016 | |
| ETH Zürich i la universitat de Bolonya | SoC Pulpino | 2016 | |
| Microsemi | SoC PolarFire, RTG4 i IGLOO2 | 2016 | |
| SiFive | U54-MC Coreplex | 2017 | 4 nuclis, 1,5 GHz, 64 bits, 2 Mbyte memòria cache |
| codasip | CODIX-BK5 | 2017 | |
| esperanto | ET-Minion | 2017 | 4.096 nuclis |

## Entorn de programació SDK

* SDK amb entorn Eclipse de codi obert.
* Codasip's Studio

## Notes

* ↑ S'espera que les parts congelades tinguin el seu conjunt de funcionalitats definitiu i només rebin clarificacions abans de ser ratificades.

## Referències

* 1 2 3 4 5 6 7 8 9 10 11 12 «Especificacions de RISC-V» (en anglès). riscv.org. [Consulta: 6 desembre 2016].
* ↑ «Web oficial» (en anglès). [Consulta: 8 desembre 2016].
* ↑ Sharwood, Simon. «US government reportedly probes China’s use of RISC-V» (en anglès). [Consulta: 25 abril 2024].
* ↑ «A long look at how ARM licenses chips» (en anglès). Demerjian, Chuck, 07-08-2013. Arxivat de l'original el 2022-10-24. [Consulta: 23 abril 2019].
* ↑ «How ARM licenses it’s IP for production» (en anglès). Demerjian, Chuck, 08-08-2013. Arxivat de l'original el 2022-10-25. [Consulta: 23 abril 2019].
* 1 2 3 4 Krste, Asanović. «"Instruction Sets Should be Free"» (en anglès), 06-08-2014. [Consulta: 23 abril 2019].
* ↑ «The Rocket Chip Generator | EECS at UC Berkeley». [Consulta: 23 abril 2019].
* ↑ «educational microarchitectures for risc-v isa.». [Consulta: 23 abril 2019].
* ↑ Celio, Christopher. «C152 Laboratory Exercise 3» (en anglès), 09-04-2014. [Consulta: 23 abril 2019].
* 1 2 Patterson, David A. «"The Case for the Reduced Instruction Set Computer"». ACM SIGARCH Computer Architecture News, 10-1980.
* ↑ «Amber ARM-compatible core» (en anglès). OpenCores, 23-12-2010. [Consulta: 23 abril 2019].
* 1 2 «RISC-V Foundation» (en anglès). RISC-V Foundation. [Consulta: 23 abril 2019].
* ↑ «The Linley Group Announces Winners of Annual Analysts' Choice Awards» (en anglès), 12-01-2017. [Consulta: 23 abril 2019].
* 1 2 Asanovic, Krste. Instruction Sets Should Be Free: The Case For RISC-V (tesi) (en angles), 6 d'agost de 2014.
* ↑ «Alternative proposal for instruction length encoding» (en en angles). Arxivat de l'original el 2019-04-26. [Consulta: 28 abril 2019].
* ↑ «Privileged ISA Specification v1.10» (en anglès). Arxivat de l'original el 2018-08-26. [Consulta: 28 abril 2019].
* ↑ «SiFive» (en anglès). [Consulta: 1r maig 2019].
* ↑ «HiFive1». [Consulta: 1r maig 2019].
* ↑ «Chip Designer - SiFive» (en anglès). [Consulta: 1r maig 2019].
* ↑ «Syntacore» (en anglès), 01-05-2019.
* ↑ «SCR1 is a high-quality open-source RISC-V MCU core in Verilog: syntacore/scr1», 01-05-2019. [Consulta: 1r maig 2019].
* ↑ «5th RISC-V Workshop Agenda» (en anglès), 11-12-2016. [Consulta: 1r maig 2019].
* ↑ «Andes Technology - RISC-V Foundation» (en anglès). Arxivat de l'original el 2020-05-13. [Consulta: 1r maig 2019].
* ↑ Manners, David. «Codasip and UltraSoc combine on RISC-V» (en anglès), 23-11-2016. [Consulta: 1r maig 2019].
* ↑ Aufranc, Jean-Luc. «GreenWaves GAP8 is a Low Power RISC-V IoT Processor Optimized for Artificial Intelligence Applications» (en anglès), 27-02-2018. [Consulta: 1r maig 2019].
* ↑ Yoshida, Junko. «AI Comes to Sensing Devices». [Consulta: 1r maig 2019].
* ↑ Croome, Martin. «GAP8 SDK & GAPuino Development Boards Available Now» (en anglès), 23-05-2018. [Consulta: 1r maig 2019].
* ↑ «Hex Five Security Adds MultiZone™ Trusted Execution Environment to the SiFive Software Ecosystem» (en anglès), 22-08-2018. [Consulta: 1r maig 2019].
* ↑ «CloudBEAR | Processor IP company». [Consulta: 1r maig 2019].
* ↑ «C-DAC announces Tech Conclave 2019 - Times of India». [Consulta: 1r maig 2019].
* ↑ «IIT Madras Open Source Processor Project» (en anglès), 26-08-2014. Arxivat de l'original el 2014-09-14. [Consulta: 1r maig 2019].
* ↑ RISC-V. «Tuesday @ 1100 NVIDIA RISC V Evaluation Story Joe Xie, NVIDIA», 25-07-2016. [Consulta: 1r maig 2019].
* ↑ «Grups de Google». [Consulta: 1r maig 2019].
* ↑ Andreas Olofsson. «Why I will be using RISC-V in my next chip» (en anglès), 07-01-2016. [Consulta: 1r maig 2019].
* ↑ «lowRISC · lowRISC». [Consulta: 1r maig 2019].
* ↑ Dickison, Anne. «Initial FreeBSD RISC-V Architecture Port Committed», 04-02-2016. [Consulta: 1r maig 2019].
* ↑ «PULP platform». [Consulta: 1r maig 2019].
* ↑ Error: hi ha títol o url, però calen tots dos paràmetres.«». [Consulta: 1r maig 2019].
* ↑ Schor, David. «Esperanto exits stealth mode, aims at AI with a 4,096-core 7nm RISC-V monster» (en anglès), 01-01-2018. [Consulta: 1r maig 2019].
* ↑ «RISC-V The Free and Open Instruction Set», Fundació RISC-V. [Consulta: 11 novembre 2016].
* ↑ «riscv-boom». Celio, Christopher. [Consulta: 11 setembre 2016].
* ↑ «rocket-chip». Asanovic, Krste. [Consulta: 11 novembre 2016].
* ↑ «riscv-sodor». Celio, Cristopher. [Consulta: 11 novembre 2016].
* ↑ «PULP: Parallel Ultra Low Power». Traber, Andreas. [Consulta: 11 novembre 2016].
* ↑ «"Chisel: Constructing Hardware in a Scala Embedded Language"». UC Berkeley. Regents of the University of California. [Consulta: 11 novembre 2016].
* ↑ Waterman, Andrew; Lee, Yunsup; Avizienis, Rimas; Cook, Henry; Patterson, David «The RISC-V instruction set». Fundació RISC-V. IEEE, 8-2013. DOI: 10.1109/hotchips.2013.7478332.
* ↑ Dickison, Anne. «Initial FreeBSD RISC-V Architecture Port Committed», 04-02-2016. [Consulta: 30 abril 2019].
* ↑ Phanindra, K. «32-Bit MIPS RISC Processor». International Journal for Research in Applied Science and Engineering Technology, V, X, 23-10-2017, pàg. 1119–1123. DOI: 10.22214/ijraset.2017.10162. ISSN: 2321-9653.
* ↑ «HewlettPackard/RiscVEdk2», 24-10-2018. [Consulta: 30 abril 2019].
* ↑ Hesham, Almatary «RISC-V, SeL4». Commonwealth Scientific and Industrial Research Organisation (CSIRO).
* ↑ «riscv-angel» (en anglès). Arxivat de l'original el 2018-11-11. [Consulta: 30 abril 2019].
* ↑ «MultiZone Secure IoT Stack, the First Secure IoT Stack for RISC-V». Hex Five Security, Inc.
* 1 2 3 4 5 6 «Joc d'instruccions RISC-V» (en anglès). [Consulta: 8 desembre 2016].
* 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 Waterman, Andrew; Asanović, Krste. "The RISC-V Instruction Set Manual, Volume I: Base User-Level ISA version 2.2". University of California, Berkeley. EECS-2016-118. Retrieved 25 May 2017.
* ↑ «Specifications» (en anglès). [Consulta: 3 juny 2019].
* 1 2 3 4 5 6 «Improving Energy Efficiency and Reducing Code Size with RISC-V Compressed | EECS at UC Berkeley». [Consulta: 3 juny 2019].
* ↑ Waterman, Andrew; Lee, Yunsup; Avizienas, Rimas; Patterson, David; Asanović, Krste. «Draft Privileged ISA Specification 1.9». RISC-V Foundation. Arxivat de l'original el 26 d’agost 2018. [Consulta: 30 agost 2016].
* ↑ Ionescu, Liviu. «The RISC-V Microcontroller Profile». [Consulta: 5 abril 2018].
* ↑ Brussee, Rogier. «Proposal: Xcondensed, [a ... Compact ... 16 bit standalone G-ISA]». Google Groups. [Consulta: 10 novembre 2016].
* ↑ Barros, Cesar. «Proposal: RV16E». [Consulta: 2 abril 2018].
* 1 2 3 4 5 «Privileged ISA Specification v1.10» (en anglès). Arxivat de l'original el 2018-08-26. [Consulta: 3 juny 2019].
* ↑ «Grups de Google». [Consulta: 3 juny 2019].
* ↑ Wolf, Clifford. «Bit Manipulation for RISC-V, Draft v0.37». Clifford Wolf, 22-03-2019.
* ↑ Lee, Ruby; Huck, Jerry «64-bit and Multimedia Extensions in the PA-RISC 2.0 Architecture». Proceedings of Compcon 96, 25-02-1996, pàg. 152–160 [Consulta: 21 setembre 2014].
* ↑ Lee, Ruby B. «Accelerating Multimedia with Enhanced Microprocessors». IEEE Micro, 15, 2, 4-1995, pàg. 22–32. DOI: 10.1109/40.372347 [Consulta: 21 setembre 2014].
* 1 2 3 4 5 6 7 Asanovic, Risc-V Vector Extension Proposal. Risc-V, Vector Extension Proposal (tesi) (en aragonès). University of California, 29/6/2019.
* 1 2 3 «RISC-V Run Control Debug» (en aragonès). [Consulta: 29 maig 2019].
* ↑ «"RISC-V Debug Group > poll results"» (en aragonès). [Consulta: 29 maig 2019].
* ↑ «RISC-V FE310» (en anglès). [Consulta: 8 desembre 2016].
* ↑ «RISC-V Pulpino» (en anglès). Arxivat de l'original el 2017-08-24. [Consulta: 8 desembre 2016].
* ↑ «RISC-V Instruction Set Architecture» (en anglès). https://www.microsemi.com.+[Consulta: 19 juny 2017].
* ↑ «RISC-V Boots Linux at SiFive | EE Times» (en anglès). https://www.eetimes.com.+[Consulta: 5 octubre 2017].
* ↑ «64-bit RISC-V processor IP targets data-intensive applications» (en anglès). eeNews Europe, 28-11-2017.
* ↑ «RISC-V processors» (en anglès). Codasip.
* ↑ «Esperanto Technologies / Energy-efficient RISC-V solutions for AI» (en anglès). https://www.esperanto.ai.+[Consulta: 29 novembre 2017].
* ↑ «RISC-V gunning for ARM at the high-end» (en anglès). Electronics Weekly, 29-11-2017.
* ↑ «Microsemi puts Windows-hosted Eclipse IDE for free to support RISC-V Open ISA» (en anglès). http://www.eenewseurope.com,+15-06-2017.+[Consulta: 19 juny 2017].
* ↑ «Codasip's Studio: 7th edition for the easy configuration of RISC-V processors» (en anglès). eeNews Europe, 23-01-2018.

## Vegeu també

* Arquitectura ARM
* Arquitectura XCore
* Arquitectura Intel
* Arquitectura SPARC
* Arquitectura MIPS
* Arquitectura Xtensa
* Unitat de processament de tensors