3. Agilex Hard Memory Controller架构解析

Agilex 器件的 Hard Memory Controller(HMC)是固化在 I/O 列中的硬核控制器,它把协议层、调度层和 PHY 接口层的大部分逻辑从可编程逻辑中剥离出来,只把用户侧的命令、数据与状态信号暴露给 FPGA 架构。理解 HMC 的关键,是把它看成一条从用户接口到 DDR 颗粒的完整数据通路,以及在这条通路上并行运行的调度、重排序与可靠性机制。

一、控制器数据通路:从 AXI 到 DDR 引脚

HMC 的用户侧接口通常以 AXI4 或 Avalon-MM 形式呈现,用户逻辑发出的读写请求先进入命令队列。命令经过地址映射与 Bank/Row/Column 解码后,被送入调度器;写数据则通过写数据缓冲(Write Data Buffer)暂存,读数据在返回时进入读数据缓冲(Read Data Buffer),再按 ID 与顺序回送给用户。整条通路可以概括为“命令路径”和“数据路径”两条并行链路:命令路径决定何时发什么命令,数据路径决定数据在什么时刻被搬运。

在 Agilex 中,HMC 与 PHY 之间通过 DFI(DDR PHY Interface)接口连接。DFI 把控制器侧的命令、地址、写数据以及 PHY 侧的读数据、训练状态等信号标准化,使控制器不必关心 PHY 内部的具体时序。PHY 负责把 DFI 信号转换为 DDR 的 CK、CA、DQ、DQS 等物理信号,并完成写均衡、读门控训练等校准工作。因此,从用户视角看,一次读操作的实际延迟由“命令排队 + 调度等待 + tRCD + CL + 返回路径”共同构成,而不是一个固定值。

二、调度器与重排序:把效率从时序约束中挤出来

DDR 的带宽利用率高度依赖命令顺序。HMC 的调度器在多个待处理请求之间做仲裁,核心目标是减少 Row 激活/预充电次数、避免总线方向频繁切换、并兼顾实时性。常见的调度策略包括:优先服务同一 Bank 同一 Row 的命中请求(Row Hit),把不同 Bank 的请求交错发出以隐藏 tRCD 和 tRP,以及在读写混合时按批次切换方向以减少 tWTR/tRTW 开销。

重排序(Reordering)是调度器的伴生机制。用户发出的请求顺序未必是最优执行顺序,控制器会在不破坏同一地址依赖关系的前提下,把请求重新排列。例如,先到的写请求可能被推迟,让后续的读请求先执行,从而减少读延迟;同一 Bank 的多个请求会被合并或按 Row 命中优先处理。需要强调的是,重排序只改变“执行顺序”,不改变“数据一致性”,对同一地址的读写仍保持程序顺序语义。

在评估控制器性能时,不要只看理论峰值带宽。实际有效带宽 = 峰值带宽 × 命令效率 × 数据总线效率。调度器与重排序主要影响前两项,PHY 训练质量影响第三项。

三、ECC 与可靠性特性

Agilex HMC 支持内联 ECC(Inline ECC),可在不额外占用用户数据带宽的前提下,对 DDR 数据提供单比特纠错、双比特检错(SECDED)能力。ECC 校验位通常存放在同一颗粒的保留区域或独立区域,由控制器在写数据时计算、在读数据时校验。对于单比特错误,控制器自动纠正并可选上报;对于双比特错误,则产生不可纠正错误标志,供系统做告警或降级处理。

除 ECC 外,HMC 还提供多项可靠性机制:地址/命令奇偶校验用于检测命令通路上的瞬态错误;写数据掩码与 CRC 可用于校验写数据完整性;温度与刷新管理可根据 DRAM 温度调整刷新率,降低高温下的数据保持风险。这些机制共同构成从命令到数据的端到端保护链。

四、与 FPGA 架构的接口关系

HMC 位于 I/O 列,与 FPGA 内核之间通过片上网络或专用总线连接。用户逻辑通过 AXI/Avalon 接口访问 HMC,HMC 再通过 DFI 访问 PHY。这个分层结构意味着:用户不需要直接处理 DDR 时序参数,但需要理解接口的位宽、频率比、突发长度和 Outstanding 能力,才能正确配置控制器并评估吞吐。

Agilex Hard Memory Controller 数据通路与调度结构 FPGA 内核 用户逻辑 / AXI Master 读写请求 + 数据 Outstanding 管理 Hard Memory Controller (HMC) 命令队列 地址解码 / Bank-Row-Col 依赖检查 调度器 + 重排序 Row Hit 优先 读写方向批处理 写数据缓冲 Write Data Buffer ECC 编码 读数据缓冲 Read Data Buffer ECC 校验/纠错 可靠性机制 Inline ECC (SECDED) · 命令奇偶校验 · 写 CRC · 温度自适应刷新 DFI 接口 命令/地址/写数据 → PHY | 读数据/训练状态 ← PHY DDR PHY 写均衡 / 读门控 CK / CA / DQ / DQS 训练与校准 DDR4 / DDR5 颗粒 命令 写数据 命令/地址 写数据 读数据 读数据返回 图例: 命令/地址路径 写数据路径 读数据路径 调度/重排序 可靠性机制 说明:命令路径与数据路径并行;调度器决定命令发射顺序,重排序在不破坏同地址依赖的前提下优化执行序列。

五、配置与观察要点

在实际工程中,配置 HMC 时需要重点关注几个参数:接口位宽与频率比决定了用户侧数据吞吐的上限;命令队列深度与 Outstanding 能力影响高延迟下的带宽保持;调度策略中的读写切换阈值会影响混合负载下的效率;ECC 使能后需要确认校验区地址范围与用户数据区不重叠。上板后,可通过控制器提供的性能计数器观察命令队列占用率、Row Hit 比例、读写切换次数和 ECC 纠错事件计数,用这些数据判断瓶颈在调度侧还是 PHY 侧。

例如,若 Row Hit 比例长期偏低而命令队列经常满,说明访问模式过于随机或 Bank 交错不足,可考虑调整地址映射或上层访问顺序;若 ECC 单比特纠错计数持续增长,则需检查颗粒温度、刷新配置和信号完整性,而不是简单归因于控制器逻辑。理解 HMC 的分层结构,才能把问题定位到正确的层级。