OpenRISC es un proyecto para desarrollar una serie de unidades de procesamiento central (CPU) basadas en hardware de código abierto según los principios establecidos de computadora con conjunto de instrucciones reducido (RISC). Incluye una arquitectura de conjunto de instrucciones (ISA) utilizando una licencia de código abierto . Es el proyecto insignia original de la comunidad OpenCores .
La primera descripción arquitectónica (y solo a partir de 2019 [actualizar]) es para OpenRISC 1000 ("OR1k"), y describe una familia de procesadores de 32 y 64 bits con soporte opcional de procesamiento vectorial y aritmética de punto flotante . [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 (HDL) Verilog . [5]
La implementación posterior de mor1kx, que tiene algunas ventajas en comparación con el 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 (LGPL) de GNU, mientras que los modelos y el firmware se publicaron bajo la Licencia pública general GNU (GPL).
Se desarrolló una implementación de sistema de referencia en un chip (SoC) basada en OpenRISC 1200, denominada OpenRISC Reference Platform System-on-Chip (ORPSoC). Varios grupos han demostrado ORPSoC y otros diseños basados en OR1200 que se ejecutan en conjuntos de puertas programables en campo (FPGA), [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 almacenamiento de carga 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 del registro (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 servidores 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 sincronizar y manejar interrupciones entre múltiples procesadores.
Otra característica notable es un rico conjunto de instrucciones de instrucción única y datos múltiples ( SIMD ) destinadas al procesamiento de señales digitales .
La mayoría de las implementaciones se realizan en conjuntos de puertas programables en campo (FPGA), que brindan la posibilidad de iterar el diseño a costa del rendimiento.
En 2018, OpenRISC 1000 se consideraba estable, por lo que ORSoC (propietario de OpenCores) comenzó un proyecto de financiación colectiva para construir un circuito integrado de aplicación específica (ASIC) rentable para obtener un rendimiento mejorado. ORSoC enfrentó críticas por esto por parte de la comunidad. [ cita necesaria ] El proyecto no alcanzó la meta.
En julio de 2022 [actualizar], no se había producido ningún ASIC de código abierto.
Varias organizaciones comerciales han desarrollado derivados de la arquitectura OpenRISC 1000, incluido el ORC32-1208 de ORSoC y el BA12, BA14 y BA22 de Beyond Semiconductor. Dynalith Systems proporciona la placa de creación de prototipos FPGA iNCITE , que puede ejecutar tanto OpenRISC 1000 como BA12. Flextronics (Flex) y Jennic Limited fabricaron OpenRISC como parte de un circuito integrado de aplicación específica (ASIC). Samsung utiliza OpenRISC 1000 en su sistema en chips DTV (SDP83 Serie B, SDP92 Serie C, SDP1001/SDP1002 Serie D, SDP1103/SDP1106 Serie E). [11] Se informa que Allwinner Technology utiliza un núcleo OpenRISC en su controlador de energía AR100, que forma parte del SoC basado en ARM A31. [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 contribuido a Accellera ). [13]
TechEdSat , la primera computadora Linux basada en 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 los 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 de arquitecturas de procesadores multinúcleo . [18] El Grupo de Usuarios de Hardware de Código Abierto (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 OpenRISC 1000 en JavaScript , ejecutando Linux con sistema X Window y soporte Wayland . [23]
La comunidad OpenRISC ha portado la cadena de herramientas GNU a OpenRISC para respaldar el desarrollo en los lenguajes de programación C y C++ . Usando esta cadena de herramientas, las bibliotecas newlib , uClibc , musl (a partir de la versión 1.1.4) y glibc se han portado al procesador. Dynalith proporciona OpenIDEA, un entorno de desarrollo gráfico integrado (IDE) basado en esta cadena de herramientas. A principios de 2012 comenzó un proyecto para portar LLVM a la arquitectura OpenRISC 1000. [24]
GCC 9 lanzado con soporte OpenRISC. [25]
El proyecto OR1K proporciona un simulador de conjunto de instrucciones , or1ksim. La implementación emblemática, el OR1200, es un modelo de nivel de transferencia de registros (RTL) en Verilog HDL, a partir del cual se puede construir en ORPSoC un modelo con precisión de ciclo basado en SystemC . Un modelo de alta velocidad del OpenRISC 1200 también está disponible a través de la iniciativa Open Virtual Platforms (OVP) (ver OVPsim ), creada por Imperas.
El kernel 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 (o 1k). [27] Anteriormente arquitectura OpenRISC 1000, ha sido reemplazada por el puerto principal.
Se han portado varios sistemas operativos en tiempo real (RTOS) a OpenRISC, incluidos NuttX , RTEMS , FreeRTOS y eCos .
Desde la versión 1.2, QEMU admite la emulación de plataformas OpenRISC. [28]