Введение
OpenRISC — это проект по разработке серии центральных процессоров (CPU) с открытым исходным кодом, основанных на устоявшихся принципах компьютеров с упрощенным набором команд (RISC). Он включает в себя архитектуру набора команд (ISA) с использованием лицензии открытого исходного кода. Это оригинальный флагманский проект сообщества OpenCores. Первое (и по состоянию на 2019 год единственное) архитектурное описание относится к OpenRISC 1000 ("OR1k"), описывающему семейство 32-битных и 64-битных процессоров с опциональной поддержкой арифметики с плавающей точкой и векторной обработки. Реализация OpenRISC 1200 данной спецификации была разработана Дамьяном Лампретом в 2000 году и написана на языке описания аппаратуры Verilog (HDL). Более поздняя реализация mor1kx, обладающая некоторыми преимуществами по сравнению с OR1200, была разработана Джулиусом Бакстером и также написана на Verilog. Кроме того, существуют программные эмуляторы, реализующие спецификацию OR1k. Аппаратная часть была выпущена под лицензией GNU Lesser General Public License (LGPL), а модели и прошивка — под GNU General Public License (GPL). Была разработана эталонная система на кристалле (SoC) на основе OpenRISC 1200, получившая название OpenRISC Reference Platform System on Chip (ORPSoC). Несколько групп продемонстрировали ORPSoC и другие разработки на базе OR1200, работающие на программируемых вентильных матрицах (FPGA), и было создано несколько коммерческих производных. Более поздние разработки SoC, также основанные на реализации процессора OpenRISC 1000, включают minSoC, OpTiMSoC и MiSoC.
Набор инструкций
Набор инструкций представляет собой достаточно простую традиционную RISC-архитектуру, напоминающую MIPS, использующую архитектуру «загрузить-сохранить» с тремя операндами, с 16 или 32 регистрами общего назначения и фиксированной 32-битной длиной инструкции. Набор инструкций в основном идентичен в 32- и 64-битных версиях спецификации, основным различием является ширина регистров (32 или 64 бита) и структура таблицы страниц. Спецификация OpenRISC включает в себя все функции, характерные для современных настольных и серверных процессоров: режим супервизора и систему виртуальной памяти, необязательный контроль чтения, записи и выполнения для страниц памяти, а также инструкции для синхронизации и обработки прерываний между несколькими процессорами. Еще одной заметной особенностью является богатый набор инструкций SIMD (Single Instruction, Multiple Data), предназначенных для цифровой обработки сигналов.
Реализация
Большинство реализаций выполняются на программируемых логических интегральных схемах (FPGA), что позволяет итеративно улучшать конструкцию, но с потерей производительности. К 2018 году OpenRISC 1000 был признан стабильным, поэтому ORSoC (владелец OpenCores) запустил краудфандинговый проект для создания экономически эффективной специализированной интегральной схемы (ASIC) с целью повышения производительности. ORSoC столкнулся с критикой со стороны сообщества. Проект не достиг поставленной цели. По состоянию на 2024 год ни одна специализированная интегральная схема с открытым исходным кодом не была произведена.
Коммерческие реализации
Несколько коммерческих организаций разработали производные архитектуры OpenRISC 1000, включая ORC32 1208 от ORSoC и BA12, BA14 и BA22 от Beyond Semiconductor. Dynalith Systems предоставляет плату прототипирования iNCITE FPGA, которая может работать как с OpenRISC 1000, так и с BA12. Flextronics (Flex) и Jennic Limited производили OpenRISC в составе прикладной специализированной интегральной схемы (ASIC). Samsung использует OpenRISC 1000 в своих системах DTV на чипе (SDP83 серии B, SDP92 серии C, SDP1001/SDP1002 серии D, SDP1103/SDP1106 серии E). Allwinner Technology, по сообщениям, использует ядро OpenRISC в своем контроллере питания AR100, который является частью SoC на базе ARM A31. Cadence Design Systems начала использовать OpenRISC в качестве эталонной архитектуры при документировании цепочек потоков разработки инструментов (например, эталонного потока UVM, который теперь передается в Accellera). TechEdSat, первый компьютер на базе Linux с архитектурой OpenRISC, разработанной NASA, был запущен в июле 2012 года и развернут в октябре 2012 года на Международной космической станции. Оборудование было предоставлено, собрано и протестировано компаниями ÅAC Microtec и ÅAC Microtec North America.
Академическое и некоммерческое использование
Будучи проектом с открытым исходным кодом, OpenRISC завоевал популярность в академической среде и среди любителей. Например, Стефан Валлентовиц и его команда из Института интегрированных систем Технического университета Мюнхена использовали OpenRISC в исследованиях архитектур многоядерных процессоров. Группа пользователей открытого аппаратного обеспечения (OSHUG) в Великобритании дважды проводила семинары, посвященные OpenRISC, а энтузиаст Свен Оке Андерссон написал подробный блог о OpenRISC для начинающих, который привлек внимание издания Electronic Engineering Times (EE Times). Себастьян Макке разработал jor1k – эмулятор OpenRISC 1000 на JavaScript, способный запускать Linux с поддержкой X Window System и Wayland.
Поддержка цепочки инструментов
Сообщество OpenRISC портировало цепочку инструментов GNU на OpenRISC для поддержки разработки на языках программирования C и C++. С использованием этой цепочки инструментов библиотеки newlib, uClibc, musl (начиная с выпуска 1.1.4) и glibc были портированы на процессор. Dynalith предоставляет OpenIDEA — графическую интегрированную среду разработки (IDE), основанную на этой цепочке инструментов. Проект по портированию LLVM на архитектуру OpenRISC 1000 начался в начале 2012 года. GCC 9 был выпущен с поддержкой OpenRISC. Проект OR1K предоставляет симулятор набора команд, or1ksim. Основная реализация, OR1200, представляет собой модель на уровне передачи регистров (RTL), написанную на Verilog HDL, из которой можно построить модель, точную по тактам, на основе SystemC в ORPSoC. Высокоскоростная модель OpenRISC 1200 также доступна в рамках инициативы Open Virtual Platforms (OVP) (см. OVPsim), разработанной Imperas.
Поддержка Linux
Основное ядро Linux получило поддержку OpenRISC в версии 3.1. Реализация, включенная в этот релиз, – это 32-битное семейство OpenRISC 1000 (or1k). Ранее существовавшая архитектура OpenRISC 1000 уступила место основной версии порта.
Поддержка RTOS
Несколько операционных систем реального времени (RTOS), таких как NuttX, RTEMS, FreeRTOS и eCos, были портированы на OpenRISC.
Поддержка QEMU
С версии 1.2 QEMU поддерживает эмуляцию платформ OpenRISC.