В этом видео ролике я показываю, как запустить простую RISC-V программу в плате Марсоход3. Программа написана для системы Syntacore RISC-V SCR1.
В оригинальных синтакоровских исходниках есть простой пример sw/hello, но он уж совсем простой и скучный - эта программа запускается и выводит в консоль, через последовательный порт сообщение "Hello SCR1" и все.
Я сделал свою программу helloEx. Она чуть похитрее. Её исходники есть на нашем github в папке sw/helloEx. Дальше расскажу, что делает эта программа и как запускить её в нашей FPGA RISC-V системе.
Программа при запуске первым делом печатает "Hello SCR1", а затем в цикле:
- выводит на светодиоды состояние двоичного счетчика;
- выводит на семисегментный индикатор этот же счетчик в шестнадцатеричном виде;
- опрашивает состояние порта DIP switch, а на плате Марсоход3 с шилдом 7ми сегментного индикатора это просто 4 кнопки;
- при нажатии на кнопку печатает в консоль последовательного порта сообщение об изменении состояния кнопок;
- при нажатии на первую или вторую кнопку меняет направление счета двоичного счетчика UP или DOWN;
- опрашивает порт таймера и вносит в цикл задержку.
Программа написана на языке C и компилируется для процессора RISC-V. О том, как установить среду для компиляции программ на Си я писал в предыдущей статье.
Если коротко повторить, то я использую консоль GitBash для ОС Windows 10 с установленной к нему утилитой сборки make. В консоли GitBash набираю:
> cd sw/helloEx
> export CROSS_PATH=/d/Programs/riscv/riscv-gcc-w64-10.2.0-gb693c14--200904T1226/bin/
> make PLATFORM=marsohod3_scr1
Вероятно вы можете использовать любой другой путь к RISC-V компилятору.
В результате сборки получается двоичный файл build.marsohod3_scr1.tcm.o2/hello.bin
Теперь его нужно загрузить в FPGA плату и запустить на реализованном в ней процессоре RISC-V.
Напомню, что у нас в FPGA проекте первым стартует bootloader. Уже этот bootloader предоставляет возможность интерактивной работы и одна из его функций это загрузка внешней программы через последовательный порт по протоколу Xmodem.
Последовательность действий такая:
- загружаем проект в FPGA с помощью Intel Quartus Prime Programmer через JTAG платы Марсоход3 (первый канал микросхемы FTDI FT2232H );
- запускаем на комьютере программу TeraTerm и конфигурируем её на второй последовательный порт микросхемы FTDI. Скорость передачи 115200, 8 бит, 1 стоп, без чётности;
- нажимаем в консоли TeraTerm "i" и видим всю информацию о системе SCR1 и плате;
- нажимаем в консоли TeraTerm "1" и видим нам предлагается ввести адрес, куда будет загружаться наша программа. Здесь вводим f0000000. Это адрес TCM, Tightly Coupled Memory - область статической памяти в системе, всего 64 килобайта. Сюда будет загружена программа по протоколу Xmodem;
- в программе TeraTerm выбираем в меню File -> Transfer -> XMODEM -> Send и появляется диалоговое окно выбора файла для пересылки. Выбираем только что скомпилированный build.marsohod3_scr1.tcm.o2/hello.bin. Всё. Файл отправлен;
- в консоли терминала набираем "g" для запуска загруженной программы. Система попросит ввести адрес запуска программы. Опять вводим f0000000. Нажимаем Enter - программа запущена и работает.
Всё изложенное здесь продемонстрированно на видео в начале поста.
В общем пока тут всё не сложно. Можно двигаться дальше и будем изучать.
Подробнее...