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在这个过程中并不关心。