3、配置数据流:FPGA配置数据(.sof/.rbf)与HPS第一阶段引导加载程序(SPL/u-boot)在SDM中的加载路径
在Agilex SoC的SDM配置模型中,FPGA配置数据与HPS第一阶段引导加载程序(SPL/u-boot)遵循两条独立但协同的加载路径。理解这两条路径的起点、中间节点和终点,是掌握启动顺序控制技巧的基础。
3.1 配置数据流的整体架构
SDM(Secure Device Manager)作为Agilex SoC的配置与安全管理核心,负责从非易失性存储介质(如QSPI Flash、SD卡)中读取原始数据,并依据配置映像头(Configuration Image Header, CIH)中的元信息,将数据分发至FPGA配置控制器或HPS的片上RAM(OCRAM)。
关键概念: 配置数据流并非简单的“文件拷贝”,而是经过SDM解析、校验、解压缩(若启用)后的结构化分发过程。.sof(SRAM Object File)和.rbf(Raw Binary File)是FPGA的配置位流格式;SPL(Secondary Program Loader)和u-boot是HPS的引导加载程序二进制。
3.2 FPGA配置数据加载路径(.sof / .rbf)
FPGA配置数据(.sof或.rbf格式)的加载路径相对直接,但涉及多个校验和解压缩步骤:
- 存储读取: SDM从QSPI Flash或SD卡的指定偏移地址读取配置映像块。
- CIH解析: SDM解析配置映像头,获取FPGA位流的长度、校验和、压缩标志及目标分区。
- 校验与解压: 若启用安全启动,SDM执行签名验证;若位流被压缩,SDM在内部解压缩。
- 位流注入: SDM通过内部配置总线(Configuration Bus)将位流数据写入FPGA配置控制器(FPGA Configuration Controller, FCC)。
- 配置完成: FCC完成位流加载后,置位CONF_DONE信号,FPGA进入用户模式。
工程提示: .rbf格式是.sof的原始二进制版本,去除了头部元数据,体积更小,适合在资源受限的存储介质中使用。在生成配置映像时,建议优先使用.rbf格式以节省存储空间。
3.3 HPS第一阶段引导加载程序加载路径(SPL / u-boot)
HPS的引导加载程序加载路径与FPGA配置路径共享SDM的读取和校验阶段,但目标不同:
| 阶段 | 操作 | 目标地址 | 说明 |
|---|---|---|---|
| 1. 读取 | SDM从存储介质读取SPL二进制块 | SDM内部缓冲区 | 基于CIH中的偏移和长度字段 |
| 2. 校验 | 签名验证(若启用安全启动) | SDM内部 | 使用Agilex硬件的SHA-256/RSA引擎 |
| 3. 加载 | SDM通过AXI桥将SPL写入HPS OCRAM | 0xFFE00000(典型起始地址) | OCRAM大小为256KB,SPL必须适配 |
| 4. 释放复位 | SDM释放HPS的复位信号 | HPS CPU核心 | HPS从OCRAM起始地址开始执行 |
| 5. SPL执行 | SPL初始化DDR、时钟,加载u-boot | DDR内存 | SPL从OCRAM运行,完成后跳转至DDR |
关键约束: SPL二进制大小必须严格小于HPS OCRAM容量(256KB)。若SPL超出此限制,必须启用压缩或使用分阶段加载(如SPL仅初始化DDR,再从存储介质加载完整u-boot)。
3.4 配置数据流中的启动顺序控制
SDM通过配置映像头(CIH)中的启动顺序字段控制FPGA与HPS的加载时序。下表列出了三种典型模式:
| 模式 | FPGA配置 | HPS加载 | 适用场景 |
|---|---|---|---|
| FPGA优先 | 先完成 | 等待FPGA配置完成 | HPS依赖FPGA外设(如DDR控制器、PCIe EP) |
| HPS优先 | 等待HPS释放复位 | 先完成加载并执行 | HPS需先初始化系统软件,再加载FPGA |
| 并行 | 与HPS加载同时进行 | 与FPGA配置同时进行 | FPGA与HPS无依赖关系,追求最小启动时间 |
3.5 配置数据流中的常见问题与避坑
- SPL大小超限: 若SPL编译后超过256KB,SDM将拒绝加载。解决方案:启用SPL压缩(CONFIG_SPL_COMPRESS),或使用分阶段加载(SPL仅初始化DDR,再从存储介质加载完整u-boot)。
- FPGA位流与SPL版本不匹配: 确保FPGA硬件设计(.sof)与HPS软件(SPL/u-boot)基于同一套HPS组件版本生成,否则可能导致外设初始化失败。
- 存储介质布局错误: 配置映像在Flash中的偏移地址必须与CIH中的描述一致。使用quartus_pfg生成映像时,务必指定正确的--offset参数。
- 安全启动冲突: 若启用安全启动,FPGA位流和SPL必须分别签名,且签名密钥必须匹配SDM中烧录的根密钥。
最佳实践: 在开发阶段,建议使用“FPGA优先”模式,以便HPS启动时FPGA硬件环境已就绪。在量产阶段,若FPGA与HPS无依赖关系,可切换至“并行”模式以缩短总启动时间。