RISC-V
# RISC-V

RISC-V es una arquitectura de conjunto de instrucciones (ISA) de hardware libre basado en un diseño de tipo RISC (conjunto de instrucciones reducido).

A diferencia de la mayoría de los conjuntos de instrucciones, el de RISC-V es libre y abierto y se puede usar sin regalías para cualquier propósito, lo que permite que cualquiera diseñe, fabrique y venda chips y software de RISC-V. Si bien no es la primera ISA de arquitectura abierta, es significativa porque está diseñada para ser útil en una amplia gama de dispositivos. El conjunto de instrucciones también tiene un cuerpo sustancial de software de soporte, que evita una debilidad habitual de los nuevos conjuntos de instrucciones.

El proyecto comenzó en 2010 en la Universidad de California en Berkeley, pero muchos colaboradores son voluntarios y trabajadores de la industria fuera de la universidad.

El conjunto de instrucciones se ha diseñado pensando en implementaciones pequeñas, rápidas y de bajo consumo para el mundo real, pero sin una sobre-ingeniería excesiva que buscase una microarquitectura concreta.

En mayo de 2017, estaba cerrada la versión 2.2 del conjunto de instrucciones del espacio de usuario. El conjunto de instrucciones privilegiadas estaba disponible como borrador en la versión 1.10.

## Importancia

Los autores de RISC-V pretenden proporcionar varios diseños de CPU disponibles libremente bajo las licencias BSD, que permiten que los trabajos derivados, como los diseños de chips RISC-V, sean abiertos y gratuitos, al igual que RISC-V, o cerrados y de propiedad exclusiva.

Por el contrario, los proveedores de chips comerciales como ARM Holdings y MIPS Technologies cobran tarifas de licencia sustanciales por el uso de sus patentes. También requieren acuerdos de no divulgación antes de publicar documentos que describen las ventajas de sus diseños y el conjunto de instrucciones. El secreto impide la auditoría de seguridad.

El desarrollo de una CPU requiere experiencia en diseño en varias especialidades: lógica digital electrónica, compiladores y sistemas operativos. Es raro encontrar esto fuera de un equipo de ingeniería profesional. El resultado es que los conjuntos modernos de instrucción en computadora de alta calidad para fines generales no han estado ampliamente disponibles en ningún lugar, ni siquiera explicados, excepto en entornos académicos. Debido a esto, muchos colaboradores de RISC-V lo ven como un esfuerzo comunitario unificado. Esta necesidad de una gran base de contribuyentes es parte de la razón por la cual RISC-V se diseñó para adaptarse a tantos usos.

Los autores de RISC-V también tienen una importante investigación y experiencia de usuario que validan sus diseños en silicio y simulación. El RISC-V ISA es un desarrollo directo de una serie de proyectos académicos de diseño de computadoras. Se originó en parte para ayudar a tales proyectos.

## Historia

### Predecesores

El término RISC data de alrededor de 1980. Antes de esto, existía cierto conocimiento de que las computadoras más simples podrían ser efectivas, pero los principios de diseño no estaban ampliamente descritos. Las computadoras simples y efectivas siempre han sido de interés académico.

Los académicos crearon el conjunto de instrucciones RISC DLX para la primera edición de Arquitectura de Computadora: Un Enfoque Cuantitativo en 1990. David Patterson fue un autor, y luego asistió a RISC-V. DLX era para uso educativo. Académicos y aficionados lo implementaron utilizando arreglos de puertas programables en campo (FPGA). No fue un éxito comercial.

Las CPU ARM, versiones 2 y anteriores, tenían un conjunto de instrucciones de dominio público, y aún es compatible con la Colección de compiladores GNU (GCC), un popular compilador de software libre. Existen tres núcleos de código abierto para esta ISA, pero no se han fabricado.

OpenRISC es una ISA de código abierto basada en DLX, con diseños RISC asociados. Es totalmente compatible con implementaciones GCC y Linux. Sin embargo, tiene pocas implementaciones comerciales.

### Fundación

Krste Asanović en la Universidad de California, Berkeley, encontró muchos usos para un sistema informático de código abierto. En 2010, decidió desarrollar y publicar uno en un "proyecto corto de tres meses durante el verano". El plan era ayudar tanto a los usuarios académicos como a los industriales. [10] David Patterson en Berkeley también ayudó en el esfuerzo. Originalmente identificó las propiedades de Berkeley RISC , [11] y RISC-V es una de sus largas series de proyectos de investigación cooperativa RISC. Los primeros fondos fueron de DARPA .

Una lista parcial de organizaciones que apoyan la Fundación RISC-V incluye: AMD, [14] Andes Technology, [15] BAE Systems , Berkeley Architecture Research, Bluespec, Inc. , Cortus , Google , GreenWaves Technologies, Hewlett Packard Enterprise, Huawei, IBM, Imperas Software, Instituto de Tecnología de Computación (ICT) Academia China de Ciencias, IIT Madras, Lattice Semiconductor, Mellanox Technologies, Microsemi, Micron Technologies, Nvidia, NXP, Oracle, Qualcomm, Rambus Cryptography Research, Western Digital, SiFive y Raspberry Pi Foundation.

### Premios

* 2017: Premio a la elección del analista de The Linley Group a la mejor tecnología (para el conjunto de instrucciones)

## Requisitos motivadores

Los diseñadores dicen que el conjunto de instrucciones es la interfaz principal en una computadora, porque se encuentra entre el hardware y el software. Si un buen conjunto de instrucciones está abierto, disponible para que todos lo usen, debería reducir drásticamente el costo del software al permitir que se reutilice mucho más. También debería aumentar la competencia entre los proveedores de hardware, que pueden usar más recursos para el diseño y menos para el soporte de software.

Los diseñadores afirman que los nuevos principios son cada vez más raros en el diseño de conjuntos de instrucciones, ya que los diseños más exitosos de los últimos cuarenta años se han vuelto cada vez más similares. De los que fallaron, la mayoría lo hizo porque sus compañías patrocinadoras fallaron comercialmente, no porque los conjuntos de instrucciones fueran técnicamente deficientes. Por lo tanto, un conjunto de instrucciones abiertas bien diseñado y diseñado con principios bien establecidos debería atraer el apoyo a largo plazo de muchos proveedores.

La mayoría de los ISA abiertos utilizaban la Licencia Pública General de GNU (GPL), alentando a los usuarios a abrir sus implementaciones para que otros los copien y los usen.

A diferencia de otros diseños académicos que están optimizados solo para la simplicidad de la exposición, los diseñadores afirman que el conjunto de instrucciones RISC-V es para computadoras prácticas. Se dice que tiene características para aumentar la velocidad de la computadora, y aun así reducir el costo y el uso de energía. Estos incluyen una arquitectura de carga y almacenamiento, patrones de bits para simplificar los multiplexores en una CPU, punto flotante basado en estándares simplificados, un diseño que es arquitectónicamente neutral y que coloca los bits más significativos en una ubicación fija para acelerar la extensión de signo. Se dice que la extensión de la señal a menudo se encuentra en la ruta de sincronización crítica.

