Улучшенное 64-разрядное процессорное ядро SCR4x64 для встроенных применений с набором команд RISC-V и поддержкой многоядерных конфигураций
Общие сведения
Программа для ЭВМ «Улучшенное 64-разрядное процессорное ядро SCR4x64 для встроенных применений с набором команд RISC-V и поддержкой многоядерных конфигураций» (далее по тексту ПО SCR4x64) представляет собой реализацию процессора архитектуры RISC-V микроконтроллерного класса для встроенных применений.
ПО SCR4x64 предназначено для работы в составе систем на кристалле (СнК), реализованных непосредственно в кремнии или в программируемых логических интегральных схемах (ПЛИС), и может применяться в одноядерных и многоядерных конфигурациях.
ПО SCR4x64 является сложным функциональным СФ-блоком (Soft IP), передаваемым потребителю в виде описания на высокоуровневом языке описания аппаратуры SystemVerilog для дальнейшего использования в программах автоматизированного синтеза логических схем с привязкой к конкретной технологии ASIC или ПЛИС.
ПО разрабатывается с использованием собственных мощностей и ресурсов. Цена является договорной, размер вознаграждения за право использования зависит от конфигурации ПО. Обновление ПО производится силами разработчика.
Функциональные характеристики
ПО SCR4х64 реализует собой 64-х разрядный процессор архитектуры RISC-V микроконтроллерного класса, предназначенный для использования в составе различных встраиваемых и других систем.
Программа обеспечивает выполнение арифметических и логических операций с целочисленными операндами и поддерживает 16- и 32-битные инструкции и 64/32/16/8-битные операнды.
Основные функциональные характеристики ПО SCR4x64:
- Гарвардская архитектура (раздельные шины команд и данных);
- Поддержка симметричной многопроцессорности (SMP) и межъядерного взаимодействия с настраиваемой конфигурацией от 1 до 4-х процессорных ядер в кластере;
- Набор команд: RV64IMСAFD
- базовый набор с целочисленными операциями, 64-битный (RV64I);
- команды операций целочисленное умножения и деления (М расширение);
- команды компактного формата для увеличения плотности кода (16-битовые, С расширение);
- опциональная поддержка атомарных операций (А расширение);
- арифметические операции с плавающей точкой над числами одинарной точности (Single-Precision Floating-Point, F расширение);
- арифметические операции с плавающей точкой над числами двойной точности (Double-Precision Floating-Point, D расширение);
- Два уровня привилегированности и соответствующих им режимов исполнения команд: машинный уровень (режим 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).
Состав ПО
ПО SCR4x64 в базовой конфигурации, реализующей архитектуру RV64IMСAFD включает в себя:
- Исходный код на языке SystemVerilog, пригодный для моделирования и синтеза;
- Исходный код тестового окружения (Testbench) для выполнения функциональной верификации до и после синтеза;
- Наборы скриптов для проведения моделирования и синтеза с файлами входных ограничений в формате (.sdc).
- Комплект разработчика на базе ПЛИС (SCR4 SDK):
- пример проекта СнК на основе ПО SCR4x64;
- образы загрузки ПЛИС и объектных модулей прикладного ПО для выполнения на ядре SCR4x64.
- Инструментальные средства разработки:
- набор инструментальных средств, основанных на GCC 8.x, 9.x: компилятор, отладчик, компоновщик, функциональный симулятор, бинарные утилиты binutils, newlib, openocd;
- IDE на базе Eclipse (для Linux и Windows);
- Прикладное ПО:
- начальный загрузчик;
- набор архитектурных тестов и тестов совместимости;
- примеры простых приложений (baremetal) и тестов производительности;
- Сопроводительная документация:
- спецификация внешней архитектуры ПО SCR4x64 (SCR4 EAS)
- руководство пользователя ПО SCR4x64 (SCR4 UM)
- руководство по системе команд (SCR4 ISM)
- руководство на комплект разработчика (SCR4 SDK)
- руководство по инструментам разработчика (SCRx development tools)
- руководство на тестовое окружение
Требования к работе с ПО
Типом реализующей ЭВМ для ПО SCR4x64 является Система-на-Кристалле (СнК) в составе полузаказных интегральных микросхем или программируемых логических интегральных схем (ПЛИС).
При реализации собственных функционально законченных СнК пользователь должен самостоятельно дополнить основу (микропроцессорную структуру ПО SCR4x64) необходимыми ему дополнительными модулями в виде отдельных IP-ядер или инфраструктурами IP-ядер.
Для логического синтеза и функциональной верификации ПО SCR4x64 в составе СнК, пользователю предоставляется набор средств разработки “SCR4 SDK” для физического прототипирования на ПЛИС, основными компонентами которого являются:
- пример проекта СнК для ПЛИС на основе ПО SCR4x64;
- предварительно собранные образы процессорного ядра ПО SCR4x64 и начального загрузчика;
- тестовое программное обеспечение для проверки работоспособности ПО SCR4x64.
Необходимое обеспечение для работы с ПО SCR4x64
Для работы с ПО SCR4х64 необходимо следующее обеспечение:
- Персональный компьютер (ПК) с объёмом оперативной памяти не менее 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 адаптера).
Компиляция ПО
Процесс компиляции образа ПО SCR4x64 описан в руководстве на комплект разработчика (SCR4 SDK). В состав ПО входит Zip-архив, содержащий скомпилированные образы, созданные согласно руководству на комплект разработчика пример проекта СнК на основе ПО SCR4x64. В следующих разделах описан процесс установки и тестирования ПО SCR4x64 в составе проекта СнК.
Установка ПО
Процесс установки ПО заключается в выполнении процедуры программирования конфигурационного ППЗУ (флэш) на отладочной плате, для обеспечения дальнейшей загрузки ПЛИС.
Для установки и работы с ПО SCR4х64 персональный компьютер подключается к отладочной плате 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 порт;
- обеспечение функциональности консольного порта при выполнении программы на процессорном ядре SCR4х64 через USB UART порт.
Подключение кабелей к отладочной плате VCU118 приведено на Рисунке 1.
Рисунок 1: Подключение кабелей к отладочной плате VCU118
Последовательность действий при программировании конфигурационной флэш
- Распакуйте архив, находящийся в дереве каталогов ПО SCR4x64 в папке SDK:<
SDK_HOME >/images/vcu118_scr4.tar.gz. В архиве находятся два файла: vcu118_scr4.mcs, vcu118_scr4.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_scr4.mcs, vcu118_scr4.prm)
- Нажмите “OK” для запуска процесса программирования конфигурационной микросхемы flash (процесс программирования может занять несколько минут).
Примечание: Проверьте, что DIP переключатель SW16 на плате VCU118 установлен в положение выбора режима загрузки ПЛИС Master SPI
- После успешного завершения процесса программирования (можно проконтролировать по сообщениям в диалоговом окне), необходимо выйти из программы Vivado и загрузить образ «прошивки» в ПЛИС, для этого нажмите кнопку “PROG” на отладочной плате VCU118, или нажмите кнопку “CPU_RESET” на плате (см. рисунок ниже), или выключите и включите плату.
Рисунок 2: Аппаратный сброс платы VCU118
ПО SCR4х64 установлено и готово к работе.
Запуск тестов на процессоре SCR4x64 с использованием начального загрузчика
Подключение инструментального ПК к отладочной плате остается прежним, см. Рисунок 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: RV64IMAFDC [800000000010112D] IMPID: 0000000021061743 BLDID: 21070800 Platform: vcu118_scr4c2p, 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:10) Copyright (C) 2015-2020 Syntacore. All rights reserved. ISA: RV64IMAFDC [800000000010112D] IMPID: 0000000021061743 BLDID: 21070800 Platform: vcu118_scr4c2p, 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 2G 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 000000FF80000000 02 0000007F FFFFFFFFF0000000 000000FFFFFE0000 03 00030007 FFFFFFFFF0040000 000000FFFFFFE000 04 00010007 FFFFFFFFFF000000 000000FFFF800000 05 0000000F FFFFFFFFFFFF0000 000000FFFFFF0000 !
- Для загрузки прикладной программы (например, теста поизводительности Dhrystone benchmark) в локальную память процессора SCR4x64, в терминальном окне в меню загрузчика нужно выбрать "1".
- Далее необходимо ввести стартовый адрес (в шестнадцатеричном формате) для загрузки исполняемого файла в локальную память процессора SCR4x64, и нажать “Enter”. В терминальном окне начнут периодически выводиться символы “C”, сигнализируя готовность загрузчика принимать бинарный образ по протоколу x-modem:
xload @addr addr: 0 CCCCCCCC
Примечание: программа загрузчик (SCR bootloader), исполняемая на процессоре SCR4 использует x-modem протокол передачи файлов и поддерживает загрузку только бинарных образов с расширением .bin
- В терминальном окне minicom, нажав комбинацию клавиш "Ctrl+А" затем "S", откройте меню выбора протоколов загрузки, затем выберете “xmodem”:
+-[Upload]--+ | zmodem | | ymodem | | xmodem | | kermit | | ascii | +-----------+
- На ПК нажмите клавишу “Enter”, затем выберите .bin файл для загрузки (нужно выделить файл и нажать клавишу пробел “space”):
+------------------------[Select a file for upload]-------------------------+ |Directory: /images/scr4 | | [..] | | dhrystone.bin | | |
- Нажмите “Enter”, начнется передача файла. dhrystone_o3lto.bin
+-----------[xmodem upload - Press CTRL-C to quit]------------+ |Sending dhrystone.bin, 160 blocks: Give your local XMODEM rec| |eive command now. | |Bytes Sent: 20608 BPS:5300 | | | |Transfer complete | | | | READY: press any key to continue... | +-------------------------------------------------------------+
- По окончании загрузки будет выведена статусная информация:
Xmodem successfully received 20608 bytes
Загруженная программа в память процессора SCR4x64 готова к исполнению.
- В терминальном окне в меню загрузчика выберите “g”, затем введите начальный адрес запуска программы 0x106c. После этого начнется выполнение программы:
start @addr addr: 0 Dhrystone Benchmark, Version 2.1 (Language: C) ...
- После выполнения теста на процессоре SCR4x64, выводятся результаты:
Microseconds for one run through Dhrystone: 15.4 Dhrystones per Second: 64933.3
Запуск тестов на процессоре SCR4x64 с использованием отладчика 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=<Раth 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 trst_and_srst separate srst_gates_jtag trst_push_pull srst_open_drain connect_deassert_srst Info : auto-selecting first available session transport "jtag". To override use 'transport select
'. riscv.cpu3 Info : clock speed 2000 kHz Info : JTAG tap: riscv.cpu0 tap/device found: 0xdeb14001 (mfg: 0x000 ( ), part: 0xeb14, ver: 0xd) Info : JTAG tap: riscv.cpu1 tap/device found: 0xdeb14001 (mfg: 0x000 ( ), part: 0xeb14, ver: 0xd) Info : JTAG tap: riscv.cpu2 tap/device found: 0xdeb14001 (mfg: 0x000 ( ), part: 0xeb14, ver: 0xd) Info : JTAG tap: riscv.cpu3 tap/device found: 0xdeb14001 (mfg: 0x000 ( ), part: 0xeb14, 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=0x800000000010112d 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=0x800000000010112d 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=0x800000000010112d 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=0x800000000010112d 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 20564 bytes written at address 0x00000000 downloaded 20564 bytes in 0.224523s (89.443 KiB/s)
Примечание: Команда загрузки предполагает расположение файла в текущей директории. При другом расположении, имя загружаемого файла должно включать относительный путь.
-
Примечание: Команда загрузки предполагает расположение файла в текущей директории. При другом расположении, имя загружаемого файла должно включать относительный путь.
> resume 0x0
Запустится программа теста с выводом результатов в терминал.