Vivado + Xilinx SDK版本 = 2019.1。
由于ZYNQ器件内部含有ARM子系统(PS), 所以在启动时,FPGA(PL)的配置需要在ARM子系统启动后进行:
同时, PS对PL的配置是通过专用配置接口PCAP(Processor Configuration Access Port)实现的:
所以,ZYNQ器件若非从JTAG启动,就需要将FPGA的.bit配置文件和ARM的.elf镜像文件全部整合进Boot Image里面,然后进行烧录。
说明一下利用JTAG将ZYNQ固件/程序烧录到QSPI中的操作步骤。
一、在Vivado环境中启用外接QSPI Flash接口控制器。
使能QSPI控制器和专用MIO管脚:
确认QSPI控制器与实际器件的参数相互兼容,注意数据线宽度:
二、在Vivado中生成Bitstream,并更新.bit配置文件和.hdf硬件平台文件。
三、启动SDK。
这里假定SDK硬件平台工程中的.bit文件和Hardware Platform描述文件已经被上述操作更新,并且搭建起了SDK应用工程(Application Project和对应的BSP)。
1、将BSP中的Xilinx文件系统库(xilffs,Xilinx FAT File System)启用,配置选项默认:
开启xilffs才能构建后面的FSBL即BootLoader工程。
2、基于现有的HW平台和BSP,建立一个FSBL(First-Stage BootLoader)工程。
这个FSBL工程将作为BootROM固件,为器件启动(Boot)做基础的准备工作,它的main()函数大致包括这些过程:
(1)初始化MIO,初始化PLL,初始化时钟,初始化DDR;
(2)清空器件的数据缓存;
(3)映射/注册异常处理例程;
(4)测试DDR读写功能;
(5)初始化PCAP;
(6)确定启动方式(QSPI FLASH,NOR FLASH,SD,JTAG等等);
(7)加载启动镜像(Boot Image)。
3、编译这个FSBL工程,生成对应的.elf文件,它生成在FSBL工程的Debug目录下。
4、选中FSBL工程,然后执行菜单栏Xilinx -> Create Boot Image,生成一个.bif文件(Boot Image File):
镜像文件的组成,第一部分是FSBL(首先执行的启动程序),然后是PL逻辑电路配置,最后是PS程序。注意将FSBL.elf的分区类型设定为BootLoader,其他两个文件可以指定为DataFile。
5、使用Xilinx -> Program Flash Memory功能烧写.bin文件到存储器件,注意Flash Type需要对应实际器件:
四、完成,将BOOT方式调整为QSPI FLASH,上电启动。