在 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}