El conjunto de instrucciones está diseñado para una amplia gama de usos. Admite tres anchos de palabra, 32, 64 y 128 bits, y una variedad de subconjuntos. Las definiciones de cada subconjunto varían ligeramente para los tres anchos de palabra. Los subconjuntos son compatibles con sistemas integrados pequeños, computadoras personales, supercomputadoras con procesadores vectoriales y computadoras paralelas montadas en bastidores a escala de almacén.

El conjunto de instrucciones es de ancho variable y extensible, de modo que siempre se pueden agregar más bits de codificación. Se reservó el espacio para la versión extendida de ISA de 128 bits, ya que 60 años de experiencia en la industria han demostrado que el error más irrecuperable en el diseño del conjunto de instrucciones es la falta de espacio de direcciones de memoria. A partir de 2016, la ISA de 128 bits permanece indefinida intencionalmente, porque aún hay muy poca experiencia práctica con sistemas de memoria tan grandes.

Sin embargo, RISC-V también apoya los usos académicos de los diseñadores. La simplicidad del subconjunto de enteros permite los ejercicios básicos de los estudiantes. El subconjunto de enteros es un simple software de ISA que permite controlar máquinas de investigación. La ISA de longitud variable permite extensiones tanto para los ejercicios de los estudiantes como para la investigación. El conjunto de instrucciones privilegiadas separadas permite la investigación en el soporte del sistema operativo, sin rediseñar los compiladores. La propiedad intelectual abierta de RISC-V permite que sus diseños se publiquen, reutilicen y modifiquen.

## Software

Un problema normal para un nuevo conjunto de instrucciones es la falta de diseños y software de CPU.

El sitio web de RISC-V tiene una especificación para las instrucciones en modo usuario y una especificación preliminar para un conjunto de instrucciones privilegiadas de propósito general, para soportar sistemas operativos.

Hay varios diseños de CPU de fuente abierta, incluyendo la Máquina de Berkeley fuera de servicio (BOOM) de 64 bits, [21] Cohete de 64 bits, [22] cinco diseños de CPU Sodor de 32 bits de Berkeley, [23] picorv32 por Clifford Wolf, scr1 de Syntacore, PULPino (Riscy and Zero-Riscy) de ETH Zürich / Universidad de Bolonia. y otros. La CPU Sodor de tres etapas parece ser adecuada para una pequeña CPU integrada. Rocket puede adaptarse a computadoras intermedias compactas y de bajo consumo, como dispositivos personales. BOOM usa gran parte de la infraestructura creada para Rocket, y puede usarse para computadoras personales, de supercomputadoras y de almacén. Tanto picorv como scr1 son implementaciones RV32IMC de clase de microcontrolador (MCU) de 32 bits en Verilog. Los núcleos en PULPino implementan una ISA RV32IMC simple para microcontroladores (Zero-Riscy) o una ISA RV32IMFC más potente con extensiones DSP personalizadas para el procesamiento de señales incrustadas.

El software de diseño incluye un compilador de diseño, Chisel, que puede reducir los diseños a Verilog para su uso en dispositivos. El sitio web incluye datos de verificación para probar implementaciones principales.

Las herramientas de software RISC-V disponibles incluyen una cadena de herramientas de la colección de compiladores GNU (GCC) (con GDB, el depurador), una cadena de herramientas LLVM , el simulador OVPsim (y la biblioteca de modelos de procesadores rápidos RISC-V), el simulador Spike y un simulador en QEMU .

Existe compatibilidad con el sistema operativo para el núcleo Linux, FreeBSD y NetBSD, pero las instrucciones en modo supervisor no están estandarizadas a partir del 10 de noviembre de 2016, por lo que este soporte es provisional. El puerto preliminar de FreeBSD para la arquitectura RISC-V se actualizó en febrero de 2016 y se envió en FreeBSD 11.0. Ports de Debian y Fedora están estabilizando. Existe un port de Das U-Boot . UEFI Spec v2.7 ha definido el enlace RISC-V y un puerto de tianocore ha sido realizado por ingenieros de HPE y se espera que esté actualizado. Hay un puerto preliminar del microkernel seL4 . Un simulador existe para correr un RISC-V sistema de Linux en un navegador de web que utiliza Javascript. Almatary, Hesham. «heshamelmatary». GitHub. Consultado el 13 de julio de 2018.

El simulador CREATOR es portable y permite aprender diversos lenguajes ensamblador de diferentes procesadores (CREATOR dispone de ejemplos con una implementación de las instrucciones RISC-V y MIPS32).

El simulador educativo WepSIM implementa un subconjunto de instrucciones RISC-V de forma microprogramada (RV32I + M) y permite ejecutar ejemplos de subrutinas en ensamblador. El simulador WepSIM puede usarse desde un navegador Web, y facilita aprender diversos aspectos de cómo una CPU funciona ( microprogramación, interrupciones, llamadas al sistema, etc.) usando ensamblador RISC-V.

## Usuarios

### Comerciales

* SiFive, una compañía establecida específicamente para desarrollar hardware RISC-V, lanzó modelos de procesador en 2017. [33] [34] Estos incluyen un sistema de 64 bits de cuatro núcleos RISC-V SoCa en un chip (SoC). .
* SSyntacore, [36] un miembro fundador de la Fundación RISC-V y uno de los primeros proveedores comerciales de IP RISC-V, desarrolla y otorga licencias a la familia de RISC-V IP desde 2015. A partir de 2018 , la línea de productos incluye ocho 32 - y núcleos de 64 bits, incluido el núcleo SCR1 MCU de código abierto. [37] Los primeros SoC comerciales, basados en Syntacore IP, se demostraron en 2016.
* Andes Technology Corporation, miembro fundador de la Fundación RISC-V [39] que se unió al consorcio en 2016, lanzó sus primeros dos núcleos RISC-V en 2017. Los núcleos, el N25 y el NX25, vienen con un completo diseño de ecosistemas y un Número de socios del RISC-V. Andes está impulsando activamente el desarrollo del ecosistema RISC-V y espera lanzar varios nuevos productos RISC-V en 2018.
* Codasip y UltraSoC han desarrollado una propiedad intelectual totalmente compatible para los SOC incorporados RISC-V que combinan los núcleos RISC-V de Codasip y otras IP con la depuración, optimización y análisis de UltraSoC.
* Imperas ha desarrollado una familia de modelos de procesadores rápidos para los diferentes subconjuntos de variantes IS32 RV32GC y RV64GC que forman parte de las distribuciones de simulador precisas de instrucciones OVPsim utilizadas para el desarrollo de software integrado.
* GreenWaves Technologies anunció la disponibilidad de GAP8, un controlador de 32 bits 1 más 8 núcleos informáticos, SoC de 32 bits y placa de desarrollo en febrero de 2018. Su placa de desarrollo GAPuino GAP8 comenzó a distribuirse en mayo de 2018.
* Hex Five anunció la disponibilidad general de MultiZone Security: el primer entorno de ejecución confiable (TEE) de RISC-V que utiliza el estándar ISA de RISC-V y las extensiones de modo privilegiado.
* CloudBEAR es una empresa de procesadores IP que desarrolla sus propios núcleos RISC-V para una amplia gama de aplicaciones.A 2018

