Процессоры RISC-V
Неопределённое поведение и неопределённые значения
Спецификация и архитектура полностью описывают, что должны делать реализации, а также любые ограничения на то, что они могут делать. Если архитектура не определяет поведение в явном виде, то это поведение определяется как UNSPECIFIED.
Поведение или значения UNSPECIFIED намеренно оставлены неограниченными, чтобы они могли быть определены в расширениях, стандартах платформы или других реализациях. Кроме того, если есть неограниченные определения, они также должны быть определены как UNSPECIFIED. При необходимости эти значения могут быть расширены или определены позже.
Список инструкций в RISC-V ISA и соответствующих расширений базовой ISA см. в справочной карте RISC-V.
Инструкции, относящиеся к CSR
RISC-V определяет инструкции, специфичные для CSR, и имеет отдельное адресное пространство для CSR для каждого hart-а процессора. Это адресное пространство имеет размер 4096. Все инструкции CSR атомарно читаю/модифицируют/записывают один CSR, спецификатор которого закодирован в 12-битном поле csr инструкции, расположенном в битах 31-20. Непосредственные формы используют 5-битное, расширенное до нуля непосредственное значение, закодированное в поле rs1.
Процессоры RISC-V
Экосистема процессоров RISC-V быстро развивается. Существуют как открытые, так и коммерческие предложения процессоров RISC-V. Список доступных процессоров можно найти на GitHub.
Помимо списка доступных для использования ядер, существуют также готовые чипы и системы на кристалле (SoC), построенные на базе процессоров RISC-V. Различные крупные компании, производящие чипы, такие как NVIDIA и Western Digital, использовали RISC-V в своих продуктах.
Кроме того, на момент создания этого курса планируется выпуск плат, построенных на базе процессоров RISC-V.
Тулчейн RISC-V
Знакомство с инструментами RISC-V
Одним из ключевых требований к использованию процессора является наличие чистой среды разработки с набором инструментов (называемых "тулчейн"), которые позволят беспрепятственно использовать программное обеспечение на создаваемом оборудовании. Сообщество RISC-V позаботилось о том, чтобы тулчейн программного обеспечения был хорошо построен и хорошо поддерживался, чтобы разработчики могли быстро и легко использовать эти инструменты для разработки своего программного обеспечения и запуска его на аппаратном обеспечении.
Инструменты RISC-V можно найти на GitHub. Процесс их установки подробно описан в файле README, размещенном в этом месте. Пользователи Windows могут установить тулчейн в среде Cygwin или MinGW.
Список программного обеспечения, поддерживаемого на RISC-V, также доступен на GitHub. Это должно послужить хорошей отправной точкой для учащихся и разработчиков, начинающих использовать программные инструменты, которые не являются частью данного курса.
В этом курсе мы будем использовать компилятор GNU GCC C/C++ и компоновщик для компиляции и запуска программных приложений, которые мы разрабатываем на наших аппаратных моделях RISC-V.
Для разработки программного обеспечения под Windows/Linux/Mac мы можем использовать IDE на базе Eclipse или командную строку GCC.
Установка тулчейна: на машинах Windows
Если вы планируете использовать Windows для отработки примеров, то для запуска примеров FreeRTOS можно использовать тулчейн Eclipse, который был установлен в предыдущей главе. После установки Eclipse выполните следующие шаги для установки тулчейна RISC-V.
Доступ к тулчейну можно получить с помощью библиотеки xPack. Для получения более подробной информации см. следующие два ресурса:
- GNU MCU Eclipse RISC-V Embedded GCC v8.2.0-2.1 20190425 released
- How to install the xPack GNU RISC-V Embedded GCC binaries
Шаг 1:
Установите npm для Windows. Это утилита, которая позволяет пользователям устанавливать пакеты Java.
Шаг 2:
После установки npm выполните следующую команду в утилите командной строки, чтобы установить основные программы, необходимые для установки тулчейна:
npm install --global xpm@latest
Шаг 3:
После установки XPM выполните приведенную ниже команду для установки компилятора GCC и сопутствующих инструментов:
xpm install --global @xpack-dev-tools/riscv-none-embed-gcc@latest -verbose
Установка тулчейна: на машинах Linux
На машинах Linux пользователи могут установить либо тулчейн на базе Eclipse, либо тулчейн командной строки. Тулчейн командной строки можно установить из двоичных файлов, или загрузить исходный код компилятора и скомпилировать его на своей машине.
Ниже описаны шаги для обоих методов установки тулчейна на Linux-машинах.
Установка двоичных файлов
Шаг 1:
Пользователь может загрузить двоичные файлы компилятора из следующего места на GitLab.
Шаг 2:
После клонирования двоичных файлов установите путь к директории bin инструмента, а также добавьте библиотечные файлы в LD_LIBRARY_PATH.
Пример настроек:
-
export PATH=$PATH:$RISCV/bin:$RISCV/riscv32/bin:$RISCV/riscv64/bin
-
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$RISCV/riscv32/lib:$RISCV/riscv64/lib
Установка из исходного кода
Установка из исходного кода может быть выполнена путем получения исходных файлов из следующего места на GitHub.
Выполните шаги, перечисленные в файле README на GitHub. В результате инструменты будут установлены и готовы к использованию в вашей среде Linux.
Написание приложений для RISC-V
Поскольку кросс-компиляторы легко доступны для всех платформ, написание приложений для RISC-V не отличается от написания любой другой программы на языке Си. При компиляции приложения пользователям, возможно, придется использовать соответствующие компиляторы Си для компиляции кода. В этом случае для компиляции приложения пользователю необходимо использовать кросс-компилятор RISC-V для выбранной им машины.
После компиляции приложения пользователь может протестировать его с помощью различных эмуляторов, таких как Spike (специфичный для RISC-V) или QEMU (поддерживает несколько семейств процессоров).
Можно даже загрузить образ Linux на процессоре RISC-V с помощью инструмента эмуляции.
Контрольные вопросы
- Что такое RISC-V?
- В чем отличия между RISC-V и другими архитектурами?
- Верно ли утверждение, что в RISC-V у всех инструкций фиксированная длина?
- За что отвечает интерфейс среды выполнения (EEI) ПО RISC-V?
- Что такое hart?
- Какие наборы инструкций RISC-V являются базовыми?
- Какие регистры определены как необходимые в RISC-V ISA?
- Есть ли машинные инструкции RISC-V, выполнение которых не требует обращения к памяти?
- Какими средствами RISC-V обрабатывает исключения и прерывания?
- Какие инструменты поддерживаются на машинах Linux для разработки программного обеспечения под RISC-V?
- Какие инструменты используются для компиляции и запуска программных приложений на аппаратных моделях RISC-V?
- Какие шаги нужно выполнить для установки toolchain на машины Windows и Linux?