Лучшие вопросы
Таймлайн
Чат
Перспективы
RISC-V
Открытая процессорная микроархитектура Из Википедии, свободной энциклопедии
Remove ads
RISC-V — открытый общественный стандарт на правила кодирования машинных команд для компьютерных систем на основе концепции RISC[1]. Используется для разработки системного ПО и создания процессорных архитектур любого назначения, например для центральных микропроцессоров и микроконтроллеров (периферийных процессоров). Стандарты кодирования процессорных инструкций в виде архитектурных описаний RISC-V свободно доступны и бесплатны для изучения и использования в ПО, а также при реализации в вычислительных ядрах непосредственно в кремнии или для конфигурирования ПЛИС. Участие в проектировании системы команд и обсуждении спецификаций архитектурных описаний открытое. Стандарт RISC-V включает специально предусмотренные биты в кодировке команд, предназначенные для развития стандартных расширений и бесконфликтного добавления других процессорных инструкций без ограничения области применения, включая коммерческие и закрытые реализации.
Remove ads
Remove ads
История
Суммиров вкратце
Перспектива
Идея проектирования открытой и расширяемой системы команд для процессоров появилась в 2010 году как продолжение исследований по изучению вычислительных систем в Калифорнийском университете Беркли в США, при непосредственном участии профессора Дэвида Паттерсона[2][3] — обладателя премии Тьюринга и одного из авторов концепций RISC. Руководителем группы разработчиков RISC-V был профессор Крсте Асанович. Нынешние участники процесса развития RISC-V являются добровольцами из многих научных организаций, университетов и коммерческих компаний разных стран мира. В отличие от других академических проектов, сосредоточенных на образовательных целях, RISC-V изначально проектируется для широкого круга компьютерных применений.
В 2015 году для развития, стандартизации и продвижения RISC-V создан международный фонд RISC-V[4] и ассоциация со штаб-квартирой в Цюрихе[5] в Швейцарии. С 2018 года фонд RISC-V работает в партнёрстве с The Linux Foundation[6]. В руководство и технические комитеты входят компании из разных стран, в том числе русские разработчики процессорных ядер Syntacore[7] и CloudBEAR, а также разработчики системного программного обеспечения Альт Линукс и Астра Линукс[8]. В России процессоры с системой команд RISC-V проектируют и выпускают компании Микрон[9], Прогресс[10], Миландр[11], НИИЭТ[12], Союз[13] и другие.
В феврале 2022 года компания Intel объявила[14] об инвестировании в развитие RISC-V одного миллиарда долларов и вошла в состав руководства RISC-V. В сентябре 2022 года в России образован Альянс RISC-V[15][16]. По состоянию на декабрь 2022 года 13 из 25 мест в совете директоров RISC-V занимают китайские компании и организации, ведущую роль из которых занимает Китайская академия наук.
RISC-V добавлен в ядро Linux 5.17 в 2022 году вместе с его инструментальной цепочкой сборки[17]. В Альт Линукс[18] и openSUSE поддержка RISC-V развивается с 2018 года. В 2023 году RISC-V включен в качестве официальной архитектуры дистрибутива Debian Линукс под названием riscv64[19]. Дистрибутивы Линукс Fedora и Gentoo также поддерживает RISC-V в качестве альтернативной архитектуры с 2025 года. ОС из линейки BSD (openBSD, NetBSD, FreeBSD) так же поддерживают порт[20] на RISC-V.
Remove ads
Базовый набор команд
Суммиров вкратце
Перспектива