### En desarrollo

* El Instituto Indio de Tecnología de Madras está desarrollando seis diseños de CPU de código abierto RISC-V para seis usos distintos, desde una pequeña CPU de 32 bits para Internet de las cosas (IoT) hasta grandes CPU de 64 bits diseñadas para computadoras de almacén como granjas de servidores basadas en las tecnologías RapidIO y Hybrid Memory Cube.
* Nvidia planea usar RISC-V para reemplazar su procesador Falcon en sus tarjetas gráficas GeForce .
* ASTC desarrolló una CPU RISC-V para circuitos integrados incrustados.
* Adapteva planea utilizar RISC-V, en un sucesor de su producto acelerador de muchos puntos [49]
* lowRISC es un proyecto sin fines de lucro para implementar un sistema de hardware de fuente completamente abierta en un chip (SoC) basado en el RISC-V ISA de 64 bits.
* El Laboratorio de Computación de la Universidad de Cambridge, en colaboración con el Proyecto FreeBSD, ha adaptado ese sistema operativo a RISC-V de 64 bits para utilizarlo como una plataforma de investigación de hardware y software. .
* ETH Zúrich y la Universidad de Bolonia han desarrollado de manera cooperativa el procesador de código abierto RISC-V PULPino [51] como parte del proyecto Parallel Ultra-Low Power (PULP) para la computación IoT eficiente en energía.
* Western Digital anunció un plan para integrar procesadores RISC-V en sus futuros productos. [53] .
* Esperanto Technologies anunció que están desarrollando tres procesadores basados en RISC-V: el núcleo de alto rendimiento ET-Maxion, el núcleo de eficiencia energética ET-Minion y el procesador de gráficos ET-Graphics .

## Diseño

### ISA Base y extensiones

RISC-V tiene un diseño modular, que consiste en partes de base alternativas, con extensiones opcionales agregadas. La base ISA y sus extensiones se desarrollan en un esfuerzo colectivo entre la industria, la comunidad de investigación y las instituciones educativas. La base especifica las instrucciones (y su codificación), el flujo de control, los registros (y sus tamaños), la memoria y el direccionamiento, la manipulación lógica (es decir, el número entero) y los elementos auxiliares. Solo la base puede implementar una computadora de propósito general simplificada, con soporte completo de software, incluido un compilador de propósito general.

Las extensiones estándar están especificadas para funcionar con todas las bases estándar y entre sí sin conflicto.

Muchas computadoras RISC-V pueden implementar la extensión compacta para reducir el consumo de energía, el tamaño del código y el uso de la memoria. También hay planes futuros para admitir hipervisores y virtualización. [19] Junto con una extensión de conjunto de instrucciones de supervisor, S, un RVGC define todas las instrucciones necesarias para admitir de manera conveniente un sistema operativo de estilo Unix, interfaz de sistema operativo portátil ( POSIX ).

ISA base y extensiones :

| Nombre | Descripción | Versión | Estado[más bajo-alfa 1] |
| - | - | - | - |
| Base ||||
| RV32I | Conjunto de instrucciones de base entera, 32-bits | 2.0 | Cerrada |
| RV32E | Conjunto de instrucciones de base entera (embedded), 32-bits, 16 registros | 1.9 | Abierta |
| RV64I | Conjunto de instrucciones de base entera, 64-bits | 2.0 |
| RV128I | Conjunto de instrucciones de base entera, 128-bits | 1.7 |
| Extensión ||||
| M | Extensión estándar para Multiplicación de Entero y División | 2.0 | Cerrada |
| Un | Extensión estándar para Instrucciones Atómicas | 2.0 | Abierta |
| F | Extensión estándar para punto flotante de precisión simple | 2.0 | Cerrada |
| D | Extensión estándar para punto flotante de precisión doble | 2.0 | Abierta |
| G | Abreviatura para la base y extensiones anteriores | | |
| Q | Extensión estándar para punto flotante de precisión cuádruple | 2.0 | Cerrada |
| L | Extensión estándar para punto flotante decimal | 0.0 | Cerrada |
| C | Extensión estándar para instrucciones comprimidas | 2.0 | |
| B | Extensión estándar para manipulación de bits | 0.36 | |
| J | Extensión estándar para lenguajes traducidos dinámicamente | 0.0 | Cerrada |
| T | Extensión estándar para Memoria Transaccional | 0.0 | Abierta |
| P | Extensión estándar para Empaquetado-SIMD Instrucciones | 0.1 | Cerrada |
| V | Extensión estándar para Operaciones de Vector | 0.2 | Abierta |
| N | Extensión estándar para interrupciones de nivel de usuario | 1.1 | Abierta |

Para dominar las combinaciones de funcionalidad que pueden implementarse, se define una nomenclatura para especificarlas. [4] La base del conjunto de instrucciones se especifica primero, la codificación para RISC-V, el ancho de bit de registro y la variante; por ejemplo, RV64I o RV32E. Luego sigue las letras que especifican extensiones implementadas en orden canónico (como arriba). La base, los enteros extendidos y los cálculos de punto flotante, y las primitivas de sincronización para la computación multinúcleo, la base y las extensiones MAFD, se consideran necesarias para el cálculo de propósito general, y por lo tanto tienen la taquigrafía, G.

Una pequeña computadora de 32 bits para un sistema integrado podría ser RV32EC. Una computadora grande de 64 bits podría ser RV64GC; es decir, taquigrafía para RV64IMAFDC.

Se ha propuesto un esquema de denominación con Zxxx para extensiones estándar y Yxxx para extensiones no estándar (específicas del proveedor). Por ejemplo, la extensión Ztso para el pedido total de tiendas, un modelo alternativo de consistencia de memoria para el ordenamiento de memoria débil, se encuentra en discusión.

### Conjuntos de registro

RISC-V tiene 32 (o 16 en la variante embebidas) registros enteros y, cuando se implementa la extensión de punto flotante, 32 registros de punto flotante. A excepción de las instrucciones de acceso a la memoria, las instrucciones solo se refieren a los registros.

