Опубликован: 04.08.2025 | Доступ: свободный | Студентов: 7 / 0 | Длительность: 02:58:00
Лекция 5:

Разработка цифровых ИС на примере микроконтроллерного ядра SCR1 - прgграммное обеспечение

Типы данных

C type Description Bytes in RV32 Bytes in RV64
char Character value/byte 1 1
short Short integer 2 2
int Integer 4 4
long Long integer 4 8
long long Long long integer 8 8
void* Pointer 4 8
float Single-precision float 4 4
double Double-precision float 8 8
long double Extended-precision float 16 16
  • Например, в RV32 и RV64 тип int имеет размер 32 бита. Размер указателей и типа long определяется размером целочисленных регистров (32 и 64 бита соответственно);
  • Компилятор сохраняет естественное выравнивание перечисленных типов данных при хранении в памяти.

Используемое программное обеспечение


  • Для наших целей будет удобнее использовать ОС Linux

  • В рамках данного курса мы будем использовать Ubuntu и гипервизор VirtualBox 05-19

Далее указаны шаги по настройке рабочего окружения в ОС Linux для работы с репозиторием SCR1.

Подготовка рабочего окружения

Нам потребуется утилита git. Для установки необходимо выполнить следующую команду в терминале (sudo запросит пароль от пользователя):

sudo apt install gi

Теперь скачать репозиторий можно командой git clone:

git clone https://github.com/syntacore/scr1-sdk.git

Подготовка рабочего окружения

Далее необходимо перейти в директорию scr1-sdk и произвести инициализацию подмодулей:

cd scr1-sdk
git submodule update --init -recursive

Также необходимо установить заранее собранный инструментарий RISC-V. Сделать это можно по ссылке - Professional software development toolkit.


Распаковка в корневую директорию:

cd ~/Downloads
sudo tar -xf sc-dt-2024.05.tar.gz -C /

Для работы с отладчиками и сборки кода с помощью утилиты make необходимо установить следующие пакеты:

sudo apt install libusb-dev libftdi1*
sudo apt install make

(Опционально)

Установить удобную IDE, например, VS Code (Visual Studio Code on Linux).


Установка скачанного пакета осуществляется командой: sudo apt install ~/Downloads/.deb.

Далее потребуется скачать конфигурационный файл для OpenOCD: syntacore_riscv.cfg (Visual Studio Code on Linux)

Скачанный файл необходимо поместить в директорию с конфигурационными файлами OpenOCD:

 sudo cp ~/Downloads/syntacore_riscv.cfg \
/sc-dt/tools/share/openocd/scripts/target/

Переменные окружения можно установить при помощи bash-скрипта: . /sc-dt/env.sh.

Для автоматической установки переменных окружения при открытии каждого нового терминала вышеуказанную команду необходимо прописать в .bashrc.

Полезной будет установка утилиты openFPGAloader, которая позволяет загрузить битовый поток в память FPGA.

Для установки openFPGAloader необходимо выполнить:

sudo apt install git gzip libftdi1-2 libftdi1-dev libhidapi-hidraw0
libhidapi-dev libudev-dev zlib1g-dev cmake pkg-config make g++
git clone https://github.com/trabucayre/openFPGALoader.git
cd openFPGALoader/
mkdir build
cd build/
cmake ..
cmake --build .
sudo make install

Примечание! Подробное описание можно найти здесь -> - Installing openFPGALoader - openFPGALoader: universal utility for programming FPGA latest documentation.

Скачайте предоставляемый архив с файлами исходного кода и скриптами для этого курса: 5_SW_lab_collateral.zip .

Распакуйте скачанный архив в домашнюю директорию: unzip 5_SW_lab_collateral.zip -d ~/.

Рабочая директория scr1-sdk (клонированный репозиторий) была переименован нами в scr1-sdk-new в рамках подготовки данного курса, поэтому все пути к файлам в скриптах указаны с использованием этого названия. Советуем повторить этот шаг для того, чтобы все скрипты функционировали корректно.

mv scr1-sdk scr1-sdk-new

Далее требуется разместить файлы скриптов и исходного кода по нужным нам директориям. Для этого используйте:

cd 5_SW_lab_collateral.zip .
move_to_dirs.sh

Шаги и команды расписаны подробнее в файле README.md, расположенном в архиве.

Установка и настройка закончена, можем продолжать!

Сборка: Makefile

Для упрощения процесса компиляции используется утилита make: cd ~/scr1-sdk-new/sw/my_boot/ make.

После этого создастся директория build.*, содержащая исполняемые файлы и файл дизассемблированного кода. Содержимое директории build.*:


Утилита make получает инструкции по сборке программы из Makefile, в котором перечислены все выходные файлы и способы их сборки из файлов исходного кода.

Простой Makefile состоит из "правил", имеющих следующую структуру:

цель: необходимое условие метод
  • Цель - это обычно имя файла, который генерируется программой. Примерами целей являются исполняемые или объектные файлы. Цель также может быть именем действия, которое нужно выполнить, например clean.
  • Необходимое условие - это файл, который используется в качестве исходных данных для создания цели. Зачастую цель зависит от нескольких файлов.
  • Метод - это действие, которое выполняет утилита make.

! Каждая строка метода начинается с табуляции.