Программирование ARM RISC-V Fri, October 18 2024  

Поделиться

Нашли опечатку?

Пожалуйста, сообщите об этом - просто выделите ошибочное слово или фразу и нажмите Shift Enter.

RISC-V Печать
Добавил(а) microsin   

RISC-V(1) это открытая стандартная архитектура набора команд (Instruction Set Architecture, ISA), основанная на установленных принципах процессора с сокращенным набором инструкций (Reduced Instruction Set Computer, RISC). В отличие от многих других распространенных наборов инструкций ISA, архитектура RISC-V предоставляет открытые лицензии, свободные от лицензионных выплат (royalty-free open-source licenses). Многие компании предоставляют аппаратные решения на основе RISC-V. Доступны операционные системы с поддержкой RISC-V, и этот набор инструкций поддерживается несколькими популярными программными тулчейнами.

Примечание (1): маркер V (римская цифра '5') представляет RISC-V как пятую генерацию архитектуры урезанного набора инструкций (reduced instruction set computer, RISC), которая была разработана в University of California, Berkeley на момент 1981 года.

Проект RISC-V стартовал в 2010 году в University of California, Berkeley. В настоящее время более 70 стран участвуют в разработке определений открытых спецификаций RISC-V. RISC-V International, некоммерческая управляющая организация поддержки RISC-V, в настоящее время расквартирована в Швейцарии.

RISC V logo

Разработчик: University of California, Berkeley.
Лицензия: открытая, свободная от выплат.
Разрядность процессоров, бит: 32, 64, 128.
Предоставлено: 6 августа 2014 года.
Версия: unprivileged ISA 20191213, privileged ISA 20211203.
Принцип дизайна: RISC.
Тип: Load–store.
Кодирование: изменяемое.
Ветвление: Compare-and-branch.
Endianness: Little(2).
Размер страницы: 4 килобайта.

Количество регистров: общего назначения 16, 32 (включая один zero-регистр), плавающей точки (floating point) 32. Регистры плавающей точки опциональны, их ширина зависит от доступных расширений.

Расширения:

M: Multiplication
A: Atomics – LR/SC & fetch-and-op
F: Floating point (32-bit)
D: FP Double (64-bit)
Q: FP Quad (128-bit)
Zicsr: Control and status register support
Zifencei: Load/store fence
C: Compressed instructions (16-bit)
J: Interpreted or JIT-compiled languages support

Примечание (2): big и bi-endianness поддерживается через нестандартные варианты; инструкции всегда хранятся в порядке байт little-endian.

[Обзор RISC-V]

Как и RISC-архитектура, RISC-V ISA работает по принципу загрузки-сохранения (load–store architecture). Инструкции плавающей точки соответствуют стандарту IEEE 754 floating-point. Примечательные особенности RISC-V ISA включают следующее: выбор расположение бит команды, упрощающее использование мультиплексоров в CPU, нейтральный к аппаратным особенностям дизайн, фиксированное расположение бита знака у непосредственных значений (immediate values) для ускорения расширения знака.

Набор инструкций был разработан для максимального диапазона применений. Базовый набор команд имеет фиксированную длину 32-битных команд, выровненных естественным образом, и ISA поддерживает расширения переменной длины, где каждая команда может быть любым количеством 16-битных посылок в длину. Расширения поддерживают небольшие встроенные системы, персональные компьютеры, суперкомпьютеры с векторными процессорами и параллельные компьютеры складского масштаба.

Спецификации набора инструкций определяют варианты 32-битного и 64-битного адресного пространства. Также спецификация включает описание 128-битного варианта плоского адресного пространства как экстраполяции 32- и 64-битных вариантов, однако 128-bit ISA специально остается "не замороженным", поскольку в 2023 .. 2024 годах все еще не было значительного опыта работы с системами, обладающими таким огромным размером памяти.

В отличие от других академических проектов, которые обычно оптимизируются только для простоты изложения, разработчики набора инструкций RISC-V фокусировались на применимости в практических вычислительных системах. По состоянию на июнь 2019, версия 2.2 user-space ISA и версия 1.11 privileged ISA были заморожены, позволяя продолжение разработки ПО и аппаратуры. User-space ISA, сейчас переименованное в Unprivileged ISA, было обновлено, ратифицировано и заморожено как версия 20191213. Внешняя debug-спецификация доступна как черновик (draft) в версии 0.13.2.

Мотивация. CPU-разработка требует экспертизы дизайна в нескольких специализациях: электроника цифровой логики, компиляторы и операционные системы. Для покрытия затрат на такие команды коммерческие поставщики процессорной интеллектуальной собственности (Intellectual Property, IP), такие как Arm Ltd. и MIPS Technologies, взымают роялти на использование своих технологий, патентов и защищенных прав владения (patents, copyrights). Также они требуют соблюдение неразглашения информации перед предоставлением документации, подробно описывающей возможности их технологических решений. Во многих случаях даже не описываются причины выбора определенного решения в дизайне.

RISC-V начала свое развитие как практическая открытая реализация ISA, которую можно использовать как академически, так и в любом аппаратном решении без каких-либо денежных отчислений. Также по крайней мере в общих чертах описываются рациональность каждого решения в проекте. Авторы RISC-V это академические разработчики со значительным опытом в компьютерной разработке, а RISC-V ISA является прямым развитием разработки академических вычислительных проектов, особенно Berkeley RISC. Стандарт RISC-V был создан в частности как поддержка всех подобных проектов.

Чтобы собрать большое, находящееся в непрерывной активности сообщество пользователей, и тем самым накапливать проекты и программное обеспечение, разработчики RISC-V ISA намеренно поддерживает различные случаи практического использования: компактные, производительные, реально работающие реализации без лишних наворотов на имеющей микроархитектуре. Требования большой базы потребителей является одной из причин, почему RISC-V был разработан для внедрения во многих возможных случаях.

Основное утверждение разработчиков заключается в том, что набор команд является ключевым интерфейсом в компьютере, поскольку он расположен между аппаратурой и программным обеспечением. Если хороший набор инструкций открыт и доступен для использования всеми, то он может значительно снизить стоимость программного обеспечения с обеспечением более эффективного его повторного использования. Это также должно вызвать усиление конкуренции между поставщиками оборудования, которые затем могут выделять больше ресурсов на проектирование и меньше усилий тратить на поддержку программного обеспечения.

Разработчики утверждают, что новые принципы становятся редкостью в дизайне наборов инструкций, поскольку самые успешные проекты за последние 40 лет стали все более похожи друг на друга. Провалы некоторых команд произошли из-за того, что их спонсоры были финансово неудачными, но не потому, что наборы инструкции инструкций были плохими технически. Таким образом, хорошо продуманный открытый набор инструкций, разработанный с использованием устоявшихся принципов, должен привлечь долгосрочную поддержку многих вендоров.

RISC-V также поощряет академическое использование. Простота целочисленного подмножества позволяет выполнять базовые упражнения для студентов и является достаточно простым ISA, позволяющим программному обеспечению управлять исследовательскими машинами. ISA переменной длины предоставляет место для расширения набора инструкций как для упражнений студентов, так и для исследований, а отдельный привилегированный набор инструкций позволяет проводить исследования в области поддержки операционной системы без перепроектирования компиляторов. Открытая парадигма интеллектуальной собственности RISC-V позволяет публиковать, повторно использовать и модифицировать производные проекты.

Термин RISC появился где-то в 1980 годах. Перед этим были некоторые знания (см. John Cocke), что упрощенные компьютеры могут быть эффективными, однако принципы такого дизайна не были широко описаны. Простые, эффективные вычислители всегда представляли академический интерес, в результате появился набор инструкций RISC DLX для первой редакции такой компьютерной архитектуры: Quantitative Approach в 1990 году за соавторством David Patterson, с последующим участием в проработке RISC-V. DLX предназначался для целей образования; академики и самодельщики реализовали его с помощью чипов программируемой логики (FPGA), однако это пока что не полностью коммерческая разработка. ARM CPU версии 2 и более ранней, имели публично опубликованный набор инструкций и поддерживались популярным свободным компилятором GNU Compiler Collection (GCC). Для этого ISA существовало 3 открытых ядра, но они так и не пошли в производство. OpenRISC это open-source ISA, основанный на DLX, со связанными конструкциями RISC и полной поддержкой реализаций GCC и Linux, хотя было несколько коммерческий реализаций.

У Krste Asanović в University of California, Berkeley, было требование к исследованию компьютерной системы с открытым исходным кодом, и в 2010 году он решил разработать и опубликовать его в "коротком трехмесячном проекте в течение лета" с несколькими из его аспирантов. В плане было обеспечить как академиков, так и индустриальных пользователей. David Patterson в Berkeley присоединился к разработке, поскольку он был автором Berkeley RISC, а RISC-V был одноименным пятым поколением его длинной серии совместных исследовательских, основанных на RISC проектах (RISC-I и RISC-II Patterson опубликовал в 1981 году, который ссылается на архитектуру SOAR с 1984 года как "RISC-III" и архитектуру SPUR с 1988 года как "RISC-IV"). На этом этапе студенты предоставили предварительное программное обеспечение, симуляции и дизайн CPU.

Авторы RISC-V и их учреждение первоначально получали документы ISA и несколько конструкций CPU по лицензиям BSD, которые позволяют производным работам, таким как конструкции чипов RISC-V, быть либо открытыми и свободными, либо закрытыми и проприетарными. Сами спецификации ISA (т. е. кодирование набора инструкций) были опубликованы в 2011 году как open source, со всеми зарезервированными правами. Фактический технический отчет (выражение спецификации) позже был помещен в публикации под лицензией Creative Commons, чтобы разрешить её улучшение внешними участниками через RISC-V Foundation, а затем RISC-V International.

