2. DDR内存基础与PolarFire适配
在把DDR存储器接到PolarFire器件之前,需要先建立三个层面的认识:协议层(DDR3/DDR4/LPDDR4各自怎么传数据)、时序层(控制器和颗粒之间必须满足哪些时间约束)、物理层(PolarFire的I/O Bank、DDR专用引脚和时钟资源如何支撑这些约束)。这三层是递进关系——协议决定信号种类,时序决定这些信号之间的相对关系,物理资源决定这些关系能否在硅片上被满足。
一、三种协议的共同骨架与关键差异
DDR3、DDR4、LPDDR4都采用源同步(source-synchronous)接口:数据信号DQ与数据选通DQS成对传输,DQS由发送端随数据一起发出,接收端用DQS的边沿去采样DQ。这是它们区别于普通同步总线的根本点,也是为什么PCB上DQ与DQS必须严格等长、而地址/命令组可以按另一组规则等长的原因。
三者的差异集中在几个维度上。DDR3的DQS为单端双向信号,写操作时DQS与DQ中心对齐(center-aligned),读操作时DQS边沿对齐DQ(edge-aligned),控制器侧需要额外延迟来对齐。DDR4把DQS改为差分对(DQS_t/DQS_c),并引入数据总线反转(DBI)和CRC校验,写DQS与DQ为边沿对齐,读DQS与DQ为中心对齐,正好与DDR3相反。LPDDR4同样使用差分DQS,但采用低摆幅(约0.3V)的LVSTL电平,且通道结构为双通道(channel A/B)各16位,命令/地址总线在通道间共享,功耗和引脚数与DDR4有本质区别。
另一个关键差异是命令/地址的时序关系。DDR3的地址/命令在CK上升沿采样,一个CK周期传一位;DDR4改为在CK的上升沿和下降沿都采样(即2T模式下的地址),并支持CS_n、CKE、ODT等控制信号的独立时序。LPDDR4则把命令/地址压缩到较少的引脚上,用CA[5:0]在CK双边沿传输,命令解码更复杂。
二、必须掌握的时序参数
无论哪种协议,控制器配置时反复出现的时序参数可以归为四类。第一类是时序基准参数:tCK(时钟周期)、tRCD(行激活到列命令)、tRP(预充电时间)、tRAS(行激活到预充电最小时间)、tRC(行周期)。第二类是数据相关参数:tDQSCK(DQS相对CK的偏移)、tDQSQ(DQS与DQ之间的偏斜)、tQH(数据保持时间)、tDQSS(写DQS相对CK的偏移)。第三类是刷新与模式寄存器参数:tRFC(刷新周期)、tMRD(模式寄存器设置时间)、tMOD(模式寄存器更新到有效命令的时间)。第四类是训练相关参数:读/写电平、读/写延迟、VREFDQ等。
这些参数不是孤立数字,而是相互约束的。例如tRCD和tRP共同决定了一个bank的随机访问延迟;tDQSS的容差直接决定了写均衡(write leveling)需要覆盖的延迟范围。在PolarFire上配置DDR控制器时,这些参数来自颗粒数据手册,但最终能否满足,取决于I/O Bank的物理延迟和PCB走线延迟之和是否落在训练窗口内。
三、PolarFire的I/O Bank与DDR专用资源
PolarFire器件的I/O按Bank组织,每个Bank有独立的供电电压(VDDI)和参考电压。DDR接口必须放在支持对应电平标准的Bank中:DDR3使用SSTL-15,DDR4使用POD12,LPDDR4使用LVSTL。这意味着不能随意把DDR信号分配到任意Bank,必须查器件手册确认哪些Bank支持目标标准。
PolarFire为DDR提供了专用硬件资源。首先是DDR专用的I/O单元(DDRIO),每个DDRIO包含可编程延迟线、相位检测和DQS门控逻辑,用于实现读门控(read gate)和写均衡。其次是DDR时钟资源,包括专用的DDR时钟输出对和内部PLL,用于生成CK/CK_n以及控制器所需的相位。第三是硬核DDR控制器(在部分PolarFire器件中为硬核,部分为软核),它负责命令调度、刷新管理和训练序列。
一个容易被忽略的点是:DDR专用引脚通常集中在特定Bank的特定位置,且DQS对与DQ组有固定的分组关系。例如一个16位DDR3接口通常占用两个字节组(byte group),每组8位DQ加一对DQS。PolarFire的引脚规划工具会强制这种分组,如果PCB布局时把DQ和DQS分到不同Bank,接口将无法工作。
四、从参数到引脚:一个16位DDR3接口的规划示例
假设要在PolarFire上实现一个16位、800Mbps的DDR3接口。第一步是确认Bank支持SSTL-15,并找出该Bank中可用的DDR专用引脚。第二步是按字节组划分:16位数据需要两个字节组,每组包含DQ[7:0]和一对DQS(DQS_P/DQS_N)。第三步是分配地址/命令组,包括A[14:0]、BA[2:0]、CK/CK_n、CKE、CS_n、ODT、RAS_n、CAS_n、WE_n。这些信号不需要与DQ等长,但需要与CK保持可控的飞行时间差。
第四步是确定时序参数。以一颗典型DDR3-1600颗粒为例,tCK=1.25ns,tRCD=13.75ns(约11个时钟),tRP=13.75ns,tRAS=35ns,tRC=48.75ns。控制器配置时这些值以时钟周期数写入寄存器。第五步是训练。PolarFire的DDRIO支持写均衡:控制器先发送一串DQS脉冲,颗粒通过DQ反馈CK与DQS的相位关系,控制器据此调整每个字节组的DQS延迟,使写DQS落在DQ窗口中心。读训练则通过扫描DQS门控延迟,找到DQ有效窗口的中心点。
判断训练是否成功的依据是:读回的PRBS图案与写入一致,且在不同PVT条件下眼图余量大于设定阈值。如果训练失败,常见原因是DQ/DQS走线不等长、Bank供电噪声过大或VREFDQ设置偏离中心。
五、LPDDR4在PolarFire上的特殊注意点
LPDDR4的双通道结构意味着一个16位接口实际上是两个独立的8位通道,每个通道有自己的DQS和DQ组。PolarFire的DDR控制器需要按通道分别配置时序和训练。此外,LPDDR4的CA总线在通道间共享,但每个通道的CS和CKE独立,这要求引脚规划时把两个通道的CS/CKE分配到同一Bank的不同引脚上,同时保证CA走线到两个通道的延迟差在允许范围内。
六、小结与检查清单
把DDR接口做对,本质上是在三个层面同时满足约束:协议层选对信号标准,时序层把颗粒参数正确写入控制器,物理层把信号分配到正确的Bank和引脚组。任何一层出错,训练都会失败。建议在原理图阶段就完成以下检查:目标Bank是否支持所选电平标准;DQ与DQS是否在同一字节组内;CK/CK_n是否使用了专用时钟引脚;地址/命令组是否与DQ组分开规划;训练参数是否已从颗粒手册中提取并核对。