Спецификация стандарта[21] определяет 32 базовых регистра и 40 кодов машинных инструкций в RV32I или 52 кода в RV64I. Аббревиатура RV32I расшифровывается как RV — RISC-V, 32-разрядная (в RV64I — 64-разрядная), I (от Integer) — кодирование команд с целочисленной арифметикой. Длина машинных инструкций фиксированная — 32 бита.
Основные расширения для дополнения базовых наборов команд:
- M — целочисленное умножение и деление.
- A — атомарные операции с памятью.
- F и D — дополнительные 32 регистра и инструкции для операций с плавающей точкой одинарной (Float) и двойной (Double) точности.
- C — сжатый формат команд длиной 16 бит, кодирование инструкций реализовано как подмножество RV32I/RV64I и предназначено для удвоения плотности упаковки в машинном слове наиболее востребованных стандартных инструкций.
Обозначение RV32IMAC расшифровывается как система команд RISC-V 32-разрядная с расширением M, А и С.
Базовый набор команд RV32Е для встраиваемых систем совпадает по кодированию и набору инструкции с RV32I, но содержит только 16 регистров. Применяется, например, в ядрах простых недорогих микроконтроллеров.
RV128I — планируемый базовый набор для 128-разрядных операций. Предусмотрен стандартом как резерв кодов машинных инструкций под реализацию в будущем.
Наиболее частые в использовании и доказанные в применении комбинации базовых инструкций в комплекте с расширениями стандартизированы в профили:
Remove ads
Архитектурные особенности системы команд
Суммиров вкратце
Перспектива
В базовые наборы входят инструкции условной и безусловной передачи управления/ветвления, минимальный набор целочисленных арифметических/битовых операций на регистрах, операций с памятью (load/store), а также небольшое число служебных инструкций.
Операции ветвления не используют каких-либо общих флагов как результатов ранее выполненных операций сравнения, а непосредственно сравнивают свои регистровые операнды. Для поддержки комплементарных операций операнды меняются местами.
Базовые наборы используют следующий набор регистров: специальный регистр x0 (zero, всегда равный нулю), 31 целочисленный регистр общего назначения (x1 — x31), регистр счётчика команд (PC, доступен только косвенно), а также набор служебных регистров CSR (Control and Status Registers, всего может быть адресовано до 4096 таких регистра).
Для встраиваемых применений может использоваться вариант архитектуры RV32E (Embedded) с сокращённым набором регистров общего назначения (первые 16 — x0-x15). Уменьшение количества регистров позволяет не только экономить аппаратные ресурсы, но и сократить затраты памяти и времени на сохранение/восстановление регистров при переключениях контекста.
При одинаковой кодировке инструкций в RISC-V предусмотрены реализации архитектур с 32-, 64- и 128-битными регистрами общего назначения и операциями (RV32I, RV64I и RV128I, соответственно).
Разрядность регистровых операций всегда соответствует размеру регистра, а одни и те же значения в регистрах могут трактоваться как целые числа как со знаком, так и без знака.
Нет операций над частями регистров, нет каких-либо выделенных «регистровых пар».
Операции не сохраняют где-либо биты переноса или переполнения. Также аппаратно не генерируются исключения по переполнению и по делению на 0. Все необходимые проверки операндов и результатов операций должны производиться программно.
Целочисленная арифметика расширенной точности (большей, чем разрядность регистра) должна явно использовать операции вычисления старших битов результата. Например, для получения старших битов произведения регистра на регистр имеются специальные инструкции.
Размер операнда может отличаться от размера регистра только в операциях с памятью. Транзакции к памяти осуществляются блоками, размер в байтах которых должен быть целой неотрицательной степенью 2, от одного байта до размера регистра включительно. Операнд в памяти должен иметь «естественное выравнивание» (адрес кратен размеру операнда).
Архитектура использует только модель little-endian — первый байт операнда в памяти соответствует младшим битам значений регистрового операнда.
Для пары инструкций сохранения/загрузки регистра операнд в памяти определяется размером регистра выбранной архитектуры, а не кодировкой инструкции (код инструкции один и тот же для RV32I, RV64I и RV128I, но размер операндов 4, 8 и 16 байт соответственно), что соответствует размеру указателя.
Для меньших, чем размер регистра, размеров операндов в памяти, имеются отдельные инструкции загрузки/сохранения младших битов регистра, в том числе для загрузки из памяти в регистр есть парные варианты инструкций, которые позволяют трактовать загружаемое значение как со знаком (старшим знаковым битом значения из памяти заполняются старшие биты регистра) или без знака (старшие биты регистра устанавливаются в 0).
Инструкции базового набора имеют длину 32 бита с выравниванием на границу 32-битного слова, но в общем формате предусмотрены инструкции различной длины (стандартно — от 16 до 192 бит с шагом в 16 бит) с выравниванием на границу 16-битного слова. Полная длина инструкции декодируется унифицированным способом из её первого 16-битного слова.
Операции умножения, деления и вычисления остатка не входят в минимальный набор инструкций, а выделены в отдельное расширение (M — Multiply extension). Имеется ряд доводов в пользу разделения и данного набора на два отдельных (умножение и деление).
Поскольку кодировка базового набора инструкций не зависит от разрядности архитектуры, то один и тот же код потенциально может запускаться на различных RISC-V архитектурах, определять разрядность и другие параметры текущей архитектуры, наличие расширений системы инструкций, а потом автоконфигурироваться для целевой среды выполнения.
Спецификацией RISC-V предусмотрено несколько областей в пространстве кодировок инструкций для пользовательских «X-расширений» архитектуры, которые поддерживаются на уровне ассемблера, как группы инструкций custom0 и custom1.
Наборы базовых команд и расширений
В 32-битных микроконтроллерах и для других встраиваемых применений используется набор RV32EC. В 64-битных процессорах может быть набор групп RV64GC, то же самое в полной записи — RV64IMAFDC.
Форматы машинных команд
Формат 32-битной машинной команды (признаки — младшие биты всегда «11» и 2-4 биты ≠̸ «111»)
Тип | 31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 | 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
Регистр/регистр | funct7 | rs2 | rs1 | funct3 | rd | код операции | 1 | 1 | ||||||||||||||||||||||||
С операндом | ± | imm[10:0] | rs1 | funct3 | rd | код операции | 1 | 1 | ||||||||||||||||||||||||
С длинным операндом | ± | imm[30:12] | rd | код операции | 1 | 1 | ||||||||||||||||||||||||||
Сохранение | ± | imm[10:5] | rs2 | rs1 | funct3 | imm[4:0] | код операции | 1 | 1 | |||||||||||||||||||||||
Ветвление | ± | imm[10:5] | rs2 | rs1 | funct3 | imm[4:1] | [11] | код операции | 1 | 1 | ||||||||||||||||||||||
Переход | ± | imm[10:1] | [11] | imm[19:12] | rd | код операции | 1 | 1 |
- rs1 — номер регистра, в котором находится первый операнд
- rs2 — номер регистра, в котором находится второй операнд
- rd — номер регистра, в который будет записан результат
Регистры
RISC-V имеет 32 (или 16 для встраиваемых применений) целочисленных регистра. При реализации вещественных групп команд есть дополнительно 32 вещественных регистра.
Рассматривается вариант включения в стандарт дополнительного набора из 32 векторных регистров с вариативной длиной обрабатываемых значений, длина которых указывается в CSR vlenb[24].
Для операций над числами в бинарных форматах плавающей запятой используется набор дополнительных 32 регистров FPU (Floating Point Unit), которые совместно используются расширениями базового набора инструкций для трёх вариантов точности: одинарной — 32 бита (F extension), двойной — 64 бита (D — Double precision extension), а также четверной — 128 бит (Q — Quadruple precision extension).
Вызовы подпрограмм, переходы и ветвления
Это пустой раздел, который еще не написан. |
Арифметические и логические наборы команд
Это пустой раздел, который еще не написан. |
Атомарные операции с памятью
Это пустой раздел, который еще не написан. |
Сокращённые команды
Это пустой раздел, который еще не написан. |
Команды для встраиваемых применений
Это пустой раздел, который еще не написан. |
Привилегированные наборы команд
Это пустой раздел, который еще не написан. |
Битовые операции
Это пустой раздел, который еще не написан. |
Компактный набор команд для SIMD
Это пустой раздел, который еще не написан. |
Операции с векторами
Это пустой раздел, который еще не написан. |
Команды для отладки
Это пустой раздел, который еще не написан. |
Remove ads
Реализации
Суммиров вкратце
Перспектива
В рамках проекта создано и опубликовано под свободной лицензией шесть дизайнов микропроцессоров с архитектурой RISC-V: генератор 64-разрядных Rocket (7 октября 2014[25][26]) и пять упрощённых учебных ядер «Sodor» с различными микроархитектурами.
Также опубликовано несколько симуляторов (включая qemu и ANGEL — JavaScript-симулятор, работающий в браузере), компиляторов (LLVM, GCC), вариант ядра Linux для работы на RISC-V и компилятор дизайнов Chisel, который позволяет получать Verilog-код. Также опубликованы верификационные тесты[27].
Некоммерческая организация lowRISC планирует создание системы на кристалле на базе 64-битного ядра Rocket RISC-V с последующим массовым производством чипов[28][29].
На конференции RISC-V Workshop 2017 стало известно, что компания Esperanto Technologies разрабатывает 64-битный высокопроизводительный процессор общего назначения на системе команд RISC-V с гетерогенной архитектурой с высокой степенью параллелизма (напоминающий по строению процессор Cell), который в максимальной конфигурации будет содержать 16 ядер «ET-Maxion» (представляют собой конвейеры с неупорядоченным выполнением команд и работающие с данными с плавающей запятой) и 4096 ядер «ET-Minion» (конвейеры с последовательным выполнением команд и блоком с векторными вычислениями в каждом ядре)[30].
Компания Western Digital заявила, что в партнёрстве с компанией Esperanto она повысит текущий статус процессорной архитектуры RISC-V с уровня микроконтроллеров до уровня высокопроизводительных решений и создаст вычислительную архитектуру нового поколения для обработки «больших данных»[31], а также экосистему быстрого доступа к данным — речь идёт о создании специализированных RISC-V-ядер для построения архитектуры «процессор в памяти» (processor-in-memory)[32].
Популярные и недорогие микроконтроллеры серии ESP32 выпускаются с архитектурой RISC-V, например, серии ESP32-C, ESP32-H и ESP32-P.
Процессорные ядра
Ряд компаний предлагает готовые сложно-функциональные блоки (англ. IP-cores) вычислительных ядер с системой команд RISC-V для проектирования топологии микропроцессоров или использования для прошивки ПЛИС, среди них:
- ECHX1 — компания Western Digital (США),
- Rocket — Калифорнийский университет в Беркли и компания SiFive (США),
- ORCA — компания Vectorblox (Канада),
- PULPino — Высшая техническая школа Цюриха (Швейцария) и Болонский университет (Италия),
- Hummingbird E200 — компания Nuclei System Technology (Китай),
- AndeStar V5 — компания Andes Technology (Тайвань)[33]),
- Shakti — Индийский технологический институт в Мадрасе (Индия),
- BM-310, BI-350, BI-651, BI-671 — компания Клаудбеар (Россия),
- Семейство SCR1-SCR7 компании Синтакор (Россия)[34].
Процессоры
Список серийных процессоров с системой команд RISC-V, выполненных на кремнии в формате системы на кристалле.
Микропроцессоры, выпущенные до 2021 года:
- 2018 — SiFive: Freedom U540 (64 бита, 4+1 ядро, 1,5 ГГц, 28 нм)[35][36][37][38]
- 2019 — Alibaba: XuanTie 910 (64 бита, 16 ядер, нейроускоритель, 2,5 ГГц, 12 нм)[39][40][41][42]
- 2020 — SiFive: Freedom U740 (64 бита, 4+1 ядро, PCIe 3, DDR4 ECC, Ethernet 1G, QSPI, 1,5 ГГц) Архивная копия от 26 ноября 2020 на Wayback Machine Архивная копия от 29 октября 2020 на Wayback Machine
Микропроцессоры, выпущенные в 2017—2019 годах:
- Western Digital: SweRV Core (32 бита, 2 ядра, 1,8 ГГц, 28 нм)[43][44]
- SiFive: FE310 (32 бита, 1 ядро, 870 МГц — 28 нм, 370 МГц — 55 нм)[35][36]
- Kendryte: K210 (64 бита, 2 ядра + нейроускоритель, 600 МГц, 28 нм, 500 мВт)[45][46][47]
- GreenWaves: GAP8 (32 бита, 8+1 ядро + нейроускоритель, 250 МГц, 55 нм, 100 мВт)[48]
- NXP: RV32M1 (32 бита, 2 гибридных ядра ARM-M4F/RISC-V + ARM-M0+/RISC-V, 48-72 МГц)[49]
- WCH: CH572 (60 МГц, корпус QFN28)[50] контроллер BLE + Zigbee + USB + Ethernet + Touchkey
- HUAMI: MHS001 Huangshan № 1 (4 ядра, нейроускоритель, 55 нм, 240 МГц)[51] энергоэффективный процессор для носимых устройств и IoT
- GigaDevice: GD32VF103 (1 ядро, 32 бита, 108 МГц, ОЗУ до 32 кБ, ПЗУ до 128 кБ)[52][53] микроконтроллер (не путать с семейством GD32F103).
- FADU: Annapurna FC3081/FC3082 (64 бита, многоядерный, 7 нм, 1,7 Вт)[54][55][56] контроллер для NVMe SSD
- BitMain: Sophon Edge TPU BM1880 (64 бита, 1 ядро RV64GC 1 ГГц + 2 ядра ARM A53 1,5 ГГц, 2,5 Вт) нейроускоритель 1 TOPS на INT8 для IoT и краевых вычислений[57][58]
- Текон: Дружба (32 бита, 1 ядро, 250 МГц, 28 нм, 0,5 Вт)[59][60]
Микропроцессоры, выпущенные в 2020 году:
- ONiO: ONiO.zero (16/32 бита, 1 кБ ПЗУ, 2 кБ ОЗУ, 8/16/32 кБ ППЗУ, 1-24 МГц, 0,36-1,44 Вт, встроенный радиоэлектро генератор на 800/900/1800/1900/2400 МГц) BLE, 802.15.4 UWB[61][62]
- WCH: CH32V103 (32 бита, 10/20КБ ОЗУ, 32/64 КБ ППЗУ, до 80 МГц, корпуса LQFP48, QFN48 или LQFP64)[63] универсальный контроллер с USB 2.0, SPI, I2C, GPIO, USART, TouchKey, RTC, TIM, ADC
- Миландр: К1986ВК025 (32-битное ядро BМ-310S CloudBEAR, ОЗУ 112 Кбайт, ППЗУ 256+8 Кбайт, ПЗУ 16 Кбайт, 60 МГц, 90 нм фабрика TSMC, 7 каналов 24-битных метрологических АЦП, сопроцессоров для шифров «Кузнечик», «Магма» и AES, корпус QFN88 10 х 10 мм)
- Espressif: ESP32-C3 (32-битное ядро RV32IMC, 400 Кбайт SRAM, 384 Кбайт ПЗУ, 160 МГц, Wi-Fi, Bluetooth LE 5.0, по контактам совместим с ESP8266)[64]
- Bouffalo Lab: BL602 и BL604 (32-битный, динамическая частота от 1 МГц до 192 МГц, 276 КБ SRAM, 128 КБ ПЗУ, Wi-Fi, Bluetooth LE)[65]
- Cmsemicon: ANT32RV56xx (ядро RV32EC, 48 МГц, 32+8 Кбайт SRAM, 64 Кбайт)[66]
Микропроцессоры, выпущенные в 2021 году:
- Микрон (Россия): MIK32 (32-битное RV32IMC ядро SCR1 Syntacore, 1-32 МГц, фабрика Микрон, ОЗУ 16 КБ, ППЗУ 8 КБ, 64 входа/выхода, АЦП 12 бит 8 каналов до 1 МГц;, ЦАП 12 бит 4 канала до 1 МГц, криптография ГОСТ Р 34.12-2015 «Магма», «Кузнечик» и AES 128). Технологические нормы 180 нм.[67][68]
- Переход ESP32 на чипы с RISC-V ядрами (ESP32-C и ESP32-H), в 2022 году компания Espressif Systems сообщила о переходе всех своих линеек чипов на архитектуру RISC-V[69]
Remove ads
См. также
- xv6 — учебная операционная система, разработанная в Массачусетском технологическом институте, поддерживающая архитектуру RISC-V
- ARM — семейство лицензируемых 32-битных и 64-битных микропроцессорных ядер разработки компании ARM Limited
- OpenPOWER — коллаборация вокруг архитектуры IBM Power, основанная в 2013 году IBM, Google, Mellanox, NVIDIA
- OpenSPARC — свободная (GPL) реализация архитектуры SPARC V9 от 2005 года
- OpenRISC — свободная архитектура 2000 года с GPL-реализацией or1k
- LEON — свободные реализации (GPL, LGPL) архитектуры SPARC V8, появившиеся в 1997 году
- MIPS (MIPS Open) — наборы команд и архитектура, имеющие свободную лицензию на некоторые наборы команд с конца 2018 до конца 2019 года[70]
Remove ads
Примечания
Литература
Ссылки
Wikiwand - on
Seamless Wikipedia browsing. On steroids.
Remove ads