Comments 6
Довольно часто надо чтобы PL уже был прогружен до старта ядра. Тогда это проще всего делать из UBoot: fpga_load=fatload ${devtype} ${devnum} 0x03000000 system.bit && fpga loadb 0 0x03000000 ${filesize}
boot_a_script=run fpga_load; load {devtype} ${devnum}:{distro_bootpart} {scriptaddr} ${prefix}{script}; source {scriptaddr}
boot_extlinux=run fpga_load; sysboot ${devtype} ${devnum}:{distro_bootpart} any {scriptaddr} ${prefix}{boot_syslinux_conf}
Да, согласен, если PL должен быть готов еще до старта ядра, загрузка bitstream из U-Boot действительно самый простой и удобный вариант. Спасибо за уточнение!
Я в этой статье описывал другой сценарий, когда Linux уже запущен, а конфигурацию PL нужно менять динамически. Например, когда ресурсы FPGA почти закончились, а некоторая логика не должна работать одновременно. В таком случае удобнее не держать все сразу в одной конфигурации, а загружать нужный bitstream и применять соответствующий overlay уже из Linux.
Да, частичная реконфигурация это полезно - но она довольно редко используется. Обычный сценарий, это когда конфиг один и его надо загрузить до ядра. Чтобы драйвера могли нормально стартануть. И наверное ничего не мешает загрузить основной битстрим из uboot, а частичную реконфигурацию делать уже потом по ходу дела.
Здесь у нас не частичная, а full реконфигурация. Partial, к сожалению, кратно сложнее(
Мы полностью грузим новый битстрим, но за это платим ограничениями: конфигурация PS не должна меняться между битстримами, а на время реконфигурации PL нужно выгрузить все драйверы, которые обращаются к PL, и проследить, чтобы userspace не ходил по адресам, на которые был сделан mmap PL
Есть не совсем очевидное ограничение загрузки прошивки в ПЛИС на ходу - если SoC загружена в SecureBoot, то записать в ПЛИС новую конфигурацию уже не получится. Так что одно из ограничений применения FPGAManager - unsecured mode загрузки.
А в целом, как применяете подобный механизм загрузки? Есть ли какое-то практическое применение для полной реконфигурации на ходу? Для частичной - могу придумать, но насколько помню, она тоже заблокирована в SecureMode.
Спасибо за информацию! В основном используется, если ресурсы уже заканчиваются, а нужная логика не влезла, и она не используется совместно в одном битстриме. В этом случае на ходу из C++ ного приложения меняется bitstream с оверлеем в зависимости от выбранного пользователем режима работы.
Конечно, для такого сценария частичная реконфигурация выглядит более правильным решением.
Но мы до неё пока не дошли, поэтому сейчас рассматриваем именно полную реконфигурацию как более простой вариант.
Загружаем bitstream из Linux через FPGA Manager на Zynq-7000