Высокопроизводительное 64-разрядное процессорное ядро серверного класса SCR9 c набором команд RISC-V и поддержкой многоядерных конфигураций

Общие сведения

Программа для ЭВМ «Высокопроизводительное 64-разрядное процессорное ядро серверного класса SCR9 c набором команд RISC-V и поддержкой многоядерных конфигураций» (далее по тексту ПО SCR9) представляет собой реализацию процессора архитектуры RISC-V для для широкого класса вычислительных систем, требующих высокоскоростную обработку данных с поддержкой Linux-подобных операционных систем.

ПО SCR9 предназначено для работы в составе систем на кристалле (СнК), реализованных непосредственно в кремнии или в программируемых логических интегральных схемах (ПЛИС), и может применяться в одноядерных и многоядерных конфигурациях.

ПО SCR9 является сложным функциональным СФ-блоком (Soft IP), передаваемым потребителю в виде описания на высокоуровневом языке описания аппаратуры SystemVerilog для дальнейшего использования в программах автоматизированного синтеза логических схем с привязкой к конкретной технологии ASIC или ПЛИС.

ПО разрабатывается с использованием собственных мощностей и ресурсов. Цена является договорной, размер вознаграждения за право использования зависит от конфигурации ПО. Обновление ПО производится силами разработчика.

Функциональные характеристики

ПО SCR9 реализует собой 64-х разрядный высокопроизводительный, высокоэффективный суперскалярный процессор серверного класса, с архитектурой RISC-V, с поддержкой многоядерных конфигураций с когерентностью памяти, предназначенный для использования в составе различных вычислительных систем, где требуется полнофункциональная поддержка ОС Linux.

Программа обеспечивает выполнение арифметических и логических операций с целочисленными операндами и вычислений с плавающей точкой одинарной и двойной точности; поддержку 16- и 32- битных инструкций и 64/32/16/8-битных операндов, идентификацию ядер в многоядерных конфигурациях СнК.

Основные функциональные характеристики ПО SCR9:

  • Гарвардская архитектура (раздельные шины команд и данных);
  • Поддержка симметричной многопроцессорности (SMP) и межъядерного взаимодействия с настраиваемой конфигурацией от 1 до 16 процессорных ядер в кластере;
  • Набор команд: RV64IMСAFD
    • базовый набор с целочисленными операциями, 64-битный (RV64I);
    • команды операций целочисленное умножения и деления (М расширение);
    • команды компактного формата для увеличения плотности кода (16-битовые, С расширение);
    • атомарные операции (А расширение);
    • арифметические операции с плавающей точкой над числами одинарной точности (Single-Precision Floating-Point, F расширение);
    • арифметические операции с плавающей точкой над числами двойной точности (Double-Precision Floating-Point, D расширение).
  • Три уровня привилегированности и соответствующих им режимов исполнения команд: машинный уровень (режим M-mode), пользовательский уровень (режим U-mode), уровень супервизора (режим - S-mode);
  • Многоуровневый конвейер с реализацией внеочередного исполнения команд;
  • Высокопроизводительный модуль операций с плавающей запятой одинарной и двойной точности (Floating-Point Unit);
  • Конфигурируемая подсистема памяти:
    • поддержка виртуальной памяти с помощью модуля управления памятью (MMU);
    • контроль доступа к физической памяти с помощью модуля защиты памяти (PMP — Physical Memory Protection unit);
    • поддержка кэш-памяти L1 и L2 (с опцией коррекции ошибок) с когерентностью памяти:
      • кэш команд уровня L1 размером от 8 до 64 Кб;
      • кэш данных уровня L1 размером от 8 до 64 Кб;
      • поддержка кэш данных уровня L2 размером до 2 Мб;
    • опциональная поддержка кэш-памяти уровня L3 размером до 16 Мб с поддержкой когерентности по всем ядрам в кластере;
  • Поддержка конфигурируемого контроллера прерываний уровня платформы (PLIC) с возможностью приема большого количества внешних запросов прерываний (до 1023) и с динамическим заданием (изменением) приоритета прерываний;
  • Встроенный 64-битный таймер часов реального времени (Real Time Clock) с настраиваемым коэффициентом деления;
  • Встроенный контроллер отладки с поддержкой аппаратных точек останова, совместимый со стандартом IEЕЕ 1149.1-2001 (JTAG);
  • Конфигурируемый внешний интерфейс, совместимый с шиной AXI (Advanced extensible Interface) с поддержкой когерентности в многоядерной системе - протоколов ACE (AXI Coherency Extensions) и CHI (Coherent Hub Interface).

