ZYNQ的启动原理和配置
设备配置包含用于初始化和配置ps和pl的所有方法及过程。在软件控制下,ps内的DevC提供用于初始化和配置ps和pl的手段和方法,在zynq中提供两个模块用于控制配置过程:
在ps的控制下,可以实现安全或非安全的配置所有ps和pl。通过zynq提供的JTAG接口,用户可以在外部主机的控制下对zynq进行配置,zynq不支持最开始就配置pl的过程。对zynq的配置过程至少包含两个阶段,但是通常要求3个阶段。
BootROM特性:
当上电复位后,启动PS配置过程,当禁止JTAG模式时,zynq内的Cortex-A9处理器从片内的BootROM开始执行代码,BootROM包含用于驱动NADN、NOR、Quad-SPI、SD和PCAP的基本程序代码。
在BootROM中并不执行对外设的初始化操作,在阶段1或该阶段之后zynq才对其他外设进行初始化操作,考虑到安全因素,当脱离复位状态后,Cortex-A9处理器总是PS内所有其他主设备模块内的第一个设备,当正在执行BootROM时,禁止执行JTAG,以保证安全性操作。
BootROM代码也负责加载第一启动镜像文件,zynq内的硬件支持加载多级用户启动镜像,在第一级启动之后,用户负责进一步实现用户启动镜像的加载,当BootROM将控制权移交给fsbl后,用户负责进一步实现用户启动镜像的加载,当复位操作时,才会重新执行BootROM内的代码。
BootROM支持加密和不加密的镜像,此外,当使用芯片内执行特性时,当从线性flash、NOR或QSP直接复制镜像或执行后,BootROM支持从OCM开始执行阶段1镜像。
在安全启动CPU时,从安全BootROM运行代码,并且,对进入的用户PS镜像镜像解码和认证,将其保存到OCM RAM中,然后,分支进入它,在非安全启动CPU时,从BootROM运行代码,如果使用了XIP特性时,在分支跳转到OCM ROM或Flash内的用户镜像时,禁止所有的安全启动特性,除非使用带有XIP的启动,一般将PS启动镜像限制到192KB范围内。
随后用于PS/PL启动阶段的过程,都是用户的责任,并且处于用户的控制下。在zynq中,不允许用户访问BootROM中的代码,在完成阶段1安全启动的过程后,用户可以继续执行后续的安全/非安全启动阶段,如果一开始执行的就是非安全的第一个阶段,随后只能执行非安全阶段的启动。
通过PL内硬接线的AES-256和SHA-256模块,PS实现解密和认证,由于这个原因,在安全启动任何阶段,即使只对PS进行配置,也必须给PL上电,这样,用户就可以通过片上的eFUSE单元或片上BRAM,选择器件的密钥。
在zynq内支持5种可用的启动设备,包括NAND、NOR、SD、Quad-SPI和JTAG,其中前4种启动源用于主模式启动。
BootROM的高层次配置流程如图2.1所示。
图2.1 BootROM的高层次配置流程
设备配置接口结构DevC模块由3个独立操作的主模块构成:
设备配置接口包含一个APB接口,主机使用APB接口配置这3个模块,并且访问整个状态以及实现与PL XADC通信。
AXI-PCAP桥:
AXI-PCAP桥将32位AXI格式的数据转换成32位的PCAP协议,反之亦然,这个桥支持配置数据,以并发和非并发的方式下载和上传,如图3.1所示。
图3.1 AXI-PCAP桥
在AXI和PCAP接口之间存在一个发送和接收FIFO缓冲区,图中的DMA引擎用于在FIFO和存储器设备(OCM、DDR存储器,或者外设存储器的一个)之间移动数据。
当通过PCAP接口移动数据时,必须给zynq的PL一端供电,通过DevC控制器寄存器的PCAP MODE和PCAP PR比特位,使能PCAP接口,如果发送加密数据,还应该设置QUARTER PCAP RATE EN比特位。
通过DevC模块内建的DMA引擎,在PCAP接口之间传输数据。为了启动一个数据传输过程,必须按照下面的顺序写4个DMA寄存器:DMA源地址寄存器;DMA目的地址寄存器;DMA源长度寄存器;DMA目的长度寄存器。
为了通过PCAP将数据传输到PL,目的地址应该设置为0xffffffff。类似的,通过PCAP接口从PL读数据,源地址应该设置为0xffffffff,必须通过PCAP接口发送加密的PS镜像,这是由于AES和HMAC引擎都驻留在PL一端。在该情况下,DMA源地址应该设置为一个外部的存储器接口,而目标地址应该设置为OCM。
DevC的DMA引擎能用于加载不安全的PS镜像,在加载以前,在杂项控制寄存器内设置PCAP LPBK比特位,这个比特位使能内部的环路,旁路掉PCAP接口,在使用PCAP前,需要再次禁止该比特位,DMA源地址应该设置为一个外部存储器,而目的地址应该设置为一个OCM或一个有效的外部存储器接口,如DDR。
PCAP接口也用来回读PL配置。为了执行回读操作,PS必须运行软件代码,使能产生正确的PL回读指令,使用两个DMA访问周期,回读一个PL配置。
设备安全性管理:
DevC包含着一个安全策略模块,提供如下功能:
XADC接口:
在这个启动模式下,PS作为主设备。BootROM从选择的外部存储器加载一个纯文本PS镜像,如图3.2所示,在这种情况下,并不要求PL上电,可以使用PS镜像立即加载或以后加载PL比特流。
图3.2 PS主非安全启动流程
配置流程主要步骤如下:
在该启动模式下,PS作为主设备,BootROM从所选择的外部存储器加载一个加密的PS镜像,如图3.3所示,由于AES和HMAC引擎驻留在PL中,因此要求PL上电来初始化启动序列,在尝试解密FSBL前,BootROM验证PL已经上电,当启动PS后,可以使用一个加密的比特流配置,或者断电以后再配置PL。
图3.3 PS主安全启动图
下面给出了配置流程的详细步骤: