
Комментарии 4
Довольно часто надо чтобы 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
Загружаем bitstream из Linux через FPGA Manager на Zynq-7000