El primer registro de enteros es un registro de cero, y el resto son registros de propósito general. Una escritura para el registro cero no tiene ningún efecto, y una lectura siempre proporciona 0. Usar el registro cero como un marcador de posición hace que el conjunto de instrucciones sea más simple. Por ejemplo, move rx to ry se convierte en add r0 to rx and store in ry.

Existen registros de control y estado, pero los programas en modo usuario pueden acceder solo a aquellos utilizados para la medición del rendimiento y la gestión de punto flotante.

No existen instrucciones para guardar y restaurar múltiples registros. Se pensaba que eran innecesarios, demasiado complejos y quizás demasiado lentos.

### Acceso a la memoria

Al igual que muchos diseños RISC, RISC-V es una arquitectura de carga y almacenamiento: las instrucciones se dirigen solo a los registros, con las instrucciones de carga y almacenamiento que se transmiten hacia y desde la memoria.

La memoria consta de y se trata como bytes de 8 bits, con las palabras en orden little-endian. Se puede acceder a las palabras, hasta el tamaño de registro, con las instrucciones de carga y almacenamiento.

Las direcciones de memoria a las que se accede no necesitan estar alineadas a su ancho de palabra, pero los accesos a las direcciones alineadas siempre serán los más rápidos. Como, por ejemplo, las CPU simples pueden implementar accesos no alineados con una emulación de software lenta basada en una interrupción de falla de alineación.

RISC-V administra los sistemas de memoria que se comparten entre CPU o subprocesos al garantizar que un subproceso de ejecución siempre vea sus operaciones de memoria en el orden programado. Pero entre los subprocesos y los dispositivos de E / S, RISC-V se simplifica: no garantiza el orden de las operaciones de memoria, excepto por instrucciones específicas, como la instrucción fence.

Una instrucción fence garantiza que los resultados de las operaciones predecesoras sean visibles para las operaciones sucesivas de otros subprocesos o dispositivos de E / S. fence puede garantizar el orden de las combinaciones de memoria y operaciones de E / S asignadas en memoria. Por ejemplo, puede separar las operaciones de lectura y escritura de la memoria, sin afectar las operaciones de E / S. O, si un sistema puede operar dispositivos de E / S en paralelo con la memoria, fence no los obliga a esperarse el uno al otro. Una CPU con un hilo puede decodificar la instrucción fence como nop.

Al igual que muchos conjuntos de instrucciones RISC (y algunos conjuntos de instrucciones de computadora de conjuntos de instrucciones complejas (CISC), como las familias x86 y IBM System / 360 ), RISC-V carece de modos de dirección que escriben en los registros. Por ejemplo, no se incrementa automáticamente.

RISC-V es little-endian para parecerse a otras computadoras familiares exitosas, por ejemplo, x86. Esto también reduce la complejidad de la CPU y los costos ligeramente porque lee todos los tamaños de palabras en el mismo orden. Por ejemplo, el conjunto de instrucciones RISC-V se decodifica comenzando en el byte con la dirección más baja de la instrucción. La especificación deja abierta la posibilidad de sistemas big-endian o bi-endian no estándar.

Algunas CPU RISC (como MIPS , PowerPC , DLX y RISC-I de Berkeley) colocan 16 bits de desplazamiento en las cargas y almacenes. Establecen los 16 bits superiores mediante una instrucción de palabra superior de carga. Esto permite que los valores de media palabra superior se configuren fácilmente, sin cambiar los bits. Sin embargo, la mayoría del uso de la instrucción de media palabra superior hace constantes de 32 bits, como direcciones. RISC-V utiliza una combinación similar a SPARC de compensaciones de 12 bits e instrucciones superiores de configuración de 20 bits. El desplazamiento más pequeño de 12 bits ayuda a las instrucciones compactas, de carga y almacenamiento de 32 bits a seleccionar dos de los 32 registros, pero aún tienen suficientes bits para admitir la codificación de instrucciones de longitud variable de RISC-V.

### Inmediatos

RISC-V maneja constantes de 32 bits y direcciones con instrucciones que establecen los 20 bits superiores de un registro de 32 bits. La instrucción carga superior inmediata lui carga 20 bits en los bits 31 a 12. Otra instrucción, auipc genera los mismos 20 bits de dirección superior agregando un desplazamiento al contador del programa y almacenando el resultado en un registro base. Esto permite que el código independiente de la posición tenga direcciones de 32 bits en relación con el contador del programa. El registro base se puede utilizar como está con las compensaciones de 12 bits de las cargas y las tiendas. Si es necesario, addi puede establecer los 12 bits más bajos de un registro. En el ISA de 64 bits, lui y auipc extienden el signo del resultado a 64 bits.

Algunas CPU rápidas pueden interpretar combinaciones de instrucciones como instrucciones fusionadas simples. lui o auipc pueden ser buenos candidatos para fusionarse con cargas o almacenes.

### Subrutinas llamadas, saltos y bifurcaciones.

Llamada de subrutina de RISC-V jal (saltar y vincular) coloca su dirección de retorno en un registro. Esto es más rápido en muchos diseños de computadoras, porque ahorra un acceso a la memoria en comparación con los sistemas que empujan una dirección de retorno directamente en una pila en la memoria. La instrucción jal tiene un offset de 20 bits con signo (complemento de 2). El desplazamiento se multiplica por 2 y luego se agrega a la PC para generar una dirección relativa a una instrucción de 32 bits. Si el resultado no está en una dirección de 32 bits (es decir, divisible de manera uniforme por 4), la CPU puede forzar una excepción.

Las CPU RISC-V saltan a direcciones calculadas utilizando un salto y un registro de enlace con la instrucción jalr. La instrucción jalr es similar a jal, pero obtiene su dirección de destino agregando un desplazamiento de 12 bits a un registro base. (En contraste, jal agrega una mayor compensación de 20 bits a la PC.)

Para jalr el formato de bits es como las cargas y almacenamientos relativos al registro. Como ellos, jalr se pueden usar con las instrucciones que establecen los 20 bits superiores de un registro base para hacer bifurcaciones de 32 bits, ya sea a una dirección absoluta (usando lui) o una PC-relativa (utilizando auipc para el código independiente de la posición). (El uso de una dirección de base cero constante permite realizar llamadas de una sola instrucción a una dirección pequeña (la compensación), positiva o negativa fija.)

RISC-V recicla jal y jalr para obtener saltos incondicionales de 20 bits relativos a PC y saltos incondicionales de 12 bits basados en registros. Los saltos solo hacen que se enlace el registro 0 para que no se guarde ninguna dirección de retorno.

RISC-V también recicla jalr para retornar de una subrutina: para hacer esto, en jalr el registro base se establece como el registro de vinculación guardado por jal o jalr. En jalr el desplazamiento es cero y el registro de vinculación es cero, de modo que no hay desplazamiento y no se guarda ninguna dirección de retorno.

