RISC-V
RISC-V (читается, как «РИСК-Пять»[1]) — расширяемая открытая и свободная система команд и процессорная архитектура на основе концепции RISC[2], предназначенная для создания процессоров/микроконтроллеров и разработки ПО. Спецификации архитектурных описаний RISC-V свободно доступны и бесплатны для любого использования, включая коммерческие реализации непосредственно в кремнии или для конфигурирования ПЛИС. Участие в проектировании и обсуждении спецификаций архитектурных описаний открытое. Система команд имеет зарезервированные в спецификации биты для кодирования расширений без ограничения области применения. ИсторияИдея RISC-V появилась в 2010 году как продолжение исследований по проектированию вычислительных систем в Калифорнийском университете Беркли в США, при непосредственном участии Дэвида Паттерсона[3][4] — одного из авторов и сторонников применения концепции RISC. Нынешние участники процесса развития RISC-V являются добровольцами из многих научных организаций, университетов и компаний разных стран. В отличие от других академических проектов, сосредоточенных на образовательных целях, RISC-V изначально проектируется для широкого круга компьютерных применений. В 2015 году для развития, стандартизации и продвижения RISC-V создан международный фонд RISC-V[5] и ассоциация со штаб-квартирой в Цюрихе[6] в Швейцарии. С 2018 года фонд RISC-V работает в партнёрстве с The Linux Foundation[7]. В руководство и технические комитеты входят компании из разных стран, в том числе два российских разработчика процессорных ядер — Syntacore[8] и CloudBEAR, а также два разработчика системного программного обеспечения — Альт Линукс и Астра Линукс[9]. В феврале 2022 года компания Intel объявила[10] об инвестировании в развитие RISC-V одного миллиарда долларов и вошла в состав руководства RISC-V. В сентябре 2022 года в России образован Альянс RISC-V[11][12]. По состоянию на декабрь 2022 года 13 из 25 мест в совете директоров RISC-V занимают китайские компании и организации, ведущую роль из которых занимает Китайская академия наук. Базовая спецификация «RV32I»Базовая спецификация RV32I (RV — RISC-V, 32-разрядная, I означает Integer — целочисленную арифметику), содержит набор из 32 регистров и включает 39 инструкций. Используется 6 типов кодирования инструкций (форматов). Базовые расширения:
Базовый набор RV32Е для встраиваемых систем совпадает по кодированию и набору инструкции с RV32I, но содержит только 16 регистров. Применяется, например, в недорогих микроконтроллерах. Система командВ архитектуре RISC-V имеется обязательное для реализации небольшое подмножество команд (набор инструкций I — Integer) и несколько стандартных опциональных расширений. В базовый набор входят инструкции условной и безусловной передачи управления/ветвления, минимальный набор арифметических/битовых операций на регистрах, операций с памятью (load/store), а также небольшое число служебных инструкций. Операции ветвления не используют каких-либо общих флагов как результатов ранее выполненных операций сравнения, а непосредственно сравнивают свои регистровые операнды. Базис операций сравнения минимален, а для поддержки комплементарных операций операнды просто меняются местами. Базовое подмножество команд использует следующий набор регистров: специальный регистр x0 (zero), 31 целочисленный регистр общего назначения (x1 — x31), регистр счётчика команд (PC, используется только косвенно), а также множество CSR (Control and Status Registers, может быть адресовано до 4096 CSR). Для встраиваемых применений может использоваться вариант архитектуры RV32E (Embedded) с сокращённым набором регистров общего назначения (первые 16). Уменьшение количества регистров позволяет не только экономить аппаратные ресурсы, но и сократить затраты памяти и времени на сохранение/восстановление регистров при переключениях контекста. При одинаковой кодировке инструкций в RISC-V предусмотрены реализации архитектур с 32-, 64- и 128-битными регистрами общего назначения и операциями (RV32I, RV64I и RV128I, соответственно). Разрядность регистровых операций всегда соответствует размеру регистра, а одни и те же значения в регистрах могут трактоваться как целые числа как со знаком, так и без знака. Нет операций над частями регистров, нет каких-либо выделенных «регистровых пар». Операции не сохраняют где-либо биты переноса или переполнения, что приближено к модели операций в языке программирования Си. Также аппаратно не генерируются исключения по переполнению и даже по делению на 0. Все необходимые проверки операндов и результатов операций должны производиться программно. Целочисленная арифметика расширенной точности (большей, чем разрядность регистра) должна явно использовать операции вычисления старших битов результата. Например, для получения старших битов произведения регистра на регистр имеются специальные инструкции. Размер операнда может отличаться от размера регистра только в операциях с памятью. Транзакции к памяти осуществляются блоками, размер в байтах которых должен быть целой неотрицательной степенью 2, от одного байта до размера регистра включительно. Операнд в памяти должен иметь «естественное выравнивание» (адрес кратен размеру операнда). Архитектура использует только модель little-endian — первый байт операнда в памяти соответствует младшим битам значений регистрового операнда. Для пары инструкций сохранения/загрузки регистра операнд в памяти определяется размером регистра выбранной архитектуры, а не кодировкой инструкции (код инструкции один и тот же для RV32I, RV64I и RV128I, но размер операндов 4, 8 и 16 байт соответственно), что соответствует размеру указателя, типам языка программирования C size_t или разности указателей. Для всех допустимых размеров операндов в памяти, меньших, чем размер регистра, имеются отдельные инструкции загрузки/сохранения младших битов регистра, в том числе для загрузки из памяти в регистр есть парные варианты инструкций, которые позволяют трактовать загружаемое значение как со знаком (старшим знаковым битом значения из памяти заполняются старшие биты регистра) или без знака (старшие биты регистра устанавливаются в 0). Инструкции базового набора имеют длину 32 бита с выравниванием на границу 32-битного слова, но в общем формате предусмотрены инструкции различной длины (стандартно — от 16 до 192 бит с шагом в 16 бит) с выравниванием на границу 16-битного слова. Полная длина инструкции декодируется унифицированным способом из её первого 16-битного слова. Для наиболее часто используемых инструкций стандартизовано применение их аналогов в более компактной 16-битной кодировке (C — Compressed extension). Операции умножения, деления и вычисления остатка не входят в минимальный набор инструкций, а выделены в отдельное расширение (M — Multiply extension). Имеется ряд доводов в пользу разделения и данного набора на два отдельных (умножение и деление). Стандартизован отдельный набор атомарных операций (A — Atomic extension). Поскольку кодировка базового набора инструкций не зависит от разрядности архитектуры, то один и тот же код потенциально может запускаться на различных RISC-V архитектурах, определять разрядность и другие параметры текущей архитектуры, наличие расширений системы инструкций, а потом автоконфигурироваться для целевой среды выполнения. Спецификацией RISC-V предусмотрено несколько областей в пространстве кодировок инструкций для пользовательских «X-расширений» архитектуры, которые поддерживаются на уровне ассемблера, как группы инструкций custom0 и custom1. Список наборов команд
В 32-битных микроконтроллерах и для других встраиваемых применений используется набор RV32EC. В 64-битных процессорах может быть набор групп RV64GC, то же самое в полной записи — RV64IMAFDC. Форматы машинных командФормат 32-битной машинной команды (признаки — младшие биты всегда «11» и 2-4 биты ≠̸ «111»)
РегистрыRISC-V имеет 32 (или 16 для встраиваемых применений) целочисленных регистра. При реализации вещественных групп команд есть дополнительно 32 вещественных регистра. Рассматривается вариант включения в стандарт дополнительного набора из 32 векторных регистров с вариативной длиной обрабатываемых значений, длина которых указывается в CSR vlenb[13]. Для операций над числами в бинарных форматах плавающей запятой используется набор дополнительных 32 регистров FPU (Floating Point Unit), которые совместно используются расширениями базового набора инструкций для трёх вариантов точности: одинарной — 32 бита (F extension), двойной — 64 бита (D — Double precision extension), а также четверной — 128 бит (Q — Quadruple precision extension).
Вызовы подпрограмм, переходы и ветвления
Арифметические и логические наборы команд
Атомарные операции с памятью
Сокращённые команды
Команды для встраиваемых применений
Привилегированные наборы команд
Битовые операции
Компактный набор команд для SIMD
Операции с векторами
Команды для отладки
РеализацииВ рамках проекта создано и опубликовано под свободной лицензией шесть дизайнов микропроцессоров с архитектурой RISC-V: генератор 64-разрядных Rocket (7 октября 2014[14][15]) и пять упрощённых учебных ядер «Sodor» с различными микроархитектурами. Также опубликовано несколько симуляторов (включая qemu и ANGEL — JavaScript-симулятор, работающий в браузере), компиляторов (LLVM, GCC), вариант ядра Linux для работы на RISC-V и компилятор дизайнов Chisel, который позволяет получать Verilog-код. Также опубликованы верификационные тесты[16]. Некоммерческая организация lowRISC планирует создание системы на кристалле на базе 64-битного ядра Rocket RISC-V с последующим массовым производством чипов[17][18]. На конференции RISC-V Workshop 2017 стало известно, что компания Esperanto Technologies разрабатывает 64-битный высокопроизводительный процессор общего назначения на системе команд RISC-V с гетерогенной архитектурой с высокой степенью параллелизма (напоминающий по строению процессор Cell), который в максимальной конфигурации будет содержать 16 ядер «ET-Maxion» (представляют собой конвейеры с неупорядоченным выполнением команд и работающие с данными с плавающей запятой) и 4096 ядер «ET-Minion» (конвейеры с последовательным выполнением команд и блоком с векторными вычислениями в каждом ядре)[19]. Компания Western Digital заявила, что в партнёрстве с компанией Esperanto она повысит текущий статус процессорной архитектуры RISC-V с уровня микроконтроллеров до уровня высокопроизводительных решений и создаст вычислительную архитектуру нового поколения для обработки «больших данных»[20], а также экосистему быстрого доступа к данным — речь идёт о создании специализированных RISC-V-ядер для построения архитектуры «процессор в памяти» (processor-in-memory)[21]. Популярные и недорогие микроконтроллеры серии ESP32 выпускаются с архитектурой RISC-V, например, серии ESP32-C, ESP32-H и ESP32-P. IP-ядраРяд компаний предлагает готовые блоки IP-ядер на базе архитектуры RISC-V, среди них:
Процессоры и микроконтроллерыСерийные процессоры и микроконтроллеры на базе архитектуры RISC-V в формате системы на кристалле. МикропроцессорыВыпущенные до 2021 года:
МикроконтроллерыВыпущенные в 2017—2019 годах:
Выпущенные в 2020 году:
Выпущенные в 2021 году:
См. также
Примечания
Литература
Ссылки
|