在 zynq 使用系统时,可在 uboot 与 linux 中加载启动 PL 程序,一直以来用的都是在 uboot 中加载启动,本次试了试在 linux 中启动,发现不好使,于是有了这篇文章。
环境
vidado 2017.4
Linux zynq 4.14.0-xilinx
zynq 7020
使用
在早期的 xilinx 官方文章写道使用命令(https://xilinx-wiki.atlassian.net/wiki/spaces/A/pages/18841750/Solution+Zynq+PL+Programming)
$cat bitstream.bit > /dev/xdevcfg
然而不能用。应该时后期驱动发生了变化。
在 此处 讨论中发现相关的解决办法,而后转到了官方最新的说明(https://xilinx-wiki.atlassian.net/wiki/spaces/A/pages/18841645/Solution+Zynq+PL+Programming+With+FPGA+Manager)

需要在 /lib 下 新建文件夹 firmware,将生成的 bin 文件放到 /lib/firmware/ 文件夹下,使用命令:
$echo out1.bin > /sys/class/fpga_manager/fpga0/firmware

BIN 文件生成
- 关于如何生成 bin 文件,上述官方最新的说明网址中有说明:

在Vivado 软件 Tcl Console中,使用命令:
bootgen -image Full_Bitstream.bif -arch zynq -process_bitstream bin
即可生成 bin 文件,此命令生成文件名一般为 XX.bit.bin
- 还有一种方式(https),看了此处的讨论。

在Vivado 软件 Tcl Console中,使用命令:
write_cfgmem -disablebitswap -force -format BIN -size 256 -interface SMAPx32 -loadbit "up 0x0 system_wrapper.bit" -verbose out.bin
注:在 Vivado 设置中添加 bin 文件生成,生成的文件是无法使用的,对比二进制文件,发现命令生成的数据进行了大小端的转换。

附
uboot 中加载启动 PL 程序,直接使用生成的 bit 文件即可。
- 从 qspi flash 加载
sf probe 0 0 0 && echo FPGA bitstream is loading ... ... && sf read ${bitstream_load_address} ${loadbit_addr} ${loadbit_size} && fpga loadb 0 ${bitstream_load_address} ${loadbit_size}
- 从 SD 卡加载
load mmc 0 ${bitstream_load_address} ${bitstream_image} && fpga loadb 0 ${bitstream_load_address} ${loadbit_size}

本文档介绍了在Zynq平台上如何从Linux内核启动PL(可编程逻辑)程序,而非传统的在uBoot中加载。由于驱动的更新,使用$xdevcfg$设备文件的方式不再适用。现在推荐将BIN文件放入/lib/firmware/目录,并通过写入/sys/class/fpga_manager/fpga0/firmware来加载。生成BIN文件可以使用Vivado的Tcl命令,如`bootgen`或`write_cfgmem`。此外,文章提供了在uBoot中加载PL程序的命令示例。
2977

被折叠的 条评论
为什么被折叠?



