配置Zynq-7000系列可扩展器件需要多个步骤,最少要2个阶段,通常需要3个阶段,如下:
Stage0:称为BootROM,这一阶段控制最初的器件启动,BootROM是不可改动的可执行代码,处理器在上电复位和热重启之后执行。(热重启即通过软件重新启动电脑,而不是强制重新开机。指电脑从Windows操作软件的”开始”处点击”重新启动”按正常程序关毕电脑,这样会尽量避免对电脑的软、硬件造成的损坏。)
Stage1:通常称为第一阶段引导程序(First Stage Boot Loader,FSBL),它可以是任何用户可控的代码。
Stage2:该阶段通常开始执行用户所设计的处理系统,但是它也可以是第二阶段引导程序(Second Stage Boot Loader,SSBL)。这一阶段完全在用户的控制之下,本章并不予以详述。请参考UG821:《Zynq-7000 EPPSoftware Developers Guide》了解FSBL和Stage 2 images。
第一阶段引导程序(FSBL)在启动后开始。它由BootROM加载到OCM(On Chip Memory)或者在BootROM header所指明的加密位置执行。
FSBL负责:
利用XPS提供的PS配置数据进行初始化。
将比特流(bitstream)下载到PL。将第二阶段引导程序(SSBL)或者是“裸奔”应用代码加载到内存。
开始执行SSBL或是“裸奔”应用程序。
查看SDK提供的FSBL代码可以了解FSBL如何初始化CPU和FSBL所用到的外设,以及它如何使用一个简单的C run-time library。
Zynq PS 配置
利用Zynq配置UI,XPS生成MIO和SLCR寄存器的初始化代码。这些文件在XPS工程文件夹下:
Ps7_init.c和ps7_init.h,用于初始化CLK,DDR和MIO。Ps7_init.tcl完成的初始化和ps7_init.c代码完成的初始化是相同的。
Ps7_init.tcl文件,可以用来初始化CLK,DDR和MIO。它所完成的初始化和ps7_init.c代码完成的初始化是相同的。
注意:当使用XMD调试应用程序的时候tcl文件是很有用的。例如,你可以执行Ps7_init.tcl文件然后将应用程序加载到DDR中并调试。在这种情况下,就不需要进行FSBL的全过程。
Ps7_init.html,描述了初始化数据。
重要:在将来的版本中,可以改变PS初始化数据的位置和形式。
注意:XPS保持PL比特流和这些初始化数据的同步。不建议手动更改这些设置。
FSBL阶段不仅调用了pkilllo前辈提到的BSP提供的ARM启动代码,而且使用ps7_init.c中的代码对设备进行了初始化工作。