Полная история развития RISC-V опубликована на веб-сейте RISC-V International [2].

RISC-V Foundation и RISC-V International. Коммерческие пользователи требуют, чтобы ISA стал стабильным перед тем, как его можно было бы использовать в своих продуктах на протяжении многих лет. Чтобы решить эту проблему, в 2015 году была сформирована организация RISC-V Foundation, которая должна владеть, поддерживать и публиковать интеллектуальную собственность, связанную с определением RISC-V. Первоначальные авторы и владельцы передали свои права этому фонду, который возглавила CEO Calista Redmond. Она взяла на себя эту роль в 2019 году после того, как ранее возглавляла инфраструктуру открытых проектов IBM.

Члены фонда RISC-V: Andes, Antmicro, Bluespec, CEVA, Codasip, Cortus, Esperanto, Espressif, ETH Zurich, Google, IBM, ICT, IIT Madras, Lattice, lowRISC, Microchip, MIT (Csail), Qualcomm, Rambus, Rumble, SiFive, Syntacore and Technolution.

В ноябре November 2019, the RISC-V Foundation анонсировала свое перемещение в Швейцарию, сославшись на опасения по поводу торгового регулирования США. В марте 2020 года организация переименовалась в RISC-V International, Swiss nonprofit business association (швейцарская некоммерческая организация).

По состоянию от 2019 года RISC-V International свободно публикует документы, определяющие стандарт RISC-V, и разрешает неограниченное использование ISA для разработки ПО и аппаратного обеспечения. Однако только члены RISC-V International могут голосовать за утверждение изменений, и только члены организации используют логотип совместимости торговой марки.

Награды. 2017: Linley Group's Analyst's Choice Award for Best Technology (за набор инструкций).

[Дизайн RISC-V]

ISA base и расширения. У RISC-V модульный дизайн, состоящий из альтернативных базовых частей (ISA base), с добавлением опциональных расширений (extensions). ISA base и её расширения разработаны коллективными усилиями индустрии, исследовательского сообщества и образовательных институций. Базовая часть определяет инструкции (и их кодирование), управление потоком (control flow), регистры (и их размеры), память и адресацию, логические (т. е. целочисленные) манипуляции и вспомогательное оборудование. Одна только база может реализовать упрощенный вычислитель общего назначения (general-purpose computer) с полной программной поддержкой, включающей компилятор общего назначения.

Стандартные расширения определяются для работы со всеми стандартными базами и друг с другом без конфликтов.

Многие RISC-V компьютеры могут реализовать расширение упакованных команд для снижения энергопотребления, размера кода и использования памяти. Также в будущем планируется поддержка гипервизоров и виртуализации.

Вместе с расширением супервизора S, набор команд RVGC, который включает в себя один из наборов инструкций RV base, G-коллекцию и расширения (которая включает "I", что означает non-embedded, т. е. не встраиваемая система, не микроконтроллер), и расширение C, определяет все инструкции, необходимые для удобной поддержки операционной системы общего назначения.

Таблица 1. ISA base и расширения.

Имя Описание Версия Статус(3) Инструкций
Base (базовый набор инструкций)
RVWMO Weak Memory Ordering 2.0 Ратиф.  
RV32I Base Integer Instruction Set, 32-bit 2.1 40
RV32E Base Integer Instruction Set (embedded), 32-bit, 16 registers 2.0 40
RV64I Base Integer Instruction Set, 64-bit 2.1 15
RV64E Base Integer Instruction Set (embedded), 64-bit 2.0  
RV128I Base Integer Instruction Set, 128-bit 1.7 Open 15
Extension (расширения)
M Standard Extension for Integer Multiplication and Division 2.0 Ратиф. 8 (RV32)
13 (RV64)
A Standard Extension for Atomic Instructions 2.1 11 (RV32)
22 (RV64)
F Standard Extension for Single-Precision Floating-Point 2.2 26 (RV32)
30 (RV64)
D Standard Extension for Double-Precision Floating-Point 2.2 26 (RV32)
32 (RV64)
Zicsr Control and Status Register (CSR) Instructions 2.0 6
Zifencei Instruction-Fetch Fence 2.0 1
G Shorthand for the IMAFD_Zicsr_Zifencei base and extensions - -  
Q Standard Extension for Quad-Precision Floating-Point 2.2 Ратиф. 28 (RV32)
32 (RV64)
L Standard Extension for Decimal Floating-Point 0.0 Open  
C Standard Extension for Compressed Instructions 2.0 Ратиф. 40
B Standard Extension for Bit Manipulation 1.0 43
J Standard Extension for Dynamically Translated Languages 0.0 Open  
T Standard Extension for Transactional Memory 0.0  
P Standard Extension for Packed-SIMD Instructions 0.9.10  
V Standard Extension for Vector Operations 1.0 Ратиф. 187
Zk Standard Extension for Scalar Cryptography 1.0.1 49
H Standard Extension for Hypervisor 1.0 15
S Standard Extension for Supervisor-level Instructions 1.12 4
Zam Misaligned Atomics 0.1 Open  
Zihintpause Pause Hint 2.0 Ратиф.  
Zihintntl Non-Temporal Locality Hints 0.3  
Zfa Additional Floating-Point Instructions 1.0  
Zfh Half-Precision Floating-Point 1.0  
Zfhmin Minimal Half-Precision Floating-Point 1.0  
Zfinx Single-Precision Floating-Point in Integer Register 1.0  
Zdinx Double-Precision Floating-Point in Integer Register 1.0  
Zhinx Half-Precision Floating-Point in Integer Register 1.0  
Zhinxmin Minimal Half-Precision Floating-Point in Integer Register 1.0  
Zmmul Multiplication Subset of the M Extension 1.0  
Ztso Total Store Ordering 1.0  

Примечание (3): Ожидается, что замороженные части будут иметь окончательный набор функций и получат только разъяснения до ратификации.

Таблица 2. Форматы инструкций 32-bit RISC-V.

Формат
Бит
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
Register/register funct7 rs2 rs1 funct3 rd opcode
Immediate imm[11:0] rs1 funct3 rd opcode
Store imm[11:5] rs2 rs1 funct3 imm[4:0] opcode
Branch [8] imm[10:5] rs2 rs1 funct3 imm[4:1] [7] opcode
Upper immediate imm[31:12] rd opcode
Jump [9] imm[10:1] [7] imm[19:12] rd opcode

opcode (7 бит): в частности задает один из 6 типов форматов инструкций.
funct7 (7 бит) и funct3 (3 бита): эти 3 бита расширяют поле opcode, чтобы указать выполняемую операцию.
rs1 (5 бит) и rs2 (5 бит): указывает через индекс первый и второй регистры операнда соответственно (т. е. регистры-источники).
rd (5 бит): указывает по индексу регистр назначения, в который будет направлен результат.

Чтобы сократить комбинации функций, которые могут быть реализованы, определена номенклатура для их указания в Главе 27 текущего ратифицированного стандарта набора непривилегированных команд (Unprivileged ISA Specification). Сначала задается база набора команд, кодирование для RISC-V, битовая ширина регистра и variant; например RV64I или RV32E. Далее следуют буквы, указывающие реализованные расширения, в порядке вышеуказанной таблицы. За каждой буквой может следовать major-номер версии, за ним необязательно следует "p" и minor-номер версии. Значение по умолчанию 0, если отсутствует minor-номер версии, и 1.0, если отсутствует весь номер версии. Таким образом, RV64IMAFD может быть записано какRV64I1p0M1p0A1p0F1p0D1p0, или более упрощенно как RV64I1M1A1F1D1. Применяются нижние подчеркивания для улучшения читаемости, например RV32I2_M2_A2.

Рис. 1. Модульный набор инструкций варианта RV32IMAC. Это 32-bit CPU, оснащенный Base Integer ISA (RV32I) и расширениями ISA для целочисленного умножения и деления (Integer Multiplication and Division, RV32M), атомарными инструкциями (Atomic Instructions, RV32A) и сжатыми инструкциями (Compressed Instructions, RV32C).

Base, расширенные целочисленные вычисления и вычисления базовой точки, с примитивами синхронизации для мультиядерных вычислений - такой набор считается необходимым для вычислителя общего назначения, для которого установили сокращенное обозначение "G".

Маленький 32-bit вычислитель для встраиваемых (embedded) систем может быть RV32EC. Для большого 64-bit компьютера это может быть RV64GC; например RV64IMAFDCZicsr_Zifencei.

По мере роста количества расширений стандарт теперь предусматривает, что расширения теперь будут именоваться одной буквой "Z", за которой идет алфавитное имя и опциональный номер версии. Например, Zifencei именует расширение выборки инструкций (instruction-fetch extension). Zifencei2 и Zifencei2p0 название той же самой версии 2.0. Первая буква, которая идет после "Z", по соглашению показывает наиболее тесно связанную буквенную категорию расширения IMAFDQLCBJTPVN. Таким образом, расширение Zam для не выровненных атомарных инструкций (misaligned atomics) относится к стандартному расширению "A". В отличие от односимвольных расширений, расширения Z должны отделяться символами нижнего подчеркивания, сгруппированными по категории, а затем в алфавитном порядке в каждой категории. Например, Zicsr_Zifencei_Zam.

Расширения, специфичные для приоритезации супервизора (supervisor privilege level) именуются по такому же принципу с использованием для префикса буквы "S". Расширения, специфичные для уровня гипервизора (hypervisor), именуются с использованием "H" для префикса. Расширения машинного уровня (machine level) снабжаются префиксом из трех букв "Zxm". Расширения набора инструкций supervisor, hypervisor и machine level названы в честь менее привилегированных расширений.