Al igual que muchos diseños RISC, en una llamada de subrutina, un compilador RISC-V debe usar instrucciones individuales para guardar registros en la pila al inicio y luego restaurarlos desde la pila al salir. RISC-V no tiene guardar varias instrucciones de registro múltiple o restaurar. Se pensó que esto hacía que la CPU fuera demasiado compleja y posiblemente lenta. Esto puede tomar más espacio de código. Los diseñadores planearon reducir el tamaño del código con las rutinas de la biblioteca para guardar y restaurar registros.

RISC-V no tiene registro de código de condición ni bit de acarreo. Los diseñadores creían que los códigos de condición hacen que las CPU rápidas se vuelvan más complejas al forzar las interacciones entre instrucciones en diferentes etapas de ejecución. Esta elección hace que la aritmética de precisión múltiple sea más compleja. Además, algunas tareas numéricas necesitan más energía.

En cambio, RISC-V tiene bifurcaciones cortas que realizan comparaciones: igual, no igual, menor que, sin signo menor que, mayor que o igual y sin signo mayor o igual que. Se implementan diez operaciones de comparación de bifurcaciones con solo seis instrucciones, invirtiendo el orden de los operandos en el ensamblador. Por ejemplo, bifurcar si es mayor de lo que puede hacerse con menor que con un orden inverso de operandos.

Las bifurcaciones de comparación tienen un rango firmado de doce bits y saltan en relación con la PC.

El ISA RISC-V requiere predicciones de bifurcación por defecto para las CPU: debería predecirse tomaron las bifurcaciones condicionales hacia atrás. Las bifurcaciones condicionales hacia adelante predicen no tomadas. Las predicciones son fáciles de decodificar en una CPU segmentada: las direcciones de las sucursales son números firmados que se agregan a la PC. Las bifurcaciones hacia atrás tienen direcciones de complemento a dos negativas y, por lo tanto, tienen una en el bit más significativo de la dirección. Las bifurcaciones adelantadas tienen un cero. El bit más significativo se encuentra en una ubicación fija en el código de operación para acelerar la tubería. Las CPU complejas pueden agregar predictores de bifurcación para que funcionen bien incluso con datos o situaciones inusuales.

El manual de ISA recomienda que el software se optimice para evitar paradas de sucursales mediante el uso de las predicciones de sucursales predeterminadas. Esto reutiliza el bit más significativo de la dirección relativa firmada como un bit de sugerencia para indicar si la bifurcación condicional se tomará o no. Por lo tanto, no se necesitan otros bits de sugerencia en los códigos de operación de las sucursales RISC-V. Esto hace que haya más bits disponibles en los códigos de operación de bifurcación. Las CPU simples y económicas pueden simplemente seguir las predicciones predeterminadas y seguir funcionando bien con la optimización de los compiladores. Los compiladores aún pueden realizar la optimización de la ruta estadística, si lo desea.

Para evitar la carga innecesaria de la electrónica de predicción de bifurcación (y, por lo tanto, paradas de tuberías innecesarias), los códigos de bifurcación de comparación nunca deben utilizarse para saltos incondicionales.

RISC-V no admite la predicación (la ejecución condicional de las instrucciones) ya que sus diseñadores afirman que las CPU sin predicación son más fáciles de diseñar, y es menos probable que los compiladores de optimización usen la predicación donde no deberían usarse. Los diseñadores afirman que los diseños de CPU fuera de orden muy rápidos hacen predicción de todos modos, al hacer la bifurcación de comparación y el código condicional en paralelo, y luego descartar los efectos de la ruta no utilizada. También afirman que incluso en CPU más simples, la predicción es menos valiosa que la predicción de ramificación , lo que puede evitar la mayoría de los bloqueos asociados con las ramificaciones condicionales. El código sin predicación es mayor, con más bifurcaciones, pero también afirman que un conjunto de instrucciones comprimidas (como el conjunto C de RISC-V) resuelve ese problema en la mayoría de los casos.

Muchos diseños RISC han incluido una ranura de retardo de ramificación, una posición después de una instrucción de bifurcación que se puede completar con una instrucción que se ejecuta independientemente de que se tome la bifurcación. Esta función puede mejorar el rendimiento de las CPU segmentadas al absorber parte del tiempo perdido si una CPU predice incorrectamente el funcionamiento de una bifurcación condicional y la tubería de la CPU se detiene. RISC-V omite una ranura de retardo de bifurcación porque complica las CPU multiciclo, las CPU superescalar y las tuberías largas. Los predictores de ramificación dinámica han tenido el éxito suficiente para reducir la necesidad de ramificaciones retrasadas.

### Conjuntos aritméticos y lógicos

RISC-V segrega las matemáticas en un conjunto mínimo de instrucciones de enteros (conjunto I ) con suma, resta, cambio, lógica de bits y ramas de comparación. Estos pueden simular la mayoría de los otros conjuntos de instrucciones RISC-V con software. (Las instrucciones atómicas son una notable excepción.) RISC-V actualmente carece del conteo de cero y las operaciones de campo de bits normalmente utilizadas para acelerar el punto flotante del software en un procesador de entero puro.

Las instrucciones de multiplicación de enteros (conjunto M ) incluyen multiplicación y división con signo y sin signo. Se incluyen los números enteros de precisión doble y se divide, como se multiplica y divide que produce la palabra alta del resultado. El documento ISA recomienda que los implementadores de CPU y compiladores fusionen una secuencia estandarizada de alta y baja multiplicaciones y dividan las instrucciones en una operación si es posible.

Las instrucciones de punto flotante (conjunto F ) incluyen aritmética de precisión simple y también ramas de comparación similares a la aritmética de enteros. Requiere un conjunto adicional de 32 registros de punto flotante. Estos son separados de los registros enteros. Las instrucciones de punto flotante de doble precisión (conjunto D ) generalmente asumen que los registros de punto flotante son de 64 bits (es decir, ancho doble), y el subconjunto F se coordina con el conjunto D. También se define una ISA ( Q ) de coma flotante de 128 bits de precisión cuádruple. Las computadoras RISC-V sin punto flotante pueden usar una biblioteca de software de punto flotante.

RISC-V no causa excepciones en los errores aritméticos, incluyendo desbordamiento, subdesbordamiento, subnormal y división por cero. En su lugar, tanto la aritmética de enteros como la de punto flotante producen valores predeterminados razonables y establecen bits de estado. La división por cero puede ser descubierta por una rama después de la división. Los bits de estado se pueden probar mediante un sistema operativo o una interrupción periódica.

### Operaciones de memoria atómica

RISC-V admite computadoras que comparten memoria entre varias CPU y subprocesos. El modelo de consistencia de memoria estándar de RISC-V es la consistencia de la versión. Es decir, las cargas y los almacenes generalmente se pueden reordenar, pero algunas cargas pueden designarse como operaciones de adquisición que deben preceder a los accesos de memoria posteriores, y algunas tiendas se pueden designar como operaciones de liberación que deben seguir a los accesos de memoria anteriores.

