RISC-V ha llegado para quedarse. Hacía tiempo que no se diseñaba una nueva ISA. Las actuales arquitecturas se crearon hace décadas. Pero ahora todo ha cambiado, esta joven ha irrumpido con mucha fuerza. No es una arquitectura convencional, sino que es open-source, o de código abierto. Y, por el camino que está tomando, podría convertirse en «el Linux» del mundo de hardware, toda una revolución. Normal que algunos competidores han empezado a llamarla RISK-V, puesto que la ven como una seria amenaza…
Pero ¿qué es esta ISA? ¿qué la diferencia de las demás? ¿qué significa que sea open-source? ¿ya existen equipos basados en RISC-V? Vamos a tratar de disipar todas esas dudas y mucho más.
Índice de contenidos
¿Qué es una ISA?
El conjunto de instrucciones, repertorio de instrucciones, o ISA (Instruction Set Architecture), es una especificación detallada de todas las instrucciones (transferencia de datos, aritméticas, lógicas, de comparación, operaciones sobre bits, desplazamientos, control, saltos, etc.) que puede entender y ejecutar una CPU, además de los tipos de datos nativos que soporta, modos de direccionamiento de memoria, los registros y otros aspectos. Algunos ejemplos de ISA pueden ser AMD64, SPARCv9, AVR, ARMv8, RISC-V, Power ISA, z/Architecture, etc.
Estas ISAs pueden ser de varios tipos, aunque los más extendidos son CISC (Complex Instruction Set Computer) y RISC (Reduced Instruction Set Computer), siendo éste último el predominante en la actualidad debido a sus ventajas. Los tipos ya los detallaremos en otro artículo próximamente, por el momento, simplemente debes saber que RISC-V es de tipo RISC, como su propio nombre indica.
Los mnemónicos (lb, sb, sub, mul, add, div, or, xor, bne…) empleados para identificar a las instrucciones de una ISA, son los mismos que se emplean en el lenguaje ensamblador para esa arquitectura. Por ejemplo, este Hola Mundo en ASM de RISC-V:
# Programa en ensamblador para RISC-V sobre Linux para imprimir en pantalla un ¡Hola Mundo! .global _start #Dirección de inicio de programa para el linker #Configuración de parámetros para el Hola Mundo y la syscall() para Linux necesaria _start: addi a0, x0, 1 # 1 = StdOut la a1, Hola Mundo #Carga la dirección de Hola Mundo addi a2, x0, 13 #Longitud de nuestra cadena de texto a imprimir (13 caracteres: 12+1 por el salto \n) addi a7, x0, 64 #Selección de la syscall write() de Linux para imprimir el mensaje ecall #Llamada a la syscall de Linux para imprimir el mensaje en pantalla #Configuración de los parámetros de salida del programa addi a0, x0, 0 #Retorna 0 addi a7, x0, 93 #Código para la syscall terminado ecall #Llamada para terminar el programa .data helloworld: .ascii "¡Hola Mundo!\n" #Mensaje a imprimir
Como se puede apreciar en la imagen superior, la ISA es algo intangible que se encuentra entre la capa de software y la capa de hardware. La implementación de una ISA es la microarquitectura, y la implementación física es el chip resultante. Cuando se escribe un programa, el compilador creará un binario ejecutable, y éste a su vez incluye datos e instrucciones que se encuentran en la ISA. Así, una vez se carga en memoria y las instrucciones comienzan a entrar en la CPU, pueden ser interpretadas y procesadas. Por este motivo, un software compilado para una ISA no es compatible con otra, ya que la CPU no comprendería las instrucciones.
Un poco de historia
A finales de los años 70 los diseños CISC lanzados fueron bastante complejos, necesitando gran cantidad de transistores para su implementación. En 1979, David Patterson se tomó un año sabático de su trabajo en la Universidad de Berkeley para ayudar al equipo de DEC a mejorar el microcódigo de VAX. Al ver la complejidad concluyó que era insostenible.
De vuelta a Berkeley, Patterson iniciaría un proyecto en la universidad financiado por el DARPA VLSI Program, y rápidamente se opondría al concepto tradicional de más es mejor (CISC). Pensó que si el microcódigo era eliminado, podría ser incluso más rápido. Así es como surgiría el chip RISC-I. Éste sería más rápido con solo 1/3 de los transistores.
En 1981, en la Universidad de Stanford se inicia un proyecto similar, este proyecto era el MIPS, por John L. Hennessy. El primer sistema funcional se produciría en 1983, y los primeros programas pudieron comenzar a correr en él en 1984. MIPS enfatizaba en una agresiva frecuencia de reloj usando pipeline para hacer que corriese todo lo máximo posible.
A pesar de que ambos proyectos se realizaron casi en paralelo, la arquitectura tomó el nombre de RISC.
Tanto del RISC como de MIPS se fueron sucediendo numerosas versiones, como las MIPS I (1985), MIPS II (1989), MIPS III (1991), MIPS IV (1996), MIPS V (1998), MIPS32 (1999), y MIPS64 (1999). Pero lo que más importa aquí es la parte del proyecto RISC, aquel proyecto inicial finalmente sería abandonado (¿o no?):
- RISC-I: diseñada en 1980, de 32-bit, con 44500 transistores y capaz de operar a 0.5 Mhz, consiguiendo 0.5 MIPS. Y todo con una densidad de código un 30% mayor que un VAX.
- RISC-II: apareció en 1983, y agregó más registros, hasta 22 visibles al mismo tiempo, 6 compartidos con la rutina de llamadas, thumb de 16-bit, y mejoras en la densidad del código. Tenía 40760 transistores y funcionando a 3 Mhz @ 1MIPS.
- RISC-III (SOAR): fue un rediseño y optimización para Smalltalk. Lanzado en 1984 y con un recuento de transistores de 35700.
- RISC-IV (VLSI-BAM): otro rediseño de 1990, optimizado para el código compilado desde Prolog. Esta implementación poseía 112000 transistores, con 20 Mhz y solo 1W de consumo.
Y el proyecto aparentemente desapareció, aunque su legado continuó en diseños RISC muy populares, como los DEC Alpha, SPARC, PA-RISC, AMD 29k, Power, Arm, MIPS, etc. Y de repente, en 2010 se inicia un proyecto comandado por Krste Asanović en Berkeley. Se reunió a un equipo para investigar sobre un sistema de código abierto y que terminó continuando el legado iniciado por Patterson, y denominado RISC-V.
¿Qué es RISC-V?
RISC-V es una ISA de código abierto, lanzada bajo licencia BSD permisiva, lo que permite desarrollar implementaciones bajo cualquier licencia, ya sea también abierta o cerrada. Pero no solo destaca por eso, sino que también tiene otras ventajas interesantes, como ser una ISA diseñada recientemente, y pensando en las necesidades de la computación actual (IA, aceleradores específicos,…). Algo que el resto de ISAs no tienen, ya que fueron diseñadas en los años 80 en su mayoría.
Otro factor importante es su modularidad. Mientras otras ISAs son un «bloque» de instrucciones, la RISC-V permite usar el bloque de instrucciones que se necesite, haciendo que el procesador pueda ser más sencillo y eficiente. Todo lo contrario a la familia x86, que arrastran un problema mayúsculo debido a la retrocompatibilidad que mantienen. Entre los módulos de instrucciones que se pueden implementar en la microarquitectura están:
- RVWMO: Weak Memory Ordering.
- RV32i: son 47 instrucciones de aritmética de enteros y de 32-bit.
- RV32E: igual a la anterior, pero con solo 16 registros, sin los de tipo contador, pensada para sistemas embebidos.
- RV64i: posee 59 instrucciones de cálculo de enteros, y es de 64-bit.
- RV128i: estas son una ampliación de las anteriores, con 59 instrucciones pero con longitud de 128-bit.
- Extensiones:
- M: 8 instrucciones para multipliar y dividir enteros.
- A: 11 instrucciones para operaciones atómicas de memoria.
- F: 26 instrucciones para coma flotante en 32-bit.
- D: 26 instrucciones para coma flotante de 32-bit.
- Q: como la anterior, pero de 128-bit.
- C: 46 instrucciones para datos comprimidos de enteros en 16-bit.
- Zicsr: control y estado del registro CSR.
- Zifencei: instrucción fetch fence.
- Otras: G, L, B, J, T, P, V, K, N, H, S, Zam, Ztso.
Me gustaría agregar que, no todas estas instrucciones se encuentran en la misma fase. Al ser una ISA tan moderna, algunas aún no han sido ratificadas. Por ejemplo, la RV32E y la RV128i aún están abiertas a cambios, mientras el resto están ya ratificadas y son estables, no cambiarán. Lo mismo ocurre con las extensiones, algunas ya ratificadas y otras no. En las especificaciones de RISC-V podrás comprobar su estado (ratificado, congelado, abierto).
Ratificadas: ya están cerradas, no se incluirán más instrucciones y han sido verificadas.
Congeladas: ya no se pueden hacer cambios, pero deben ser verificadas.
Abiertas: están aún abiertas a cambios.
Última actualización el 2024-11-21
Adopción
Poco a poco RISC-V va centrando más miradas de la industria, y muchos grandes ya se han fijado en ella. Desde el IoT y otros embebidos RT, hasta PCs, pasando por HPC, y dispositivos móviles. La expectación no tiene precedentes, e incluso podría superar a Arm en un futuro próximo.
Algunas de las compañías que ya se han interesado en RISC-V son:
- Alibaba
- Huawei
- Intel
- ZTE
- Unisoc
- Western Digital
- Analog Device
- Arduino
- Cadence
- Centaur Technology
- Cobham
- Fraunhofer
- Hitachi
- Oculus
- Imperas
- Infineon
- IBM
- Latice
- Microchip
- Mediatek
- Nokia
- NXP
- NVIDIA
- Qualcomm
- Rambus
- Renesas
- Raytheon
- Raspberry Pi
- Rockchip
- Samsung
- ST Microelectronics
- Sony
- Siemens
- Thales
- Xilinx
- BSC
- etc.
De hecho, el procesador europeo derivado del proyecto EPI que se está desarrollando, han empleado CPUs basadas en ARM y un acelerador basado en RISC-V.
Prueba RISC-V
Por último, debes saber que RISC-V es compatible con Linux, y que ya hay productos que puedes probar para hacerte una idea de cómo funciona esta ISA. La compañía SiFive, formada por algunos miembros implicados en RISC-V, tiene algunos de estos proyectos a la venta.
- Nezha se basa en el chip RISC-V más nuevo de Allwinner, D1 @1.0GHz (núcleo T-Head XuanTie C906), con 1GByte DDR3 y 256 MByte integrado Nand Flash. Tiene recursos básicos y entornos que le permiten investigar las características RV64 en sí mismo, al igual que una PC de escritorio. Es probable que su primer RV64 Linux SBC universal ~
- Nezha tiene la mayoría de los periféricos que necesita en aplicaciones IoT: MIPI LCD, HDMI, USB, ETH, SPI/UART/IIC/PWM/LEDC/IIS/GPIOs. Puedes construir tus proyectos fácil y rápidamente.
- Nezha tiene un SDK de código abierto que nos permitirá portar Debian Desktop System a él, y podemos probar muchos entornos de programas populares en él: C/C++, JS, WASM, Rust, GoLang, Python, etc.
- SoC – Allwinner D1 de un solo núcleo XuanTie C906 64 bits RISC-V procesador @ 1.0 GHz con HiFi4 DSP, aceleradores gráficos G2D 2D, memoria – 1 GB DDR3 memoria almacenamiento – 256 MB SPI NAND flash, ranura para tarjeta MicroSD.
- Codificación – JPEG/MJPEG hasta 1080p60, audio – conector de audio de 3,5 mm, salida de audio digital a través de HDMI, un conector para placa de matriz de micrófono, conectividad – Gigabit Ethernet a través de RTL8211F PHY, WiFi 4 de 2.4 GHz y módulo Bluetooth a través del módulo XR829.
Última actualización el 2024-11-21
La SiFive Unmatched es una de las placas base más potentes que puedes probar, y con prestaciones realmente impresionantes. Aquí tienes un resumen de ellas:
- Desarrollador: SiFive
- Modelo: HiFive Unmatched
- SoC: SiFive Freedom U740
- QuadCore SiFive U74-MC de 64-bit
- RV64IMAFDC, es decir, RV64i con extensiones M, A, F, D, C.
- Superescalar, con varias unidades de ejecución.
- Dual-issue, por cada ciclo de reloj puede mover un par de instrucciones a través de las etapas de la pipeline.
- Cache L1: 32 KB para instrucciones + 32 KB para datos por núcleo.
- 2MB de cache L2 unificada
- Nucleo SiFive S7 (Embedded Real-Time)
- 64-bit
- Subconjunto RV64IMAC
- Memoria cache 16 KB para instrucciones
- 8 KGB DTIM
- QuadCore SiFive U74-MC de 64-bit
- Memoria RAM: integra 8 GB tipo DDR4, con un ancho de 2400 MT/s.
- Almacenamiento:
- 32 MB Quad SPI Flash NOR para arranque rápido
- Ranura para tarjetas de memoria microSD
- Ranuras de expansión:
- Slot M.2 PCIe (3ªGen) x4 para SSDs NVMe
- Slot M.2 E-Key para Bluetooth o WiFi
- Slot x16 PCIe Gen 3 (8-lanes) para tarjetas gráficas. Es compatible con las empleadas para x86, como NVIDIA, AMD, etc.
- Conectividad y puertos E/S:
- Red cableada Gigabit Ethernet LAN (RJ-45)
- 4x USB 3.2 Gen 1 Tipo-A
- 2x microUSB Tipo-B
- 1 cabezal JTAG
- 1 cabezal de 24-pin periférico:
- 4x GPIO
- 2x I2C
- 2x QSPI
- 2x UART
- 1x PWM
- Batería: para RTC incluida.
- Factor de forma:
- mini-ITX (170x170mm).
- Compatible con PSU con un conector de 24-pin (al menos de 150W).
- Compatible con cualquier torre compatible con miniITX.
- S.O. soportado y software:
- Compatible con GNU/Linux.
- Puedes usar el compilador GCC para compilar los paquetes de código abierto para RISC-V, aunque ya existen algunos paquetes precompilados.
- Precio: aproximadamente 665$
También existen otros productos de hardware basados en RISC-V, aunque no tan ricos como la placa de SiFive, que es lo más parecido a una placa convencional para PC que podrás encontrar. Otras SBCs y placas de microcontroladores tipo Raspberry Pi y Arduino, son BeagleV, HiFive1 RevB, Seeed Studio Perf-V, SparkFun RED-V RedBoard, LoFive, etc.