Улучшенное 32-разрядное процессорное ядро SCR1 для встроенных применений с набором команд RISC-V
Общие сведения
Программа для ЭВМ «Улучшенное 32-разрядное процессорное ядро SCR1 для встроенных применений с набором команд RISC-V» (далее по тексту ПО SCR1) представляет собой реализацию процессора архитектуры RISC-V микроконтроллерного класса для встроенных применений.
ПО SCR1 предназначено для работы в составе систем на кристалле (СнК), реализованных непосредственно в кремнии или в программируемых логических интегральных схемах (ПЛИС), и может применяться в одноядерных и многоядерных конфигурациях.
ПО SCR1 является сложным функциональным СФ-блоком (Soft IP), передаваемым потребителю в виде описания на высокоуровневом языке описания аппаратуры SystemVerilog для дальнейшего использования в программах автоматизированного синтеза логических схем с привязкой к конкретной технологии ASIC или ПЛИС.
ПО разрабатывается с использованием собственных мощностей и ресурсов. Цена является договорной, размер вознаграждения за право использования зависит от конфигурации ПО. Обновление ПО производится силами разработчика.
Функциональные характеристики
ПО SCR1 реализует собой 32-х разрядный процессор архитектуры RISC-V микроконтроллерного класса, предназначенный для использования в составе различных встраиваемых и других систем.
Программа обеспечивает выполнение арифметических и логических операций с целочисленными операндами и поддерживает 16- и 32-битные инструкции и 32/16/8-битные операнды.
Основные функциональные характеристики ПО SCR1:
- Гарвардская архитектура (раздельные шины команд и данных);
- Конфигурируемая архитектура с набором команд: RV32IMСE
- базовый набор с целочисленными операциями, 32-битный (RV32I);
- команды операций целочисленное умножения и деления (М расширение);
- команды компактного формата для увеличения плотности кода (16-битовые, С расширение);
- опциональная поддержка базового набора с целочисленными операциями для встраиваемых систем (RV32E);
- Один машинный уровень (режим M-mode) привилегированности исполнения команд;
- Многоуровневый конвейер с последовательным исполнением команд;
- опциональная поддержка памяти быстрого доступа (ТСМ, Tightly-Coupled Memory) до 64 Кб;
- Поддержка работы в режиме без механизмов трансляции адресов и защиты доступа в память;
- Интегрированный программируемый контроллер прерываний (IPIC) с поддержкой до 32-х источников прерываний;
- Поддержка генерации периодических прерываний от часов реального времени (Real Time Clock) с настраиваемым коэффициентом деления.
- Встроенный контроллер отладки с поддержкой аппаратных точек останова, совместимый со стандартом IEЕЕ 1149.1-2001 (JTAG);
- Конфигурируемый внешний интерфейс, совместимый с шиной AXI (Advanced extensible Interface) или АНВ (Advanced High-performance Bus).
Состав ПО
ПО SCR1 в базовой конфигурации, реализующей архитектуру RV32IMС включает в себя:
- Исходный код на языке SystemVerilog, пригодный для моделирования и синтеза;
- Исходный код тестового окружения (Testbench) для выполнения функциональной верификации до и после синтеза;
- Наборы скриптов для проведения моделирования и синтеза с файлами входных ограничений в формате (.sdc).
- Комплект разработчика на базе ПЛИС (SCR1 SDK):
- пример проекта СнК на основе ПО SCR1;
- образы загрузки ПЛИС и объектных модулей прикладного ПО для выполнения на ядре SCR1.
- Инструментальные средства разработки:
- набор инструментальных средств, основанных на GCC 8.x, 9.x: компилятор, отладчик, компоновщик, функциональный симулятор, бинарные утилиты binutils, newlib, openocd;
- IDE на базе Eclipse (для Linux и Windows).
- Прикладное ПО:
- начальный загрузчик;
- набор архитектурных тестов и тестов совместимости;
- примеры простых приложений (baremetal) и тестов производительности;
- операционная система FreeRTOS для платы SCR1 SDK.
- Сопроводительная документация:
- спецификация внешней архитектуры ПО SCR1 (SCR1 EAS)
- руководство пользователя ПО SCR1 (SCR1 UM)
- руководство по системе команд (SCR1 ISM)
- руководство на комплект разработчика (SCR1 SDK)
- руководство по инструментам разработчика (SCRx development tools)
- руководство на тестовое окружение
Требования к работе с ПО
Типом реализующей ЭВМ для ПО SCR1 является Система-на-Кристалле (СнК) в составе полузаказных интегральных микросхем или программируемых логических интегральных схем (ПЛИС).
При реализации собственных функционально законченных СнК пользователь должен самостоятельно дополнить основу (микропроцессорную структуру ПО SCR1) необходимыми ему дополнительными модулями в виде отдельных IP-ядер или инфраструктурами IP-ядер.
Для логического синтеза и функциональной верификации ПО SCR1 в составе СнК, пользователю предоставляется набор средств разработки “SCR1 SDK” для физического прототипирования на ПЛИС, основными компонентами которого являются:
- пример проекта СнК для ПЛИС на основе ПО SCR1;
- предварительно собранные образы процессорного ядра ПО SCR1 и начального загрузчика;
- тестовое программное обеспечение для проверки работоспособности ПО SCR1.
Необходимое обеспечение для работы с ПО SCR1
Для работы с ПО SCR1 необходимо следующее обеспечение:
- Персональный компьютер (ПК) с объёмом оперативной памяти не менее 4 Гб.
- Установленные на ПК программы:
- ОС Windows или Linux;
- пакет программ Xilinx Vivado WebPack Edition версии не ниже 2018.1 (скачивается бесплатно после регистрации на сайте xilinx.com);
- система отладки OpenOCD.
- Отладочная плата Arty A7-100T на базе ПЛИС Artix-7
(https://store.digilentinc.com/arty-a7-artix-7-fpga-development-board/) - JTAG Cable Adapter: Digilent JTAG-HS2 Programming Cable
(https://store.digilentinc.com/jtag-hs2-programming-cable/) - Набор стандартных кабелей типа USB Type A (m) - Type B micro (m), 2 шт. (из состава комплектов платы Arty A7-100T и JTAG адаптера)
Компиляция ПО
Процесс компиляции образа ПО SCR1 описан в руководстве на комплект разработчика (SCR1 SDK). В состав ПО входит Zip-архив, содержащий скомпилированные образы, созданные согласно руководству на комплект разработчика пример проекта СнК на основе ПО SCR1. В следующих разделах описан процесс установки и тестирования ПО SCR1 в составе проекта СнК.
Установка ПО
Процесс установки ПО заключается в выполнении процедуры программирования конфигурационного ППЗУ (флэш) на отладочной плате, для обеспечения дальнейшей загрузки ПЛИС.
Для установки и работы с ПО SCR1 персональный компьютер подключается к совмещенному (USB/JTAG/UART) порту на отладочной плате (см. рисунок 1, поз. J10).
Подключение выполняется одним кабелем типа USB Type A (m) - Type B micro (m). Это подключение выполняет три функции:
- подачу питания +5В на отладочную Arty A7-100T;
- подключение к JTAG порту для конфигурирования ПЛИС;
- обеспечение консольного порта при выполнении программы на процессорном ядре SCR1.
Рисунок 1. Подключение к отладочной плате Arty A7-100T
Последовательность действий при программировании конфигурационной флэш
Примечание: Проверьте подключение к отладочной плате. К плате должен быть подключен только один USB-кабель, см. Рисунок 1.
- Распакуйте Zip архив, находящийся в дереве каталогов ПО SCR1 в папке SDK:<
SDK_HOME >/images/arty/scr1/arty100_scr1.zip. В архиве находятся два файла: top_new.mcs, top_new.prm. - После подачи питания на плату, запустите пакет программ Vivado на инструментальном ПК.
- Запустите утилиту «Hardware Manager» из меню или командной строки консоли Vivado. Выполните команду «Open Target» с опцией «Auto Connect», должно произойти подключение к микросхеме ПЛИС ПЛИС Artix-7 -100 отладочной платы по интерфейсу JTAG.
- Добавьте в конфигурационную цепочку для программирования микросхему конфигурационной флэш. Для этого в меню «Hardware» выделите указателем «мыши» микросхему ПЛИС и по нажатию правой кнопки «мыши» в контекстном меню указателем выберите «Add Configuration Memory Device».
- В открывшемся меню выберите (или введите) тип микросхемы флэш S25FL128Sxxxxxx0: производитель – Spansion; тип интерфейса – SPI; ёмкость - 128 Mbits; разрядность шины данных – х1_х2_х4.
- На вопрос программатора ”Do you want to program the configuration memory device now?", подтвердите “OK”.
- В открывшимся диалогом окне «Program Configuration Memory Device» добавьте загрузочные файлы .mcs и .prm образов «прошивки» ПЛИС, полученные на шаге 1.
- Нажмите “OK” для запуска процесса программирования конфигурационной микросхемы флэш (процесс программирования может занять несколько минут).
- После успешного завершения процесса программирования (можно проконтролировать по сообщениям в диалоговом окне), необходимо выйти из программы Vivado и загрузить образ «прошивки» в ПЛИС, для этого нажмите кнопку “PROG” на отладочной плате Arty A7-100T.
ПО SCR1 установлено и готово к работе.
Запуск тестов на процессоре SCR1 с использованием начального загрузчика
Подключение инструментального ПК к отладочной плате остается прежним (USB кабелем к разъему J10 на плате).
-
Для загрузки и исполнения теста используется бинарный файл контрольной задачи – синтетического теста производительности процессорной системы (Dhrystone benchmark). Файл находится по следующему пути в структуре репозитория SDK:
<
SDK_HOME >/images/arty100/benchmarks_scr1.zip Распакуйте архив. В нем находится .bin-файл синтетического теста.
- Запустите терминальную программу (пример, приведенный ниже - для программы minicom. Некоторые комбинации клавиш для других терминальных программ могут отличаться). Настройте параметры последовательного порта (UART) на инструментальном ПК. Для ОС Linux — это /dev/ttyUSB0 (цифра может меняться, смотрите список файлов в папке /dev/):
- Bps/Par/Bits - 115200 8N1
- скорость - 115200
- количество битов в посылке - 8
- количество стоп-битов - 1
- чётность - нет
- Hardware Flow Control: No
- Инициируйте процесс перезагрузки ПЛИС, нажав кнопку “PROG” на отладочной плате, или подачей сигнала reset на ПЛИС, нажав кнопку “RESET” на плате.
-
При включении платы или перезагрузке ПЛИС в терминал выдается начальное приглашение загрузчика, после чего загрузчик переходит в режим ожидания команды пользователя:
SCR loader v1.3-gaecf467 Copyright (C) 2015-2020 Syntacore. All rights reserved. ISA: RV32IMC [40101104] IMPID: 19083000 SYSID: 21091300 BLDID: 21101400 Platform: arty100_scr1, cpuclk 25MHz, sysclk 25MHz 1: xload @addr g: start @addr d: mem dump m: mem modify t: mem test :
Примечание: программа загрузчик (SCR bootloader), исполняемая на процессорном ядре SCR1 использует x-modem протокол передачи файлов и поддерживает загрузку только бинарных образов с расширением .bin
- Нажмите клавишу “1”
-
Введите стартовый адрес (в шестнадцатеричном формате) для загрузки исполняемого файла в локальную память TCM процессорного ядра SCR1, и нажмите “Enter”. В терминальном окне начнут периодически выводиться символы “C”, сигнализируя готовность загрузчика принимать бинарный образ по протоколу x-modem:
xload @addr addr: f0000000 CCCCCCCC
-
В терминальном окне 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_o3lto.bin, 107 blocks: Give your local XMODE | |M receive command now. | |Bytes Sent: 13952 BPS:5468 | | | |Transfer complete | | | | READY: press any key to continue... | :+--------------------------------------------------------------+
-
По окончании загрузки будет выведена статусная информация:
Xmodem successfully received 13952 bytes
Загруженная программа в память процессорного ядра SCR1 готова к исполнению.
-
В терминальном окне в меню загрузчика выберите “g”, затем введите начальный адрес запуска программы 0xf0000200. После этого начнется выполнение программы:
start @addr addr: f0000200 Dhrystone Benchmark, Version 2.1 (Language: C) ...
-
После выполнения теста на процессорном ядре SCR1, выводятся результаты:
Microseconds for one run through Dhrystone: 12.766 Dhrystones per Second: 78333
Запуск тестов на процессоре SCR1 с использованием отладчика OpenOCD
Open On-Chip Debugger (открытый отладчик для чипов) является программой с открытым исходным кодом. OpenOCD предоставляет доступ к адаптеру для отладки (JTAG debug adapter) и обеспечивает инструментарий отладки (debugging) и внутрисхемного программирования для встраиваемых систем.
Подключение JTAG кабеля адаптера OpenOCD
Подключение JTAG кабеля адаптера OpenOCD к плате Arty A7-100 показано на Рисунке 2.
Рисунок 2. Подключение JTAG адаптера к отладочной плате Arty A7-100T
Установка 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}/share/openocd/scripts/interface/ftdi/digilent-hs2_fixed.cfg \ -f ${OOCD_ROOT}/share/openocd/scripts/target/syntacore_riscv.cfg or if you build it from sources: $ sudo ${OOCD_ROOT}/src/openocd \ -s ${OOCD_ROOT}/tcl \ -f ${OOCD_ROOT}/tcl/interface/ftdi/digilent-hs2_fixed.cfg \ -f ${OOCD_ROOT}/tcl/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 <
transport >'. riscv.cpu Info : clock speed 2000 kHz Info : JTAG tap: riscv.cpu tap/device found: 0xdeb13001 (mfg: 0x000 (< invalid >), part: 0xeb13, ver: 0xd) Info : riscv.cpu: datacount=2 progbufsize=6 Info : riscv.cpu: Examined RISC-V core; found 1 harts Info : riscv.cpu: hart 0: XLEN=32, misa=0x40101104 Info : Listening on port 3333 for gdb connections -
Откройте второй терминал (терминал 2) и введите команду:
$ telnet localhost 4444
В терминале 1 выводится подтверждение запуска telnet сессии:
Info : accepting 'telnet' connection on tcp/4444
OpenOCD запущен и готов к работе. Терминал 2 представляет собой интерактивную консоль OpenOCD.
По команде help можно вывести список доступных команд openocd.
Загрузка и запуск на выполнение бинарных образов
Примечание: При загрузке с OpenOCD используются образы двоичных файлов в формате .elf или .bin
-
Введите следующие команды в консоли OpenOCD (Терминал 2), выполняющие остановку ядра и загрузку исполняемого кода :
> halt > load_image dhry21-o3lto.bin 0xf0000000 bin
or
> halt > load_image dhrystone.elf 0xf0000000 elf
Примечание: Команда загрузки предполагает расположение файла в текущей директории. При другом расположении, имя загружаемого файла должно включать относительный путь.
-
После ввода команды отображается прогресс загрузки. После завершения загрузки запустите программу теста:
> resume 0xf000000
-
После выполнения теста на процессорном ядре SCR1, выводятся результаты:
Dhrystone Benchmark, Version 2.1 (Language: C) Program compiled without 'register' attribute Platform: SCR1 Syntacore FPGA @ 25.000 MHz Compiler: GCC10.2.0 Flags: -O3 -funroll-loops -flto Execution starts, 5000 runs through Dhrystone Execution ends ... Microseconds for one run through Dhrystone: 12.764 Dhrystones per Second: 78345