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将无法正常工作。
五、从训练到可用:一个可参考的检查顺序
实际调试时,可按以下顺序确认PHY是否就绪。首先读取DLL锁定状态,若未锁定,检查参考时钟频率和PHY时钟配置;其次确认IO FIFO无溢出/下溢标志,若有则检查控制器与PHY时钟比是否正确;然后读取写均衡和读训练的结果码,判断延迟码是否落在合理范围内(例如DQS延迟码不应接近边界值);最后用示波器或眼图扫描观察DQ/DQS的实际波形,确认采样点位于眼中心。若训练失败,常见原因包括:DQS差分对未按专用引脚分配、VREF未正确连接、ODT配置与DRAM端不匹配、PCB走线长度差异过大超出PHY延迟调节范围。
总结来看,DDR PHY是连接DDRC与DRAM颗粒的桥梁,其内部由数字前端、IO FIFO、训练逻辑、DLL和模拟IO层组成。DQS/DQ训练解决源同步接口的相位对齐问题,DLL提供精细相位并补偿PVT,IO FIFO完成跨时钟域缓冲。PHY与IO Bank的绑定关系决定了引脚分配的约束,设计时必须遵循专用字节通道映射。理解这些结构,才能在时序约束、板级调试和故障定位中做出正确判断。