Разработчики RISC-V могут создавать свои собственные не стандартные расширения набора инструкций. Такие расширения следуют соглашению именования "Z", однако с буквой "X" в качестве префикса. Они должны указываться после всех стандартных расширений, а при наличии в списке нескольких нестандартных расширений они должны быть перечислены в алфавитном порядке.

Профили и платформы. Для стандартным списков выбора ISA профили и платформы находятся на стадии обсуждения.

Подобная гибкость может использоваться для тщательной оптимизации специализированных разработок путем включения только абсолютно необходимых для приложения функций ISA, однако та же гибкость также приводит к комбинаторному взрыву в возможных вариантах ISA. Профили определяют гораздо меньший общий набор вариантов ISA, которые получают наибольшую ценность для большинства пользователей и, таким образом, позволяют сообществу разработчиков программного обеспечения сосредоточить ресурсы на создании богатой экосистемы программного обеспечения.

Спецификация платформы определяет набор платформ, определяющих требования к совместимости между программным и аппаратным обеспечением. Политика платформы определяет различные термины, используемые в данной спецификации платформы. Политика платформы также предоставляет необходимую подробную информацию относительно области применения, покрытия, именования, управления версиями, структуры, жизненного цикла и требований совместимости для спецификации платформы.

[Система команд RISC-V]

Регистры. У RISC-V есть 32 целочисленных регистра (или 16 в embedded-варианте), и когда реализовано расширение плавающей точки (floating-point extension), 32 дополнительных floating-point регистра. За исключением инструкций доступа к памяти, инструкции работают только с регистрами.

Первый целочисленный регистр это zero-регистр, и остальные регистры общего назначения (general-purpose registers). Сохранение в zero-регистр не дает никакого эффекта, а чтение всегда возвратит 0. Использование zero-регистра позволяет упростить набор инструкций.

Существуют регистры управления (control) и состояния (status), однако программы, работающие в режиме пользователя (user-mode), могут иметь доступ к тем из них, которые используются для измерения производительности и управления операциями плавающей точки.

Не существуют инструкции для сохранения и восстановления нескольких регистров. Они считаются ненужными, слишком сложными и вероятно слишком медленными.

Таблица 3. Ассемблерные мнемоники для RISC-V integer и floating-point регистров, и их роль в первом стандартном соглашении о вызовах.

Имя регистра Символическое имя Описание Кто сохраняет
32 integer (целочисленные регистры)
x0 zero Здесь всегда 0  
x1 ra Return address (адрес возврата)  
x2 sp Stack pointer (указатель стека)  
x3 gp Global pointer (глобальный указатель)  
x4 tp Thread pointer (указатель потока)  
x5 t0 Temporary / alternate return address (временное значение / альтернативный адрес возврата) Caller
x6-x7 t1–2 Temporaries (временные значения) Caller
x8 s0/fp Saved register / frame pointer (сохраненный регистр / указатель кадра) Callee
x9 s1 Saved register (сохраненный регистр) Callee
x10–11 a0–1 Function arguments / return values (аргументы функции / значения возврата) Caller
x12–17 a2–7 Function arguments (аргументы функции) Caller
x18–27 s2–11 Saved registers (сохраненные регистры) Callee
x28–31 t3–6 Temporaries (временные значения) Caller
32 floating-point extension registers (регистры плавающей точки и расширений)
f0–7 ft0–7 Floating-point temporaries (временные значения плавающей точки) Caller
f8–9 fs0–1 Floating-point saved registers (сохраненные регистры плавающей точки) Callee
f10–11 fa0–1 Floating-point arguments / return values (аргументы плавающей точки / возвращаемые значения) Caller
f12–17 fa2–7 Floating-point arguments (аргументы плавающей точки) Caller
f18–27 fs2–11 Floating-point saved registers (сохраненные регистры плавающей точки) Callee
f28–31 ft8–11 Floating-point temporaries (временные значения плавающей точки) Caller

Доступ к памяти. Как у многих дизайнов RISC, у RISC-V архитектура load–store: инструкции работают только с регистрами, а специальные load и store инструкции передают данные из памяти и в память.

Большинство load и store инструкций включают регистр 12-битного смещения (offset) и два регистра идентификатора, один base-регистр, другой регистр это регистр назначения (destination для загрузки, load) или источника (source для сохранения, store).

Смещение добавляется к base-регистру для получения адреса. Формирование адреса как суммы base + offset позволяет одиночным инструкциям обращаться к структурам данных. Например, если base-регистр указывает на вершину стека, одиночные инструкции могут обращаться к локальным переменным подпрограммы, находящимся в стеке. Подобным образом load и store инструкции могут обращаться к структуре в стиле записи, или устройству ввода вывода (I/O device), отображенному на адресное пространство (memory-mapped). Использование константы zero-регистра как базового адреса позволяет одиночным инструкциям обращаться к памяти относительно нулевого адреса.

Память адресуется байтами (8-bit) инструкциями в режиме порядка байт little-endian, и с данными в порядке байт, определенном интерфейсом окружения выполнения (execution environment), в котором работает код. К словам размером до размера регистра можно обращаться load и store инструкциями.

RISC-V изначально был определен как little-endian, чтобы напоминать другие привычные и успешные компьютеры, например x86. Это также снижает сложность процессора и стоит немного меньше, потому что он читает все размеры слов в одном и том же порядке. Например, набор инструкций RISC-V декодируется начиная с самого младшего (по адресу) байта инструкции. Варианты bi-endian (переключаемый порядок байт) и big-endian определены для поддержки старой кодовой базы (legacy code base), подразумевающей big-endianness. Privileged ISA определяют биты в регистрах mstatus и mstatush, которые показывают и опционально управляют, какой режим доступа к памяти M-mode, S-mode и U-mode, отличный от выборок команд, little-endian или big-endian; эти биты могут быть только для чтения (read-only), в этом случае endianness реализации жестко фиксирована аппаратно, либо эти биты могут быть записываемые.

Интерфейс среды выполнения может позволять доступ к адресам памяти, не выровненным на ширину слова, однако доступ по выравненным адресам может быть быстрее; например простые CPU могут реализовать не выровненный доступ с медленной программной эмуляцией, управляемой прерыванием сбоя выравнивания (alignment failure interrupt).

Как и во многих наборах инструкций RISC (и некоторых наборах complex instruction set computer (CISC), таких как x86 и IBM System/360 и их преемники через z/Architecture), в RISC-V отсутствуют адресные режимы, в которых осуществляется обратная (write back) запись в регистры. Например, отсутствует автоинкремент.

RISC-V управляет системами памяти, которые совместно используются между процессорами (CPU) или потоками с гарантией, что поток выполнения всегда видит свои операции памяти в запрограммированном порядке. Однако между потоками и устройствами I/O система RISC-V упрощается: она не гарантирует порядок операций с памятью, кроме специальных инструкций, таких как fence.

Инструкция fence гарантирует, что результаты предыдущих операций видны последующим операциям других потоков или устройств I/O. Инструкция fence может гарантировать порядок комбинаций как операций с памятью, так и с устройствами I/O, отображенными на память. Например, fence может отделять операции чтения памяти и записи в память, без влияния на операции I/O. Или, если система может работать с устройствами I/O параллельно работе с памятью, fence не заставляет их ждать друг друга. Один CPU с одним потоком может декодировать fence как инструкцию nop.

Некоторые RISC CPU (такие как MIPS, PowerPC, DLX и Berkeley RISC-I) помещают 16 бит смещения в инструкции load и store. Они устанавливают верхние 16 бит инструкцией load upper word. Это позволяет легко устанавливать значения верхнего полуслова без сдвига битов. Однако большая часть использования инструкции upper half-word делает 32-битные константы, наподобие адресов. RISC-V использует SPARC-подобную комбинацию 12-битных смещений 20-битных инструкций set upper. Меньшее 12-битное смещение помогает компактным, 32-битным инструкциям load и store выбрать 2 из 32 регистров, но все же иметь достаточно бит для поддержки кодирования RISC-V инструкций переменной длины.

Immediates. RISC-V обрабатывает 32-битные константы и адреса с помощью инструкций, устанавливающих верхние 20 бит 32-битного регистра. Инструкция load upper immediate (lui) загружает 20 бит в биты 31 - 12. Затем вторая инструкция, такая как addi, может установить нижние 12 бит. Небольшие числа или адреса могут быть сформированы с помощью zero-регистра вместо lui.

Этот метод был расширен для реализации позиционно-независимого кода путем добавления инструкции auipc, которая генерирует 20 старших бит адреса добавлением смещения к программному счетчику и сохранением результата в регистр base. Это позволяет программе генерировать 32-разрядный адрес относительно программного счетчика.

Регистр base часто может использоваться как есть с 12-битными смещениями загрузок (load) и сохранений (store). При необходимости addi может устанавливать младшие 12 бит регистра. В 64-разрядных и 128-разрядных ISA инструкции lui и auipc расширены знаком (sign-extend), чтобы результат давал адреса большего размера.

Некоторые быстрые CPU могут интерпретировать комбинации инструкций как одну прошитую инструкцию. Для этого хорошими кандидатами являются lui или auipc для комбинации с jalr, addi, load или store.

