Начинаем изучать RISC-V

risc v logo 

Что такое RISC-V?

Многие из нас конечно знают про существование различных процессорных архитектур. Наиболее известные это 32х битные x86 от компании Intel и ARM от ARM Limited. Их развитие со временем привело к 64х битным системам x86-64 AMD, Intel64 от Intel и AARCH64 от ARM. Конечно существуют или существовали и другие процессорные архитектуры такие как Sparc, IA-64, PowerPC, MIPS.

Есть еще одна процессорная архитектура, которая стоит особняком и на которую вероятно стоит обратить внимание это RISC-V. В чем её особенность?

Работа любого процессора определяется в основном набором регистров и набором команд, которые может исполнять процессор. Набор команд/инструкций процессора это ISA - Instruction Set Architecture. Проблема состоит в том, что обычно ISA является интеллектуальной собственностью компаний и должна лицензироваться. То есть, к примеру, даже если мы знаем, какие у процессора ARM есть команды и как они исполняются мы не можем сделать свою собственную реализацию процессора ARM. У нас на сайте есть FPGA проект, который реализует систему на кристалле ARMv2a. Этот проект реализует самую раннюю версию ISA ARMv2a которая когда-то по какой-то причине не была лицензирована. Реализаций более современных ARM процессоров в открытом доступе не найти. Создать свой ARM можно, но широко использовать вряд ли.

Еще одна довольно грустная история связана с архитектурой MIPS. Сегодня технологией MIPS владеет Wave Computing. Эта компания вроде бы обещала сделать MIPS открытым стандартом. В 2019м году была объявлена возможность лицензирования MIPS на бесплатной основе. Однако уже через год Wave Computing закрыла эту программу. А уже в 2021м году было объявлено, что все работы над MIPS завершены и компания присоединяется к разработкам основанным на архитектуре RISC-V. Когда они сделали MIPS открытым я зарегистрировался у них на сайте и по моему запросу они мне передали исходники 32х битного ядра, подходящего для запуска на FPGA. Я портировал этот проект на нашу плату Марсоход3. Но дальнейшего развития этого проекта видимо не будет.

Так что же такое RISC-V?
RISC-V это прежде всего специальная ISA, реализованная на принципах RISC (Reduced Instruction Set Architecture), и распространяемая под open source лицензией, которая не требует никаких отчислений за использование или разработку. Каждый может реализовать свое собственное ядро процессора исполняющее инструкции RISC-V. Ядра у каждого разработчика будут конечно разные. У них может быть конвейер разной длины, разный размер и организация кэша данных и команд. Может быть реализована схема предсказаний переходов или ее может не быть. Тем не менее все эти ядра должна объединять одно свойство - использование общей ISA. Строго говоря, ничего особо революционного здесь нет. Архитектура RISC-V просто следует принципам RISC: арифметические и логические операции только между операндами в регистрах, операции чтения и записи в память это отдельные операции не связанные с АЛУ (Арифметико-Логическим Устройством). Главное же преимущество архитектуры RISC-V - она открыта и при этом не нарушает известных патентов и поэтому является действительно свободной.

Проект RISC-V родился в университете Беркли в Калифорнии в 2010м году. Потом, чтобы обеспечить проекту стабильность и привлекательность со стороны коммерческих структур, в 2015м году был основан фонд RISC-V. Его обязанность - поддержка проекта, публикация спецификаций RISC-V. Сейчас фонд RISC-V International это глобальная некоммерческая организация базирующаяся в Швейцарии и объединяющая более 2-х тысяч членов из 70 стран.

Я тоже решил поизучать архитектуру RISC-V. Я собираюсь запустить SoC с процессором RISC-V в нашей плате Марсоход3.

Первый шаг, который нужно сделать, нужно понять с чего начинать. Как я уже написал, существует очень много разных реализаций процессора RISC-V разных разработчиков. На сайте https://riscv.org/exchange/cores-socs/ можно посмотреть список компаний, которые предлагают свои реализации:

riscv cores socs

Я этот список изучил и выбрал для первоначального ознакомления систему SCR1 от Syntacore. Во-первых, исходники на github, значит их легко получить. Во-вторых, язык ядра SystemVerilog, что хорошо. Ну и в-третьих, компания имеет офисы разработки в России, что само по себе приятно.

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

Список расширений RISC-V (возможно не точный или не полный):
M – Standard Extension for Integer Multiplication and Division
A – Standard Extension for Atomic Instructions
F – Standard Extension for Single-Precision Floating-Point
D – Standard Extension for Double-Precision Floating-Point
G – Shorthand for the base and above extensions
Q – Standard Extension for Quad-Precision Floating-Point
L – Standard Extension for Decimal Floating-Point
C – Standard Extension for Compressed Instructions
B – Standard Extension for Bit Manipulation
J – Standard Extension for Dynamically Translated Languages such as C#, Go, Haskell, Java, JavaScript, OCaml, PHP, Python, R, Ruby, Scala or WebAssembly
T – Standard Extension for Transactional Memory
P – Standard Extension for Packed-SIMD Instructions
V – Standard Extension for Vector Operations
N – Standard Extension for User-Level Interrupts
H – Standard Extension for Hypervisor

Как я понимаю, процессор SCR1 от Syntacore является конфигурируемым и поддерживает базовый вариант RV32I или другие варианты RV32I+E+M+C. Из приведенной выше таблицы видно, что ядро видимо можно сконфигурировать для поддержки целочисленного умножения и деления (расширение M), а так же с поддержкой сжатых команд (расширение C). Что такое расширение E я пока увы не знаю, разъяснений пока не нашел.

Надеюсь при дальнейшем ознакомлении с архитектурой процессора и при портировании системы SCR1 на плату Марсоход3 я узнаю для себя много нового и смогу ответить на многие возникающие вопросы.

В следующей статье я напишу, как начал работу по переносу системы SCR1 на плату Марсоход3.

 

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