Zynq UltraScale+ MPSoC(16nm) 的核心是两个 CPU 模块:
- 应用处理单元(APU):四核 ARM Cortex-A53,适合于 Linux 和裸机应用程序。
- 实时处理单元(RPU):双核 ARM Cortex-R5,适合于低时延确定性应用,注入安全模块和 APU 任务分担。
此外,该平台还具有:图形处理单元(GPU)、安全单元(CSU,负责系统安全相关工作)、平台管理单元(PMU,负责处理主要的预引导任务和 PS 硬件的管理,以实现系统的可靠通/断电和系统错误管理)。
Zynq UltraScale+ MPSoC 系统架构
Zynq ultraScale 启动模式与启动过程
启动模式
核心板:
- QSPI Flash: 256Mbit
- eMMC Flash: 8GB
从安全角度,启动模式分为安全型和非安全型:
- 安全型:可以使用三种静态存储器(Quad-SPI、eMMC Flash、SD)。引导过程主要通过 PS 部分来完成。
- 非安全型:可以使用 JTAG 或上面提到四种静态存储器启动,在非安全型下,PL 部分无需必须启动。
从外部启动源角度(QSPI Flash、eMMC Flash、SD),启动模式分为主模式和从模式:
- 主模式:Zynq 的 PS 部分负责将启动镜像文件从外部非遗失性存储器加载到 OCM 中。
- 从模式:JTAG 只支持非安全启动,外部电脑作为主设备,通过 JTAG 连接,将启动镜像加载到 OCM,PS 部分保持空闲模式,主要用来调试系统。
综上,Zynq 的启动模式包括:安全主模式、非安全主模式、非安全从模式(JTAG)。
启动过程
在系统复位后,系统将会检测模式引脚上的电平状态,以此来决定从哪个设备(eMMC Flash、Quad-SPI、SD、JTAG)来引导系统。
- 预配置阶段
系统复位后,系统将会检测模式引脚上的电平状态,从此来决定从哪个设备来引导系统。
预配置阶段由平台管理单元(PMU)控制执行 PMU ROM 中的代码来配置系统。主要负责配置设备的默认电源状态、初始化 RAM 以及测试存储器和寄存器。在 PMU 执行这些任务并将系统控制权交给配置安全单元 (CSU)后,进入服务模式。
- 配置阶段
第 0 阶段的代码固化在 BootROM 设备中,不可写。首先,BootROM 配置一个 ARM 处理器以及必要的外围设备,然后,从启动设备中将 FSBL 加载到 OCM,并跳转到 OCM 执行 FSBL 代码。
在配置阶段,BootROM(CSU ROM 代码的一部分)解释 boot header 以配置系统并将处理系统(PS)的第 1 阶段引导加载程序(FSBL)代码加载到片上 RAM(OCM)中。FSBL 可以由 APU 或 RPU 执行,在启动过程中,CSU 还将 PMU user firmware(PMU FW)加载到 PMU RAM 中,以与 PMU ROM 一起提供平台管理服务。
- 后配置阶段
FSBL 执行开始后,CSU ROM 代码进入后配置阶段。片上存储器(OCM)模块包含 256KB 的 RAM,从 0xFFFC0000 开始,OCM 主要由 FSBL 和 ATF 组件使用。FSBL 使用从 0xFFFC0000 到 0xFFFE9FFF 的 OCM 区域。该区域的最后的最后 512B 由 FSBL 用于共享与 ATF 移交的应用程序对应的移交参数。ATF 将执行移交给 ATF 后,由 ATF 负责加载 U-boot。
Arm Trusted Firmware(ATF)是一个裸机应用程序,在 APU 上的异常级别 3 (EL3)中执行。ATF 包括一个安全监视器层,用于在安全和非安全环境之间切换。ATF 是在 Zynq UltraScale+ 上的 APU 上加载 Linux 的强制性要求。ATF(bl31.bin)默认在 PetaLinux 中构建,可以在 PetaLinux 项目映像目录中找到。
总的来说,Zynq UltraScale 系列与 7000 系列相比,就是在 7000 系列的第 0 阶段之前增加了预配置阶段,上电后由 PMU 先执行 PMU ROM 中的代码对系统进行预配置。之后的过程与 7000 系列大体相同,只是在启动过程中 UltraScale 系列除 APU 单元外,CSU 单元和 PMU 单元全程参与。