El conjunto de instrucciones de la base incluye un soporte mínimo en forma de una fence instrucciones para hacer cumplir la ordenación de la memoria. Aunque esto es suficiente ( fence r, rw proporciona adquirir y fence rw, w proporciona lanzamiento ), las operaciones combinadas pueden ser más eficientes.

La extensión de operación de memoria atómica admite dos tipos de operaciones de memoria atómica para la consistencia de la versión. En primer lugar, proporciona lr reservado de propósito general lr y almacenar condicional sc instrucciones. lr realiza una carga e intenta reservar esa dirección para su hilo. Una tienda posterior condicional sc La dirección reservada se realizará solo si la reserva no es interrumpida por una tienda intermedia de otra fuente. Si la tienda tiene éxito, se coloca un cero en un registro. Si falla, un valor distinto de cero indica que el software debe volver a intentar la operación. En cualquier caso, se libera la reserva.

El segundo grupo de instrucciones atómicas realiza secuencias de lectura-modificación-escritura : una carga (que opcionalmente es una carga-adquisición) en un registro de destino, luego una operación entre el valor cargado y un registro de origen, luego una reserva del resultado (que puede ser opcionalmente un lanzamiento de tienda). Hacer las barreras de memoria opcionales permite combinar las operaciones. Las operaciones opcionales están habilitadas por los bits de adquisición y liberación que están presentes en cada instrucción atómica. RISC-V define nueve operaciones posibles: intercambio (use el valor del registro de origen directamente); añadir; bitwise y, o, y exclusivo -o; y mínimo y máximo firmado y sin firmar.

Un diseño de sistema puede optimizar estas operaciones combinadas más que lr y sc. Por ejemplo, si el registro de destino para un swap es el cero constante, la carga puede omitirse. Si el valor almacenado no se modifica desde la carga, la tienda puede omitirse.

El IBM System / 370 y sus sucesores, incluidos z / Architecture, y x86, implementan un sistema de comparación e intercambio (cas) De instrucciones, que pone a prueba y de forma condicionada actualiza una ubicación en la memoria: si la ubicación contiene un valor esperado de edad, cas lo reemplaza con un nuevo valor dado; luego devuelve una indicación de si realizó el cambio. Sin embargo, una instrucción de tipo de carga simple generalmente se realiza antes del cas para recuperar el valor antiguo. El problema clásico es que si un hilo lee (carga) un valor A , calcula un nuevo valor C y luego usa (cas) para reemplazar A por C , no tiene forma de saber si la actividad concurrente en otro hilo reemplazó a A por algún otro valor B y luego restauró la A en el medio. En algunos algoritmos (por ejemplo, aquellos en los que los valores en la memoria son punteros a bloques asignados dinámicamente), este problema de ABA puede llevar a resultados incorrectos. La solución más común emplea un cas doble ancho. cas instrucciones para actualizar tanto el puntero como un contador adyacente; desafortunadamente, tal instrucción requiere un formato de instrucción especial para especificar múltiples registros, realiza varias lecturas y escrituras, y puede tener una operación de bus compleja.

El lr / sc La alternativa es más eficiente. Por lo general, solo requiere una carga de memoria, y es deseable minimizar las operaciones de memoria lenta. También es exacto: controla todos los accesos a la celda de memoria, en lugar de solo asegurar un patrón de bits. Sin embargo, a diferencia de cas cas , puede permitir Livelock , en el que dos o más subprocesos repetidamente hacen que las instrucciones del otro falle. RISC-V garantiza el progreso hacia adelante (no Livelock) si el código sigue las reglas sobre el tiempo y la secuencia de instrucciones: 1) Debe usar solo el subconjunto I. 2) Para evitar las fallas de caché repetitivas, el código (incluido el ciclo de reintento) no debe ocupar más de 16 instrucciones consecutivas. 3) No debe incluir instrucciones de sistema o cerca, o ramas tomadas hacia atrás entre los lr y sc. 4) La rama hacia atrás al bucle de reintento debe ser a la secuencia original.

La especificación proporciona ejemplos de cómo usar este subconjunto para bloquear una estructura de datos.

### Subconjunto comprimido

El estándar RISC-V ISA especifica que todas las instrucciones son de 32 bits. Esto hace que para una implementación particularmente simple, pero al igual que otros procesadores RISC con tal codificación de instrucciones, resulta en un tamaño de código mayor que en otros conjuntos de instrucciones. Para compensar, instrucciones de 32 bits del RISC-V son en realidad 30 bits; $^{3/4}$ de la opcode espacio está reservado para un conjunto de instrucciones opcional (pero recomendado) de longitud variable comprimido, RVC, que incluye instrucciones de 16 bits. Al igual que ARM's Thumb y el MIPS16, las instrucciones comprimidas son simplemente alias para un subconjunto de las instrucciones más grandes. A diferencia del conjunto comprimido ARM's Thumb o MIPS, el espacio se reservó desde el principio para que no haya un modo de operación separado. Las instrucciones estándar y comprimidas se pueden mezclar libremente. (letra C )

Debido a que (como Thumb-1 y MIPS16) las instrucciones comprimidas son simplemente codificaciones alternativas (alias) para un subconjunto seleccionado de instrucciones más grandes, la compresión puede implementarse en el ensamblador, y no es esencial que el compilador lo sepa.

Se probó un prototipo de RVC en 2011. El código del prototipo era un 20% más pequeño que un PC x86 y un código comprimido MIPS, y un 2% más grande que el código ARM Thumb-2. También redujo sustancialmente tanto la memoria caché necesaria como el uso de energía estimado del sistema de memoria.

El investigador pretendía reducir el tamaño binario del código para computadoras pequeñas, especialmente sistemas informáticos integrados. El prototipo incluyó 33 de las instrucciones utilizadas con mayor frecuencia, recodificadas como formatos compactos de 16 bits utilizando códigos de operación previamente reservados para el conjunto comprimido. La compresión se realizó en el ensamblador, sin cambios en el compilador. Las instrucciones comprimidas omitieron los campos que a menudo son cero, utilizaron valores inmediatos pequeños o subconjuntos accedidos (16 u 8) de los registros. addi Es muy común y a menudo compresible.

Gran parte de la diferencia de tamaño en comparación con el conjunto de ARM Thumb se produjo porque RISC-V, y el prototipo, no tienen instrucciones para guardar y restaurar registros múltiples. En cambio, el compilador generó instrucciones convencionales que acceden a la pila. El prototipo del ensamblador RVC a menudo los convertía en formas comprimidas que tenían la mitad del tamaño. Sin embargo, esto todavía tomó más espacio de código que las instrucciones ARM que guardan y restauran múltiples registros. El investigador propuso modificar el compilador para llamar a las rutinas de la biblioteca para guardar y restaurar registros. Estas rutinas tienden a permanecer en un caché de código y, por lo tanto, se ejecutan rápidamente, aunque probablemente no tan rápido como una instrucción de guardar varios.