Состав ПО

ПО SCR9 в базовой конфигурации включает в себя:

  • Исходный код на языке SystemVerilog, пригодный для моделирования и синтеза;
  • Исходный код тестового окружения (Testbench) для выполнения функциональной верификации до и после синтеза;
  • Наборы скриптов для проведения моделирования и синтеза с файлами входных ограничений в формате (.sdc).
  • Комплект разработчика на базе ПЛИС (SCR9 SDK):
    • пример проекта СнК на основе ПО SCR9;
    • образы загрузки ПЛИС и объектных модулей прикладного ПО для выполнения на ядре SCR9.
  • Инструментальные средства разработки:
    • набор инструментальных средств, основанных на GCC 8.x, 9.x: компилятор, отладчик, компоновщик, функциональный симулятор, бинарные утилиты binutils, newlib, openocd;
    • IDE на базе Eclipse (для Linux и Windows).
  • Прикладное ПО:
    • начальный загрузчик;
    • набор архитектурных тестов и тестов совместимости;
    • примеры простых приложений (baremetal) и тестов производительности;
    • операционная система Linux для платы SCR9 SDK.
  • Сопроводительная документация:
    • руководство пользователя ПО SCR9 (SCR9 UM);
    • спецификация внешней архитектуры ПО SCR9 (SCR9 EAS);
    • руководство по системе команд (SCR9 ISM);
    • руководство на комплект разработчика (SCR9 SDK);
    • руководство по инструментам разработчика (SCRx development tools);
    • руководство на тестовое окружение.

Требования к работе с ПО

Типом реализующей ЭВМ для ПО SCR9 является Система-на-Кристалле (СнК) в составе полузаказных интегральных микросхем или программируемых логических интегральных схем (ПЛИС).
При реализации собственных функционально законченных СнК пользователь должен самостоятельно дополнить основу (микропроцессорную структуру ПО SCR9) необходимыми ему дополнительными модулями в виде отдельных СФ-блоков или инфраструктурами СФ-блоков.
Для логического синтеза и функциональной верификации ПО SCR9 в составе СнК, пользователю предоставляется набор средств разработки “SCR9 SDK” для физического прототипирования на ПЛИС, основными компонентами которого являются:

  • Пример проекта СнК для ПЛИС на основе ПО SCR9;
  • Предварительно собранные образы процессорного ядра ПО SCR9, начального загрузчика и ОС Linux;
  • Тестовое программное обеспечение для проверки работоспособности ПО SCR9.

Необходимое обеспечение для работы с ПО SCR9