Вызовы подпрограмм, jump, branch. Инструкция вызова подпрограммы RISC-V с мнемоникой jal (jump и link) помещают свой адрес возврата в регистр. Это работает быстрее во многих дизайнах компьютеров, потому что экономит доступ к памяти в сравнении с системами, которые проталкивают (push) адрес возврата напрямую в стек, который находится в памяти. Инструкция jal имеет 20-разрядное смещение со знаком (two's complement, дополнение до 2). Смещение умножается на 2, затем добавляется к программному счетчику (PC) для генерации относительного адреса для 32-битной инструкции. Если результат не соответствует выровненному на 32-бита адресу (т. е. не делится нацело на 4), то CPU может генерировать исключение.

RISC-V CPU jump вычисленный адрес использует инструкция jalr (jump and link-register). Инструкция jalr подобна jal, однако получает свой адрес назначения путем добавления 12-битного смещения к регистру base (jal в отличие от jalr добавляет увеличенное 20-битное смещение к PC).

Битовый формат инструкции jalr подобен инструкциям load и store, использующими регистр для смещения. Здесь jalr также может использоваться с инструкциями, которые устанавливают старшие 20 бит регистра base для реализации 32-разрядных ветвлений, либо устанавливать абсолютный адрес (с использованием lui), либо адрес относительно PC (используя auipc для не зависящего от позиции кода). Использование константы zero для базового адреса позволяет реализовать вызовы с одной инструкцией по небольшому (смещение), фиксированному положительному или отрицательному адресу.

RISC-V повторно используют jal и jalr для получения безусловных (unconditional) 20-битных PC-относительных jump и безусловных относительно регистров 12-битных jump. Инструкции jumps просто делает регистр связывания 0 так, чтобы адрес возврата не сохранялся.

RISC-V также повторно использует jalr для возврата из подпрограммы: для этого base-регистр jalr устанавливается как регистр связи, сохраненный инструкцией jal или jalr. Смещение jalr равно нулю, регистр связи равен нулю, так что нет смещения и не сохраняется адрес возврата.

Как и во многих дизайнах RISC, в вызовах подпрограмм компилятор RISC-V должен использовать индивидуальные инструкции для сохранения регистров в стек на старте, и затем восстанавливать их из стека на выходе. У RISC-V нет инструкция множественного сохранения (save multiple) или множественного восстановления (restore multiple). Считалось, что это делает процессор (CPU) слишком сложным, и возможно медленным. Это может также повысить затраты памяти на код. Дизайнеры планировали уменьшить размер кода с помощью библиотечных процедур для сохранения и восстановления регистров.

У RISC-V нет регистра условного ветвления (condition code register) или бита переноса (carry bit). Дизайнеры считали, что коды условий делают CPU более сложными, заставляя включать взаимодействия между командами на разных стадиях выполнения. Этот выбор делает более сложной арифметику множественной точности. Кроме того, несколько числовых задач требуют больше энергии. В результате предсказание (условное выполнение инструкций) не поддерживается. Дизайнеры утверждают, что очень быстрые, out-of-order дизайны CPU в любом случае делают предсказания, параллельно выполняя ветвь сравнения и условный код, отбрасывая эффекты не используемого пути. Они также утверждают, что даже в боле простых CPU такое предсказание менее ценно, чем предсказание ветвлений, что может предотвратить многие задержки, связанные с условными ветвлениями. Код без предсказаний больше, с большим количеством ветвлений, но они также утверждают, что сжатый набор команд (такой как RISC-V set C) в большинстве случаев решает эту проблему.

Вместо этого у RISC-V есть короткие ветвления, которые выполняют сравнения: equal, not-equal, less-than, unsigned less-than, greater-than или equal and unsigned greater-than or equal. 10 операций сравнение-ветвление реализованы только шестью инструкциями путем реверсирования порядка операндов в ассемблере. Например, ветвление если больше чем (greater-than) может осуществляться ветвлением меньше чем (less-than) путем реверсирования операндов.

Ветвления сравнения имеют 12-битный диапазон со знаком, и jump относительно PC.

В отличие от некоторых RISC-архитектур, RISC-V не включает branch delay slot, позиция после инструкции ветвления может быть заполнена инструкцией, которая выполняется независимо от того, выполнено ветвление или нет. RISC-V опускает branch delay slot, потому что это усложняет multicycle CPU, superscalar CPU и длинные конвейеры. Предсказатели динамического ветвления достаточно успешно справились с задачей сокращения потребности в отложенных ветвлениях.

При первой встрече с ветвлением RISC-V CPU должен предположить, что будет взята отрицательная относительная ветвь (т. е. бит знака смещения "1"). Это подразумевает, что обратная ветвь является циклом, и обеспечивает направление по умолчанию, так что простые конвейерные CPU могут заполнить свой конвейер инструкций. Кроме того, RISC-V не требует предсказания ветвления, однако реализации ядра позволяют это делать. RV32I резервируют пространство инструкций "HINT", которое в настоящее время не содержит никаких подсказок по ветвлениям; RV64I делают тоже самое.

Арифметические и логические наборы. RISC-V разделяет математику на минимальный набор целочисленных инструкций (набор I) с операциями add, subtract, shift, битовой логикой (bitwise logic) и ветвлением по сравнению (comparing-branches). Эти инструкции могут программно симулировать большинство других наборов инструкций RISC-V (важное исключение составляют atomic инструкции). В целочисленных командах RISC-V отсутствуют операции подсчета, ведущие к нулю, и операции битового поля, обычно используемые для ускорения программного обеспечения с плавающей запятой в чисто целочисленном процессоре. Однако хотя номинально в расширении манипуляции битами, ратифицированные расширения Zbb, Zba и Zbs содержат дополнительные целочисленные инструкции, включающие операцию счета, ведущую к нулю.

Целочисленные инструкции умножения (набор M) включают в себя умножение и деление со знаком. Включены целочисленное умножение и деление двойной точности, поскольку умножение и деление генерирует старшее слово результата. Документ ISA рекомендует, чтобы реализаторы CPU и компиляторов использовали стандартизованную последовательность инструкций высокого и низкого умножения и деления на одну операцию, если это возможно.

Инструкции плавающей точки (набор F) включают арифметику одиночной точности и также команды ветвления по результатам сравнения, подобно целочисленной арифметике. Они требуют дополнительный набор 32 регистров плавающей точки. Это отдельные регистры от целочисленных регистров. Инструкции плавающей точки двойной точности (набор D) обычно предполагают, что регистры с плавающей запятой являются 64-битными (т. е. двойной ширины, double-width), и F-подмножество координируется с набором D. Также определены quad-precision 128-bit floating-point ISA (Q). Компиляторы RISC-V без плавающей точки могут использовать программную библиотеку плавающей точки.

RISC-V не генерирует исключения (exceptions) на арифметических ошибках, включая переполнение (overflow), недогрузка (underflow), subnormal и деление на ноль. Вместо этого и целочисленные инструкции, и инструкции плавающей точки генерируют разумные значения по умолчанию, и инструкции плавающей точки устанавливают биты статуса. Деление на ноль может быть обнаружено ветвлением после деления. Биты статуса могут быть проверены операционной системой или периодическим прерыванием.

Атомарные операции с памятью. RISC-V поддерживает компьютеры, которые создают общую память между несколькими CPU и потоками. Стандартной моделью целостности памяти RISC-V является согласованность выпусков (release consistency). Т. е. загрузки (load) и сохранения (store) в общем случае переупорядочены, но некоторые загрузки могут быть обозначены как операции захвата (acquire operation), которые должны предшествовать более поздним обращениям к памяти, и некоторые сохранения могут быть обозначены как операции освобождения (release operations), которые должны следовать более ранним обращениям к памяти.

Базовый набор инструкций включает минимальную поддержку в форме инструкции fence для упорядочивания порядка работы с памятью (enforce memory ordering). Хотя этого достаточно (fence r, rw предоставляют захват (acquire), и fence rw, w предоставляет освобождение (release)), комбинированные операции могут быть более эффективными.

Расширение атомарной работы с памятью поддерживает 2 типа атомарности для целостности освобождения (release consistency). Первый тип, предоставляет инструкции общего назначения load-reserved (lr) и store-conditional (sc). Инструкция lr выполняет загрузку (load), и пытается зарезервировать адрес для своего потока. Позднее store-conditional sc для зарезервированного адреса будет выполнена только в том случае, если её резервирование не нарушено промежуточным хранилищем из другого источника. Если store успешное, в регистр помещается zero. Если неудачное, то ненулевое значение показывает, что программе нужно попробовать повторить операцию. В любом случае резервирование освобождается.

Вторая группа инструкций атомарности выполняет последовательность чтение-изменение-запись (read-modify-write): загрузка (load, которая опционально может быть операцией загрузка-захват, load-acquire) в регистр назначения, затем операция между загруженным значением и регистром источника, и затем сохранение результата (store, которая опционально может быть операцией сохранение-освобождение, store-release). Создание дополнительных барьеров памяти позволяет комбинировать операции. Опциональные операции разрешаются путем бит захвата и освобождения, которые представлены в каждой atomic-инструкции. RISC-V определяет 9 возможных операций: swap (использование регистра источника напрямую); add; bitwise and, or и exclusive-or; а также signed и unsigned minimum и maximum.

Дизайн системы может оптимизировать эти комбинированные операции больше, чем lr и sc. Например, если регистр назначения для swap постоянно равен zero, то операция load может быть пропущена. Если сохраняемое значение не было модифицировано с момента load, то операция store может быть пропущена.

IBM System/370 и его преемники, включая z/Architecture и x86, оба включают инструкцию compare-and-swap (cas), которая  условно проверяет и обновляет ячейку в памяти: если ячейка содержит ожидаемое старое значение, то cas заменяет его заданным новым значением; затем cas возвращает индикацию, было ли внесено изменение. Однако простые инструкции типа загрузки (load-type) обычно выполняются перед cas для выборки старого значения. Классическая проблема заключается в том, что если поток читает (load) значение A, вычисляет новое значение C, и затем использует (cas) для замены A на C, то у него нет способа узнать, заменила ли какая-то конкурентная активность (другой поток) значение A на какое-нибудь другое значение B, и затем и затем в промежутке восстановила A (так называемая проблема ABA). В некоторых алгоритмах (например, где значения в памяти являются указателями на динамически выделяемые блоки), эта проблема может привести к некорректному поведению кода. Наиболее распространенное решение использует инструкцию double-wide cas для обновления и указателя, и соседнего счетчика; к сожалению, такая инструкция требует специального формата, позволяющего указать несколько регистров, выполнить несколько операций чтения и записи, и может иметь сложное поведение на шине.

Альтернатива lr/sc более эффективна. Обычно она требует только одной загрузки из памяти (memory load), и желательно минимизировать медленные операции с памятью. Достоверно также: она управляет всеми обращениями к ячейке памяти, а не просто гарантирует битовый шаблон. Однако, в отличие от cas, может произойти блокировка (livelock), в которой два или большее количество потоков неоднократно приводят к сбою команд друг друга. RISC-V гарантирует продвижение вперед (без livelock), если код следует правилам тайминга и последовательности инструкций: 1) Используется только подмножество I инструкций I. 2) Чтобы предотвратить повторяющиеся промахи кэша, код (включая циклы повтора, retry loop) должен занимать не более 16 последовательных инструкций. 3) Не используются инструкции system или fence instructions, и не берутся обратные ветвления (backward branch) между lr и sc. 4) Обратное ветвление для retry loop must должна быть оригинальной последовательностью.

