Расширение системы команд RISC-V
Группа команд фиксированного размера
Простейший подход заключается в определении единого большого естественно выровненного формата команд (например, 128 бит) в рамках которого кодируются операции VLIW. В обычном VLIW такой подход привел бы к растрате памяти команд для хранения NOPS, но RISC-V-совместимая реализация должна была бы также поддерживать базовые 32-разрядные инструкции, ограничивая расширение размера кода VLIW функциями, ускоряемыми VLIW.
Группы кодированной длины
Другой подход заключается в использовании стандартной кодировки длины из рис.2 для параллельного кодирования в группы структур, позволяющие сжимать NOPs из инструкции VLIW. Например, 64-разрядная инструкция может содержать две 28-разрядные операции, в то время как 96-разрядная инструкция может содержать три 28-разрядные операции и так далее. В качестве альтернативы, 48-разрядная инструкция может содержать одну 42-разрядную операцию, в то время как 96-разрядная инструкция может содержать две 42-разрядные операции и так далее.
Этот подход имеет преимущество в сохранении базовой кодировки ISA для инструкций, выполняющих одну операцию, но имеет недостаток в том, что требуется новая 28-разрядная или 42-разрядная кодировка для операций внутри инструкций VLIW и смещенная выборка команд для больших групп. Одно из упрощений заключается в том, чтобы не позволять инструкциям VLIW пересекать определенные микроархитектурно значимые границы (например, строки кэша или страницы виртуальной памяти).
Основным недостатком этого подхода является то, что в базовом ISA отсутствует поддержка сложной предикации, обычно требуемая в агрессивной системе VLIW, и трудно добавить пространство для указания большего количества регистров предикатов в стандартном 30-битном пространстве кодирования.
Именование расширений
Стандартным расширениям ISA присваивается имя, состоящее из одной буквы. Например, первыми четырьмя стандартными расширениями целочисленных базисов являются: "M" для целочисленного умножения и деления, "A" для инструкций атомной памяти, "F" для инструкций с плавающей запятой одинарной точности и "D" для инструкций с плавающей запятой двойной точности. Любой вариант набора команд RISC-V может быть кратко описан путем объединения префикса базового целого числа с именами включенных расширений, например, "RV64IMAFD".
Стандартизованные сообществом RISC-V специализированные расширения начинаются с префикса Z.
Название нестандартных пользовательских расширений должно начинаться с префикса "Х".
Выводы
Опции расширения системы команд позволяют практически безболезненно вылетать в систему команд собственные операции, специфичные для каждой конкретной задачи и подержанные в FPGA-системе специализированными аппаратными блоками.
На самом деле, если присмотреться внимательнее, то можно увидеть, что расширение функциональности ядра RISC-V возможно даже в рамках базовой (или любой другой стандартной) системы команд. Это станет понятно при дальнейшем рассмотрении при построении декодера команд RV и микроархитектурных блоков процессора.
Это возможно сделать за счет блока регистров специального назначения (CSR) - да, ряд его адресов зарезервирован под "стандартные" функции, но тем не менее значительное количество адресов свободно и может быть задействовано с пользой для задачи. Под видом регистров специального назначения могут скрываться регистры управления или данных любых пользовательских вычислительных или исполнительных блоков или устройств. И разработчику достаточно будет лишь определить протокол взаимодействия с ними, и далее работать штатным средствами типового программного обеспечения.
Типовые "стандартные" CSR-регистры и их адреса приведены рисунках 3.4 -3.6.
Литература
- The RISC-V Instruction Set Manual. Volume I: User-Level ISA Document Version 2.2 // Editors: Andrew Waterman1, Krste Asanov
- RISC-V Assembly Language Programmer Manual Part I developed by: SHAKTI Development Team @ iitm '20 shakti.org.in