Для работы с ПО SCR9 необходимо следующее обеспечение:

  1. Персональный компьютер (ПК) с объёмом оперативной памяти не менее 8 Гб.
  2. Установленные на ПК программы:
    • ОС Windows или Linux;
    • пакет программ Xilinx Vivado WebPack Edition версии не ниже 2020.1 (скачивается бесплатно после регистрации на сайте xilinx.com);
    • система отладки OpenOCD.
  3. Отладочная плата Virtex UltraScale+ FPGA VU19P - HTG-960
    (http://www.hitechglobal.com/Boards/VirtexUltraScale+_VU19P_Board.htm).
  4. Адаптер для соединения с отладчиком OpenOCD (JTAG Cable Adapter): Olimex ARM-USB-OCD-H (or ARM-USB-OCD)
    (https://www.olimex.com/Products/ARM/JTAG/ARM-USB-OCD-H/).
  5. Программатор встроенных генераторов платы HTG-960 : ClockBuilder Pro Field Programmer (cbprog-dongle)
    (https://www.skyworksinc.com/en/products/timing/evaluation-kits/general/clockbuilder-pro-field-programmer).
  6. Адаптер для программирования FPGA платы HTG-960 : Digilent JTAG-HS2
    (https://digilent.com/shop/jtag-hs2-programming-cable/).
  7. Набор стандартных кабелей типа:
    • USB Type A (m) - Type B (m), 2 шт. (из состава комплектов Olimex ARM-USBOCD-H и cbprog-dongle);
    • USB Type A (m) - Type B micro (m), 2 шт. (из состава комплектов платы HTG-960 и Digilent JTAG-HS2).

Компиляция ПО

Процесс компиляции образа ПО SCR9 описан в руководстве на комплект разработчика (SCR9 SDK). В состав ПО входит Zip-архив, содержащий скомпилированные образы, созданные согласно руководству на комплект разработчика пример проекта СнК на основе ПО SCR9. В следующих разделах описан процесс установки и тестирования ПО SCR9 в составе проекта СнК.

Установка ПО

Процесс установки ПО заключается в выполнении процедуры программирования встроенных генераторов и дальнейшей загрузки ПЛИС.

Для установки и работы с ПО SCR9 персональный компьютер подключается к отладочной плате HTG-960 стандартными кабелями USB.

Подключение кабелей к отладочной плате HTG-960

  • Подключите один кабель "USB Type A (m) - Type B micro (m)" между хост компьютером и портом USB UART (115200 - 8N1) на плате HTG-960 (J20);
  • Подключите второй кабель "USB Type A (m) - Type B micro (m)" между хост компьютером и портом USB адаптера Digilent JTAG-HS2, затем подключите его к плате HTG-960 - JTAG Header (J7);
  • Подключите один кабель "USB Type A (m) - Type B (m)" между хост компьютером и портом USB отладчика ARM-USBOCD-H, затем подключите его к плате HTG-960 - User Header #1 (J1);
  • Подключите второй кабель "USB Type A (m) - Type B (m)" между хост компьютером и портом USB адаптера cbprog-dongle, затем подключите его к плате HTG-960 - Generator Header (J4);
  • Подключите кабель источника питания (есть в комплекте платы HTG-960) к разъему "PWR Connector" (J18).

Это подключение выполняет следующие функции:

  • подачу питания +12В на отладочную плату HTG-960;
  • обеспечение конфигурирования внутренних генераторов через Generator Header;
  • обеспечение конфигурирования ПЛИС через JTAG Header;
  • обеспечение функциональности консольного порта при выполнении программы на процессорном ядре SCR9 через USB UART порт;
  • обеспечение управления процессорным ядром SCR9 через отладчик ARM-USBOCD-H.

Подключение кабелей к отладочной плате HTG-960 приведено на Рисунке 1.

image
Рисунок 1: Подключение кабелей к отладочной плате HTG-960

  1. Распакуйте архив, находящийся в дереве каталогов ПО SCR9 в папке SDK:<SDK_HOME>/images/htg960_scr9.tar.gz. В архиве находятся два файла: htg960_scr9.bin и htg960_0x75.slabtimeproj.
  2. После подачи питания на плату HTG-960, запустите пакет программ Clockbuilder Pro Software (CBPRO) на инструментальном ПК.
  3. Проверьте подключение адаптера cbprog-dongle, затем откройте файл-проект - htg960_0x75.slabtimeproj - из меню CBPRO - Open Project.
  4. Настройте параметры генератора в окне Interface - I2C, 3.3V, 0x75, 100 kHz и выполните его программирование выбрав опцию - Write Design to DUT.
  5. Запустите пакет программ Vivado на инструментальном ПК.
  6. Проверьте подключение кабеля USB JTAG, затем запустите утилиту «Hardware Manager» из меню или командной строки консоли Vivado. Выполните команду «Open Target» с опцией «Auto Connect», должно произойти подключение к микросхеме ПЛИС xcvu19p_0 отладочной платы HTG-960 по интерфейсу JTAG.

Примечание: Если подключение не произошло (микросхемы нет в списке обнаруженных), необходимо установить необходимые USB-драйвера для ОС Windows или для ОС Linux настроить правила сервиса UDEV-rules, как описано в AR# 66440 Vivado - Linux OS - Digilent and Xilinx USB cable installation check

  1. Указать на ПЛИС xcvu19p_0 и вызвать контекстное меню - выбрать опцию "Program Device", в открывшимся диалогом окне "Program Device" добавить файл "прошивки" ПЛИС - Bitstream file - htg960_scr9.bin -
    затем в этом окне выполнить команду - Program.
  2. После успешного завершения процесса программирования ПЛИС (можно проконтролировать по сообщениям в диалоговом окне), в терминал uart должно отобразится приглашение загрузчика:
SCR loader v1.3-g2600ce7
Copyright (C) 2015-2020 Syntacore. All rights reserved.
ISA: RV64IMAFDCV [800000000034112D] IMPID: 0000000022101940
BLDID: 22111200
Platform: htg960_scr9_ymp, cpuclk 80MHz, sysclk 80MHz

0: start Linux
v: int flash load
g: start @addr
d: mem dump
m: mem modify

ПО SCR9 установлено и готово к работе.

Запуск тестов на процессоре SCR9 с использованием отладчика OpenOCD

В качестве тестов работоспособности ПО SCR9 в составе проекта СнК используется запуск bare metal тестов производительности и запуск ОС Linux на платформе SCR9 SDK.

Open On-Chip Debugger (открытый отладчик для чипов) является программой с открытым исходным кодом. OpenOCD предоставляет доступ к адаптеру для отладки (JTAG debug adapter) и обеспечивает инструментарий отладки (debugging) и внутрисхемного программирования для встраиваемых систем.

Установка OpenOCD

Инструкции по установке OpenOCD приведены на вики-странице
https://github.com/syntacore/openocd/wiki/OpenOCD-for-sc_riscv32

Запуск сервера OpenOCD на ПК

  1. Настройка переменных окружения:
    $ export OOCD_ROOT=<Path to the OpenOCD installation directory>
  2. Запуск OpenOCD сервера - вводится в одну строку (в Ubuntu):
    $ ${OOCD_ROOT}/bin/openocd -s ./share/openocd/scripts \
    -f ${OOCD_ROOT}/share/openocd/scripts/interface/ftdi/olimex-arm-usb-ocd-h.cfg \
    -f ${OOCD_ROOT}/share/openocd/scripts/target/syntacore_riscv_quad.cfg

    После выполнения в текущий терминал будет выдано сообщение о подключении к ядрам RISC-V:

    Open On-Chip Debugger 0.10.0+dev-01974-g3d33e05 (2019-05-22-21:03)
    Licensed under GNU GPL v2
    For bug reports, read
            http://openocd.org/doc/doxygen/bugs.html
    init_targets
    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>'.
    Info : clock speed 2000 kHz
    Info : JTAG tap: riscv_core0.cpu tap/device found: 0x00000001 (mfg: 0x000 (<invalid>), part: 0x0000, ver: 0x0)
    Info : JTAG tap: riscv_core1.cpu tap/device found: 0x00000001 (mfg: 0x000 (<invalid>), part: 0x0000, ver: 0x0)
    Info : riscv_core0.cpu: datacount=4 progbufsize=6
    Info : riscv_core0.cpu: Exposing additional CSR 3008
    Info : riscv_core0.cpu: Exposing additional CSR 3009
    Info : riscv_core0.cpu: Exposing additional CSR 3010
    Info : riscv_core0.cpu: Exposing additional CSR 3011
    Info : riscv_core0.cpu: Exposing additional CSR 3012
    Info : riscv_core0.cpu: Exposing additional CSR 3013
    Info : riscv_core0.cpu: Exposing additional CSR 3014
    Info : riscv_core0.cpu: Exposing additional CSR 3015
    Info : riscv_core0.cpu: Exposing additional CSR 4033
    Info : riscv_core0.cpu: Exposing additional CSR 4034
    Info : riscv_core0.cpu: Examined RISC-V core; found 1 harts
    Info : riscv_core0.cpu: hart 0: XLEN=64, misa=0x800000000034112d
    Info : Listening on port 3333 for gdb connections
  3. Откройте второй терминал (терминал 2) и введите команду:
    $ telnet localhost 4444
    Trying ::1...
    Trying 127.0.0.1...
    Connected to localhost.
    Escape character is '^]'.
    Open On-Chip Debugger

    В терминале 1 выводится подтверждение запуска telnet сессии:

    Info : accepting 'telnet' connection on tcp/4444

    OpenOCD запущен и готов к работе. Терминал 2 представляет собой интерактивную консоль OpenOCD. По команде help можно вывести список доступных команд openocd.

Загрузка и запуск на выполнение бинарных образов bare metal тестов производительности

Запуск теста Dhrystone benchmark

  1. Введите следующие команды в консоли OpenOCD (Терминал 2), выполняющие остановку ядра и загрузку исполняемого кода:

     

    > targets
        TargetName         Type      Endian TapName            State
    --  ------------------ --------- ------ ------------------ ------------
     0*  riscv_core0.cpu    riscv     little  riscv_core0.cpu   running
    >
    >reset halt
    >load_image dhrystone.bin 0xffffffffffff0000 bin
    17824 bytes written at address 0xffffffffffff0000
    downloaded 17824 bytes in 0.412235s (61.984 KiB/s)
    >resume 0xffffffffffff0000
  2. Работа тестов начинается после команды resume с выводом лога в терминал uart:
    Platform: SCR9/RV64 Syntacore FPGA @ 80.000 MHz
    Compiler: Syntacore Clang 16.0.0 (SC git:/tools/llvm/llvm-project/ 1eb617c08a2ca6c359ead66853f114856805a288)
    Flags:    -O3 -mllvm -riscv-enable-gep-opt=true -mllvm -simplifycfg-hoist-cond-stores=false -falign-functions=4 -falign-loops=4 -mtune=scr9
    
    Dhrystone Benchmark, Version 2.1 (Language: C)
    
    Program compiled without 'register' attribute
    
    
    Execution starts, 5000 runs through Dhrystone
    Execution ends
    
    Final values of the variables used in the benchmark:
    
    Int_Glob:            5
            should be:   5
    Bool_Glob:           1
            should be:   1
    Ch_1_Glob:           A
            should be:   A
    Ch_2_Glob:           B
            should be:   B
    Arr_1_Glob[8]:       7
            should be:   7
    Arr_2_Glob[8][7]:    5010
            should be:   Number_Of_Runs + 10
    Ptr_Glob->
      Ptr_Comp:          0xffffffffffff43f8
            should be:   (implementation-dependent)
      Discr:             0
            should be:   0
      Enum_Comp:         2
            should be:   2
      Int_Comp:          17
            should be:   17
      Str_Comp:          DHRYSTONE PROGRAM, SOME STRING
            should be:   DHRYSTONE PROGRAM, SOME STRING
    Next_Ptr_Glob->
      Ptr_Comp:          0xffffffffffff43f8
            should be:   (implementation-dependent), same as above
      Discr:             0
            should be:   0
      Enum_Comp:         1
            should be:   1
      Int_Comp:          18
            should be:   18
      Str_Comp:          DHRYSTONE PROGRAM, SOME STRING
            should be:   DHRYSTONE PROGRAM, SOME STRING
    Int_1_Loc:           5
            should be:   5
    Int_2_Loc:           13
            should be:   13
    Int_3_Loc:           7
            should be:   7
    Enum_Loc:            1
            should be:   1
    Str_1_Loc:           DHRYSTONE PROGRAM, 1'ST STRING
            should be:   DHRYSTONE PROGRAM, 1'ST STRING
    Str_2_Loc:           DHRYSTONE PROGRAM, 2'ND STRING
            should be:   DHRYSTONE PROGRAM, 2'ND STRING
    
    Microseconds for one run through Dhrystone:   99.2
    Dhrystones per Second:                      10080.2
    
    10080/1757/80=0.071713147

Запуск теста Coremark benchmark

  1. Введите следующие команды в консоли OpenOCD (Терминал 2), выполняющие остановку ядра и загрузку исполняемого кода:
    > targets
        TargetName         Type      Endian TapName            State
    --  ------------------ --------- ------ ------------------ ------------
     0*  riscv_core0.cpu    riscv     little  riscv_core0.cpu   running
    >
    >reset halt
    >load_image coremark.bin 0xffffffffffff0000 bin
    27824 bytes written at address 0xffffffffffff0000
    downloaded 27824 bytes in 0.648472s (62.376 KiB/s)
    >resume 0xffffffffffff0000
  2. Работа тестов начинается после команды resume с выводом лога в терминал uart:
    CoreMark 1.0
    Platform: SCR9/RV64 Syntacore FPGA @ 80.000 MHz
    
    2K performance run parameters for coremark.
    CoreMark Size    : 666
    Total ticks      : 928542173
    Total time (secs): 11.606777
    Iterations/Sec   : 516.939392
    Iterations       : 6000
    Compiler version : Syntacore Clang 16.0.0 (SC git:/tools/llvm/llvm-project/ 1eb)
    Compiler flags   : -O3 -funroll-loops -finline-functions -mllvm --enable-dfa-ju9
    Memory location  : STACK
    seedcrc          : 0xe9f5
    [0]crclist       : 0xe714
    [0]crcmatrix     : 0x1fd7
    [0]crcstate      : 0x8e3a
    [0]crcfinal      : 0xa14c
    Correct operation validated. See README.md for run and reporting rules.
    CoreMark 1.0 : 516.939392 / Syntacore Clang 16.0.0 (SC git:/tools/llvm/llvm-proK
    
    516.939392/80=6.4617424

Загрузка и запуск на выполнение бинарного образа ОС Linux на платформе SCR9 SDK

  1. Введите следующие команды в консоли OpenOCD (Терминал 2), выполняющие остановку ядра и загрузку исполняемого кода:
    > targets
        TargetName         Type      Endian TapName            State
    --  ------------------ --------- ------ ------------------ ------------
     0*  riscv_core0.cpu    riscv     little  riscv_core0.cpu   running
    >
    > halt ; load_image vmlinux.bin 0x0 bin; resume
    6994412 bytes written at address 0x00000000
    downloaded 6994412 bytes in 104.754578s (65.205 KiB/s)
    >resume
    >

    Примечание: Команда загрузки предполагает расположение файла в текущей директории. При другом расположении, имя загружаемого файла должно включать относительный путь.

  2. После завершения загрузки и выполнении команды "0" в загрузчике начнется запуск Linux с выводом лога в терминал uart:

     

    Starting Linux ...
    hart_init: FEATURE: old[0x43] new[0x0]
    
    ;;;;;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 5.15.45 (matsi@voyager) (riscv64-unknown-linux-gnu-gcc (GCC) 12.1.1 20220701, GNU ld (GNU Binutils) 2.38.20220701) #8 Tue Dec 13 11:49:58 MSK 2022
    [    0.000000] Machine model: Syntacore SCR9 SDK board
    [    0.000000] earlycon: sbi0 at I/O port 0x0 (options '')
    [    0.000000] printk: bootconsole [sbi0] enabled
    [    0.000000] scr_sdk_dma_setup: created DMA memory pool at 0x0000000007800000, size 8 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-0x00000000077fffff]
    [    0.000000]   Normal   empty
    [    0.000000] Movable zone start for each node
    [    0.000000] Early memory node ranges
    [    0.000000]   node   0: [mem 0x0000000000000000-0x00000000077fffff]
    [    0.000000] Initmem setup node 0 [mem 0x0000000000000000-0x00000000077fffff]
    [    0.000000] SBI specification v0.3 detected
    [    0.000000] SBI implementation ID=0x8 Version=0x3
    [    0.000000] SBI TIME extension detected
    [    0.000000] riscv: base ISA extensions acdfim
    [    0.000000] riscv: ELF capabilities acdfim
    [    0.000000] Built 1 zonelists, mobility grouping on.  Total pages: 30240
    [    0.000000] Kernel command line: earlycon=sbi console=hvc0,115200
    [    0.000000] Dentry cache hash table entries: 16384 (order: 5, 131072 bytes, linear)
    [    0.000000] Inode-cache hash table entries: 8192 (order: 4, 65536 bytes, linear)
    [    0.000000] mem auto-init: stack:all(zero), heap alloc:off, heap free:off
    [    0.000000] Memory: 100220K/122880K available (7071K kernel code, 4018K rwdata, 2048K rodata, 4968K init, 291K bss, 22660K reserved, 0K cma-reserved)
    [    0.000000] SLUB: HWalign=32, Order=0-3, MinObjects=0, CPUs=1, Nodes=1
    [    0.000000] NR_IRQS: 64, nr_irqs: 64, preallocated irqs: 0
    [    0.000000] riscv-intc: 64 local interrupts mapped
    [    0.000000] plic: interrupt-controller@fffffffe000000: mapped 16 interrupts with 1 handlers for 2 contexts.
    [    0.000000] riscv_timer_init_dt: Registering clocksource cpuid [0] hartid [0]
    [    0.000000] clocksource: riscv_clocksource: mask: 0xffffffffffffffff max_cycles: 0x1d854df40, max_idle_ns: 3526361616960 ns
    [    0.000035] sched_clock: 64 bits at 1000kHz, resolution 1000ns, wraps every 2199023255500ns
    [    0.022162] Console: colour dummy device 80x25
    [    0.032628] printk: console [hvc0] enabled
    [    0.032628] printk: console [hvc0] enabled
    [    0.053020] printk: bootconsole [sbi0] disabled
    [    0.053020] printk: bootconsole [sbi0] disabled
    [    0.075247] Calibrating delay loop (skipped), value calculated using timer frequency.. 2.00 BogoMIPS (lpj=4000)
    [    0.092629] pid_max: default: 32768 minimum: 301
    [    0.109973] Mount-cache hash table entries: 512 (order: 0, 4096 bytes, linear)
    [    0.125255] Mountpoint-cache hash table entries: 512 (order: 0, 4096 bytes, linear)
    [    0.205059] ASID allocator disabled (0 bits)
    [    0.229255] devtmpfs: initialized
    [    0.292747] SCRxDMA: reserved coherent memory PHYS 0x7800000 - 0x7ffffff VA ffffffd000380000
    [    0.296589] clocksource: jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 7645041785100000 ns
    [    0.332374] futex hash table entries: 256 (order: 0, 6144 bytes, linear)
    [    0.382515] NET: Registered PF_NETLINK/PF_ROUTE protocol family
    [    0.826243] SCSI subsystem initialized
    [    0.849620] pps_core: LinuxPPS API ver. 1 registered
    [    0.859992] pps_core: Software ver. 5.3.6 - Copyright 2005-2007 Rodolfo Giometti <giometti@linux.it>
    [    0.879943] PTP clock support registered
    [    0.913308] clocksource: Switched to clocksource riscv_clocksource
    [    1.179859] NET: Registered PF_INET protocol family
    [    1.195528] IP idents hash table entries: 2048 (order: 2, 16384 bytes, linear)
    [    1.232090] tcp_listen_portaddr_hash hash table entries: 256 (order: 0, 4096 bytes, linear)
    [    1.249073] TCP established hash table entries: 1024 (order: 1, 8192 bytes, linear)
    [    1.265917] TCP bind hash table entries: 1024 (order: 1, 8192 bytes, linear)
    [    1.281708] TCP: Hash tables configured (established 1024 bind 1024)
    [    1.299751] UDP hash table entries: 256 (order: 1, 8192 bytes, linear)
    [    1.314902] UDP-Lite hash table entries: 256 (order: 1, 8192 bytes, linear)
    [    1.334567] NET: Registered PF_UNIX/PF_LOCAL protocol family
    [    1.368485] RPC: Registered named UNIX socket transport module.
    [    1.378487] RPC: Registered udp transport module.
    [    1.387189] RPC: Registered tcp transport module.
    [    1.395873] RPC: Registered tcp NFSv4.1 backchannel transport module.
    [    1.408770] PCI: CLS 0 bytes, default 32
    [    1.527737] workingset: timestamp_bits=46 max_order=15 bucket_order=0
    [    2.526068] NFS: Registering the id_resolver key type
    [    2.536233] Key type id_resolver registered
    [    2.543851] Key type id_legacy registered
    [    2.555985] nfs4filelayout_init: NFSv4 File Layout Driver Registering...
    [    2.569164] nfs4flexfilelayout_init: NFSv4 Flexfile Layout Driver Registering...
    [    2.668227] 9p: Installing v9fs 9p2000 file system support
    [    2.696348] NET: Registered PF_ALG protocol family
    [    2.707770] Block layer SCSI generic (bsg) driver version 0.4 loaded (major 251)
    [    2.722269] io scheduler mq-deadline registered
    [    2.730243] io scheduler kyber registered
    [    2.757840] simple-pm-bus soc: SCRxDMA: use platform dma ops
    [    2.770649] simple-pm-bus ffffffff000000.bridge: SCRxDMA: use platform dma ops
    [    5.641878] Serial: 8250/16550 driver, 4 ports, IRQ sharing disabled
    [    5.758438] of_serial ffffffff010000.serial: SCRxDMA: use platform dma ops
    [    5.784799] ffffffff010000.serial: ttyS0 at MMIO 0xffffffff010000 (irq = 1, base_baud = 4062500) is a 16550A
    [    6.253556] loop: module loaded
    [    6.270636] st: Version 20160209, fixed bufsize 32768, s/g segs 256
    [    6.396090] xilinx_axienet ffffffff040000.ethernet: SCRxDMA: use platform dma ops
    [    6.414395] xilinx_axienet ffffffff040000.ethernet: autodetected 64-bit DMA range
    [    6.428514] xilinx_axienet ffffffff040000.ethernet: Ethernet core IRQ not defined
    [    6.442025] xilinx_axienet ffffffff040000.ethernet (unnamed net_device) (uninitialized): Setting assumed host clock to 65000000
    [   12.400492] riscv-pmu-sbi: SBI PMU extension is available
    [   12.410408] riscv-pmu-sbi: 0 firmware and 6 hardware counters
    [   12.434625] scr-l2cache-pmu scr-l2cache-pmu: Registered scr-l2cache-pmu, type: 6
    [   12.487630] NET: Registered PF_INET6 protocol family
    [   12.548466] Segment Routing with IPv6
    [   12.559310] In-situ OAM (IOAM) with IPv6
    [   12.570925] sit: IPv6, IPv4 and MPLS over IPv4 tunneling driver
    [   12.608204] NET: Registered PF_PACKET protocol family
    [   12.625898] 9pnet: Installing 9P2000 support
    [   12.638945] Key type dns_resolver registered
    [   13.105595] Freeing unused kernel image (initmem) memory: 4968K
    [   13.118657] Run /init as init process
    Starting syslogd: OK
    Starting klogd: OK
    Running sysctl: OK
    Saving random seed: [   17.409185] random: dd: uninitialized urandom read (32 bytes read)
    OK
    Starting network: OK
    Starting dropbear sshd: OK
    Welcome to SCR RV64 development board
    htg960 login: root
  3. После выдачи приглашения, Linux загружен и готов для использования.
  4. Выполнив следующие команды можно вывести информацию о загруженной операционной системе и процессорной платформе:
    $ uname -a
    Linux htg960 5.15.45 #8 Tue Dec 13 11:49:58 MSK 2022 riscv64 GNU/Linux
    
    $ cat /proc/cpuinfo
    processor       : 0
    hart            : 0
    isa             : rv64imafdc_sscofpmf
    mmu             : sv39
    uarch           : syntacore,scr9