2. DDR4/DDR5/LPDDR5协议核心精要
在Agilex平台上做DDR接口设计,真正决定“能不能跑起来、能跑多快”的,往往不是FPGA侧的逻辑,而是对JEDEC协议中几组核心机制的准确理解。本节把DDR4、DDR5、LPDDR5共通的四个关键点——时序参数、命令与地址总线、Bank Group与突发传输、ODT与ZQ校准——放在一起梳理,帮助你在配置控制器IP和做板级调试时,知道每个参数背后对应的是哪条协议规则。
一、关键时序:tCK、tRCD、tRP、tRAS与tFAW
DDR的时序体系以时钟周期tCK为基本单位。以DDR4-3200为例,数据速率3200 MT/s,I/O时钟为1600 MHz,tCK≈0.625 ns。所有内部操作时间都用tCK的整数倍表示,因此速率越高,同样的物理时间对应的周期数越多,时序窗口越紧。
最核心的四个参数是:tRCD(激活到读/写命令的最小间隔)、tRP(预充电到下一次激活的间隔)、tRAS(激活到预充电的最小保持时间)、tRC(同一Bank两次激活的最小间隔,tRC≈tRAS+tRP)。以DDR4-3200的典型值估算:tRCD≈22.5 ns、tRP≈22.5 ns、tRAS≈35 ns,换算成周期约为36、36、56个tCK。控制器IP中这些值通常以“ns”或“周期数”两种方式填写,必须与颗粒数据手册一致,否则会出现激活过早导致的读写错误。
另一个容易被忽略的是tFAW(Four Activate Window)。它限制在任意滚动窗口内同一Rank最多只能发出4个ACT命令,用于抑制峰值电流。DDR4-3200下tFAW典型约30 ns,相当于48个tCK。当控制器连续访问多个Bank时,tFAW会成为实际带宽的隐形上限,尤其在随机访问密集的场景中。
二、命令与地址总线:CA、CS、CK与ODT的协同
DDR4采用命令/地址复用总线:ACT、READ、WRITE、PRE、REF等命令通过CS_n、RAS_n、CAS_n、WE_n的组合编码,地址则通过A[17:0]分时复用(行地址、列地址、Bank地址)。DDR5改为CA总线差分对,命令与地址在同一组CA[13:0]上以双沿传输,并引入CS_n分Rank寻址。LPDDR5则使用CA[6:0]低速命令总线配合WCK数据时钟,命令与数据时钟解耦,这是移动端降低功耗的关键设计。
对Agilex设计者而言,需要关注的是控制器IP中地址映射(Address Mapping)的配置:Bank、Bank Group、Row、Column如何映射到用户逻辑的地址位。映射顺序直接影响访问局部性——把连续地址映射到同一Row的不同Column,可以最大化Row命中率,减少ACT/PRE开销。
三、Bank Group与突发传输:带宽的两个放大器
DDR4引入Bank Group结构,把8个Bank分成4组,每组2个Bank。同一Bank Group内的Bank共享部分时序约束(如tCCD_L),而不同Bank Group之间可以交错访问(tCCD_S更短)。这意味着:如果控制器能把连续访问分散到不同Bank Group,就能在tCCD_S的节奏下连续发出READ/WRITE,显著提升有效带宽。DDR5进一步把Bank Group扩展到8组,LPDDR5则采用16 Bank架构,交错能力更强。
突发传输(Burst)是另一个关键。DDR4支持BL8和BC4(Burst Chop 4),DDR5支持BL16和BL8,LPDDR5支持BL16/BL32。突发长度决定了单次READ/WRITE命令搬运的数据量。以DDR4-3200 x16颗粒、BL8为例,单次突发传输16bit×8=128bit=16Byte。若控制器能保持Bank Group交错,理论峰值带宽为3200 MT/s×2 Byte=6.4 GB/s(单颗粒),多颗粒并联后可达数十GB/s。
在Agilex的控制器IP中,Burst Length和Bank Interleaving是两个必须与颗粒匹配的参数。如果颗粒只支持BL8,而IP配置为BL16,会出现数据错位;如果Bank Interleaving顺序与地址映射不一致,Row命中率会下降,实测带宽可能只有理论值的60%~70%。
四、ODT与ZQ校准:信号完整性的最后一道防线
ODT(On-Die Termination)是颗粒内部的可切换终端电阻。DDR4的ODT阻值可选RZQ/6(约40Ω)、RZQ/7(约34Ω)等,通过MR1寄存器配置。ODT的作用是吸收传输线反射,尤其在多Rank、多颗粒并联时,必须根据拓扑选择“写ODT”和“读ODT”的阻值。典型配置:单Rank点对点拓扑,写ODT设为RZQ/6;双Rank时,非目标Rank保持ODT开启以吸收反射。
ZQ校准则是补偿PVT(工艺、电压、温度)漂移的机制。颗粒通过ZQ引脚外接240Ω±1%精密电阻,控制器发出ZQCS(短校准,约64个tCK)或ZQCL(长校准,约512个tCK)命令,颗粒内部比较ZQ电阻与输出驱动/ODT电阻,自动调整驱动强度。上电初始化时必须执行ZQCL,之后每隔一定时间(如64ms)执行ZQCS。Agilex控制器IP中通常有“ZQ Calibration Interval”参数,建议按颗粒手册设置,过频会占用命令带宽,过疏则温漂导致眼图恶化。
五、参数配置速查(示例)
| 参数 | DDR4-3200 典型值 | DDR5-4800 典型值 | LPDDR5-6400 典型值 |
|---|---|---|---|
| tCK | 0.625 ns | 0.416 ns | 0.312 ns |
| tRCD | 22.5 ns(36 tCK) | 16.0 ns(38 tCK) | 18.0 ns(58 tCK) |
| tRP | 22.5 ns(36 tCK) | 16.0 ns(38 tCK) | 18.0 ns(58 tCK) |
| tRAS | 35 ns(56 tCK) | 32 ns(77 tCK) | 42 ns(134 tCK) |
| tFAW | 30 ns(48 tCK) | 25 ns(60 tCK) | 40 ns(128 tCK) |
| 突发长度 | BL8 / BC4 | BL16 / BL8 | BL16 / BL32 |
| ODT典型值 | RZQ/6(40Ω) | RZQ/6(40Ω) | RZQ/6(40Ω) |
| ZQ校准周期 | 64 ms(ZQCS) | 64 ms(ZQCS) | 32 ms(ZQCS) |
表中数值为JEDEC标准中的典型参考值,实际设计必须以所选颗粒的Datasheet为准。Agilex的DDR控制器IP在生成时会根据你填写的速率和颗粒型号自动计算部分时序,但tFAW、ODT阻值、ZQ周期等仍需手动确认。把这些参数理解清楚,后续做板级调试时,才能从“眼图差”快速定位到是ODT阻值不对、ZQ校准失效,还是Bank交错配置不合理。