### Subconjunto incorporado

Un conjunto de instrucciones para las CPU incorporadas más pequeñas (conjunto E) se reduce de otras maneras: solo se admiten 16 de los registros de enteros de 32 bits. Las instrucciones de punto flotante no se deben admitir (la especificación lo prohíbe por ser poco rentable), por lo que se debe usar una biblioteca de software de punto flotante. Se recomienda el conjunto comprimido C. El conjunto de instrucciones privilegiadas solo admite el modo de máquina, el modo de usuario y los esquemas de memoria que utilizan la reubicación de direcciones de base y límite.

Se ha producido una discusión para un perfil de microcontrolador para RISC-V, para facilitar el desarrollo de sistemas profundamente integrados. Se centra en un soporte de lenguaje C más rápido y simple para interrupciones, modos de seguridad simplificados y una interfaz binaria de aplicación POSIX simplificada.

Los corresponsales también han propuesto ISA RV16E de 16 bits más pequeñas, no estándar: Se utilizarían registros enteros de 16 × 16 bits, utilizando las ISA EIMC estándar (incluidas las instrucciones de 32 bits). ) Otra propuesta solo usaría las instrucciones C de 16 bits con registros de 8 × 16 bits. Se dijo que un RV16EG completo era posible con una ISA completamente recodificada.

### Conjunto de instrucciones privilegiadas

La ISA de RISC-V incluye una especificación de conjunto de instrucciones privilegiadas por separado. A partir de julio A 2017 de 07 A 2017 de 07 A 2017 de 07, es preliminar.

* Sistemas que solo tienen modo de máquina , tal vez para sistemas embebidos ,
* Sistemas con modo de máquina (para el supervisor ) y modo de usuario, tal vez para implementar Linux.
* Sistemas con modo máquina, hipervisores, supervisores múltiples y modos de usuario bajo cada supervisor.

Estos corresponden aproximadamente a sistemas con hasta cuatro anillos de privilegio y seguridad, como máximo: máquina, hipervisor, supervisor y usuario. También se espera que cada capa tenga una capa delgada de software de soporte estandarizado que se comunique con una capa o hardware más privilegiado.

El plan general para esta ISA es hacer que el modo hipervisor sea ortogonal a los modos de usuario y supervisor. La característica básica es un bit de configuración que permite que el código de nivel de supervisor acceda a los registros del hipervisor o que cause una interrupción en los accesos. Este bit permite que el modo supervisor maneje directamente el hardware que necesita un hipervisor. Esto simplifica un hipervisor de tipo 2, alojado por un sistema operativo. Este es un modo popular para ejecutar computadoras a escala de almacén. Para admitir los hipervisores tipo 1, sin publicar, el bit puede hacer que estos accesos se interrumpan a un hipervisor. El bit simplifica el anidamiento de hipervisores, en el que un hipervisor se ejecuta bajo un hipervisor. También se dice que simplifica el código de supervisor al permitir que el kernel use sus propias características de hipervisor con su propio código de kernel. Como resultado, la forma de hipervisor de la ISA admite cinco modos: máquina, supervisor, usuario, supervisor bajo hipervisor y usuario bajo hipervisor.

La especificación de conjunto de instrucciones privilegiadas define explícitamente los hilos de hardware o harts. Múltiples hilos de hardware son una práctica común en computadoras más grandes y más potentes. Cuando un hilo se detiene, a la espera de memoria, otros pueden continuar. Los hilos de hardware pueden ayudar a hacer un mejor uso de la gran cantidad de registros y unidades de ejecución en CPU grandes. Finalmente, los subprocesos de hardware pueden ser una forma simple y poderosa de manejar interrupciones : no es necesario guardar ni restaurar registros, simplemente ejecutando un subproceso de hardware diferente. El único hilo de hardware requerido en una computadora RISC-V es el hilo cero.

Las definiciones de registro de control y estado existentes admiten las excepciones de error y memoria de RISC-V, y un pequeño número de interrupciones. Para sistemas más grandes, la especificación también define un controlador de interrupción. Las interrupciones siempre comienzan en el nivel de máquina con el privilegio más alto, y los registros de control de cada nivel tienen bits de reenvío explícitos para encaminar las interrupciones a un código con menos privilegios. Por ejemplo, el hipervisor no necesita incluir software que se ejecute en cada interrupción para reenviar una interrupción a un sistema operativo. En su lugar, en la configuración, puede establecer bits para reenviar la interrupción.

Varios sistemas de memoria son compatibles con la especificación. Físico solo es adecuado para los sistemas embebidos más pequeños. También hay tres sistemas de memoria virtual de estilo UNIX para la memoria caché en sistemas de almacenamiento masivo. Los sistemas de memoria virtual tienen tres tamaños, con direcciones de 32, 39 y 48 bits. Todos los sistemas de memoria virtual son compatibles con 4. Las páginas de KiB, los árboles de tablas de páginas de niveles múltiples y utilizan algoritmos muy similares para recorrer los árboles de tablas de páginas. Todos están diseñados para la tabla de páginas de hardware o software. Para reducir opcionalmente el costo de las caminatas en la tabla de páginas, las páginas de gran tamaño pueden ser páginas de hoja en niveles más altos del árbol de tabla de páginas de un sistema. SV32 tiene un árbol de tabla de páginas de dos capas y admite 4 Superpáginas de mib SV39 tiene una tabla de páginas de tres niveles, y soporta 2 Superpages mib y 1 GiB gigapages. Se requiere SV48 para soportar SV39. También tiene una tabla de páginas de 4 niveles y soporta 2 Superpages MiB, 1 Gigapages GiB, y 512 GiB terapages. Las súper páginas se alinean en los límites de la página para el siguiente tamaño más bajo de página.

### Manipulación de bits

Se realizó un trabajo sustancial para producir una ISA preliminar (aunque no aprobada) de manipulación de bits (B) para RISC-V. Hecho bien, un subconjunto de manipulación de bits puede ayudar a las operaciones criptográficas, gráficas y matemáticas. Los criterios de inclusión documentados en el borrador fueron el cumplimiento con las filosofías RV5 y los formatos ISA, mejoras sustanciales en la densidad o velocidad del código (es decir, al menos una reducción de instrucciones de 3 por 1), y aplicaciones sustanciales en el mundo real, incluido el compilador preexistente apoyo. La versión 0.36 incluyó instrucciones no controvertidas para contar ceros iniciales, contar un bit, realizar and con complemento, desplazar unos, rotar, un bit invertido y aleatorio generalizados, intercambios de bytes, extractos y depósitos de bits y algunas adiciones de manipulación de bits para el conjunto comprimido (not, neg y reverse). También incluye una propuesta controvertida para la extracción y colocación de campos de bits, utilizando un formato de instrucción de 48 bits no estándar.

