OpenRISC es un proyecto para desarrollar una serie de unidades centrales de procesamiento (CPU) basadas en hardware de código abierto según los principios establecidos de computación con conjunto de instrucciones reducido (RISC). Incluye una arquitectura de conjunto de instrucciones (ISA) que utiliza una licencia de código abierto . Es el proyecto insignia original de la comunidad OpenCores .
La primera descripción arquitectónica (y hasta 2019 [actualizar], la única) es para OpenRISC 1000 ("OR1k"), que describe una familia de procesadores de 32 y 64 bits con soporte opcional para aritmética de punto flotante y procesamiento vectorial . [4]
La implementación OpenRISC 1200 de esta especificación fue diseñada por Damjan Lampret en 2000, escrita en el lenguaje de descripción de hardware Verilog (HDL). [5]
La implementación posterior mor1kx, que tiene algunas ventajas en comparación con OR 1200, [6] fue diseñada por Julius Baxter y también está escrita en Verilog.
Además, existen simuladores de software [7] que implementan la especificación OR1k.
El diseño del hardware se publicó bajo la Licencia Pública General Reducida GNU (LGPL), mientras que los modelos y el firmware se publicaron bajo la Licencia Pública General GNU (GPL).
Se desarrolló una implementación de un sistema de referencia en un chip (SoC) basado en OpenRISC 1200, denominado Sistema en chip de plataforma de referencia OpenRISC (ORPSoC). Varios grupos han demostrado que ORPSoC y otros diseños basados en OR1200 funcionan en matrices de puertas programables en campo (FPGAs), [8] [9] y se han producido varios derivados comerciales.
Los diseños de SoC posteriores, también basados en una implementación de CPU OpenRisc 1000, son minSoC, OpTiMSoC y MiSoC. [10]
El conjunto de instrucciones es una arquitectura RISC tradicional razonablemente simple que recuerda a MIPS y utiliza una arquitectura de carga y almacenamiento de 3 operandos, con 16 o 32 registros de propósito general y una longitud de instrucción fija de 32 bits. El conjunto de instrucciones es prácticamente idéntico entre las versiones de 32 y 64 bits de la especificación, siendo la principal diferencia el ancho de los registros (32 o 64 bits) y el diseño de la tabla de páginas. La especificación OpenRISC incluye todas las características comunes a los procesadores de escritorio y servidor modernos: un modo supervisor y un sistema de memoria virtual, control opcional de lectura, escritura y ejecución para páginas de memoria e instrucciones para la sincronización y el manejo de interrupciones entre varios procesadores.
Otra característica notable es un rico conjunto de instrucciones SIMD ( instrucción única, datos múltiples ) destinadas al procesamiento de señales digitales .
La mayoría de las implementaciones se realizan en matrices de puertas programables en campo (FPGAs), que brindan la posibilidad de iterar sobre el diseño a costa del rendimiento.
En 2018, OpenRISC 1000 se consideró estable, por lo que ORSoC (propietario de OpenCores) comenzó un proyecto de financiación colectiva para construir un circuito integrado específico para aplicaciones (ASIC) rentable para obtener un mejor rendimiento. ORSoC enfrentó críticas por esto de parte de la comunidad. [ cita requerida ] El proyecto no alcanzó la meta.
Hasta mayo de 2024 [actualizar], no se había producido ningún ASIC de código abierto.
Varias organizaciones comerciales han desarrollado derivados de la arquitectura OpenRISC 1000, incluyendo el ORC32-1208 de ORSoC y el BA12, BA14 y BA22 de Beyond Semiconductor. Dynalith Systems proporciona la placa de prototipos FPGA iNCITE , que puede ejecutar tanto OpenRISC 1000 como BA12. Flextronics (Flex) y Jennic Limited fabricaron el OpenRISC como parte de un circuito integrado específico de la aplicación (ASIC). Samsung utiliza el OpenRISC 1000 en sus sistemas en chips DTV (SDP83 B-Series, SDP92 C-Series, SDP1001/SDP1002 D-Series, SDP1103/SDP1106 E-Series). [11] Se informa que Allwinner Technology utiliza un núcleo OpenRISC en su controlador de potencia AR100, que forma parte del SoC A31 basado en ARM. [12]
Cadence Design Systems ha comenzado a utilizar OpenRISC como arquitectura de referencia para documentar los flujos de la cadena de herramientas (por ejemplo, el flujo de referencia UVM, ahora aportado a Accellera ). [13]
TechEdSat , la primera computadora Linux basada en la arquitectura OpenRISC de la NASA , se lanzó en julio de 2012 y se implementó en octubre de 2012 en la Estación Espacial Internacional con hardware proporcionado, construido y probado por ÅAC Microtec y ÅAC Microtec North America. [14] [15] [16]
Al ser de código abierto, OpenRISC ha demostrado ser popular en círculos académicos y de aficionados. Por ejemplo, Stefan Wallentowitz [17] y su equipo en el Instituto de Sistemas Integrados de la Technische Universität München han utilizado OpenRISC en la investigación sobre arquitecturas de procesadores multinúcleo . [18] El Open Source Hardware User Group (OSHUG) en el Reino Unido ha realizado en dos ocasiones [19] [20] sesiones sobre OpenRISC, mientras que el aficionado Sven-Åke Andersson ha escrito un blog completo sobre OpenRISC para principiantes, [21] que atrajo el interés de Electronic Engineering Times ( EE Times ). [22] Sebastian Macke ha implementado jor1k, un emulador de OpenRISC 1000 en JavaScript , que ejecuta Linux con soporte para X Window System y Wayland . [23]
La comunidad OpenRISC ha portado la cadena de herramientas GNU a OpenRISC para soportar el desarrollo en los lenguajes de programación C y C++ . Utilizando esta cadena de herramientas, las bibliotecas newlib , uClibc , musl (a partir de la versión 1.1.4) y glibc han sido trasladadas al procesador. Dynalith proporciona OpenIDEA, un entorno de desarrollo integrado (IDE) gráfico basado en esta cadena de herramientas. A principios de 2012 se inició un proyecto para trasladar LLVM a la arquitectura OpenRISC 1000. [24]
GCC 9 lanzado con soporte OpenRISC. [25]
El proyecto OR1K ofrece un simulador de conjunto de instrucciones , or1ksim. La implementación principal, OR1200, es un modelo de nivel de transferencia de registros (RTL) en Verilog HDL, a partir del cual se puede construir un modelo de precisión de ciclo basado en SystemC en ORPSoC. También está disponible un modelo de alta velocidad de OpenRISC 1200 a través de la iniciativa Open Virtual Platforms (OVP) (consulte OVPsim ), creada por Imperas.
El núcleo principal de Linux obtuvo soporte para OpenRISC en la versión 3.1. [26] La implementación fusionada en esta versión es la familia OpenRISC 1000 de 32 bits (or1k). [27] Anteriormente arquitectura OpenRISC 1000, ha sido reemplazada por el puerto principal.
Varios sistemas operativos en tiempo real (RTOS) se han portado a OpenRISC, incluidos NuttX , RTEMS , FreeRTOS y eCos .
Desde la versión 1.2, QEMU admite la emulación de plataformas OpenRISC. [28]