4. DDR控制器与PHY配置

在 Kria 平台上做 DDR 存储接口设计,真正决定“能不能跑起来、跑得稳不稳”的,往往不是 PCB 走线本身,而是 DDR 控制器 IP 与 PHY 的配置是否与器件、颗粒、板级拓扑三者对齐。本节围绕 AMD/Xilinx 的 DDR 控制器 IP(DDR4/DDR3/LPDDR4 SDRAM Controller)、PHY 接口结构、关键时序参数,以及 Kria 器件专用约束展开,重点讲清楚“配置项从哪里来、填什么、为什么这样填”。

一、控制器 IP 与 PHY 的分工

AMD 的 DDR 存储接口方案由两部分组成:DDR 存储控制器(Memory Controller)和 PHY(Physical Layer)。控制器位于用户逻辑与 PHY 之间,负责把 AXI 事务翻译成 DDR 命令(ACT、RD、WR、PRE、REF 等),并完成地址映射、Bank/Row/Column 调度、读写合并、刷新管理与 ECC 处理。PHY 则负责把控制器输出的数字命令转换为满足 DDR 电气与时序要求的信号,包括 DQ/DQS 的训练、延迟对齐、写均衡(Write Leveling)、读门控(Read Gate)等。

在 Vivado 中,这一组合通常以 DDR4 SDRAM (MIG) 或 LPDDR4 SDRAM (MIG) IP 的形式出现。IP 内部已经封装了控制器与 PHY,用户通过图形化界面或 XDC/Tcl 参数完成配置。理解二者边界很重要:控制器侧参数(如 AXI 位宽、地址映射、ECC)影响带宽与容量;PHY 侧参数(如数据速率、颗粒拓扑、引脚分配、训练模式)影响信号完整性与能否校准成功。

Kria DDR 存储接口:控制器 IP 与 PHY 配置关系 用户逻辑 / PS AXI4 事务 突发长度 / ID DDR 存储控制器 地址映射 / Bank 调度 读写合并 / 刷新 / ECC 命令队列与仲裁 DDR PHY DQ/DQS 训练 写均衡 / 读门控 延迟对齐 / 眼图优化 DDR4 颗粒 x16 / x8 关键配置项来源 器件与颗粒 速度等级 -1/-2/-3 容量 / 位宽 / Bank 数 tCK / tRCD / tRP / tRAS 板级拓扑 单 rank / 双 rank Fly-by / T 型分支 ODT / 驱动强度 PHY 训练 数据速率 (Mbps) 参考时钟频率 训练模式 / 眼图扫描 Kria 专用约束 引脚分配 / IO 标准 SSTL15 / POD12 VREF / 内部端接 时序参数与校准结果判读 控制器时序 tRCD / tRP / tRAS / tRC tFAW / tRRD / tWTR / tWR PHY 校准 读/写 DQS 延迟窗口 Write Leveling 偏移 结果判读 校准通过 / 眼图张开 误码率 / 训练余量

二、控制器侧配置:从 AXI 到 DDR 命令

控制器配置的第一步是确定 AXI 接口参数。Kria 上常见的做法是使用 512 位或 256 位 AXI 数据位宽,配合 4 KB 或 8 KB 的地址边界。位宽越大,单次突发可搬运的数据越多,但也会增加逻辑资源与布线压力。地址映射方式(如 Bank-Row-Column 交错)直接影响行命中率,进而影响实际带宽。对于视频、AI 推理等连续访问场景,建议采用行优先映射,减少 ACT/PRE 切换。

第二步是 ECC 与刷新。若使用带 ECC 的 DDR4 颗粒或需要可靠性保障,可在 IP 中使能 ECC,此时数据位宽会额外增加校验位,容量利用率下降约 6.25%。刷新模式可选自动刷新(AR)或自刷新(SR),Kria 在低功耗场景下常配置温度补偿刷新(TCSR),根据温度动态调整刷新率。

