
- Руководствовался инструкцией FPGA Boot 14.0
- Использовался Квартус 14.1 и сопутствующий ему EDS
- Простейший QSys проект для примера для загрузки из FPGA (у меня под плату Arrow SoCkit) QSys
- Перед сборкой preloader лучше удалить папку spl_bsp и сгенерировать заново после первой сборки проекта
- Вот настройки preloader'a Нажмите для просмотра прикрепленного файла, которые я использовал
(прим. если не выбран не один пункт загрузки, как в данном примере, preloader загружается, выполняется и висит в цикле, не пытаясь что либо делать дальше. при этом можно загружать и отлаживать приложение в SDRAM по JTAG через DS-5 debugger)
- В своем проекте я не завожу резет на FPGA часть, а на HPS Cold reset завожу сигнал, полученный по pll_locked. Как я понял, главное: резет на вход Cold (именно Cold) reset HPS должен прийти после того, как с FPGA части будет снят резет, т.е. FPGA часть будет гарантированно готова к загрузке проца. Мне кажется, что этот пункт меню имеет принципиальное значение.
- Итак, собираем preloader, делаем HEX, все как указано в доке с рокетбордов, подключаем UART к компу, в Putty задаем скорость 115200 бод, заливаем .sof файл и вуаля:
Нажмите для просмотра прикрепленного файла
- profit!
Preloader грузится из OCRAM FPGA, инициализирует DDR3 SDRAM и входит в цикл а-ля for(;;). При этом я могу по JTAG заливать в SDRAM приложение, как hosted так и unhosted (unhosted будет выводить текст в открытое Putty), так что все ок.
Надеюсь, что данная инструкция кому нибудь пригодится. Теперь собственно о текущей проблеме. Хотелось бы пойти дальше и сделать полностью автономную загрузку unhosted baremetal приложения. Preloader копирует код из некоторого хранилища в область SDRAM и передает управление с точки входа Entry point, откуда приложение и начинает выполняться (да простят меня истинные программеры, до этого только rtl дизайном занимался, поэтому может коряво об этом пишу). Сейчас рассматриваю вариант загрузки приложения из другой OCRAM на борту FPGA или из SD-MMC. В дальнейшем хочется загружаться из NAND (на Arrow её просто нет). Вариант с загрузкой приложения из FPGA не является стандартным, т.к. он даже не обозначен в гуи морде bsp-editor при настройке параметров сборки preloader'a. Однако такая возможность есть, т.к. см. Altera Wiki FPGA boot:
Цитата
Note that the Preloader is executed directly from the FPGA memory, while the bare-metal is first copied from the SD/MMC to SDRAM then executed.
It is possible to also store the bare-metal application in the FPGA image, but that memory is expensive and its usage should be minimized.
It is possible to also store the bare-metal application in the FPGA image, but that memory is expensive and its usage should be minimized.
Возникает вопрос, как загрузить простейшее приложение из OCRAM FPGA?
Загрузка из SD-MMC предполагает форматирование флешки под какой-то А2 Partition, но при генерации preloader'a есть галочка "поддержка FAT". Как я понял опция как раз для виндовых машин. Ставим поддержку FAT и просто копируем на флешку .img образ приложения, которое хотим запускать. С поддержкой FAT при сборке preloader'a вылазит ошибка Makefile'a:
Нажмите для просмотра прикрепленного файла
Как я понял, загрузка с флешки самая распространенная пока. Кто как грузился? Кто нибудь пробовал загружать что либо кроме линуха с флешки? Мб кто то пробовал включать поддержку FAT?
И еще интересует вопрос, как собственно preloader осуществляет копирование кода приложения в SDRAM и передачу управления на entry point?
Возможно немного сумбурно, но на данный момент много вопросов, решил собрать их в одном месте. Если у кого-то есть идеи, велкам к обсуждению
