# OpenRISC

OpenRISC ist ein Projekt der OpenCores-Entwickler-Community. Das Ziel des Projekts ist die Entwicklung einer hochkonfigurierbaren RISC-CPU als Open Hardware. Die bisher einzige fertiggestellte Architektur ist die OpenRISC-1000-Familie (kurz OR1k), die als 32- und 64-Bit-Version verfügbar ist. Das Design des OpenRISC 1200 (kurz OR1200) war das erste, das in der Hardwarebeschreibungssprache Verilog unter der GNU Lesser General Public License (GNU LGPL) veröffentlicht wurde. Die Firmware und der Microcode zum Prozessor wurden unter der GNU General Public License (GNU GPL) bereitgestellt. Basierend auf dem OpenRISC 1200 wurde eine System-on-a-Chip-Variante mit der Bezeichnung ORPSoC (= OpenRISC Reference Platform System-on-Chip) entwickelt. Auf beiden Varianten wurde der Betrieb eines Linux-Systems erfolgreich getestet. Dazu wurden die Prozessoren in einem FPGA implementiert.

## Aufbau

Das Design des OpenRISC 1000 entspricht einer schlanken Umsetzung von modernen RISC-Architekturen mit 16 oder 32 Registern und einer fixen Instruktionslänge von 32 Bit. Die 32- und 64-Bit-Version verwenden den gleichen Befehlssatz. Das Design enthält alle Funktionen, die von heutigen Desktop- oder Server-Prozessoren erwartet werden. Dazu gehören beispielsweise: Virtuelle Speicherverwaltung, eine Secure Virtual Machine, MAC, eine SIMD-Implementierung oder der Mehrprozessorsystem-Betrieb. Die Cachegröße ist skalierbar zwischen 1 und 64 KiB.

## Anwendungen

Die meisten Anwendungen wurden bisher auf einem FPGA realisiert. Anfang 2011 erließ OpenCores einen Spendenaufruf um zum ersten Mal einen OpenRISC 1200 in ASIC-Technik zu produzieren. Obwohl das OpenRISC-1000-Design als stabil gilt, wird momentan noch die Rechenleistung und der Energieverbrauch verbessert, weshalb bis September 2012 kein ASIC-Chip produziert wurde.
Außer den Bemühungen von OpenCores, einen vollständig freien Chip herzustellen, gibt es kommerzielle Implementierungen. Einige Firmen verwendeten das OpenRISC-1200- oder ORPSoC-Design als Grundlage für ihre eigenen Entwicklungen. Folgende Prozessoren wurden auf der Grundlage von OpenRISC 1000 entwickelt:
* BA12, BA14, BA22 von Beyond Semiconductor basieren direkt auf dem OpenRISC 1200.
* Der OpenRISC 1200 ist eine Funktionseinheit auf komplexeren ASIC von Flextronics International und Jennic Limited.
* Samsung verwendet ORPSoC in den Chip-Serien: SDP83 B, SDP92 C, SDP1001/SDP1002 D, und SDP1103/SDP1106 E. Dies Chips dienen als CPU in DTV-Geräten.
* Cadence Design Systems benutzt OpenRISC als Referenzimplementierung in ihren Dokumentationen.
* Am 21. Juli 2012 startete die NASA einen TechEdSat genannten Satelliten mit einem auf OpenRISC 1200 basierenden Bordcomputer.

## Akademische Verwertung

Da bei OpenRISC aufgrund des Open-Source-Ansatzes alle Details bekannt sind, eignet sich die Architektur gut für Ausbildung, Forschung und Hobbyentwickler. Folgende nichtkommerzielle Anwendungen sind deshalb bekannt:
* Ein Team am Institute for Integrated Systems an der Technischen Universität München erforscht auf den Grundlagen von OpenRISC die Architektur und Programmierung von Mehrprozessorsystemen.
* Die britische Open Source Hardware User Group führt Veranstaltungen durch, bei denen die FPGA-Programmierung anhand von OpenRISC erlernt oder vertieft wird.

## Betriebssysteme und Toolchain

Neben Linux sind RTEMS, FreeRTOS und eCos auf der OpenRISC-1000-Architektur lauffähig. Der or32 genannte Port wurde mit Version 3.1 des Linux-Kernels in den Hauptentwicklungszweig aufgenommen und gilt somit als stabil. Eine µClinux-Portierung ist ebenfalls verfügbar, wird aber momentan nicht weiterentwickelt. Neben der GNU Toolchain wurde auch newlib, uClibc und BusyBox für OpenRISC 1000 portiert. Eine Portierung von LLVM befindet sich in der Entwicklung.

## Emulatoren

Das OpenRISC-Projekt stellt einen Befehlssatz-Simulator zur Verfügung, welcher auf SystemC basiert und direkt auf die, in der Hardwarebeschreibungssprache Verilog vorliegenden, Prozessorquellen zurückgreift. Die folgenden virtuelle Maschinen können ein OpenRISC-1000-System emulieren:
* QEMU
* OVPsim
* jor1k (Implementierung in JavaScript)