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的引导加载程序二进制。
Agilex SDM 配置数据流整体架构 配置数据流整体架构:SDM 分发路径 非易失存储 QSPI Flash / SD卡 SDM 解析CIH / 校验 / 解压 数据分发决策 FPGA 配置控制器 加载 .sof / .rbf 位流 HPS OCRAM 加载 SPL / u-boot 二进制 说明: • 两条路径在SDM内部并行执行,但可通过CIH中的启动顺序字段控制先后。 • FPGA配置数据通常先于HPS引导加载程序加载,以建立硬件加速环境。 • 若HPS引导加载程序依赖FPGA外设(如DDR控制器),则必须等待FPGA配置完成。

3.2 FPGA配置数据加载路径(.sof / .rbf)

FPGA配置数据(.sof或.rbf格式)的加载路径相对直接,但涉及多个校验和解压缩步骤:

  1. 存储读取: SDM从QSPI Flash或SD卡的指定偏移地址读取配置映像块。
  2. CIH解析: SDM解析配置映像头,获取FPGA位流的长度、校验和、压缩标志及目标分区。
  3. 校验与解压: 若启用安全启动,SDM执行签名验证;若位流被压缩,SDM在内部解压缩。
  4. 位流注入: SDM通过内部配置总线(Configuration Bus)将位流数据写入FPGA配置控制器(FPGA Configuration Controller, FCC)。
  5. 配置完成: 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无依赖关系,追求最小启动时间
三种启动顺序模式的时序对比 三种启动顺序模式的时序对比 FPGA优先 FPGA配置 HPS加载 HPS优先 HPS加载 FPGA配置 并行 FPGA配置 HPS加载 启动顺序控制配置方法: 1. 在Intel Quartus Prime中,通过“Device and Pin Options” → “Configuration” → “HPS/FPGA Boot Order”设置。 2. 在BSP生成阶段,通过bsp-editor或命令行参数设置boot_sequence字段。 3. 在配置映像生成工具(如quartus_pfg)中,通过--boot_sequence选项指定。

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无依赖关系,可切换至“并行”模式以缩短总启动时间。