第三步是 时序参数填写。这些参数必须来自颗粒数据手册,而不是凭经验估计。以 DDR4-2400 为例,tCK = 0.833 ns,tRCD = 13.75 ns,tRP = 13.75 ns,tRAS = 32 ns。IP 界面通常以“周期数”为单位,需要把 ns 值除以 tCK 并向上取整。例如 tRCD = 13.75 / 0.833 ≈ 16.5,取 17 个周期。填错一个参数,轻则带宽下降,重则校准失败。

三、PHY 接口与训练机制

PHY 是 DDR 接口中最“敏感”的部分。它需要在每次上电或复位后执行训练序列,确定 DQ 与 DQS 之间的最佳采样点。训练内容包括:写均衡(Write Leveling),用于补偿 CK 与 DQS 之间的飞行时间差;读门控(Read Gate),用于确定读数据有效窗口;读/写延迟校准,用于对齐 DQS 与 DQ 的相位。

在 Kria 器件上,PHY 的参考时钟通常由 PS 侧 PLL 或外部晶振提供,频率需与数据速率匹配。例如 DDR4-2400 的参考时钟为 300 MHz(8:1 比例)或 200 MHz(12:1 比例)。训练模式可选择“完整训练”或“快速训练”,前者耗时较长但余量更大,后者适合快速启动场景。训练结果会写入 PHY 寄存器,可通过 Vivado 的 ILA 或 MIG 报告查看。

四、Kria 器件专用配置约束

Kria 系列(如 K26、K24)在 DDR 接口上有一些专用约束,不能照搬普通 FPGA 的配置。首先是 引脚分配:DDR 引脚必须分配到支持高性能 IO 的 Bank,且同一字节通道的 DQ/DQS 必须位于同一 Bank 内。其次是 IO 标准:DDR4 使用 POD12,DDR3 使用 SSTL15,LPDDR4 使用 POD12 或 SSTL12,需与颗粒电压匹配。第三是 VREF 与端接:Kria 支持内部 VREF 生成,但需在 XDC 中正确设置 set_property DCI_CASCADE 和 set_property INTERNAL_VREF。

此外,Kria 的 DDR 接口通常与 PS 侧共享部分资源,配置时需注意 PS-PL 接口一致性。若使用 PS 侧的 DDR 控制器,PL 侧不能再占用同一组引脚。若使用 PL 侧 MIG,则需在 Block Design 中正确连接时钟与复位,并确保 AXI 互联的位宽与频率匹配。

配置检查要点:颗粒数据手册中的时序参数是否已换算为周期数并向上取整;PHY 参考时钟频率是否与数据速率成整数比;DDR 引脚是否全部落在支持高性能 IO 的 Bank;IO 标准与颗粒电压是否一致;训练模式是否与启动时间要求匹配。

五、一个可参考的配置示例

假设在 Kria K26 上使用一颗 DDR4-2400、16 位位宽、单 rank 颗粒,目标数据速率 2400 Mbps。控制器侧配置:AXI 位宽 512 位,地址映射为 Bank-Row-Column,使能 ECC。时序参数:tCK = 0.833 ns,tRCD = 17,tRP = 17,tRAS = 39,tRC = 56,tFAW = 28,tRRD = 5。PHY 侧:参考时钟 300 MHz,训练模式为完整训练,DQ/DQS 引脚分配到 Bank 44/45。XDC 中设置 set_property INTERNAL_VREF 0.84 [get_iobanks 44],并确认 DCI 级联已使能。

配置完成后,通过 MIG 的校准状态寄存器读取训练结果。若校准通过,读窗口应大于 0.3 UI,写均衡偏移在 ±0.25 UI 以内。若校准失败,优先检查参考时钟是否稳定、引脚分配是否越界、时序参数是否与颗粒手册一致。实际工程中,建议先用 MIG 的示例设计跑通,再逐步替换为自定义逻辑,这样可以把“配置问题”与“逻辑问题”分开定位。

DDR 配置中的时序参数、引脚分配和 IO 标准必须与具体颗粒和板级设计严格对应。本文中的参数为教学示例,实际项目请以颗粒数据手册、Kria 板级原理图和 AMD 官方 MIG 文档为准。