Разработка цифровых ИС на примере микроконтроллерного ядра 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.
! Каждая строка метода начинается с табуляции.