### Empaquetado SIMD

Para sistemas RISC-V simples y con costos reducidos, hay una propuesta para utilizar los bits de los registros de punto flotante para realizar la instrucción aritmética de la sub-palabra de instrucción simple paralela, datos múltiples (SIMD). Esto se usa ampliamente para acelerar el procesamiento multimedia y de otras señales digitales. A partir de 2016 A 2016, esta ISA no está definida, pero podría parecerse a las instrucciones multimedia de PA-RISC: extensiones de aceleración multimedia. Además de su matemática nativa de 64 bits, la CPU PA-RISC MAX2 podría hacer aritmética en cuatro subpuntos de 16 bits a la vez, con varios métodos de desbordamiento. También podría mover subwords a diferentes posiciones. El MAX2 de PA-RISC se simplificó intencionalmente. Carecía de soporte para subwords de 8 bits o de 32 bits. Se seleccionó el tamaño de la subpuesta de 16 bits para admitir la mayoría de las tareas de procesamiento de señales digitales. Estas instrucciones eran económicas de diseñar y construir. Sin embargo, aumentaron el rendimiento de la CPU en las tareas de procesamiento de señal digital en 48 veces o más, lo que permitió la creación de códecs de video en tiempo real en 1995.

### Conjunto de vectores

El conjunto de instrucciones de procesamiento de vectores propuesto puede hacer que el conjunto SIMD empaquetado quede obsoleto. Los diseñadores esperan tener la flexibilidad suficiente para que una CPU pueda implementar instrucciones vectoriales en los registros de un procesador estándar. Esto permitiría implementaciones mínimas con un rendimiento similar a un ISA multimedia, como se indicó anteriormente. Sin embargo, un verdadero coprocesador vectorial podría ejecutar el mismo código con un mayor rendimiento.

A partir del 29 A 2015 de junio del 29 A 2015 de junio del 29 A 2015 de junio del 29 A 2015 de junio del 29 A 2015 de junio del 29, la propuesta de procesamiento de vectores es un diseño conservador y flexible de un procesador de vectores de precisión mixta de propósito general, adecuado para ejecutar núcleos informáticos. El código se trasladaría fácilmente a las CPU con diferentes longitudes de vectores, idealmente sin recompilar.

En contraste, las extensiones SIMD de vector corto son menos convenientes. Estos se utilizan en x86, ARM y PA-RISC. En estos, un cambio en el ancho de palabra fuerza un cambio en el conjunto de instrucciones para expandir los registros vectoriales (en el caso de x86, de registros MMX de 64 bits a Extensiones SIMD de transmisión de 128 bits (SSE), a 256 bits Avanzado) Extensiones de vectores (AVX), y AVX-512). El resultado es un conjunto de instrucciones en crecimiento y la necesidad de adaptar el código de trabajo a las nuevas instrucciones.

En el vector ISA de RISC-V, en lugar de fijar la longitud del vector en la arquitectura, una instrucción (setvl está disponible, que toma un tamaño solicitado y establece la longitud del vector al mínimo del límite de hardware y el tamaño solicitado. Por lo tanto, la propuesta RISC-V es más como el diseño de vector largo de Cray. Es decir, cada vector en hasta 32 vectores tiene la misma longitud.

La aplicación especifica el ancho total del vector que requiere, y el procesador determina la longitud del vector que puede proporcionar con los recursos disponibles en el chip. Esto toma la forma de una instrucción (vsetcfg) con cuatro operandos inmediatos, especificando el número de registros vectoriales de cada ancho disponible necesario. El total no debe ser mayor que el límite direccionable de 32, pero puede ser menor si la aplicación no los requiere a todos. La longitud del vector está limitada por el almacenamiento en chip disponible dividido por la cantidad de bytes de almacenamiento necesarios para cada entrada. (También pueden existir límites de hardware adicionales, que a su vez pueden permitir implementaciones de estilo SIMD. )

Fuera de los bucles vectoriales, la aplicación puede solicitar registros de vector cero, ahorrando al sistema operativo el trabajo de preservarlos en los cambios de contexto.

La longitud del vector no solo es variable arquitectónicamente, sino que también está diseñada para variar en el tiempo de ejecución. Para lograr esta flexibilidad, es probable que el conjunto de instrucciones utilice rutas de datos de ancho variable y operaciones de tipo variable que utilizan la sobrecarga polimórfica. El plan es que estos pueden reducir el tamaño y la complejidad de la ISA y el compilador.

Los procesadores de vectores experimentales recientes con rutas de datos de ancho variable también muestran aumentos rentables en las operaciones por: segundo (velocidad), área (menor costo) y vatios (mayor duración de la batería).

A diferencia de una unidad de procesamiento de gráficos moderna típica, no hay planes de proporcionar hardware especial para soportar la predicción de sucursales. En su lugar, se utilizará una predicción basada en compilador de menor costo.

### Sistema de depuración externa

Hay una especificación preliminar para el depurador asistido por hardware de RISC-V. El depurador utilizará un sistema de transporte como Joint Test Action Group (JTAG) o Universal Serial Bus (USB) para acceder a los registros de depuración. Una interfaz de depuración de hardware estándar puede admitir una interfaz abstracta estandarizada o la alimentación de instrucciones.

A partir de enero A 2017 de 01 A 2017 de 01 A 2017 de 01, la forma exacta de la interfaz abstracta permanece indefinida, pero las propuestas incluyen un sistema mapeado en memoria con direcciones estandarizadas para los registros de dispositivos de depuración o un registro de comando y un registro de datos accesibles al sistema de comunicación. Los corresponsales afirman que la interfaz de modo de depuración en segundo plano (BDM) de Freescale utiliza sistemas similares para algunas CPU, ARM, OpenRISC y LEON de Aeroflex.

En la alimentación de instrucciones, la CPU procesará una excepción de depuración para ejecutar instrucciones individuales escritas en un registro. Esto puede complementarse con un registro de paso de datos y un módulo para acceder directamente a la memoria. La alimentación de instrucciones le permite al depurador acceder a la computadora exactamente como lo haría el software. También minimiza los cambios en la CPU y se adapta a muchos tipos de CPU. Se dijo que esto era especialmente apto para RISC-V porque está diseñado explícitamente para muchos tipos de computadoras. El registro de paso de datos permite a un depurador escribir un bucle de movimiento de datos en la RAM, y luego ejecutar el bucle para mover los datos dentro o fuera de la computadora a una velocidad cercana a la velocidad máxima del canal de datos del sistema de depuración. Los corresponsales dicen que los sistemas similares son utilizados por MIPS Technologies MIPS, Intel Quark, Tensilica 's Xtensa , y por Freescale potencia CPU' interfaz de modo de fondo de depuración (BDM).

