Процессорное ядро SCR3 для встроенных применений с набором команд RISC-V и поддержкой многоядерных конфигураций
Общие сведения
Программа для ЭВМ «Процессорное ядро SCR3 для встроенных применений с набором команд RISC-V и поддержкой многоядерных конфигураций» (далее по тексту ПО SCR3) представляет собой реализацию процессора архитектуры RISC-V микроконтроллерного класса для встроенных применений.
ПО SCR3 предназначено для работы в составе систем на кристалле (СнК), реализованных непосредственно в кремнии или в программируемых логических интегральных схемах (ПЛИС), и может применяться в одноядерных и многоядерных конфигурациях.
ПО SCR3 является сложным функциональным СФ-блоком (Soft IP), передаваемым потребителю в виде описания на высокоуровневом языке описания аппаратуры SystemVerilog для дальнейшего использования в программах автоматизированного синтеза логических схем с привязкой к конкретной технологии ASIC или ПЛИС.
ПО разрабатывается с использованием собственных мощностей и ресурсов. Цена является договорной, размер вознаграждения за право использования зависит от конфигурации ПО. Обновление ПО производится силами разработчика.
Функциональные характеристики
ПО SCR3 реализует 32/64-х разрядный процессор архитектуры RISC-V микроконтроллерного класса, предназначенный для использования в составе различных встраиваемых и других систем.
Программа обеспечивает выполнение арифметических и логических операций с целочисленными операндами и поддерживает 16- и 32-битные инструкции и 32/16/8-битные операнды.
Основные функциональные характеристики ПО SCR3:
- Гарвардская архитектура (раздельные шины команд и данных);
- Поддержка симметричной многопроцессорности (SMP) и межъядерного взаимодействия с настраиваемой конфигурацией от 1 до 4-х процессорных ядер в кластере;
- Набор команд: RV32/64IMСA
- базовые наборы с целочисленными операциями, 32 или 64-битный (RV32/64I);
- команды операций целочисленное умножения и деления (М расширение);
- команды компактного формата для увеличения плотности кода (16-битовые, С расширение);
- опциональная поддержка атомарных операций (А расширение);
- Два уровня привилегированности и соответствующих им режимов исполнения команд: машинный уровень (режим M-mode) и пользовательский уровень (режим U-mode);
- Многоуровневый конвейер с последовательным исполнением команд;
- Конфигурируемая подсистема памяти:
- контроль доступа к физической памяти с помощью модуля защиты памяти (MPU - Memory Protection Unit);
- опциональная поддержка памяти быстрого доступа (ТСМ, Tightly-Coupled Memory) до 128 Кб;
- опциональная поддержка кэш команд уровня L1 размером от 8 до 64 Кб;
- опциональная поддержка кэш данных уровня L1 размером от 8 до 64 Кб;
- опциональная поддержка кэш данных уровня L2 размером до 2 Мб на кластер;
- Интегрированный программируемый контроллер прерываний (IPIC) с поддержкой до 32-х источников прерываний;
- Опциональная замена IPIC на конфигурируемый контроллер прерываний уровня платформы (PLIC) с возможностью приема большого количества внешних запросов прерываний (до 255) и с динамическим заданием (изменением) приоритета прерываний;
- Встроенный 64-битовый таймер часов реального времени (Real Time Clock) с настраиваемым коэффициентом деления;
- Встроенный контроллер отладки с поддержкой аппаратных точек останова, совместимый со стандартом IEЕЕ 1149.1-2001 (JTAG);
- Конфигурируемый внешний интерфейс, совместимый с шиной AXI (Advanced extensible Interface) или АНВ (Advanced High-performance Bus).
Состав ПО
ПО SCR3 в базовой конфигурации, реализующей архитектуру RV64IMСA, включает в себя:
- Исходный код на языке SystemVerilog, пригодный для моделирования и синтеза;
- Исходный код тестового окружения (Testbench) для выполнения функциональной верификации до и после синтеза;
- Наборы скриптов для проведения моделирования и синтеза с файлами входных ограничений в формате (.sdc).
- Комплект разработчика на базе ПЛИС (SCR3 SDK):
- пример проекта СнК на основе ПО SCR3;
- образы загрузки ПЛИС и объектных модулей прикладного ПО для выполнения на ядре SCR3;
- Инструментальные средства разработки:
- набор инструментальных средств, основанных на GCC 8.x, 9.x: компилятор, отладчик, компоновщик, функциональный симулятор, бинарные утилиты binutils, newlib, openocd;
- IDE на базе Eclipse (для Linux и Windows);
- Прикладное ПО:
- начальный загрузчик;
- набор архитектурных тестов и тестов совместимости;
- примеры простых приложений (baremetal) и тестов производительности;
- Сопроводительная документация:
- спецификация внешней архитектуры ПО SCR3 (SCR3 EAS);
- руководство пользователя ПО SCR3 (SCR3 UM);
- руководство по системе команд (SCR3 ISM);
- руководство на комплект разработчика (SCR3 SDK);
- руководство по инструментам разработчика (SCRx development tools);
- руководство на тестовое окружение.
Требования к работе с ПО
Типом реализующей ЭВМ для ПО SCR3 является Система-на-Кристалле (СнК) в составе полузаказных интегральных микросхем или программируемых логических интегральных схем (ПЛИС).
При реализации собственных функционально законченных СнК пользователь должен самостоятельно дополнить основу (микропроцессорную структуру ПО SCR3) необходимыми ему дополнительными модулями в виде отдельных IP-ядер или инфраструктурами IP-ядер.
Для логического синтеза и функциональной верификации ПО SCR3 в составе СнК, пользователю предоставляется набор средств разработки “SCR3 SDK” для физического прототипирования на ПЛИС, основными компонентами которого являются:
- Пример проекта СнК для ПЛИС на основе ПО SCR3;
- Предварительно собранные образы процессорного ядра ПО SCR3 и начального загрузчика;
- Тестовое программное обеспечение для проверки работоспособности ПО SCR3.
Необходимое обеспечение для работы с ПО SCR3
Для работы с ПО SCR3 необходимо следующее обеспечение:
- Персональный компьютер (ПК) с объёмом оперативной памяти не менее 8 Гб.
- Установленные на ПК программы:
- ОС Windows или Linux;
- пакет программ Xilinx Vivado WebPack Edition версии не ниже 2018.1 (скачивается бесплатно после регистрации на сайте xilinx.com);
- система отладки OpenOCD.
- Отладочная плата Virtex UltraScale+ FPGA VCU118 Evaluation Kit
(https://www.xilinx.com/products/boards-and-kits/vcu118.html) - Адаптер для соединения с отладчиком OpenOCD (JTAG Cable Adapter): Olimex ARM-USB-OCD-H (or ARM-USB-OCD)
(https://www.olimex.com/Products/ARM/JTAG/ARM-USB-OCD-H/) - Переходная плата
(https://www.xilinx.com/products/boards-and-kits/hw-fmc-xm105-g.html) - Набор стандартных кабелей типа USB Type A (m) - Type B micro (m), 3 шт. (из состава комплектов платы VCU118 и JTAG адаптера).
Компиляция ПО
Процесс компиляции образа ПО SCR3 описан в руководстве на комплект разработчика (SCR3 SDK). В состав ПО входит Zip-архив, содержащий скомпилированные образы, созданные согласно руководству на комплект разработчика пример проекта СнК на основе ПО SCR3. В следующих разделах описан процесс установки и тестирования ПО SCR3 в составе проекта СнК.
Установка ПО
Процесс установки ПО заключается в выполнении процедуры программирования конфигурационного ППЗУ (флэш) на отладочной плате, для обеспечения дальнейшей загрузки ПЛИС.
Для установки и работы с ПО SCR3 персональный компьютер подключается к отладочной платеVCU118 стандартными кабелями типа USB Type A (m) - Type B micro (m).
Подключение кабелей к отладочной плате VCU118
- Подключите один кабель "USB Type A (m) - Type B micro (m)" между хост компьютером и портом USB JTAG (J106) на плате VCU118;
- Подключите второй кабель "USB Type A (m) - Type B micro (m)" между хост компьютером и портом USB UART на плате VCU118;
- Подключите кабель источника питания (есть в комплекте платы) к разъему "Power" платы VCU118.
Это подключение выполняет три функции:
- подачу питания +12В на отладочную VCU118;
- обеспечение конфигурирования ПЛИС через USB JTAG порт;
- обеспечение функциональности консольного порта при выполнении программы на процессорном ядре SCR3 через USB UART порт.
Подключение кабелей к отладочной плате VCU118 приведено на Рисунке 1.
Рисунок 1. Подключение кабелей к отладочной плате VCU118
Последовательность действий при программировании конфигурационной флэш
- Распакуйте архив, находящийся в дереве каталогов ПО SCR3 в папке SDK:<
SDK_HOME >/images/vcu118_scr3.tar.gz. В архиве находятся два файла: vcu118_scr3.mcs, vcu118_scr3.prm. - После подачи питания на плату VCU118, запустите пакет программ Vivado на инструментальном ПК.
- Проверьте подключение кабеля USB JTAG, затем запустите утилиту «Hardware Manager» из меню или командной строки консоли Vivado. Выполните команду «Open Target» с опцией «Auto Connect», должно произойти подключение к микросхеме ПЛИС xcvu9p_0 отладочной платы VCU118 по интерфейсу JTAG.
Примечание: Если подключение не произошло (микросхемы нет в списке обнаруженных), необходимо установить необходимые USB-драйвера для ОС Windows или для ОС Linux настроить правила сервиса UDEV-rules, как описано в AR# 66440 Vivado - Linux OS - Digilent and Xilinx USB cable installation check
- Добавьте в конфигурационную цепочку для программирования микросхему конфигурационной flash. Для этого в меню «Hardware» выделите указателем «мыши» микросхему ПЛИС xcvu9p_0 и по нажатию правой кнопки «мыши» в контекстном меню указателем выберете «Add Configuration Memory Device».
- В открывшемся меню выберите (или введите) тип микросхемы flash: mt25qu01g-spi-x1_x2_x4 и нажмите OK
- На вопрос программатора ”Do you want to program the configuration memory device now?", подтвердите “OK”.
- В открывшимся диалогом окне «Program Configuration Memory Device» добавьте загрузочные файлы образов «прошивки» ПЛИС (см. выше: vcu118_scr3.mcs, vcu118_scr3.prm)
- Нажмите “OK” для запуска процесса программирования конфигурационной микросхемы флэш (процесс программирования может занять несколько минут).
Примечание: Проверьте, что DIP переключатель SW16 на плате VCU118 установлен в положение выбора режима загрузки ПЛИС Master SPI
- После успешного завершения процесса программирования (можно проконтролировать по сообщениям в диалоговом окне), необходимо выйти из программы Vivado и загрузить образ «прошивки» в ПЛИС, для этого нажмите кнопку “PROG” на отладочной плате VCU118, или нажмите кнопку “CPU_RESET” на плате (см. рисунок ниже), или выключите и включите плату.
Рисунок 2. Аппаратный сброс платы VCU118
ПО SCR3 установлено и готово к работе.
Запуск тестов на процессоре SCR3 с использованием начального загрузчика
Подключение инструментального ПК к отладочной плате остается прежним, см. Рисунок 1.
-
Для загрузки и исполнения теста используется бинарный файл контрольной задачи – синтетического теста производительности процессорной системы (Dhrystone benchmark). Файл находится по следующему пути в структуре репозитория SDK:
<
SDK_HOME >/images/benchmarks.7z Распакуйте архив. В нем находится .bin-файл синтетического теста.
- Запустите терминальную программу. Возможно использование любой терминальной программа дя Linux (например, minicom), или для Windows (например, teraterm ).
Примечание: Для Windows потребуется установка драйвера для USB-to-UART Bridge, иструкции приведены по ссылке ниже:
https://www.silabs.com/Support%20Documents/Software/CP210x_Windows_Drivers.zipНастройте параметры последовательного порта (UART) следующим образом:
- Название последовательного порта
- для Windows - это COM4 (цифра может меняться, точную можно узнать через Диспетчер устройств, найдя в нём переходник USB-UART)
- для Linux - это /dev/ttyUSB0 (цифра может меняться, смотрите список файлов в папке /dev/)
- Bps/Par/Bits - 115200 8N1
- скорость - 115200
- количество битов в посылке - 8
- количество стоп-битов - 1
- чётность - нет
- Hardware Flow Control: No
- Название последовательного порта
- Инициируйте процесс перезагрузки ПЛИС, нажав кнопку “PROG” на отладочной плате, или подачей сигнала reset на ПЛИС, нажав кнопку “CPU_RESET” на плате (см. Рисунок 2).
- При включении платы или перезагрузке ПЛИС по аппаратному сбросу, в терминал выдается начальное приглашение загрузчика, после чего загрузчик переходит в режим ожидания команды пользователя:
SCR loader v1.3-g0d64a5e SMP Copyright (C) 2015-2020 Syntacore. All rights reserved. ISA: RV64IMAC [8000000000101105] IMPID: 0000000021061743 BLDID: 21070500 Platform: vcu118_scr3c2p, cpuclk 65MHz, sysclk 65MHz SMP: incoming mailbox empty status: 8000000000000003 SMP: mailbox slots 4 (bits 2 shift 2) status 0 SMP[0]: master hart loopback slot SMP[1]: active SMP[2]: active SMP[3]: active 0: start SMP @addr 1: xload @addr v: int flash load u: int flash update g: start @addr d: mem dump m: mem modify t: mem test :
- При нажатии клавиши "SPACE" и затем комбинации клавиш "SHIFT+1" можно вывести в терминал дополнительную информацию о процессорной платформе:
SCR loader v1.3-g0d64a5e SMP (Jul 9 2021 10:17:04) Copyright (C) 2015-2020 Syntacore. All rights reserved. ISA: RV64IMAC [8000000000101105] IMPID: 0000000021061743 BLDID: 21070500 Platform: vcu118_scr3c2p, cpuclk 65MHz, sysclk 65MHz L1i [00000942] 32K, 4-way, 16-byte line, enabled L1d [00002942] 32K, 4-way, 16-byte line, enabled L2 [21061700 3003e953] 512K, 8-way, 32-byte line, shared (4 cores), status: f Memory map: 0000000000000000 4G 000003FE DDR FFFFFFFFF0000000 128K 000003FE TCM FFFFFFFFF0040000 8K 00030006 MMCFG FFFFFFFFFF000000 8M 00010186 MMIO FFFFFFFFFFFF0000 64K 0000008E On-Chip RAM MPU regions (16): 01 0000007F 0000000000000000 000000FF00000000 02 0000007F FFFFFFFFF0000000 000000FFFFFE0000 03 00030007 FFFFFFFFF0040000 000000FFFFFFE000 04 00010007 FFFFFFFFFF000000 000000FFFF800000 05 0000000F FFFFFFFFFFFF0000 000000FFFFFF0000 !
- Для загрузки прикладной программы (например, теста поизводительности Dhrystone benchmark) в локальную память процессорного ядра SCR3, в терминальном окне в меню загрузчика нужно выбрать "1".
- Далее необходимо ввести стартовый адрес (в шестнадцатеричном формате) для загрузки исполняемого файла в локальную память TCM процессорного ядра SCR3, и нажмите “Enter”. В терминальном окне начнут периодически выводиться символы “C”, сигнализируя готовность загрузчика принимать бинарный образ по протоколу x-modem:
xload @addr addr: f0000000 CCCCCCCC
Примечание: программа загрузчик (SCR bootloader), исполняемая на процессорном ядре SCR3 использует x-modem протокол передачи файлов и поддерживает загрузку только бинарных образов с расширением .bin
- В терминальном окне minicom, нажав комбинацию клавиш "Ctrl+А" затем "S", откройте меню выбора протоколов загрузки, затем выберете “xmodem”:
+-[Upload]--+ | zmodem | | ymodem | | xmodem | | kermit | | ascii | +-----------+
- На ПК нажмите клавишу “Enter”, затем выберите .bin файл для загрузки (нужно выделить файл и нажать клавишу пробел “space”):
+------------------------[Select a file for upload]-------------------------+ |Directory: images/arty100 | | [..] | | dhry21-o3lto.bin | | |
- Нажмите “Enter”, начнется передача файла.
+----------------[xmodem upload - Press CTRL-C to quit]----------------+ |Sending dhrystone.bin, 158 blocks: Give your local XMODEM receive comm| |and now. | |Bytes Sent: 20352 BPS:6211 | | | |Transfer complete | | | | READY: press any key to continue... | +----------------------------------------------------------------------+
- По окончании загрузки будет выведена статусная информация:
Xmodem successfully received 20352 bytes
Загруженная программа в память процессорного ядра SCR3 готова к исполнению.
-
В терминальном окне в меню загрузчика выберите “g”, затем введите начальный адрес запуска программы 0. После этого начнется выполнение программы:
start @addr addr: 0 Dhrystone Benchmark, Version 2.1 (Language: C) ...
- После выполнения теста на процессорном ядре SCR3, выводятся результаты:
Microseconds for one run through Dhrystone: 15.4 Dhrystones per Second: 64836.5
Запуск тестов на процессоре SCR3 с использованием отладчика OpenOCD
Open On-Chip Debugger (открытый отладчик для чипов) является программой с открытым исходным кодом. OpenOCD предоставляет доступ к адаптеру для отладки (JTAG debug adapter) и обеспечивает инструментарий отладки (debugging) и внутрисхемного программирования для встраиваемых систем.
Подключение JTAG кабеля адаптера OpenOCD
Подключение JTAG кабеля адаптера Olimex ARM-USB-OCD к плате VCU118 (см. рисунок ниже) выполняется с помощью переходной платы FMC XM105, имеющей в своем составе пользовательский разъемом J20 для подключения стандартного 20-ти контактного гибкого шлейфа.
Примечание: Необходимо соединить выводы TDI и TDO на разъеме J5 платы FMC XM105 (JTAG chain bypass).
Рисунок 3: Подключение JTAG кабеля адаптера OpenOCD к плате VCU118
Установка OpenOCD
Инструкции по установке OpenOCD приведены на вики-странице OpenOCD-for-sc_riscv32
Запуск сервера OpenOCD на ПК
- Настройка переменных окружения:
$ export OOCD_ROOT=<
Path to the OpenOCD installation directory > - Запуск OpenOCD сервера - вводится в одну строку (в Ubuntu):
$ sudo ${OOCD_ROOT}/bin/openocd \ -s ${OOCD_ROOT}/share/openocd/scripts/ \ -f ${OOCD_ROOT}/scripts/interface/ftdi/olimex-arm-usb-ocd-h.cfg \ -f ${OOCD_ROOT}/scripts/target/syntacore_riscv.cfg
После выполнения в текущий терминал будет выдано сообщение о подключении к ядру RISC-V:
Open On-Chip Debugger 0.10.0+dev-01974-g3d33e05 (2019-05-22-20:30) Licensed under GNU GPL v2 For bug reports, read http://openocd.org/doc/doxygen/bugs.html none separate sw_reset_halt Info : Listening on port 6666 for tcl connections Info : Listening on port 4444 for telnet connections adapter speed: 2000 kHz none separate Info : auto-selecting first available session transport "jtag". To override use 'transport select <
transport >'. riscv.cpu3 Info : clock speed 2000 kHz Info : JTAG tap: riscv.cpu0 tap/device found: 0xdeb13001 (mfg: 0x000 (< invalid >), part: 0xeb13, ver: 0xd) Info : JTAG tap: riscv.cpu1 tap/device found: 0xdeb13001 (mfg: 0x000 (< invalid >), part: 0xeb13, ver: 0xd) Info : JTAG tap: riscv.cpu2 tap/device found: 0xdeb13001 (mfg: 0x000 (< invalid >), part: 0xeb13, ver: 0xd) Info : JTAG tap: riscv.cpu3 tap/device found: 0xdeb13001 (mfg: 0x000 (< invalid >), part: 0xeb13, ver: 0xd) Info : riscv.cpu0: datacount=4 progbufsize=6 Info : riscv.cpu0: Examined RISC-V core; found 1 harts Info : riscv.cpu0: hart 0: XLEN=64, misa=0x8000000000101105 Info : riscv.cpu1: datacount=4 progbufsize=6 Info : riscv.cpu1: Examined RISC-V core; found 1 harts Info : riscv.cpu1: hart 0: XLEN=64, misa=0x8000000000101105 Info : riscv.cpu2: datacount=4 progbufsize=6 Info : riscv.cpu2: Examined RISC-V core; found 1 harts Info : riscv.cpu2: hart 0: XLEN=64, misa=0x8000000000101105 Info : riscv.cpu3: datacount=4 progbufsize=6 Info : riscv.cpu3: Examined RISC-V core; found 1 harts Info : riscv.cpu3: hart 0: XLEN=64, misa=0x8000000000101105 Info : Listening on port 3333 for gdb connections Info : Listening on port 3334 for gdb connections Info : Listening on port 3335 for gdb connections Info : Listening on port 3336 for gdb connections - Откройте второй терминал (терминал 2) и введите команду:
$ telnet localhost 4444 Trying ::1... Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. Open On-Chip Debugger
OpenOCD запущен и готов к работе. Терминал 2 представляет собой интерактивную консоль OpenOCD. По команде help можно вывести список доступных команд openocd.
Загрузка и запуск на выполнение бинарных образов
- Введите следующие команды в консоли OpenOCD (Терминал 2), выполняющие остановку ядра и загрузку исполняемого кода:
> targets TargetName Type Endian TapName State -- ------------------ ---------- ------ ------------------ ------------ 0 riscv.cpu0 riscv little riscv.cpu0 running 1 riscv.cpu1 riscv little riscv.cpu1 running 2 riscv.cpu2 riscv little riscv.cpu2 running 3* riscv.cpu3 riscv little riscv.cpu3 running > targets riscv.cpu0 > > targets TargetName Type Endian TapName State -- ------------------ ---------- ------ ------------------ ------------ 0* riscv.cpu0 riscv little riscv.cpu0 running 1 riscv.cpu1 riscv little riscv.cpu1 running 2 riscv.cpu2 riscv little riscv.cpu2 running 3 riscv.cpu3 riscv little riscv.cpu3 running > halt > load_image dhrystone.bin 0x0 bin 21092 bytes written at address 0x00000000 downloaded 21092 bytes in 0.234904s (87.685 KiB/s)
Примечание: Команда загрузки предполагает расположение файла в текущей директории. При другом расположении, имя загружаемого файла должно включать относительный путь.
- После ввода команды отображается прогресс загрузки. После завершения загрузки запустите программу теста:
> resume 0x0
Запустится программа теста с выводом результатов в терминал.