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 Format):

鏡像文件的組成,第一部分是FSBL(首先執行的啟動程序),第二部分是PL邏輯電路配置,第三部分是PS程序。注意將FSBL.elf的分區類型設定為BootLoader,其他兩個文件可以指定為DataFile。
5、使用Xilinx -> Program Flash Memory功能燒寫.bin文件到存儲器件,注意Flash Type需要對應實際器件:

四、完成,將BOOT方式調整為QSPI FLASH,上電啟動。
