4. DDR PHY与IO资源

在Zynq的DDR子系统里,DDR控制器(DDRC)负责协议调度、命令排序与刷新管理,而真正把数字命令变成引脚上可被DRAM芯片识别的模拟波形,靠的是DDR PHY。理解PHY的内部结构,是后续做时序约束、板级调试和眼图评估的基础。本节围绕PHY的组成、DQS/DQ训练机制、延迟锁定环(DLL)、IO FIFO,以及PHY与IO Bank的物理对应关系展开。

一、DDR PHY的整体结构

Zynq-7000的DDR PHY位于DDRC与IO引脚之间,可粗略分为三层:数字前端、训练与控制逻辑、模拟IO层。数字前端接收来自DDRC的写数据、写掩码、地址命令,并按PHY时钟节拍送入内部FIFO;训练与控制逻辑包含写均衡、读门控、DQS-DQ对齐、DLL控制等状态机;模拟IO层则由IO缓冲器、延迟单元、DQS差分接收器、片上终端(ODT)和参考电压生成电路组成。

PHY内部存在两个关键时钟域:控制器时钟域(通常为DDR时钟的1/4或1/2)和PHY高速时钟域(DDR数据速率的一半,即DDR时钟)。写路径上,数据从控制器域经IO FIFO跨到PHY域,再由4:1串行化器(对DDR3常见)转成双沿数据;读路径上,DQS经延迟链采样DQ,再经1:4解串回到控制器域。这个跨域结构决定了PHY必须依赖FIFO和训练来吸收相位不确定性。

二、DQS/DQ时序训练

DDR3/DDR4采用源同步接口:写方向由控制器发出DQS,读方向由DRAM发出DQS,DQ在DQS双沿附近有效。由于PCB走线长度差异、器件工艺偏差和温度漂移,DQS与DQ之间、DQS与内部采样时钟之间都会存在偏移。PHY通过训练把这些偏移补偿掉,核心是三类训练:

  • 写均衡(Write Leveling):解决DQS与CK之间的飞行时间差。控制器发送DQS,DRAM在CK边沿采样DQS并回读结果,PHY据此调整每个字节通道的DQS延迟,使DQS边沿对齐到CK边沿。
  • 写训练(Write Training / DQ-DQS对齐):在写方向调整DQ相对DQS的延迟,使DRAM端DQ的建立/保持窗口居中。常用方法是由DRAM写入特定图案再读回比对,或使用PHY内部的可调延迟线扫描。
  • 读门控与读训练(Read Gate / Read Leveling):读方向DQS由DRAM发出,PHY需要先确定DQS何时到达,再在DQS有效窗口内采样DQ。读门控确定DQS前导码的到达时刻,读训练则调整内部采样点,使DQ眼中心对准采样时钟。

训练结果最终以延迟码的形式写入PHY寄存器,例如每字节通道的DQS延迟、DQ延迟、读门控位置等。这些码值在每次上电初始化时由PHY训练状态机自动生成,也可通过寄存器手动覆盖用于调试。

三、延迟锁定环(DLL)与IO FIFO

DLL的作用是产生与参考时钟相位锁定、但相位可精细调节的内部时钟。在PHY中,DLL通常为每个字节通道提供多个相位输出(如0°、90°、180°、270°),用于DQS采样、DQ输出和读门控。DLL的锁定状态可通过状态寄存器读取,若DLL未锁定,PHY不会进入正常工作模式。DLL还负责补偿PVT(工艺、电压、温度)变化带来的延迟漂移,使训练得到的延迟码在温度变化时仍保持有效。

IO FIFO位于控制器时钟域与PHY时钟域之间,承担两个作用:一是跨时钟域缓冲,把控制器域的数据安全地搬到PHY域;二是相位对齐,通过FIFO的读指针调整,把数据对齐到PHY内部时钟的合适相位。写路径上,FIFO的写指针由控制器时钟驱动,读指针由PHY时钟驱动;读路径上则相反。FIFO的深度通常为4~8级,足以吸收两个时钟域之间的相位差和抖动。若FIFO指针出现溢出或下溢,PHY会报错,通常意味着训练未完成或时钟配置错误。

四、PHY与IO Bank的对应关系

在Zynq-7000中,DDR PHY并非独立于IO Bank之外,而是绑定到特定的IO Bank。以常见的Zynq-7020为例,DDR3接口通常使用Bank 34和Bank 35,这两个Bank的IO引脚被PHY专用,不能作为普通GPIO使用。每个Bank内的字节通道(Byte Group)包含4位DQ、1位DQS(差分对)、1位DM/DBI,以及相应的VREF和ODT控制。PHY的字节通道与Bank内的物理引脚一一对应,因此引脚分配必须遵循PHY的字节映射规则,不能随意跨字节交换DQ。

地址/命令(ADDR/CMD)和时钟(CK)通常分布在同一个或相邻Bank,由PHY的公共通道驱动。VREF引脚需要外部分压或由PHY内部生成,具体取决于器件和配置。设计时必须参考UG585和对应器件的引脚分配表,确认哪些Bank支持DDR PHY、哪些引脚是专用DQS对。若把DQS分配到非专用引脚,PHY将无法正常工作。

Zynq DDR PHY 结构与 IO Bank 对应关系 DDR 控制器 DDRC 命令/调度/刷新 DDR PHY 数字前端 写数据/掩码/命令 IO FIFO 跨时钟域缓冲 相位对齐 训练逻辑 写均衡/读门控 DQ-DQS 对齐 DLL 多相位时钟 PVT 补偿 串行/解串 4:1 / 1:4 双沿数据 模拟 IO 层 IOB/ODT/VREF DQS 差分接收 写/命令 DQ/DQS IO Bank 34 Byte0: DQ[3:0] DQS0± / DM0 Byte1: DQ[7:4] DQS1± / DM1 专用 DDR 引脚 IO Bank 35 ADDR/CMD CK± / CKE ODT / CS / RAS CAS / WE / BA 公共通道 DDR3 颗粒 DQ / DQS / ADDR CK / CMD 训练结果寄存器(示例字段) • 每字节通道 DQS 延迟码(Write Leveling 结果) • DQ 相对 DQS 的延迟码(Write Training 结果) • 读门控位置与读采样相位(Read Gate / Read Leveling 结果) • DLL 锁定状态、FIFO 指针状态(用于判断 PHY 是否就绪) 图例 控制器域 跨时钟域 时钟/延迟

五、从训练到可用:一个可参考的检查顺序

实际调试时,可按以下顺序确认PHY是否就绪。首先读取DLL锁定状态,若未锁定,检查参考时钟频率和PHY时钟配置;其次确认IO FIFO无溢出/下溢标志,若有则检查控制器与PHY时钟比是否正确;然后读取写均衡和读训练的结果码,判断延迟码是否落在合理范围内(例如DQS延迟码不应接近边界值);最后用示波器或眼图扫描观察DQ/DQS的实际波形,确认采样点位于眼中心。若训练失败,常见原因包括:DQS差分对未按专用引脚分配、VREF未正确连接、ODT配置与DRAM端不匹配、PCB走线长度差异过大超出PHY延迟调节范围。

训练码值会随温度变化而漂移,PHY的DLL和延迟线会持续补偿。若系统在高温下出现偶发读错误,应优先检查读训练结果是否接近边界,必要时重新触发训练或调整延迟码。

总结来看,DDR PHY是连接DDRC与DRAM颗粒的桥梁,其内部由数字前端、IO FIFO、训练逻辑、DLL和模拟IO层组成。DQS/DQ训练解决源同步接口的相位对齐问题,DLL提供精细相位并补偿PVT,IO FIFO完成跨时钟域缓冲。PHY与IO Bank的绑定关系决定了引脚分配的约束,设计时必须遵循专用字节通道映射。理解这些结构,才能在时序约束、板级调试和故障定位中做出正确判断。