启动ROM与第一阶段:Boot ROM的初始化流程、PLL配置、引脚采样与启动源选择机制

Agilex SoC 上电或热复位后,第一个执行的代码并非来自用户闪存,而是固化在芯片内部的 Boot ROM。Boot ROM 是 SDM (Secure Device Manager) 子系统的一部分,负责完成最底层的硬件初始化,并决定从何处加载下一阶段代码。本章深入剖析 Boot ROM 的执行流程、关键配置与决策逻辑。

2.1 Boot ROM 初始化流程概览

Boot ROM 的执行是一个高度结构化的状态机过程,从复位释放到跳转到下一阶段加载器,通常经历以下主要阶段:

阶段 主要任务 关键输出
1. 硬件自检与微控制器启动 验证内部 SRAM、启动 SDM 微控制器内核、初始化堆栈指针 SDM 固件运行环境就绪
2. PLL 与时钟配置 根据复位类型和硬布线配置,设置系统 PLL 与外围时钟 稳定的高频时钟域
3. I/O 引脚采样与配置 采样配置引脚 (MSEL, CSEL),确定启动模式与安全策略 启动源选择向量
4. 启动源枚举与选择 按优先级扫描可用启动设备,尝试读取有效启动映像头 选定的启动设备与偏移地址
5. 映像加载与验证 从选定设备加载第一阶段引导加载器 (FSBL) 或配置数据 跳转到下一阶段入口

关键理解: Boot ROM 本身不可修改,但其行为可以通过引脚电平、eFuse 设置以及复位类型进行配置。理解这些配置点是控制 HPS 与 FPGA 启动顺序的前提。

2.2 PLL 配置:从低速参考时钟到系统主频

复位释放后,芯片首先运行在一个内部低速振荡器 (OSC) 或外部参考时钟上。Boot ROM 必须快速配置 PLL,将时钟提升到足以支持高速外设(如 DDR、HPS 总线、SDM 自身)工作的频率。

PLL 配置流程遵循以下步骤:

  1. 参考时钟检测: 检测外部参考时钟输入(如 CLK_REF)的频率与稳定性。
  2. PLL 复位与旁路: 确保所有 PLL 处于复位状态,系统时钟运行在旁路模式(直接使用参考时钟)。
  3. PLL 参数加载: 从硬编码的默认参数表或 eFuse 中读取倍频 (M)、分频 (N)、后分频 (C) 系数。
  4. PLL 锁定: 写入配置寄存器,等待 PLL 锁定指示信号有效。
  5. 时钟切换: 将系统主时钟从旁路时钟无缝切换到 PLL 输出时钟。

设计提示: 对于需要特定启动频率的应用(例如,HPS 早期 DDR 初始化要求特定频率),可以通过 eFuse 或配置引脚覆盖默认 PLL 参数。但请注意,Boot ROM 阶段的 PLL 配置是全局性的,会影响 FPGA 架构时钟和 HPS 外围时钟的初始频率。

Boot ROM PLL 配置与时钟切换流程 参考时钟检测 PLL 复位与旁路 PLL 参数加载 PLL 锁定等待 时钟切换 旁路时钟路径保持活跃 用于故障安全回退 切换后 PLL 输出 驱动系统主时钟

2.3 引脚采样与启动源选择机制

时钟稳定后,Boot ROM 立即对一组专用配置引脚进行采样。这些引脚在芯片复位期间被锁存,其电平状态直接编码为启动模式选择向量。Agilex 系列支持多种启动源,通过 MSEL[3:0] 和 CSEL[1:0] 引脚组合进行选择。

2.3.1 配置引脚定义与采样时序

引脚组 位宽 功能描述 采样时刻
MSEL[3:0] 4 位 主启动模式选择:定义启动设备类型(QSPI、SD/MMC、NAND、FLASH 等) nPOR 释放后的上升沿
CSEL[1:0] 2 位 配置源选择:定义配置映像来源(HPS、FPGA、SDM 直通) nPOR 释放后的上升沿
BSEL 1 位 启动映像备份选择:定义主启动失败后的回退策略 nPOR 释放后的上升沿

硬件设计警告: 配置引脚必须在 nPOR 释放前稳定到目标电平。由于内部上拉/下拉电阻的强度有限,建议在 PCB 上使用 4.7kΩ ~ 10kΩ 的外部电阻进行强上拉或强下拉,以防止噪声导致采样错误。采样仅在复位释放瞬间发生,之后引脚电平变化不影响本次启动。

2.3.2 启动源优先级与枚举顺序

Boot ROM 根据 MSEL/CSEL 确定启动设备类型后,并不立即加载,而是按照预定义的优先级顺序尝试枚举设备。这种设计允许系统在主要启动设备失效时自动回退。

  1. 第一优先级: 由 MSEL 指定的主启动设备(如 QSPI Flash 的 CS0)。
  2. 第二优先级: 由 BSEL 指定的备份启动设备(如 QSPI Flash 的 CS1 或 SD/MMC 的第二分区)。
  3. 第三优先级: 如果前两者均失败,进入 恢复模式,等待通过 JTAG 或 USB 下载映像。
启动源选择与枚举决策树 引脚采样 (MSEL/CSEL) 主设备枚举 成功? 加载启动映像 备份设备枚举 成功? 加载备份映像 恢复模式 (JTAG/USB)

2.4 启动映像头验证与第一阶段加载

一旦 Boot ROM 通过枚举确认了有效的启动设备,它会读取该设备的起始扇区(通常为偏移 0 或特定块地址),并验证 启动映像头 (Boot Image Header)。该头结构包含以下关键字段:

  • 魔数 (Magic Number): 用于快速识别是否为有效映像。
  • 映像长度与校验和: 确保映像完整性。
  • 入口点地址: 第一阶段引导加载器 (FSBL) 在 HPS 或 SDM 内部 RAM 中的加载地址。
  • 配置标志: 指示是否包含 FPGA 配置数据、HPS 早期配置数据等。

验证通过后,Boot ROM 将 FSBL 代码从启动设备复制到 SDM 内部 SRAM(或 HPS 的 OCM),然后执行一次跳转,将控制权移交给 FSBL。至此,Boot ROM 的使命完成,系统进入由 FSBL 主导的第二阶段。

HPS 与 FPGA 启动顺序的第一次分岔口: 在 Boot ROM 阶段,HPS 和 FPGA 均处于复位状态。Boot ROM 仅初始化 SDM 子系统。HPS 的复位释放、FPGA 的配置操作,均由后续的 FSBL 或 SDM 固件根据 CSEL 和映像头标志决定。这正是控制启动顺序的关键切入点。