Спецификация дает пример того, как использовать атомарные инструкции read-modify-write для блокировки (lock) структуры данных.

Compressed subset. Стандарт RISC-V ISA указывает, что все инструкции имеют ширину 32 бита. Это обеспечивает особенно простую реализацию, но как и в других RISC-процессора с 32-разрядным кодированием инструкций, в результате получается код повышенного размера, который получается больше, чем у процессоров с набором инструкций, где инструкции могут быть переменной длины.

Для компенсации этого недостатка 32-разрядные инструкции RISC-V фактически кодируются 30 битами; 3⁄4 пространства кода операции резервируется для опционального (т. е. не обязательного, но рекомендованного) сжатого набора инструкций переменной длины RVC (variable-length compressed instruction set), который включает в себя 16-разрядные инструкции. Как и в ARM Thumb и MIPS16, сжатые инструкции это просто альтернативное кодирование для подмножества увеличенных инструкций. В отличие от сжатого набора ARM или MIPS, пространство было зарезервировано с самого начала, поэтому нет отдельного режима работы. Стандартные (standard) и сжатые (compressed) инструкции могут свободно перемешиваться (для расширения используется буква C).

Поскольку сжатые инструкции (наподобие Thumb-1 и MIPS16) это просто альтернативное кодирование (alias, псевдоним) для выбранного подмножества увеличенных инструкций, компрессия может быть реализована в ассемблере, и компилятору даже необязательно знать об этом.

Прототип RVC был протестирован в 2011 году. Результат показал, что код прототипа на 20% меньше, чем x86 PC и сжатый код MIPS, и на 2% больше, чем код ARM Thumb-2. Прототип также существенно уменьшил как требуемую для кэша память, так и предполагаемое энергопотребление системы памяти.

Исследователи намеревались уменьшить размер двоичного кода для малых компьютеров, особенно для встраиваемых вычислительных систем. Прототип включает 33 наиболее часто используемых инструкций, перекодированных в компактный 16-битный формат с использованием кодов операций ранее зарезервированных для compressed-набора. Сжатие осуществлялось в ассемблере, компилятор оставался без изменений. Compressed инструкции пропускают поля, которые часто нулевые, используют малые immediate-значения или обращаются к подмножествам регистров (16 или 8). Инструкция addi очень распространена, и часто сжимается.

Самое большое различие в размере кода по сравнению с ARM Thumb произошло потому, что у RISC-V, и у прототипа, не было инструкций для сохранения и восстановления нескольких регистров. Вместо этого компилятор генерирует обычные инструкции, которые обращаются к стеку. Прототип ассемблера RVC тогда часто конвертирует это в сжатые формы половинного размера. Однако это все еще занимает больше места в коде, чем инструкции ARM, сохраняющие и восстанавливающие несколько регистров. Исследователи предлагают модифицировать компилятор для вызова библиотечных подпрограмм, сохраняющих и восстанавливающих регистры. Эти подпрограммы из-за частых вызовов сохранят тенденцию оставаться в кэше кода, и поэтому будут работать быстро, хотя вероятно не так быстро, как инструкция save-multiple.

Стандарт RVC требует периодического использования 32-битных инструкций. Некоторые нестандартные предложения RVC являются полными наборами инструкций, не требующими 32-битных инструкций и, как говорят, имеют более высокие плотности кода, чем стандартные RVC. Другое предложение основывается на них и утверждает, что также использует меньший диапазон кодирования.

Embedded subset. Набор инструкций для самых маленьких встраиваемых процессоров (embedded CPU, set E; их также часто называют микроконтроллерами, MCU) урезается другими методами: поддерживается только 16 целочисленных регистров из 32.  Могут использоваться все текущие расширения; рассматривается floating-point расширение, использующее целочисленные регистры. Набор привилегированных инструкций поддерживает только machine mode, user mode и схемы памяти, которые используют base-and-bound перемещение адресов.

Обсуждается профиль микроконтроллера для RISC-V, чтобы упростить разработку "глубоко встраиваемых" систем. Фокус приходится на быструю, простую поддержку языка C для прерываний, упрощенные режимы безопасности и упрощенный двоичный интерфейс приложений POSIX.

Предлагают также меньшие, нестандартные 16-bit RV16E ISA: несколько серьезных реализаций будут использовать 16-битные C инструкции с 8 × 16-разрядными регистрами. Апрельская шутка предложила очень практичную договоренность: использовать 16 × 16-bit целочисленные регистры вместе со стандартными EIMC ISA (включая 32-битные инструкции). Шутка заключалась в том, что использовалось переключение банков, тогда как 32-битный CPU явно превосходил бы по адресному пространству.

Privileged instruction set. RISC-V ISA включает спецификацию отдельного набора привилегированных инструкций, который в основном описывает 3 уровня привилегий плюс ортогональный режим гипервизора. В декабре 2021 года версия 1.12 была ратифицирована RISC-V International.

Version 1.12 спецификации поддерживает несколько типов компьютерных систем:

1. Системы, где есть только machine mode, вероятно для простых встраиваемых решений.
2. Системы, где есть как machine mode (для простого супервизора), так и режим пользователя (user-mode), чтобы реализовать относительно защищенные встраиваемые решения.
3. Системы, где есть machine mode, supervisor mode (для операционной системы) и режимы пользователя, чтобы можно было реализовать традиционную операционную систему.

Эти типы примерно соответствуют максимум 4 кольцам привилегий и безопасности: machine, hypervisor, supervisor и user. Ожидается, что каждый уровень также будет иметь тонкий слой стандартизованного поддерживающего ПО, которое взаимодействует с более привилегированным уровнем, или оборудованием.

ISA также включает в себя режим супервизора (hypervisor mode), который ортогонален режимам пользователя (user mode) и супервизора (supervisor mode). Базовой фичей является бит конфигурации, который либо разрешает код уровня супервизора для доступа к регистрам гипервизора, либо вызывает прерывание при доступе. Этот бит позволяет режиму супервизора напрямую управлять оборудованием, необходимым гипервизору. Это упрощает реализацию гипервизоров, размещенных в операционной системе. Это популярный режим для запуска компьютеров складского масштаба. Для поддержки не размещенных (non-hosted) гипервизоров, бит может заставить генерировать прерывание для гипервизора. Дизайн также упрощает вложенные гипервизоры, в которых гипервизор работает под гипервизором, и при необходимости позволяет для ядра (kernel) использовать фичи гипервизора в собственном коде. В результате гипервизорная форма ISA поддерживает 5 режимов: machine, supervisor, user, supervisor-under-hypervisor (супервизор под гипервизором) и user-under-supervisor (пользователь под супервизором).

Спецификация набора привилегированных инструкций явно определяет аппаратные потоки (hardware thread), или hart. Несколько аппаратных потоков являются обычной практикой на компьютерах с более широкими возможностями. Когда один поток приостанавливается (stall) в ожидании памяти, другие часто могут продолжить свою работу. Аппаратные потоки могут помочь лучше использовать большее количество регистров и единиц выполнения на быстрых процессорах с неупорядоченным выполнением (out-of-order CPU). И наконец, аппаратные потоки могут быть простым, мощным способом обработки прерываний: для них не требуется сохранение или восстановление регистров, они просто выполняются на другом аппаратном уровне. Однако единственным аппаратным потоком, необходимым в компьютере RISC-V, является thread zero (нулевой поток).

Прерывания (interrupt) и исключения (exception) обрабатываются совместно. Исключения вызываются выполнением инструкций, включая недопустимые инструкции и системные вызовы (system call), в то время как прерывания вызываются внешними событиями. Существующие определения регистра управления и состояния (control and status register) поддерживают для RISC-V исключения ошибки и памяти, а также небольшое количество прерываний, обычно через "advanced core local interruptor" (ACLINT). Для систем с большим количеством прерываний спецификация также определяет контроллер прерываний уровня платформы (platform-level interrupt controller, PLIC), чтобы координировать большое количество прерываний между несколькими процессорами. Прерывания всегда стартуют на уровне машины (machine level) с самыми высокими привилегиями, и регистры управления каждого уровня имеют явные биты перенаправления для маршрутизации прерываний на менее привилегированный код. Например, гипервизор не должен включать в себя ПО, которое выполняется на каждом прерывании для перенаправления прерывания в операционную систему. Вместо этого при настройке он может установить биты для пересылки прерывания.

В спецификации поддерживается несколько систем памяти. Physical-only (чисто физическая память) подходит для самых простых встраиваемых систем. Также есть четыре системы виртуальной памяти UNIX-стиля для памяти, кэшируемой в накопителях типа флешек и жестких дисков (mass-storage systems). Системы виртуальной памяти поддерживают MMU с четырьмя вариантами размеров, т. е. с адресным пространством 32, 39, 48 и 57 бит. Все системы виртуальной памяти поддерживают страницы 4 килобайта (KiB), многоуровневые деревья страничных таблиц (multilevel page-table trees) и используют очень похожие алгоритмы для просмотра деревьев страничных таблиц. Все они предназначены для аппаратного или программного обеспечения для работы со страницами. Для опционального снижения накладных расходов на просмотр страничных таблиц, очень большие (super-sized) страницы могут быть leaf-страницами на более высоких уровнях деревьев страничных таблиц системы. SV32 поддерживает только 32-битные реализации, имеет двуслойное дерево страничных таблиц, и поддерживает суперстраницы 4 MiB (superpages). У SV39 имеет трехслойное дерево страничных таблиц, поддерживает 2 MiB superpages и 1 GiB gigapages. SV48 требуется для поддержки SV39. У него также есть 4-уровневое дерево страничных таблиц и поддерживаются 2 MiB superpages, 1 GiB gigapages, и 512 GiB terapages. У SV57 есть 5-уровневое дерево страничных таблиц с поддержкой 2 MiB superpages, 1 GiB gigapages, 512 GiB terapages и 256 TiB petapages. Superpages выравниваются по границам страницы для следующего более низкого уровня размера страницы.

Манипуляции над битами. Некоторые расширения ISA для работы с битами (bit-manipulation) были ратифицированы в ноябре 2021 года (Zba, Zbb, Zbc, Zbs). Расширения Zba, Zbb и Zbs вероятно являются расширениями стандартных целочисленных инструкций I: Zba содержит инструкции для ускорения вычисления адресов элементов в массивах типов данных размерами 2, 4 или 8 байт (sh1add, sh2add, sh3add), и для 64 (и 128) разрядных процессоров при индексировании целыми числами без знака (add.uw, sh1add.uw, sh2add.uw, sh3add.uw и slli.uw). Инструкции Zbb содержат операции для подсчета начальных, завершающих нулевых бит или всех единичных бит в полных и 32 слов операциях (clz, clzw, ctz, ctzw, cpop, cpopw), реверсирования порядка байта (rev8), логические инструкции с отрицанием второго входа (andn, orn, xnor), расширение знака и нуля (sign and zero extension, sext.b, sext.h, zext.h), которые не могут быть предоставлены в качестве особых случаев других инструкций (andi, addiw, add.wu), min и max целых чисел (signed и unsigned), вращение бит (влево и вправо) регистра и 32-разрядных слов (rori, roriw, ror, rorw, rol, rolw), и побитная операция "or combine", которая позволяет определить нулевой байт в полном регистре, что полезно применять в функциях обработки C-стиля строк, завершающихся нулевым байтом (null terminated strings). Расширение Zbs позволяет устанавливать (setting), получать значение (getting), очищать (clearing) и менять значение на противоположное (toggling) для отдельных бит по их индексу (bseti, bset, bexti, bext, bclri, bclr, binvi, binv).

Расширение Zbc содержат инструкции для "carryless multiplication", которые делают умножения полиномов через поле Галуа which does the multiplication of polynomials over the Galois field GF(2) (clmul, clmulh, clmulr). Это полезно для криптографии и проверок целостности данных на CRC.

При правильном выполнении более специализированное подмножество битовых манипуляций может помочь в криптографических, графических и математических приложениях. Обсуждались дополнительные инструкции, включающие сдвиг единиц (shift in ones), обобщенное реверсирование бит (generalized bit-reverse), перестановки (shuffle and crossbar permutations), операции с полями бит (bit-field place), извлечение и депонирование пакета из двух слов (extract and deposit pack two words), байт или полуслов в одном регистре, инструкции CRC, операции битовой матрицы (bit-matrix, только в RV64), условное микширование (conditional mix), условное перемещение (conditional move), funnel shifts. Критерий для включения в набросок стандарта (draft) - совместимость с философией RISC-V и форматами ISA, значительные улучшения плотности кода или скорости (например, как минимум 3 к 1 выигрыш в инструкциях), и существенные внедрения в реальных приложениях, включая предварительно существующую поддержку со стороны компилятора. Версия 0.93 bit-manipulation расширения включает эти инструкции; некоторые из них находятся в версии 1.0.1 в виде скалярных и энтропийных инструкций расширения криптографии.

Packed SIMD. Упакованные SIMD инструкции широко используются в коммерческих CPU для недорогого ускорения мультимедиа и обработки других цифровых сигналов. Для простых, удешевленных систем RISC-V базовая спецификация ISA предлагает использовать биты floating-point регистров для выполнения параллельно одиночной инструкции, арифметики множественных данных (multiple data sub-word arithmetic, SIMD).

В 2017 один вендор опубликовал более подробное предложение в список рассылки, и это можно назвать версией 0.1. По состоянию на 2019 год эффективность этого предложенного ISA варьировалась от 2x до 5x базового CPU для различных кодеков DSP. В предложении отсутствовали форматы инструкций и присвоение лицензии для RISC-V International, но оно было рассмотрено списком рассылки. Некоторые не популярные части этого предложения заключались в том, что был добавлен код условия, первый в дизайне RISC-V, связывающий соседние регистры (также впервые), и был добавлен счетчик циклов, что может быть трудно реализовать в некоторых микроархитектурах.

Vector set. Предложенный набор инструкций обработки массива (vector-processing) может сделать устаревшим набор инструкций упакованных SIMD. Разработчики надеются, что получить достаточно гибкости, чтобы CPU смог реализовать векторные инструкции в стандартных регистрах процессора. Это позволило бы минимальные реализации с производительностью, аналогичной multimedia ISA, как описано выше. Однако реальный векторный сопроцессор может выполнять тот же код с более высокой производительностью.

По состоянию на 19 сентября 2021 года vector-расширение находится на версии 1.0. Это консервативный, гибкий дизайн универсального векторного процессора смешанной точности (general-purpose mixed-precision vector processor), подходящего для выполнения вычислительных ядер (compute kernels). Код будет легко портироваться на CPU с различными длинами вектора, в идеале без перекомпиляции.

Напротив, short-vector SIMD расширения менее удобны. Они используются в x86, ARM и PA-RISC. В них изменение ширины слова приводит к изменению набора команд для расширения векторных регистров (в случае x86 от 64-разрядных MMX регистров к 128-разрядным Streaming SIMD Extensions (SSE), до 256-разрядных Advanced Vector Extensions (AVX) и AVX-512). В результате разрастается набор инструкций, и появляется необходимость портирования рабочего кода на новые инструкции.

В RISC-V vector ISA вместо фиксации длины вектора в архитектуре доступны инструкции (vsetvli, vsetivli и vsetvl), которые принимают запрошенный размер и устанавливают длину вектора на минимум аппаратного предела и запрошенного размера. Таким образом. предложение RISC-V больше похоже на длинный векторный дизайн Cray или ARM Scalable Vector Extension. Т. е. каждый вектор до 32 векторов имеет одинаковую длину.

Приложение указывает общую требуемую ширину вектора, и процессор определяет длину вектора, которую он может обеспечить на доступных ресурсах чипа. Это принимает форму инструкции (vsetcfg) с четырьмя непосредственными (immediate) операндами, указывающими количество векторных регистров каждой доступной необходимой ширины. Общая сумма не должна быть более адресуемого предела 32, но может быть меньше, если приложению все регистры не требуются. Длина вектора ограничена доступны на чипе хранилищем, поделенным на количество байт хранилища, необходимого для каждой записи (могут также существовать дополнительные аппаратные ограничения, которые в свою очередь, могут позволить реализации в стиле SIMD).

Вне векторных циклов приложение может обнулять количество запрошенных векторных регистров, экономя операционной системе работу по их сохранению на переключениях контекста.

Длина вектора не только зависит от архитектуры, но разработана таким образом, что может также меняться во время выполнения. Для достижения этой гибкости набор инструкций вероятно будет использовать пути данных переменной ширины и операции переменного типа с использованием полиморфной перегрузки. Плат состоит в том, что они могут уменьшить размер и сложность ISA и компилятора.

Последние экспериментальные векторные процессоры с путями данных переменной ширины также показывают прибыльное увеличение в операциях в на: секунду (скорость), рабочую область (ниже цена) и ватт (увеличенное время работы от батареи).

В отличие от обычного современного графического процессора, не планируется предоставлять специальные аппаратные средства для поддержки предсказаний ветвления. Вместо этого будет использоваться предсказание, основанное на компиляторе (что дешево).

Внешняя система отладки. Существует предварительная спецификация для аппаратного отладчика RISC-V. Отладчик будет использовать систему транспорта наподобие Joint Test Action Group (JTAG) или Universal Serial Bus (USB), чтобы получить доступ к регистрам отладки. Стандартный аппаратный интерфейс отладки может поддерживать либо стандартизированный абстрактный интерфейс, либо подачу команд.

На момент января 2017 года точная форма абстрактного интерфейса оставалась неопределенной, но предложения включают в себя систему отображения на память со стандартизированными адресами для регистров отладочных устройств или регистра команд и регистра данных, доступных для коммуникационной системы. Корреспонденты утверждают, что подобные системы используются интерфейсом background debug mode (BDM) от Freescale для некоторых CPU, ARM, OpenRISC и LEON от Aeroflex.

