cyclone v fpga可以由preloader从QSPI读取,并通过FPGAMANAGER进行配置。FPGA文件需要使用rbf fppX16格式,可以使用压缩格式。这种配置方式可以使preloader提前将FPGA配置好,在启动vxworks系统前,使自己开发FPGA部分提前进入配置,方便软件调试自己开发的FPGA模块。我的QSPI大小为32M,主要用于存放preloader,param,vxboot,vxworks。布局如下所示:
我们打开bsp-editor应该有如下配置:
我指定vxboot,或者说使用的uboot在QSPI偏移的0x100000位置处。
打开uboot-socfpga/include/configs/socfpga_common.h文件,找到CONFIG_SPL_FPGA_LOAD,去掉注释,打开该选项,preloader将会执行从QSPI中读取rbf文件进行FPGA配置。FPGA配置的RBF文件位置,由CONFIG_SPL_FPGA_QSPI_ADDR定义。如最上面那张的图的布局,我们的FPGA RBF文件在QSPI偏移的2M处,所以
#define CONFIG_SPL_FPGA_QSPI_ADDR (0x200000)
到这PRELOADER配置结束,可以编译PRELAODER生成镜像,烧写到QSPI的0偏移处。
下面我对quartus的生成的fpga sof文件进行转换:
打开转换器:
按上面的设置进行转换。
生成的rbf文件是原生块文件,烧写在QSPI中,preloader是无法知道编译文件大小的。uboot preloader采用mkimgage工具将rbf文件加一个可以指示文件大小的img头部。这样才能让preloader知道配置文件长度。
mkimage.exe" -A arm -T firmware -C none -O vxworks -a 0x08000040 -e 0 -n "FPGA" -d fpga.rbf fpga.bin
上面命令只关心红色字体部分就可以了。其它部分prelaoder在这个过程中并不关心。