RISC-V: Parte 0 - Introducción

w1re

Moderador
Mensajes
844
Oro
59,830
RISC-V es una ISA (Instruction Set Architecture) de código abierto surgida en 2010 en la Universidad de Berkeley que ha venido ganando popularidad en ciertos círculos estos años. Más correctamente se trata de una familia de ISAs base y extensiones opcionales para estas. Parte de su atractivo es que está libre de cruft, un conjunto de instrucciones extensible y relativamente simple, su modularidad y su potencial para aplicaciones específicas (ej. inteligencia artificial).

Las implementaciones han evolucionado mucho desde los microcontroladores de hace unos 6 años hasta los CPUs de hoy. Si bien aún no se compara en rendimiento con los mejores ARM (ni hablar de los x86 de Intel y AMD), se espera que la brecha se vaya cerrando con el tiempo.

Aquí doy una descripción general, para ir profundizando en futuros temas.

Instrucciones, registros, etc.
Las instrucciones son de tamaño fijo (4 bytes, excepto las instrucciones comprimidas de la extensión "C", que ocupan 2), tienen formatos bien definidos y no son ortogonales, en lugar de esto existen operaciones específicas de carga/almacenamiento. Los saltos requieren alineación y no tiene delay slots.

Cada hart (Hardware Thread) tiene 32 GPR (General Purpose Register) con un tamaño de 32, 64, o 128bits cada uno (configurable dependiendo de la implementación), válidos para cualquier operación de integer o direccionamiento. No tiene registro de flags; los saltos condicionales se realizan mediante compare-and-branch. La extensión "F" añade instrucciones y registros (32 de 32bits) de punto floante; las extensiones "D" y "Q" agrandan dichos registros a 64 y 128bits, respectivamente.

Hay 4 niveles de privilegio, enumerados a continuación:
0. Usuario (U) - Aplicaciones, etc.. Opcional.
1. Supervisor (S) - Típicamente usado por el kernel. Opcional.
2. Reservado.
3. Máquina (M) - Usado por el firmware.
Se usan CSR (Control and State Register) separados para cada nivel de privilegio y es posible delegar el manejo de traps a un nivel inferior.

Memoria
El byte-order especificado es Little-Endian, aunque se permite que las implementaciones accedan a la memoria en Big-Endian y existen flags que permiten cambiar esto último para cada nivel de protección. El soporte para carga/almacenamiento sin alineación es opcional. Los accesos no válidos generan una excepción.

La memoria virtual se implementa mediante paginación y es gestionada usando un árbol radix, al igual que en muchas otras arquitecturas. Define modos de direccionamiento de 32, 39, 48 y 57 bits. El tamaño de página por defecto es de 4096 bytes.

Enlaces
Especificaciones:
GitHub: https://github.com/orgs/riscv
Sitio web oficial: https://riscv.org/
 
Atrás
Arriba