Открыть сервис

RV32I

RV32I — это базовый набор инструкций (ISA) 32-разрядной архитектуры RISC-V, разработанный в 2010 году в Калифорнийском университете в Беркли. RV32I является минимальным и обязательным подмножеством для всех реализаций RISC-V, обеспечивающим поддержку целочисленных операций, работу с памятью, управление потоком выполнения и системные вызовы. Он служит фундаментом для построения более специализированных расширений (например, для работы с плавающей запятой, атомарными операциями или векторными вычислениями). RV32I отличается простотой, модульностью и открытостью, что делает его популярным в образовательных проектах, встраиваемых системах и исследовательских разработках.

История

Архитектура RISC-V была разработана группой исследователей под руководством Крсте Асановича, Эндрю Уотермана и Дэвида Паттерсона в рамках проекта Parallel Computing Laboratory (ParLab) в Калифорнийском университете в Беркли. Первая версия спецификации ISA была опубликована в 2011 году. RV32I был определён как минимальный набор инструкций, необходимый для выполнения произвольных вычислений, и стал основой для всех последующих расширений. В 2014 году была выпущена версия 2.0 спецификации, а в 2019 году — версия 2.2, которая остаётся стабильной и широко используемой. В 2021 году RISC-V International (организация, управляющая развитием архитектуры) утвердила версию 20191213, которая закрепила RV32I как обязательный компонент для всех процессоров RISC-V.

Основные характеристики

RV32I представляет собой 32-разрядную архитектуру с фиксированной длиной инструкций (32 бита). Она включает 32 регистра общего назначения (x0–x31), каждый размером 32 бита. Регистр x0 всегда содержит значение 0 и не может быть изменён. Программный счётчик (PC) также 32-разрядный. Адресация памяти — байтовая, с поддержкой выравнивания данных. RV32I поддерживает два режима работы: машинный (M-mode) и пользовательский (U-mode), хотя в минимальных реализациях может быть реализован только машинный режим.

Набор инструкций

RV32I включает 47 базовых инструкций, разделённых на несколько категорий:

  • Арифметические и логические операции: ADD, SUB, AND, OR, XOR, SLL, SRL, SRA, SLT, SLTU. Эти инструкции работают с регистрами и поддерживают немедленные значения (immediates) для некоторых операций (ADDI, ANDI, ORI, XORI, SLLI, SRLI, SRAI, SLTI, SLTIU).
  • Операции с памятью: LB, LH, LW, LBU, LHU (загрузка байта, полуслова, слова; знаковая и беззнаковая) и SB, SH, SW (сохранение байта, полуслова, слова). Адресация — регистровая с немедленным смещением.
  • Управление потоком: BEQ, BNE, BLT, BGE, BLTU, BGEU (условные переходы), JAL (безусловный переход с сохранением адреса возврата), JALR (переход по регистру). Также включена инструкция AUIPC (добавление немедленного значения к PC) для позиционно-независимого кода.
  • Системные инструкции: ECALL (вызов системного обработчика), EBREAK (точка останова), FENCE (барьер памяти), FENCE.I (барьер инструкций). Эти инструкции используются для управления исключениями и синхронизации.

Формат инструкций

Все инструкции RV32I имеют длину 32 бита и делятся на шесть форматов: R (регистр-регистр), I (немедленное значение), S (сохранение), B (условный переход), U (верхнее немедленное) и J (безусловный переход). Каждый формат определяет расположение полей opcode, rd (регистр назначения), rs1, rs2 (регистры-источники), funct3 и funct7 (коды функций) и немедленного значения. Такая единообразная структура упрощает декодирование и реализацию конвейеров.

Реализация

RV32I может быть реализован как в виде аппаратного процессора (на ПЛИС или ASIC), так и в виде программного эмулятора. Минимальная реализация RV32I требует всего около 10 000 логических вентилей, что делает его пригодным для встраиваемых систем с низким энергопотреблением. Примеры открытых реализаций: Rocket Chip (на языке Chisel), VexRiscv (на SpinalHDL), SERV (бит-последовательный процессор). Для эмуляции используются такие инструменты, как Spike (официальный симулятор RISC-V) и QEMU.

Пример кода

Простая программа на ассемблере RV32I, вычисляющая сумму двух чисел:

`` addi x1, x0, 5 # x1 = 5 addi x2, x0, 7 # x2 = 7 add x3, x1, x2 # x3 = x1 + x2 = 12 sw x3, 0(x0) # сохранить результат в память по адресу 0 ``

Применение

RV32I используется в следующих областях:

  • Образование: изучение архитектуры компьютеров, проектирование процессоров, разработка компиляторов.
  • Встраиваемые системы: микроконтроллеры, датчики, устройства Интернета вещей (IoT). Примеры: CH32V003 (WCH), GD32VF103 (GigaDevice).
  • Исследования: разработка новых методов обработки данных, тестирование алгоритмов, создание специализированных ускорителей.
  • Открытое аппаратное обеспечение: проекты на базе RISC-V, такие как HiFive1 (SiFive) и Nezha (Allwinner D1).

Расширения

Хотя RV32I самодостаточен для выполнения вычислений, на его основе построены стандартные расширения:

  • M (умножение и деление): инструкции MUL, DIV, REM.
  • F (одинарная точность с плавающей запятой): инструкции FADD, FSUB, FMUL, FDIV.
  • D (двойная точность с плавающей запятой): аналогично F, но для 64-битных чисел.
  • A (атомарные операции): инструкции LR, SC, AMO.
  • C (сжатые инструкции): 16-битные инструкции для уменьшения размера кода.
  • V (векторные операции): инструкции для работы с векторами.

Комбинация RV32I с расширениями обозначается как RV32IMAFDC (или RV32GC, где G — общее расширение).

Критика и ограничения

Основные недостатки RV32I:

  • Отсутствие аппаратного умножения и деления: эти операции эмулируются программно, что снижает производительность.
  • Фиксированная длина инструкций: 32-битные инструкции увеличивают размер кода по сравнению с архитектурами с переменной длиной (например, ARM Thumb).
  • Ограниченная адресация: 32-разрядная шина адреса ограничивает объём адресуемой памяти 4 ГБ.
  • Отсутствие поддержки привилегированных режимов в базовой версии: для многозадачных систем требуется расширение для управления памятью (MMU).

Тем не менее, RV32I остаётся популярным благодаря своей простоте, открытости и возможности адаптации под конкретные задачи.

Интересные факты

  • RV32I является частью спецификации RISC-V, которая в 2023 году была признана стандартом ISO/IEC 23360-1:2023.
  • Процессор на базе RV32I может быть реализован с использованием всего 1500 логических элементов (LUT) на ПЛИС.
  • Архитектура RISC-V не требует лицензионных отчислений, что стимулирует её использование в коммерческих продуктах.

Источники

  • The RISC-V Instruction Set Manual, Volume I: User-Level ISA, Version 2.2 (2019).
  • Waterman, A., Lee, Y., Patterson, D., & Asanović, K. (2014). The RISC-V Instruction Set Manual, Volume I: Base User-Level ISA. EECS Department, University of California, Berkeley.
  • RISC-V International. (2021). RISC-V Specifications. https://riscv.org/technical/specifications/
  • Patterson, D., & Hennessy, J. (2017). Computer Organization and Design: The Hardware/Software Interface (RISC-V Edition). Morgan Kaufmann.
  • Open-source implementations: Rocket Chip, VexRiscv, SERV.

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →