Процессорное ядро уровня приложений SCR5 с набором команд RISC-V и поддержкой многоядерных конфигураций
Общие сведения
Программа для ЭВМ «Процессорное ядро уровня приложений SCR5 с набором команд RISC-V и поддержкой многоядерных конфигураций» (далее по тексту ПО SCR5) представляет собой реализацию процессора архитектуры RISC-V микропроцессорного класса для встроенных применений с поддержкой Linux-подобных операционных систем.
ПО SCR5 предназначено для работы в составе систем на кристалле (СнК), реализованных непосредственно в кремнии или в программируемых логических интегральных схемах (ПЛИС), и может применяться в одноядерных и многоядерных конфигурациях.
ПО SCR5 является сложным функциональным СФ-блоком (Soft IP), передаваемым потребителю в виде описания на высокоуровневом языке описания аппаратуры SystemVerilog для дальнейшего использования в программах автоматизированного синтеза логических схем с привязкой к конкретной технологии ASIC или ПЛИС.
ПО разрабатывается с использованием собственных мощностей и ресурсов. Цена является договорной, размер вознаграждения за право использования зависит от конфигурации ПО. Обновление ПО производится силами разработчика.
Функциональные характеристики
ПО SCR5 реализует собой 32/64-х разрядный процессор архитектуры RISC-V микропроцессорного класса, предназначенный для использования в составе различных встраиваемых и других систем, где требуется полнофункциональная поддержка ОС Linux.
Программа обеспечивает выполнение арифметических и логических операций с целочисленными операндами и вычислений с плавающей точкой одинарной и двойной точности; поддержку 16- и 32- битных инструкций и 64/32/16/8-битных операндов; идентификацию ядер в многоядерных конфигурациях СнК;
Основные функциональные характеристики ПО SCR5:
- Гарвардская архитектура (раздельные шины команд и данных);
- Поддержка симметричной многопроцессорности (SMP) и межъядерного взаимодействия с настраиваемой конфигурацией от 1 до 4-х процессорных ядер в кластере;
- Набор команд: RV32/64IMСAFD
- базовые наборы с целочисленными операциями, 32 или 64-битный (RV32/64I);
- команды операций целочисленное умножения и деления (М расширение);
- команды компактного формата для увеличения плотности кода (16-битовые, С расширение);
- атомарные операции (А расширение);
- арифметические операции с плавающей точкой над числами одинарной точности (Single-Precision Floating-Point, F расширение);
- арифметические операции с плавающей точкой над числами двойной точности (Double-Precision Floating-Point, D расширение);
- Три уровня привилегированности и соответствующих им режимов исполнения команд: машинный уровень (режим M-mode), пользовательский уровень (режим U-mode), уровень супервизора (режим - S-mode);
- Многоуровневый конвейер с последовательным исполнением команд;
- Высокопроизоводительный модуль операций с плавающей запятой одинарной и двойной точности (Floating-Point Unit);
- Конфигурируемая подсистема памяти:
- поддержка виртуальной памяти с помощью модуля управления памятью (MMU);
- контроль доступа к физической памяти с помощью модуля защиты памяти (MPU - Memory Protection Unit);
- опциональная поддержка памяти быстрого доступа (ТСМ, Tightly-Coupled Memory) до 256 Кб;
- поддержка кэш-памяти (с опцией коррекции ошибок) с когерентностью памяти:
- кэш команд уровня L1 размером от 8 до 64 Кб;
- кэш данных уровня L1 размером от 8 до 64 Кб;
- кэш данных уровня L2 размером до 2 Мб на кластер;
- Интегрированный программируемый контроллер прерываний (IPIC) с поддержкой до 32-х источников прерываний;
- Опциональная замена IPIC на конфигурируемый контроллер прерываний уровня платформы (PLIC) с возможностью приема большого количества внешних запросов прерываний (до 1023) и с динамическим заданием (изменением) приоритета прерываний;
- Встроенный 64-битовый таймер часов реального времени (Real Time Clock) с настраиваемым коэффициентом деления;
- Встроенный контроллер отладки с поддержкой аппаратных точек останова, совместимый со стандартом IEЕЕ 1149.1-2001 (JTAG);
- Конфигурируемый внешний интерфейс, совместимый с шиной AXI (Advanced extensible Interface).
Состав ПО
ПО SCR5 в базовой конфигурации, реализующей архитектуру RV64IMСAFD включает в себя:
- Исходный код на языке SystemVerilog, пригодный для моделирования и синтеза;
- Исходный код тестового окружения (Testbench) для выполнения функциональной верификации до и после синтеза;
- Наборы скриптов для проведения моделирования и синтеза с файлами входных ограничений в формате (.sdc).
- Комплект разработчика на базе ПЛИС (SCR5 SDK):
- пример проекта СнК на основе ПО SCR5;
- образы загрузки ПЛИС и объектных модулей прикладного ПО для выполнения на ядре SCR5.
- Инструментальные средства разработки:
- набор инструментальных средств, основанных на GCC 8.x, 9.x: компилятор, отладчик, компоновщик, функциональный симулятор, бинарные утилиты binutils, newlib, openocd;
- IDE на базе Eclipse (для Linux и Windows).
- Прикладное ПО:
- начальный загрузчик;
- набор архитектурных тестов и тестов совместимости;
- примеры простых приложений (baremetal) и тестов производительности;
- операционная система Linux для платы SCR5 SDK.
- Сопроводительная документация:
- руководство пользователя ПО SCR5 (SCR5 UM);
- спецификация внешней архитектуры ПО SCR5 (SCR5 EAS);
- руководство по системе команд (SCR5 ISM);
- руководство на комплект разработчика (SCR5 SDK);
- руководство по инструментам разработчика (SCRx development tools);
- руководство на тестовое окружение.
Требования к работе с ПО
Типом реализующей ЭВМ для ПО SCR5 является Система-на-Кристалле (СнК) в составе полузаказных интегральных микросхем или программируемых логических интегральных схем (ПЛИС).
При реализации собственных функционально законченных СнК пользователь должен самостоятельно дополнить основу (микропроцессорную структуру ПО SCR5) необходимыми ему дополнительными модулями в виде отдельных IP-ядер или инфраструктурами IP-ядер.
Для логического синтеза и функциональной верификации ПО SCR5 в составе СнК, пользователю предоставляется набор средств разработки “SCR5 SDK” для физического прототипирования на ПЛИС, основными компонентами которого являются:
- пример проекта СнК для ПЛИС на основе ПО SCR5;
- предварительно собранные образы процессорного ядра ПО SCR5, начального загрузчика и ОС Linux;
- тестовое программное обеспечение для проверки работоспособности ПО SCR5.
Необходимое обеспечение для работы с ПО SCR5
Для работы с ПО SCR5 необходимо следующее обеспечение:
- Персональный компьютер (ПК) с объёмом оперативной памяти не менее 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 адаптера).
- Кабель Ethernet cat.5E (в комплекте VCU118 Evaluation Kit).
Компиляция ПО
Процесс компиляции образа ПО SCR5 описан в руководстве на комплект разработчика (SCR5 SDK). В состав ПО входит Zip-архив, содержащий скомпилированные образы, созданные согласно руководству на комплект разработчика пример проекта СнК на основе ПО SCR5. В следующих разделах описан процесс установки и тестирования ПО SCR5 в составе проекта СнК.
Установка ПО
Процесс установки ПО заключается в выполнении процедуры программирования конфигурационного ППЗУ (флэш) на отладочной плате, для обеспечения дальнейшей загрузки ПЛИС.
Для установки и работы с ПО SCR5 персональный компьютер подключается к отладочной плате 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 порт;
- обеспечение функциональности консольного порта при выполнении программы на процессорном ядре SCR5 через USB UART порт.
Подключение кабелей к отладочной плате VCU118 в минимальной конфигурации приведено на Рисунке 1.
Рисунок 1. Подключение кабелей к отладочной плате VCU118
- Распакуйте архив, находящийся в дереве каталогов ПО SCR5 в папке SDK:<
SDK_HOME >/images/vcu118_scr5.tar.gz. В архиве находятся два файла: vcu118_scr5.mcs, vcu118_scr5.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_scr5.mcs, vcu118_scr5.prm)
- Нажмите “OK” для запуска процесса программирования конфигурационной микросхемы flash (процесс программирования может занять несколько минут).
Примечание: Проверьте, что DIP переключатель SW16 на плате VCU118 установлен в положение выбора режима загрузки ПЛИС Master SPI
- После успешного завершения процесса программирования (можно проконтролировать по сообщениям в диалоговом окне), необходимо выйти из программы Vivado и загрузить образ «прошивки» в ПЛИС, для этого нажмите кнопку “PROG” на отладочной плате VCU118, или нажмите кнопку “CPU_RESET” на плате (см. рисунок ниже), или выключите и включите плату.
Рисунок 2: Аппаратный сброс платы VCU118
ПО SCR5 установлено и готово к работе.
Запуск тестов на процессоре SCR5 с использованием начального загрузчика
Подключение инструментального ПК к отладочной плате остается прежним, см. Рисунок 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-gdf04d45 SMP Copyright (C) 2015-2020 Syntacore. All rights reserved. ISA: RV64IMAFDC [800000000014112D] IMPID: 0000000021061753 BLDID: 21070800 Platform: vcu118_scr5t, 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 Linux 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-gdf04d45 SMP (Jul 9 2021 12:47:23) Copyright (C) 2015-2020 Syntacore. All rights reserved. ISA: RV64IMAFDC [800000000014112D] IMPID: 0000000021061753 BLDID: 21070800 Platform: vcu118_scr5t, 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 00000000FFC00000 4M 00010186 DMA RAM FFFFFFFFF0000000 256K 000003FE TCM FFFFFFFFF0040000 8K 00030006 MMCFG FFFFFFFFFE000000 16M 00010186 PLIC FFFFFFFFFF000000 8M 00010186 MMIO FFFFFFFFFFFF0000 64K 0000008E On-Chip RAM MPU regions (16): 01 000003FF 0000000000000000 000000FF00000000 02 00010187 00000000FFC00000 000000FFFFC00000 03 000003FF FFFFFFFFF0000000 000000FFFFFC0000 04 00030007 FFFFFFFFF0040000 000000FFFFFFE000 05 00010187 FFFFFFFFFE000000 000000FFFF000000 06 00010187 FFFFFFFFFF000000 000000FFFF800000 07 0000008F FFFFFFFFFFFF0000 000000FFFFFF0000 !
- Для загрузки прикладной программы (например, теста поизводительности Dhrystone benchmark) в локальную память процессора SCR5, в терминальном окне в меню загрузчика нужно выбрать "1".
- Далее необходимо ввести стартовый адрес (в шестнадцатеричном формате) для загрузки исполняемого файла в локальную память процессора SCR5, и нажать “Enter”. В терминальном окне начнут периодически выводиться символы “C”, сигнализируя готовность загрузчика принимать бинарный образ по протоколу x-modem:
xload @addr addr: 0 CCCCCCCC
Примечание: программа загрузчик (SCR bootloader), исполняемая на процессоре SCR5 использует x-modem протокол передачи файлов и поддерживает загрузку только бинарных образов с расширением .bin
- В терминальном окне minicom, нажав комбинацию клавиш "Ctrl+А" затем "S", откройте меню выбора протоколов загрузки, затем выберите “xmodem”:
+-[Upload]--+ | zmodem | | ymodem | | xmodem | | kermit | | ascii | +-----------+
- На ПК нажмите клавишу “Enter”, затем выберите .bin файл для загрузки (нужно выделить файл и нажать клавишу пробел “space”):
+--------------[Select a file for upload]---------------+ |Directory: /images/scr5 | | [..] | | dhrystone.bin | | |
- Нажмите “Enter”, начнется передача файла. dhrystone_o3lto.bin
+-----------[xmodem upload - Press CTRL-C to quit]------------+ |Sending dhrystone.bin, 117 blocks: Give your local XMODEM rec| |eive command now. | |Bytes Sent: 15104 BPS:5970 | | | |Transfer complete | | | | READY: press any key to continue... | +-------------------------------------------------------------+
- По окончании загрузки будет выведена статусная информация:
Xmodem successfully received 15104 bytes
Загруженная программа в память процессора SCR5 готова к исполнению.
- В терминальном окне в меню загрузчика выберите “g”, затем введите начальный адрес запуска программы 0. После этого начнется выполнение программы:
start @addr addr: 0 Dhrystone Benchmark, Version 2.1 (Language: C) ...
-
После выполнения теста на процессоре SCR5, выводятся результаты:
Microseconds for one run through Dhrystone: 15.3 Dhrystones per Second: 65056.7
Загрузка и запуск образа ОС Linux на платформе SCR5 SDK с использованием OpenOCD
В качестве теста работоспособности ПО SCR5 в составе проекта СнК используется запуск ОС Linux на платформе SCR5 SDK.
Open On-Chip Debugger (открытый отладчик для чипов) является программой с открытым исходным кодом. OpenOCD предоставляет доступ к адаптеру для отладки (JTAG debug adapter) и обеспечивает инструментарий отладки (debugging) и внутрисхемного программирования для встраиваемых систем.
Подключение JTAG кабеля адаптера OpenOCD
Подключение JTAG кабеля адаптера Olimex ARM-USB-OCD к плате VCU118 (см. рисунок ниже) выполняется с помощью переходной платы FMC XM105, имеющей в своем составе пользовательский разъемом J20 для подключения стандартного 20-ти контактного гибкого шлейфа.
Примечание: Перед первым подключением платы XM105, необходимо настроить необходимый уровень напряжения питания на разъеме FMC платы VCU118 с помощью утилиты VCU118 System Controller GUI tool, работающей под управлением ОС Windows (Win7 / Win8 / Win10)
Полное руководство для утилиты доступно по ссылке: VCU118 System Controller Tutorial.
Утилита и руководство к ней скачиваются бесплатно после авторизации на сайте https://www.xilinx.com
Необходимо соединить выводы 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: 0xdeb15001 (mfg: 0x000 (< invalid >), part: 0xeb15, ver: 0xd) Info : JTAG tap: riscv.cpu1 tap/device found: 0xdeb15001 (mfg: 0x000 (< invalid >), part: 0xeb15, ver: 0xd) Info : JTAG tap: riscv.cpu2 tap/device found: 0xdeb15001 (mfg: 0x000 (< invalid >), part: 0xeb15, ver: 0xd) Info : JTAG tap: riscv.cpu3 tap/device found: 0xdeb15001 (mfg: 0x000 (< invalid >), part: 0xeb15, 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=0x800000000014112d 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=0x800000000014112d 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=0x800000000014112d 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=0x800000000014112d 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.
Загрузка и запуск на выполнение бинарного образа ОС Linux на платформе SCR5 SDK
Примечание: При загрузке с OpenOCD используются образы двоичных файлов в формате.bin
-
Введите следующие команды в консоли 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 >reset halt; load_image vmlinux.bin 0 JTAG tap: riscv.cpu0 tap/device found: 0xdeb15001 (mfg: 0x000 (<
invalid >), part: 0xeb15, ver: 0xd) JTAG tap: riscv.cpu1 tap/device found: 0xdeb15001 (mfg: 0x000 (< invalid >), part: 0xeb15, ver: 0xd) JTAG tap: riscv.cpu2 tap/device found: 0xdeb15001 (mfg: 0x000 (< invalid >), part: 0xeb15, ver: 0xd) JTAG tap: riscv.cpu3 tap/device found: 0xdeb15001 (mfg: 0x000 (< invalid >), part: 0xeb15, ver: 0xd) 8682556 bytes written at address 0x00000000 downloaded 8682556 bytes in 83.540436s (101.496 KiB/s) > Примечание: Команда загрузки предполагает расположение файла в текущей директории. При другом расположении, имя загружаемого файла должно включать относительный путь.
- Сделайте перезапуск начального загрузчика
> reset JTAG tap: riscv.cpu0 tap/device found: 0xdeb15001 (mfg: 0x000 (<
invalid >), part: 0xeb15, ver: 0xd) JTAG tap: riscv.cpu1 tap/device found: 0xdeb15001 (mfg: 0x000 (< invalid >), part: 0xeb15, ver: 0xd) JTAG tap: riscv.cpu2 tap/device found: 0xdeb15001 (mfg: 0x000 (< invalid >), part: 0xeb15, ver: 0xd) JTAG tap: riscv.cpu3 tap/device found: 0xdeb15001 (mfg: 0x000 (< invalid >), part: 0xeb15, ver: 0xd) SCR loader v1.3-gdf04d45 SMP Copyright (C) 2015-2020 Syntacore. All rights reserved. ISA: RV64IMAFDC [800000000014112D] IMPID: 0000000021061753 BLDID: 21070800 Platform: vcu118_scr5t, 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 Linux 1: xload @addr v: int flash load u: int flash update g: start @addr d: mem dump m: mem modify t: mem test : -
В терминальном окне в меню загрузчика нужно выбрать "start Linux" - "0". После ввода команды начнется стандартная загрузка Linux с выводом лога в терминал uart:
Starting Linux ... ;;;;;vvvvvvvvv SSSSSSS rrrr;;;vvvvvvv SS s TM rrrrrr;;vvvvvv SS s s sss ssss sss sss sss sss sss rrrrrr;;vvvvv; SSSSSS s s s s s s s s s s s s rrrr;;;vvvvv;; SS s s s s s sssss s s s s sssss rr;;;vvvvvv;;r SS ssss s s s s s s s s s s rrr;;vvvvv;;rr SSSSSSS s s s ss sss sss sss s sss rrrr;;vvv;;rrr sss rrrrr;;v;;rrrr rrrrrr;;;rrrrr CUSTOM CORES AND TOOLS [ 0.000000] Linux version 4.19.166-46819-g5ceb3097ff34-dirty (mike@lynx2) (gcc version 10.2.0 (GCC)) #1 SMP Wed Jun 1 [ 0.000000] bootconsole [early0] enabled [ 0.000000] initrd not found or empty - disabling initrd [ 0.000000] SCRxDMA: created DMA memory pool at 0x00000000ffc00000, size 4 MiB [ 0.000000] OF: reserved mem: initialized node scr-dma@fe000000, compatible id scr-sdk-dma-pool [ 0.000000] Zone ranges: [ 0.000000] DMA32 [mem 0x0000000000000000-0x00000000ffbfffff] [ 0.000000] Normal empty [ 0.000000] Movable zone start for each node [ 0.000000] Early memory node ranges [ 0.000000] node 0: [mem 0x0000000000000000-0x00000000ffbfffff] [ 0.000000] Initmem setup node 0 [mem 0x0000000000000000-0x00000000ffbfffff] [ 0.000000] On node 0 totalpages: 1047552 [ 0.000000] DMA32 zone: 14322 pages used for memmap [ 0.000000] DMA32 zone: 0 pages reserved [ 0.000000] DMA32 zone: 1047552 pages, LIFO batch:63 [ 0.000000] software IO TLB: mapped [mem 0xf800e000-0xfc00e000] (64MB) [ 0.000000] CPU with hartid=4 is not available [ 0.000000] CPU with hartid=5 is not available [ 0.000000] CPU with hartid=6 is not available [ 0.000000] CPU with hartid=7 is not available [ 0.000000] elf_hwcap is 0x112d [ 0.000000] percpu: Embedded 17 pages/cpu s28984 r8192 d32456 u69632 [ 0.000000] pcpu-alloc: s28984 r8192 d32456 u69632 alloc=17*4096 [ 0.000000] pcpu-alloc: [0] 0 [0] 1 [0] 2 [0] 3 [ 0.000000] Built 1 zonelists, mobility grouping on. Total pages: 1033230 [ 0.000000] Kernel command line: earlyprintk earlycon=sbi console=ttyS0,115200 [ 0.000000] Dentry cache hash table entries: 524288 (order: 10, 4194304 bytes) [ 0.000000] Inode-cache hash table entries: 262144 (order: 9, 2097152 bytes) [ 0.000000] Sorting __ex_table... [ 0.000000] Memory: 4051828K/4190208K available (3682K kernel code, 225K rwdata, 1241K rodata, 2720K init, 794K bss,) [ 0.000000] SLUB: HWalign=32, Order=0-3, MinObjects=0, CPUs=4, Nodes=1 [ 0.000000] rcu: Hierarchical RCU implementation. [ 0.000000] rcu: RCU restricting CPUs from NR_CPUS=8 to nr_cpu_ids=4. [ 0.000000] rcu: Adjusting geometry for rcu_fanout_leaf=16, nr_cpu_ids=4 [ 0.000000] NR_IRQS: 0, nr_irqs: 0, preallocated irqs: 0 [ 0.000000] CPU with hartid=4 is not available [ 0.000000] plic: failed to parse hart ID for context 9. [ 0.000000] CPU with hartid=5 is not available [ 0.000000] plic: failed to parse hart ID for context 11. [ 0.000000] CPU with hartid=6 is not available [ 0.000000] plic: failed to parse hart ID for context 13. [ 0.000000] CPU with hartid=7 is not available [ 0.000000] plic: failed to parse hart ID for context 15. [ 0.000000] plic: mapped 16 interrupts to 4 (out of 16) handlers. [ 0.000000] clocksource: riscv_clocksource: mask: 0xffffffffffffffff max_cycles: 0x1d854df40, max_idle_ns: 352636161s [ 0.000000] Calibrating delay loop (skipped), value calculated using timer frequency.. 2.00 BogoMIPS (lpj=10000) [ 0.010000] pid_max: default: 32768 minimum: 301 [ 0.020000] Mount-cache hash table entries: 8192 (order: 4, 65536 bytes) [ 0.030000] Mountpoint-cache hash table entries: 8192 (order: 4, 65536 bytes) [ 0.050000] rcu: Hierarchical SRCU implementation. [ 0.060000] smp: Bringing up secondary CPUs ... [ 0.080000] smp: Brought up 1 node, 4 CPUs [ 0.090000] devtmpfs: initialized [ 0.130000] random: get_random_bytes called from setup_net+0x26/0x134 with crng_init=0 [ 0.140000] SCRxDMA: reserved coherent memory PHYS 0xffc00000 - 0xffffffff VA 0xffffffd000380000 [ 0.140000] clocksource: jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 19112604462750000 ns [ 0.160000] futex hash table entries: 1024 (order: 3, 32768 bytes) [ 0.170000] NET: Registered protocol family 16 [ 0.180000] audit: initializing netlink subsys (disabled) [ 0.190000] audit: type=2000 audit(0.190:1): state=initialized audit_enabled=0 res=1 [ 0.270000] clocksource: Switched to clocksource riscv_clocksource [ 0.300000] NET: Registered protocol family 2 [ 0.320000] tcp_listen_portaddr_hash hash table entries: 2048 (order: 3, 32768 bytes) [ 0.340000] TCP established hash table entries: 32768 (order: 6, 262144 bytes) [ 0.360000] TCP bind hash table entries: 32768 (order: 7, 524288 bytes) [ 0.380000] TCP: Hash tables configured (established 32768 bind 32768) [ 0.400000] UDP hash table entries: 2048 (order: 4, 65536 bytes) [ 0.410000] UDP-Lite hash table entries: 2048 (order: 4, 65536 bytes) [ 0.430000] NET: Registered protocol family 1 [ 0.450000] RPC: Registered named UNIX socket transport module. [ 0.450000] RPC: Registered udp transport module. [ 0.460000] RPC: Registered tcp transport module. [ 0.470000] RPC: Registered tcp NFSv4.1 backchannel transport module. [ 3.210000] xilinx_axienet ffffffffff040000.ethernet: SCRxDMA: use platform dma ops [ 3.220000] libphy: Xilinx Axi Ethernet MDIO: probed [ 3.240000] xilinx_axienet ffffffffff040000.ethernet: Xilinx Axi Ethernet TEMAC version 9.0 rev0 at 0xffffffffff04002 [ 3.280000] workingset: timestamp_bits=62 max_order=20 bucket_order=0 [ 3.440000] NFS: Registering the id_resolver key type [ 3.440000] Key type id_resolver registered [ 3.450000] Key type id_legacy registered [ 3.460000] nfs4filelayout_init: NFSv4 File Layout Driver Registering... [ 3.480000] Key type cifs.idmap registered [ 3.490000] fuse init (API version 7.27) [ 3.560000] Block layer SCSI generic (bsg) driver version 0.4 loaded (major 254) [ 3.580000] io scheduler noop registered [ 3.580000] io scheduler deadline registered [ 3.590000] io scheduler cfq registered (default) [ 3.600000] io scheduler mq-deadline registered [ 3.610000] io scheduler kyber registered [ 3.620000] of_fixed_clk clkc: SCRxDMA: use platform dma ops [ 3.630000] Serial: 8250/16550 driver, 4 ports, IRQ sharing disabled [ 3.650000] of_serial ffffffffff010000.serial: SCRxDMA: use platform dma ops [ 3.670000] console [ttyS0] disabled [ 3.670000] ffffffffff010000.serial: ttyS0 at MMIO 0xffffffffff010000 (irq = 1, base_baud = 4062500) is a 16550A [ 3.700000] console [ttyS0] enabled [ 3.700000] console [ttyS0] enabled [ 3.710000] bootconsole [early0] disabled [ 3.710000] bootconsole [early0] disabled [ 3.860000] loop: module loaded [ 4.120000] libphy: Fixed MDIO Bus: probed [ 4.140000] aoe: AoE v85 initialised. [ 4.150000] ipip: IPv4 and MPLS over IPv4 tunneling driver [ 4.170000] NET: Registered protocol family 10 [ 4.190000] Segment Routing with IPv6 [ 4.200000] sit: IPv6, IPv4 and MPLS over IPv4 tunneling driver [ 4.210000] NET: Registered protocol family 17 [ 4.220000] Key type dns_resolver registered [ 4.270000] Freeing unused kernel memory: 2720K [ 4.280000] This architecture does not have kernel memory protection. [ 4.290000] Run /init as init process Install BusyBox Init Ethernet... [ 5.530000] vcu118_dp83867_phy_fixup: [ 5.530000] DP83867 phy: Switch to SGMII 6-wire mode [ 5.530000] IPv6: ADDRCONF(NETDEV_UP): eth0: link is not ready route: ioctl 0x890b failed: Network is unreachable [ 6.560000] xilinx_axienet ffffffffff040000.ethernet eth0: Link is Down [ 9.680000] xilinx_axienet ffffffffff040000.ethernet eth0: Link is Up - 1Gbps/Full - flow control off [ 9.690000] IPv6: ADDRCONF(NETDEV_CHANGE): eth0: link becomes ready Mount root fs Sync date/time... rdate: bad address 'time.nist.gov' Mount new root... [ 13.940000] EXT4-fs (loop0): recovery complete [ 13.960000] EXT4-fs (loop0): mounted filesystem with ordered data mode. Opts: (null) Switch root... [ 14.360000] random: fast init done [ 28.970000] systemd[1]: System time before build time, advancing clock. [ 31.310000] systemd[1]: systemd 244.1-1 running in system mode. (+PAM +AUDIT +SELINUX +IMA +APPARMOR +SMACK +SYSVINI) [ 31.340000] systemd[1]: Detected architecture riscv64. Welcome to Debian GNU/Linux bullseye/sid! [ 31.420000] systemd[1]: Set hostname to
. [ 38.610000] systemd[1]: /lib/systemd/system/dbus.socket:5: ListenStream= references a path below legacy directory /v. [ 41.620000] random: systemd: uninitialized urandom read (16 bytes read) [ 41.630000] systemd[1]: system-getty.slice: unit configures an IP firewall, but the local system does not support BP. [ 41.640000] systemd[1]: (This warning is only shown for the first unit using IP firewalling.) [ 41.670000] systemd[1]: Created slice system-getty.slice. [ OK ] Created slice system-getty.slice. [ 41.720000] random: systemd: uninitialized urandom read (16 bytes read) [ 41.740000] systemd[1]: Created slice system-serial\x2dgetty.slice. [ OK ] Created slice system-serial\x2dgetty.slice. [ 41.780000] random: systemd: uninitialized urandom read (16 bytes read) [ 41.790000] systemd[1]: Created slice User and Session Slice. [ OK ] Created slice User and Session Slice. [ 41.840000] systemd[1]: Started Dispatch Password Requests to Console Directory Watch. [ OK ] Started Dispatch Password …ts to Console Directory Watch. [ 41.890000] systemd[1]: Started Forward Password Requests to Wall Directory Watch. [ OK ] Started Forward Password R…uests to Wall Directory Watch. [ 41.940000] systemd[1]: Condition check resulted in Arbitrary Executable File Formats File System Automount Point be. [ 41.960000] systemd[1]: Reached target Local Encrypted Volumes. [ OK ] Reached target Local Encrypted Volumes. [ 42.000000] systemd[1]: Reached target Paths. [ OK ] Reached target Paths. [ 42.040000] systemd[1]: Reached target Slices. [ OK ] Reached target Slices. [ 42.080000] systemd[1]: Reached target Swap. [ OK ] Reached target Swap. [ 42.130000] systemd[1]: Listening on RPCbind Server Activation Socket. [ OK ] Listening on RPCbind Server Activation Socket. [ 42.170000] systemd[1]: Listening on initctl Compatibility Named Pipe. [ OK ] Listening on initctl Compatibility Named Pipe. [ 42.230000] systemd[1]: Listening on Journal Audit Socket. [ OK ] Listening on Journal Audit Socket. [ 42.270000] systemd[1]: Listening on Journal Socket (/dev/log). [ OK ] Listening on Journal Socket (/dev/log). [ 42.330000] systemd[1]: Listening on Journal Socket. [ OK ] Listening on Journal Socket. [ 42.370000] systemd[1]: Listening on udev Control Socket. [ OK ] Listening on udev Control Socket. [ 42.420000] systemd[1]: Listening on udev Kernel Socket. [ OK ] Listening on udev Kernel Socket. [ 42.470000] systemd[1]: Condition check resulted in Huge Pages File System being skipped. [ 42.530000] systemd[1]: Mounting POSIX Message Queue File System... Mounting POSIX Message Queue File System... [ 42.630000] systemd[1]: Mounting RPC Pipe File System... Mounting RPC Pipe File System... [ 42.740000] systemd[1]: Mounting Kernel Debug File System... Mounting Kernel Debug File System... [ 42.780000] systemd[1]: Condition check resulted in Kernel Module supporting RPCSEC_GSS being skipped. [ 42.800000] systemd[1]: Condition check resulted in Create list of static device nodes for the current kernel being . [ 42.930000] systemd[1]: Condition check resulted in Set Up Additional Binary Formats being skipped. [ 42.990000] systemd[1]: Starting Journal Service... Starting Journal Service... [ 43.330000] systemd[1]: Starting Load Kernel Modules... Starting Load Kernel Modules... [ 43.420000] systemd[1]: Starting Remount Root and Kernel File Systems... Starting Remount Root and Kernel File Systems... [ 43.540000] systemd[1]: Starting udev Coldplug all Devices... Starting udev Coldplug all Devices... [ 43.760000] systemd[1]: Mounted POSIX Message Queue File System. [ OK ] Mounted POSIX Message Queue File System. [ 43.800000] systemd[1]: Mounted RPC Pipe File System. [ OK ] Mounted RPC Pipe File System. [ 43.860000] systemd[1]: Mounted Kernel Debug File System. [ OK ] Mounted Kernel Debug File System. [ 44.300000] systemd[1]: Started Load Kernel Modules. [ OK ] Started Load Kernel Modules. [ 44.410000] systemd[1]: Mounting FUSE Control File System... Mounting FUSE Control File System... [ 44.450000] systemd[1]: Condition check resulted in Kernel Configuration File System being skipped. [ 44.520000] systemd[1]: Starting Apply Kernel Variables... Starting Apply Kernel Variables... [ 44.610000] systemd[1]: Started Remount Root and Kernel File Systems. [ OK ] Started Remount Root and Kernel File Systems. [ 44.690000] systemd[1]: Started Journal Service. [ OK ] Started Journal Service. [ OK ] Mounted FUSE Control File System. Starting Flush Journal to Persistent Storage... Starting Load/Save Random Seed... Starting Create System Users... [ 46.020000] systemd-journald[127]: Received client request to flush runtime journal. [ OK ] Started Apply Kernel Variables. [ OK ] Started Flush Journal to Persistent Storage. [ OK ] Started udev Coldplug all Devices. Starting Helper to synchronize boot up for ifupdown... [ OK ] Started Create System Users. Starting Create Static Device Nodes in /dev... [ OK ] Started Helper to synchronize boot up for ifupdown. [ OK ] Started Create Static Device Nodes in /dev. [ OK ] Reached target Local File Systems (Pre). [ OK ] Reached target Local File Systems. Starting Raise network interfaces... Starting Preprocess NFS configuration... Starting Create Volatile Files and Directories... Starting udev Kernel Device Manager... [ OK ] Started Preprocess NFS configuration. [ OK ] Reached target NFS client services. [ OK ] Started Raise network interfaces. [ OK ] Reached target Network. [ OK ] Started Create Volatile Files and Directories. [ OK ] Started udev Kernel Device Manager. [ OK ] Started Entropy daemon using the HAVEGE algorithm. Starting RPC bind portmap service... Starting Network Time Synchronization... Starting Update UTMP about System Boot/Shutdown... [ OK ] Started RPC bind portmap service. [ OK ] Found device /dev/ttyS0. [ OK ] Reached target Remote File Systems (Pre). [ OK ] Reached target Remote File Systems. [ OK ] Reached target RPC Port Mapper. [ OK ] Started Update UTMP about System Boot/Shutdown. [ OK ] Started Network Time Synchronization. [ OK ] Reached target System Initialization. [ OK ] Started Daily Cleanup of Temporary Directories. [ OK ] Reached target System Time Set. [ OK ] Reached target System Time Synchronized. [ OK ] Started Daily apt download activities. [ OK ] Started Daily apt upgrade and clean activities. [ OK ] Started Periodic ext4 Onli…ata Check for All Filesystems. [ OK ] Started Daily rotation of log files. [ OK ] Reached target Timers. [ OK ] Listening on D-Bus System Message Bus Socket. [ OK ] Reached target Sockets. [ OK ] Reached target Basic System. [ OK ] Started Regular background program processing daemon. [ OK ] Started D-Bus System Message Bus. Starting Remove Stale Onli…t4 Metadata Check Snapshots... Starting OpenBSD Secure Shell server... Starting Login Service... Starting Permit User Sessions... [ OK ] Started Permit User Sessions. [ OK ] Started Serial Getty on ttyS0. [ OK ] Reached target Login Prompts. [ OK ] Started Remove Stale Onlin…ext4 Metadata Check Snapshots. [ 63.500000] random: crng init done [ 63.500000] random: 7 urandom warning(s) missed due to ratelimiting [ OK ] Started Load/Save Random Seed. [ OK ] Started Login Service. Debian GNU/Linux bullseye/sid scr-debian ttyS0 scr-debian login: sdk Password: sdk Linux scr-debian 4.19.166-46819-g5ceb3097ff34-dirty #1 SMP Wed Jun 2 16:52:27 MSK 2021 riscv64 The programs included with the Debian GNU/Linux system are free software; the exact distribution terms for each program are described in the individual files in /usr/share/doc/*/copyright. Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent permitted by applicable law. Last login: Wed Jun 2 12:39:40 MSK 2021 on ttyS0 sdk@scr-debian:~$ - Linux загружен и готов для использования.