При подаче команд CPU будет обрабатывать расширение отладки для выполнения отдельных инструкций, записанных в регистр. Это может быть дополнено регистром передачи данных и модулем для прямого доступа к памяти. Подача инструкции позволяет отладчику получить доступ к компьютеру так же, как это делает ПО. Это также минимизирует изменения в CPU, и адаптируется ко многим типам CPU. Было отмечено, что это особенно подходит для RISC-V, потому что он предназначен для многих типов компьютеров. Регистр передачи данных позволяет отладчику записать цикл перемещения данных в RAM, и выполнить затем этот цикл, чтобы переместить данные из компьютера на максимальной скорости, доступной для канала данных системы отладки. Специалисты отмечают, что подобные системы используются MIPS Technologies MIPS, Intel Quark, Xtensa от Tensilica, и для интерфейса Power ISA CPU background debug mode (BDM) от Freescale.

Вендор для стандартизации предложил подсистему аппаратной трассировки, пожертвовал соответствующий дизайн и инициировал проверку. Предлагается аппаратный модуль, который может трассировать выполнение кода на большинстве RISC-V CPU. Чтобы уменьшить объем передаваемых данных и позволить упрощенные или не очень дорогие пути для трассировки данных, предложение не генерирует данные трассировки, которые могут быть вычислены из двоичного образа кода. Посылаются только данные, которые указывают "непереносимые" пути через программу, такие как взятые условные ветвления. Чтобы уменьшить объем данных трассировки ветвления могут быть просчитаны, такие как безусловные ветвления, и информация о них не передается в трассировку. Предлагаемый интерфейс между модулем и блоком управления это логический сигнал для каждого непереносимого типа инструкции. Адреса и другие данные предоставляются в специализированной шине, подключенной к соответствующим источникам данных в CPU. Структура пересылаемых данных во внешний блок трассировки это последовательность коротких сообщений с необходимыми данными. Подробности канала данных намеренно не описаны в предложении, потому что некоторые из них вероятно имеют особый смысл.

[Реализации RISC-V]

Организация RISC-V поддерживает список реализаций RISC-V CPU и SoC. Из-за торговых войн и возможных санкций от доступа к американским проприетарным ISA, Китай переводит большинство своих архитектур CPU и MCU на ядра RISC-V.

Существующие проприетарные реализации включают:

• Allwinner Technology реализовала XuanTie C906 CPU в своем D1 Application Processor.
• Andes Technology Corporation, Founding Premier член RISC-V International. В её семейство RISC-V CPU входят процессоры от маленьких 32-разрядных ядер до продвинутых 64-разрядных процессоров с фичами DSP, FPU, vector, superscalar, и/или поддержкой multicore.
• Bouffalo Lab реализовала серию MCU, основанную на RISC-V (RV32IMACF, BL60x/BL70x).
• CloudBEAR это компания по разработке интеллектуальной собственности (IP), которая выпустила свои собственные ядра RISC-V для нескольких приложений.
• Codasip, член фонда RISC-V International, разработала несколько эффективных по энергопотреблению встраиваемых ядер (low-power embedded), высокопроизводительные встраиваемые ядра (high-performance embedded) и ядра процессора приложений.
• Cortus, платиновый член фонда RISC-V и RISC-V International, имеет несколько реализаций RISC-V. Cortus предоставляет разработки ASIC, используя свое объемное портфолио, включающее процессоры RISC-V 32/64-bit для применений от low-end до очень высокопроизводительных RISC-V OoO процессоров, аппаратные цифровые, аналоговые, RF-средства, решения по безопасности и полную экосистему IDE/toolchain/debug.
• Espressif добавил RISC-V ULP сопроцессор [3, 4] в свой микроконтроллер ESP32-S2. В ноябре 2020 года Espressif анонсировала свой ESP32-C3, одноядерный, 32-разрядный MCU, основанный на RISC-V (RV32IMC).
• Fraunhofer IPMS была первой организацией, разработавшей ядро RISC-V, которое может удовлетворять требованиям функциональной безопасности. IP Core EMSA5 это 32-разрядный процессор с конвейером из 5 уровней, доступный в обычном варианте (EMSA5-GP) и как safety-вариант (EMSA5-FS), удовлетворяющий стандарту ISO 26262 Automotive Safety Integrity Level-D.
• У компании GigaDevice есть несколько серий MCU, основанных на RISC-V (RV32IMAC, серия GD32V), с одной из них, используемой на плате Longan Nano производства китайской электронной компании Sipeed.
• Google разработала Titan M2 security-модуль для Pixel 6 и Pixel 7.
• GreenWaves Technologies в феврале 2018 года анонсировала доступность GAP8, 32-рарядного одного контроллера плюс восьми вычислительных ядер 32-bit SoC (RV32IMC) и плату разработчика. Их плата разработки GAPuino GAP8 начала поставляться в мае 2018 года.
• Imagination Technologies RTXM-2200 это первое ядро из их ассортимента Catapult. Это real-time, deterministic, 32-bit embedded CPU.
• Instant SoC RISC-V cores из ядер FPGA. Система на чипе (SoC), включающая ядра RISC-V, с поддержкой C++.
• Micro Magic Inc. в октябре 2020 года анонсировала самое быстрое 64-bit RISC-V ядро, достигшее производительности 5 ГГц и 13,000 CoreMarks.
• MIPS в 2021 году приступила к разработке ядер RISC-V. В декабре 2022 она выкатила первую реализацию eVocore P8700.
• Seagate в декабре 2020 анонсировала два разработанных ядре RISC-V общего назначения, предназначенных для использования в своих устройствах хранения данных.
• Компания SiFive, специально организованная для разработки железа RISC-V, выпустила модели процессора в 2017 году. Это SoC система, включающая 4 ядра 64-bit (RV64GC), на которой могут работать операционные системы общего назначения, такие как Linux.
• StarFive, дочерняя компания SiFive, находящейся в Китае, предоставляет две реализации RISC-V – одну для приложений big data, и другую для computational storage.
• Syntacore, член фонда RISC-V International и один из первых коммерческих вендоров RISC-V IP, начиная с 2015 разработала и лицензировала семейство RISC-V IP. На момент 2018 года продуктовая линейка имеет восемь 32- и 64-разрядных ядер, включая open-source SCR1 MCU core (RV32I/E[MC]). Первые коммерческие SoC, основанные на Syntacore IP, были продемонстрированы в 2016 году.
• WinChipHead (WCH), китайский производитель электронных компонентов популярных и недорогих чипов USB (таких как CH340 и ARM MCU) представила линейку простых, недорогих RISC-V микроконтроллеров CH32Vxxx, возглавляемую CH32V003 по цене $0.10.
• Codasip и UltraSoC разработали разработали RISC-V embedded SOC с полной поддержкой интеллектуальной собственности (IP), которые комбинируют ядра Codasip RISC-V и другие IP с отладкой UltraSoC, оптимизацией и аналитикой.
• На момент 2020 года сектор обороны и стратегии Индии начал использовать 64-bit RISC-V, основанный на 100-350 МГц процессоре Risecreek, разработанный компанией IIT-Madras и производимый Intel на техпроцессе 22 nm FinFET.
• RIES v3.0d платы разработчика, первые для использования процессоров DIR-V VEGA RISC-V. Они содержат VEGA ET1031, 32-bit RISC-V CPU с тремя последовательными портами UART, четырьмя портами SPI, 2 мегабайтами памяти flash, 256KB SRAM и тремя 32-разрядными таймерами. Это работает на 100 МГц, рекомендуется для использования в носимых устройствах, игрушках малых интеллектуальных устройствах интернета вещей (IoT) и сенсорах C-DAC индийского рынка.

В разработке:

• ASTC разработала RISC-V CPU для встраиваемых решений (embedded IC).
• Centre для Development of Advanced Computing (C-DAC) в Индии разрабатывает одноядерный in-order 32-bit, одноядерный in-order 64-bit и три out-of-order процессора (одноядерный, 2-ядерный и 4-ядерный) RISC-V под серией VEGA Microprocessors.
• Cobham Gaisler NOEL-V 64-bit.
• Computer Laboratory, университет Кембриджа, в содружестве с FreeBSD Project, портировала операционную систему на 64-bit RISC-V для использования в качестве программно-аппаратной исследовательской платформы.
• Esperanto Technologies анонсировала свою разработку трех основанных на RISC-V процессоров: ET-Maxion high-performance core, ET-Minion energy-efficient core и ET-Graphics graphics processor.
• Esperanto ET-SoC-1, 200 TOPS "kilocore" суперкомпьютер на чипе, 1088 small 64-bit in-order ET-Minion ядра с tensor/vector блоками и 4 большими ядрами 64-bit out-of-order ET-Maxion.
• ETH Zurich и Болонский университет совместно разработали open-source RISC-V PULPino процессор как часть проекта Parallel Ultra-Low Power (PULP) для энергоэффективных IoT-вычислений.
• European Processor Initiative (EPI), RISC-V Accelerator Stream.
• Reconfigurable Intelligent Systems Engineering Group (RISE) IIT-Madras разрабатывают шесть Shakti series RISC-V open-source CPU для шести различных применений, от малого 32-bit CPU для Интернета Вещей (Internet of things, IoT) до большого 64-bit CPU, разработанного для компьютеров складского применения, таких как серверные фермы на основе технологий RapidIO и Hybrid Memory Cube. 32-bit Moushik успешно загружается RISE для приложений кредитных карт, электронных машин голосования (electronic voting machines, EVM), камер наблюдения, сейфовых замков, персональных систем наблюдения за здоровьем.
• lowRISC, некоммерческий проект для реализации полностью open-source аппаратной системы на чипе (SoC), основанной на 64-bit RISC-V ISA.
• Nvidia планирует использовать RISC-V для замены их процессора Falcon на их же графических картах GeForce.
• Консорциум RV64X работает над набором графических расширений для RISC-V, и было анонсировано, что разрабатывается open source RISC-V core с блоком GPU.
• SiFive анонсировала свое первое RISC-V out-of-order high performance CPU core, U8 Series Processor IP.
• Ventana показала, что разрабатывает high performance RISC-V CPU IP и технологии чипсета, нацеленные на приложения дата-центра.

Open source. Существуют многие открытые разработки RISC-V CPU, включая:

• Процессоры из Беркли (Berkeley CPU). Они реализованы на уникальном языке разработки железа Chisel, и некоторые получили имена известных поездов:
   - 64-bit Rocket. Может подойти для компактных, малопотребляющих промежуточных вычислителей, таких как персональные устройства. Получил имя в честь паровоза Stephenson Rocket.
   - 64-bit Berkeley Out of Order Machine (BOOM). Berkeley Out-of-Order Machine (BOOM) синтезируемое и параметризируемое open source RV64GC RISC-V core, написанное на языке конструирования аппаратуры Chisel. BOOM использует большую часть инфраструктуры, созданной для Rocket, и может использоваться для персонального компьютера, суперкомпьютера, и компьютера складского масштаба.
   - Five 32-bit Sodor CPU, разработанный для студенческих проектов. Sodor это вымышленный остров поездов из детских рассказов о таковом двигателе Томаса (Thomas the Tank Engine).
• PicoRV32 от Claire Wolf, 32-разрядный микроконтроллер (MCU) класса RV32IMC, реализация на Verilog.
• SCR1 от Syntacore, 32-разрядный микроконтроллер (MCU) класса RV32IMC, реализация на Verilog.
• MIPT-MIPS от MIPT-ILab (MIPT Lab для CPU Technologies, созданный с помощью Intel). MIPT-MIPS это симулятор кремния, работающий с точностью до цикла, для RISC-V и MIPS CPU. Он измеряет производительность программы, работающей на CPU. Среди ключевых функций: совместимость с интерактивными системными вызовами MARS, интерактивная симуляция с GDB, конфигурируемый блок предсказания ветвления с несколькими алгоритмами предсказания, кэшем инструкций и обходом данных между уровнями (interstage data bypassing). Реализация на C++.
• SERV от Olof Kindgren, физически малое, проверенное bit-serial RV32I core на Verilog, самый маленький в мире RISC-V CPU. Интегрировано в системы конструирования LiteX и FuseSoC SoC. Реализация FPGA состояла из 125 таблиц поиска (lookup table, LUT) и 164 триггеров (flip-flop), и работала со скоростью 1.5 MIPS, на 130 nm-node ASIC, весила 2.1kGE и самые продвинутые ПЛИС (high-end FPGA) могла вмещать 10000 ядер.
• PULPino (Riscy и Zero-Riscy) из ETH Zürich / Болонский университет. Ядра в PULPino реализуют простой RV32IMC ISA для микроконтроллеров (Zero-Riscy) или более мощный RV32IMFC ISA со своими DSP-расширениями для встраиваемой обработки сигналов (embedded signal processing).
• Western Digital в декабре 2018 анонсировала ядро RV32IMC под названием SweRV EH1 с упорядоченной двухходовой суперскалярной и девятиступенчатой конструкцией конвейера (in-order 2-way superscalar, nine-stage pipeline design). В декабре 2019, WD анонсировала SweRV EH2 in-order core с двумя аппаратными потоками и девятиступенчатым конвейером, а единое проблемное ядро SweRV EL2 с 4-уровневым конвейером WD планирует использовать для процессоров на основе SweRV в своих flash-контроллерах и SSD, и в январе 2019 года выпустило его как open-source для сторонних разработчиков.
• NEORV32 от Stephan Nolting, гибко конфигурируемый блок 32-разрядного микроконтроллера (MCU) класса RV32[I/E]MACUX_Zbb_Zfinx_Zicsr_Zifencei CPU со встроенным отладчиком, написанный на платформо-независимом VHDL. Проект включает SoC стиля MCU, где уже есть модули наподобие UART, таймеров, SPI, TWI, TRNG, а также встроенные блоки памяти.
• Alibaba Group в июле 2019 года анонсировала 2.5 GHz 16-core 64-bit (RV64GCV) XuanTie 910 out-of-order процессор. В октябре 2021 года XuanTie 910 был выпущен как Open-Source.
• Institute of Computing Technology Chinese Academy of Sciences (ICT CAS) в июне 2020 запустил проект процессора XiangShan high-performance RISC-V.

[Программное обеспечение]

Обычная проблема для нового набора инструкций - малое количество реализаций CPU и программ. Обе эти проблемы ограничивают возможности применения и адаптации в реальных проектах. У RISC-V есть большое количество разработок CPU. ПО для RISC-V включает тулчейны, операционные системы, промежуточный софт (middleware) и софт для разработки.

Доступные программные инструменты RISC-V включают тулчейн GNU Compiler Collection (GCC, в который входит отладчик GDB), тулчейн LLVM, симулятор OVPsim (и библиотека RISC-V Fast Processor Models), симулятор Spike, а также симулятор в QEMU (RV32GC/RV64GC). JEP 422: Linux/RISC-V Port был интегрирован в главную линейку репозитория OpenJDK. Доступны сборки Java 21+ Temurin OpenJDK для RISC-V от Adoptium.

Существует поддержка операционной системы для ядра Linux, FreeBSD, NetBSD и OpenBSD, однако инструкции режима супервизора не были стандартизованы до версии 1.11 стандарта привилегированного набора инструкций (privileged ISA specification), поэтому эта поддержка является предварительной. Предварительный порт FreeBSD для архитектуры RISC-V был обновлен в феврале 2016 года, и поставляется в FreeBSD 11.0. Стабилизированы порты дистрибутивов Debian и Fedora Linux и порт Haiku (они все поддерживают только 64-bit RISC-V, без планов поддержки версии 32-bit). Существует порт универсального загрузчика Das U-Boot. UEFI Spec v2.7 определил привязку RISC-V, а порт TianoCore был реализован инженерами HPE и, как ожидается, будет расширен. Имеется предварительный порт seL4 microkernel. Hex Five выпустила первый Secure IoT Stack для RISC-V с поддержкой FreeRTOS [10]. Также была портирована xv6, современная реализация Sixth Edition Unix на ANSI C используется для целей обучения в MIT. Pharos RTOS была портирована на 64-bit RISC-V (включая защиту времени и защиту памяти). См. также сравнение операционных систем реального времени (RTOS) [6].

Разработан симулятор для запуска RISC-V Linux в браузере на основе JavaScript.

QEMU поддерживает запуск (используя двоичную трансляцию) 32- и 64-bit систем RISC-V (например Linux) со многими эмулируемыми или виртуализированными устройствами (serial, parallel, USB, network, storage, real time clock, watchdog, audio), а также запуск двоичного кода RISC-V Linux (транслируя syscalls в host kernel). Также поддерживается multi-core emulation (SMP).

Симулятор Creator портируемый, и позволяет изучать языки ассемблера для программирования для различных процессоров (у Creator есть примеры реализации инструкций RISC-V и MIPS32).

Расширяемый обучающий симулятор WepSIM реализует (микропрограммируемое) подмножество инструкций RISC-V (RV32I+M), и позволяет выполнять подпрограммы на ассемблере.

Несколько языков было применено для создания IP ядер RISC-V, включая язык описания аппаратуры Chisel на основе Scala, который может сократить проекты до Verilog для использования в устройствах, и язык описания процессора CodAL, который использовался для описания ядер процессора RISC-V и для генерации соответствующих HDK (RTL, testbench и UVM) и SDK. RISC-V International Compliance Task Group имеет репозиторий GitHub для RV32IMC.

[Инструментарий для разработки]

• IAR Systems выпустила первую версию IAR Embedded Workbench for RISC-V, которая поддерживает ядра RV32 32-bit RISC-V cores и расширения в первой версии. Последующие релизы будут включать поддержку 64-bit и поддержку уменьшенного базового набора инструкций RV32E, а также функциональную сертификацию безопасности и решения по безопасности.
• Lauterbach добавила поддержку для RISC-V в свои отладчики TRACE32 JTAG. Lauterbach также анонсировала поддержку трассировку процессоров на основе SiFives RISC-V NEXUS.
• SEGGER выпустила новый продукт под именем "J-Trace PRO RISC-V", с добавленной поддержкой ядер RISC-V для своего семейство адаптеров отладки J-Link. Поддержка RISC-V также была добавлена в их рабочее окружение разработки Embedded Studio, их RTOS embOS и ПО для встраиваемых систем.
• UltraSOC, теперь часть компании Siemens, предложила стандартную систему трассировки и пожертвовала соответствующую реализацию.

[Ссылки]

1. RISC-V site:wikipedia.org.
2. History of RISC-V site:riscv.org.
3. ESP32: система команд сопроцессора ULP.
4. ESP32: программирование сопроцессора ULP.
5. Using FreeRTOS on RISC-V Microcontrollers site:freertos.org.
6. Comparison of real-time operating systems site:wikipedia.org.
7. Wave Computing Closes Its MIPS Open Initiative with Immediate Effect, Zero Warning site:hackster.io.
8. Instruction Sets Should Be Free: The Case For RISC-V site:eecs.berkeley.edu.
9. ARM4U site:opencores.org.
10FreeRTOS: использование в микроконтроллерах RISC-V.

 

Добавить комментарий


Защитный код
Обновить

Top of Page