Архитектура RISC-V: открытый стандарт процессоров простым языком
RISC-V — открытый стандарт набора инструкций процессора, предложенный в 2010 году в Калифорнийском университете в Беркли и опубликовный в 2014-м. Слово «открытый» здесь буквальное: спецификацию читают и реализуют все, платить за право делать процессор по этому стандарту не нужно, а к базовому набору можно дописывать свои расширения. Ниже — как устроен этот стандарт, чем он отличается от x86 и ARM, и как соотносится с учебным процессором в этом курсе. Общая карта предмета, частью которой является архитектура процессора, — на странице «Схемотехника».
Чем RISC-V отличается от x86 и ARM
Главное различие — не в наборе команд, а в правах на него. Стандарты x86 и ARM закрыты: спецификации принадлежат компаниям, и производитель микросхем покупает лицензию. Практическое следствие: за десятилетия никто не смог выпустить совместимый с x86 процессор иначе, чем по лицензии, а для архитектуры с открытой спецификацией рынок появления процессоров устроен иначе.
| Свойство | x86 | ARM | RISC-V |
|---|---|---|---|
| Кто владеет стандартом | Intel и AMD, оба под лицензией | Arm Holdings, лицензия на ядро | RISC-V International, спецификация открыта |
| Стоимость лицензии ядра | Зависит от соглашения | Есть, в том числе бесплатные уровни | Нет |
| Свои расширения | Только внутри компании | Свои блоки по лицензии Arm Custom Instruction | Разрешены, в том числе нестандартные |
| Где встречается | Компьютеры и серверы | Смартфоны, серверы, микроконтроллеры | Микроконтроллеры, встраиваемые системы, образование |
Ограничение у RISC-V одно и оно существенное: под конкретную микросхему на этом стандарте нет двадцати лет накопленного программного обеспечения. Открытая спецификация решает задачу, которую не может решить закрытая, и не решает задачу, которую закрытая уже решила.
Из чего состоит базовый набор
Базовое ядро стандарта называется RV32I для 32-битных машин и RV64I для 64-битных. В нём 32 регистра общего назначения, имя регистра номер один — x0, и он жёстко зашит на ноль: записать в него единицу нельзя, зато можно использовать как константу в вычислениях. Действующая ратифицированная версия базовой спецификации вышла в 2024 году.
Всё, что добавляют сверх базового набора, оформлено расширениями с буквенными именами, и это позволяет собрать профиль под задачу.
| Расширение | Что добавляет |
|---|---|
| M | Умножение и деление |
| A | Атомарные операции над памятью: многопоточность и блокировки без блокировки шины |
| F и D | Вычисления с плавающей точкой на 32 и 64 бита |
| C | Сжатые инструкции длиной 16 бит: экономия памяти и места на кристалле |
| B | Побитовые операции: отдельные команды вместо цепочки AND, OR, сдвигов |
| V | Векторные операции |
Такая схема объясняет, почему слова «процессор RISC-V» не означают ничего конкретного. Микроконтроллер с базовым набором и расширением M, серверное ядро с A, F, D и V и учебное ядро с одним I — это три разные машины на одном стандарте. Встречаются и нестандартные расширения: производитель добавляет свои команды, и его процессор перестаёт быть совместим с чужими, оставаясь RISC-V для себя.
Как устроена инструкция
Инструкция в базовом наборе занимает 32 бита, и её биты распределены по функциям: сначала код операции, затем регистры и способ их использования. Учебный процессор курса устроен скромнее: у него 8 бит на инструкцию, 4 бита отданы под код операции и 4 под операнд. Сравнение нагляднее любого описания.
Учебная машина курса и RISC-V рядом
Процессор, который вы собираете в этом курсе, к RISC-V отношения не имеет: у него 8-битные регистры, 15 команд, гарвардская архитектура с раздельной памятью команд и данных и арифметика через аккумулятор с константой. Сравнение всё равно полезно, потому что видно, какие решения RISC-V принимает иначе.
| Задача | Учебный процессор курса | RV32I |
|---|---|---|
| Загрузить из памяти | LDA 5 — по адресу | lw, lb — регистр плюс смещение |
| Записать в память | STA 5 | sw, sb |
| Сложить | ADD 3 — константа в аккумулятор | add rd, rs1, rs2 — три регистра |
| Вычесть, умножить | SUB 3, умножения нет | sub, mul в расширении M |
| Исключающее ИЛИ | Команды нет, собирается из AND, OR, NOT | xor, xori в базовом наборе |
| Условный переход | JZ, JN — по знаку результата | beq, bne — по сравнению регистров |
| Остановиться | HLT | ebreak — ловушка, не штатная остановка |
Одна и та же задача в двух синтаксисах: сложить данные, записанные в память, и сохранить результат.
; учебный процессор курса
LDA 5 ; загрузить из ячейки 5 в аккумулятор
ADD 3 ; сложить константу 3
STA 7 ; записать результат в ячейку 7
HLT ; остановиться
; RISC-V, RV32I
lw t0, 20(x0) ; t0 = память[x0 + 20]
addi t0, t0, 3 ; t0 = t0 + 3
sw t0, 28(x0) ; память[x0 + 28] = t0
ebreak ; трамплин, останавливает отладчик
Различия видны по строкам. В RISC-V результат живёт в регистре, операнд выбирается регистром, а число 3 кладётся рядом инструкцией сложения с константой. В учебной машине аккумулятор один, а адрес передаётся прямо в коде операции, поэтому операнд в команде — это константа от 0 до 15.
Чем учить
Практическая база бесплатная. RARS — ассемблер и симулятор RV32I от Кембриджского университета: запускается локально одним файлом, показывает состояние регистров и памяти на каждом шаге, умеет пошагово исполнять программу и показывать инструкции в машинных кодах. Это лучший способ увидеть, как команда превращается в биты.
Дальше по ступеням. Spike — точный по тактам симулятор из Беркли, эталон для проверки ядер. QEMU поддерживает RISC-V в пользовательском режиме, что позволяет запускать готовую операционную систему. Verilator компилирует написанный на Verilog процессор в быстрый симулятор, и на нём удобно проверять собственное ядро. Отдельно про обучение железу — статья про иерархию модулей и хаб по Verilog и ПЛИС: путь от кода к настоящей микросхеме в курсе проходит на Tang Nano 9K.
Чего RISC-V не даёт
Стандарт набора инструкций не является процессором. Из описания команд не следует, что машина будет быстрой: тактовая частота, ширина конвейера, кэш и память определяются реализацией, а не спецификацией. Точно так же RISC-V не превращает обычный компьютер в машинку под RISC-V: для этого нужна либо микросхема с таким ядром, либо симулятор, который её изображает.
Симулятор «Компьютера Ершова» к таким инструментам не относится: он выполняет 15 команд учебного процессора, а не инструкции RV32I. Разница между этими машинами — не в сложности, а в задаче. Курс учит собирать вычислитель с нуля из вентилей, Verilog и реальной печатной платы, а RISC-V даёт готовую систему команд, на которой можно писать программы сразу.
Что такое RISC-V?
RISC-V — открытый стандарт набора инструкций процессора, предложенный в 2010 году в Калифорнийском университете в Беркли и опубликованный в 2014-м. Это описание того, как процессор выполняет команды, а не готовая микросхема: по одному и тому же стандарту десятки компаний делают свои ядра и микроконтроллеры.
Чем RISC-V отличается от x86 и ARM?
x86 и ARM — закрытые стандарты: их спецификации и право их реализовывать принадлежат компаниям, и за лицензию платят производители чипов. Спецификация RISC-V открыта, лицензионных платежей за ядро нет, а к базовому набору разрешено добавлять собственные расширения. Обратная сторона: под конкретную RISC-V микросхему нет десятилетия готовых программ, и она не заменяет процессор вашего ноутбука.
Умеет ли симулятор «Компьютера Ершова» выполнять код RISC-V?
Нет. В игре используется учебный 8-битный процессор с 15 командами, собственный ассемблер и симулятор этой машины. Ни одна из команд RISC-V не реализована: симулятор показывает, как устроена вычислительная машина вообще, а не как устроена конкретная современная микросхема.
С чего начать изучение RISC-V?
С базового набора RV32I: 32 регистра общего назначения, загрузка и сохранение, арифметика, сравнения, переходы. Практика — в RARS, бесплатном ассемблере и симуляторе от Кембриджского университета, который запускается локально одним файлом и показывает состояние регистров и памяти на каждом шаге.
Проверьте себя
Зачем в RISC-V есть регистр x0, который всегда равен нулю?
Это константа, зашитая в набор регистров. Вместо отдельной команды «загрузить ноль» вы пишете адрес x0 в поле операнда, и кодирование остаётся одинаковым. Побочный эффект: запись в x0 молча игнорируется, и потерянное значение в выражении не приводит к ошибке, а меняет результат вычисления.
Почему нельзя просто установить в компьютер процессор RISC-V?
Программы на x86 скомпилированы под конкретную систему команд, а Windows и Linux для x86 содержат код, который процессор RISC-V выполнить не сможет. Нужна операционная система, собранная под RISC-V, и прикладные программы под неё. На практике это значит вторую операционную систему и второе программное обеспечение, а не замену процессора в том же корпусе.
Что означает «профиль микросхемы RISC-V»?
Набор расширений, который производитель выбрал для своего ядра: например, базовый RV32I плюс M для умножения и деления. Чем больше расширений, тем больше возможностей и тем уже совместимость с программами, рассчитанными только на базовый набор. Поэтому у RISC-V нет «процессора вообще», есть конкретные ядра с конкретными профилями.
Об устройстве процессора на уровне вентилей читайте в статье как работает процессор, о разнице между программированием и проектированием железа — в статье почему Verilog — это не программирование, о масштабе, к которому всё это приводит, — в статье сколько транзисторов в процессоре.