В этой подборке собраны статьи связанные с процессорной архитектурой RISC-V ISA. Будем запускать ядро микропроцессора RISC-V в отладочных FPGA платах Марсоход3и Марсоход3бис на основе ПЛИС Altera / Intel MAX10. Используемо в этих статьях ядро RISC-V написано российской компанией Syntacore.
Многие из нас конечно знают про существование различных процессорных архитектур. Наиболее известные это 32х битные x86 от компании Intel и ARM от ARM Limited. Их развитие со временем привело к 64х битным системам x86-64 AMD, Intel64 от Intel и AARCH64 от ARM. Конечно существуют или существовали и другие процессорные архитектуры такие как Sparc, IA-64, PowerPC, MIPS.
Есть еще одна процессорная архитектура, которая стоит особняком и на которую вероятно стоит обратить внимание это RISC-V. В чем её особенность?
Итак, портируем RISC-V систему SCR1 от компании Syntacore на плату Марсоход3. Я уже писал, почему я выбрал именно эту систему для изучения в предыдущей статье. Что нужно для запуска этой системы на нашу плату? Посмотрим, что там у них в исходниках на github: https://github.com/syntacore/scr1-sdk
В репозитории есть директории doc, fpga, images, scr1, sw. При этом, директория fpga и scr1 это субмодули git, указывающие на другие репозитории. Внутри папки sw так же есть два субмодуля это папки sc-bl и zephir. Ну что ж, приступим к работе!
Недавно я занимался портированием системы Syntacore RISC-V на плату Марсоход3. В принципе, это было не очень трудно, так как на этой плате используется емкий FPGA чип MAX10 с 50ю тысячами логических элементов. А можно ли запустить хоть какой-то RISC-V на более слабом FPGA чипе? Попробую плату Марсоход3bis. На этой плате, как и на плате Марсоход3, стоит Intel MAX10, но здесь всего 8 тысяч логических элементов. На плате Марсоход3bis стоит микросхема FPGA 10M08SAE144C8. Так получится или нет?
В своей предыдущей статье я обещал, что расскажу, как скомпилировать загрузчик для системы Syntacore RISC-V Scr1 работающей в плате Марсоход3. У нас уже есть все исходники проекта взятые на github. У нас есть и само ядро RISC-V от Syntacore и FPGA обвязка к нему - мы её уже портировали на плату Марсоход3. Есть у нас и некоторые программы для scr1 и в том числе загрузчик. Загрузчик, или bootloader - это первое, что запускается при старте системы. Программная часть проекта scr1-sdk находится в директории sw. Тут есть поддиректории hello, sc-bl, tests, zephyr. Это разные программы, которые работают в scr1. Программа начального загрузчика находится в папке sw/sc-bl. Её и буду компилировать в первую очередь.
На неделе мне задали вопрос, на который я к своему стыду не смог сразу ответить: "Как стартует RISC-V процессор и как обрабатывает прерывания?". Попробую на него ответить хотя бы сейчас. Но! Мне кажется, чтобы по настоящему разобраться в этом вопросе было бы хорошо пройти отладчиком по шагам весь старт и инициализацию RISC-V SoC. Только так, на деле, можно понять особенности системы команд процессора и нюансы запуска.
Чтобы пройти отладчиком запуск процессора мне нужно этот отладчик подключить к системе на кристалле. Вообще-то я что-то такое уже делал, когда запускал систему с процессором MIPSfpga - тогда к нашей FPGA плате Марсоход3 (Altera MAX10) был подключен дополнительный второй FTDI программатор, через который велась отладка MIPSfpga SoC. Программное обеспечение и HW при этом были в связке GDB -> OpenOCD -> FTDI -> FPGA Altera MAX10.
Честно говоря, сейчас мне не хотелось бы связываться с платами. Могу ли я дебажить с GDB систему RISC-V SoC работающую в симуляторе Verilator? Почему бы и нет? Скорее всего могу. Как это сделать? Пока не знаю, но давайте попробуем.
В этом видео ролике я показываю, как запустить простую RISC-V программу в плате Марсоход3. Программа написана для системы Syntacore RISC-V SCR1.
В оригинальных синтакоровских исходниках есть простой пример sw/hello, но он уж совсем простой и скучный - эта программа запускается и выводит в консоль, через последовательный порт сообщение "Hello SCR1" и все.
Я сделал свою программу helloEx. Она чуть похитрее. Её исходники есть на нашем github в папке sw/helloEx. Дальше расскажу, что делает эта программа и как запускить её в нашей FPGA RISC-V системе.
Подробнее...