4. DDR接口时钟与复位设计

DDR接口能否稳定工作在目标速率,往往不取决于控制器逻辑本身,而取决于时钟与复位这两条“看不见的骨架”。PolarFire器件把时钟生成、分频、相位调整和复位释放集中到CCC(Clock Conditioning Circuit,时钟调理电路)中,DDR子系统再通过专用时钟网络把参考时钟、控制器时钟和PHY时钟分发到各触发器与I/O单元。本节围绕PLL配置、时钟树规划、复位同步策略以及PolarFire CCC对DDR时钟的具体要求展开,目标是让读者能够独立完成一次可综合、可约束、可验证的DDR时钟复位设计。

一、PLL配置:从参考时钟到DDR工作频率

PolarFire的CCC内部包含PLL和延迟锁相环(DLL)资源,DDR接口通常使用PLL产生高频时钟。配置PLL时,核心参数是输入参考频率 Fref、反馈分频比 M、输出分频比 N 和VCO工作范围。输出频率关系为:

Fvco = Fref × M / (N1)
Fout = Fvco / N2

以DDR4-1600为例,数据速率1600 Mbps,对应I/O时钟800 MHz,控制器用户时钟通常为400 MHz(1:2模式)或200 MHz(1:4模式)。假设参考时钟为100 MHz,若希望VCO工作在1600 MHz附近,可取M=16、N1=1,得到Fvco=1600 MHz;再取N2=2得到800 MHz的PHY时钟,取N2=4得到400 MHz的控制器时钟。实际配置时必须核对器件手册中VCO的允许范围,例如PolarFire的VCO通常要求在1600~3200 MHz之间,若计算值偏低,应提高M或降低N1,而不是强行让VCO工作在边界外。

PLL配置还需要关注相位关系。DDR PHY内部通常需要0°和90°(或0°和180°)两相时钟用于数据采样与发送。PolarFire CCC支持多路输出并可为每路设置相位偏移,但相位偏移的精度受VCO周期限制。例如VCO=1600 MHz时,一个VCO周期为625 ps,若需要90°相位(即200 ps),实际可实现的步进是625 ps的整数分频,因此更常见的做法是让PHY内部通过DLL或专用相位混合器完成精细相位调整,而PLL只负责提供同源、低抖动的多路时钟。

配置PLL时优先保证VCO落在推荐范围中段,而不是贴着上下限。VCO频率越高,相位噪声通常越差;VCO频率越低,可实现的相位步进越粗。中段取值往往在抖动与相位分辨率之间取得较好平衡。

二、时钟树规划:从CCC到DDR引脚

PolarFire的时钟网络分为全局时钟、区域时钟和I/O专用时钟。DDR接口的时钟树规划要解决三个问题:同源、等长、低偏斜。同源是指参考时钟、控制器时钟和PHY时钟必须来自同一个PLL或同一参考输入,避免异步时钟域之间出现不可控的相位漂移;等长是指在PCB和FPGA内部走线中,时钟到各DDR器件的路径延迟尽量一致;低偏斜是指同一组DDR信号(如DQ与DQS)之间的时钟偏斜要控制在PHY训练窗口之内。

在FPGA内部,DDR PHY的时钟通常走专用I/O时钟网络,而不是普通全局时钟。原因是专用I/O时钟网络到I/O单元的延迟更短、偏斜更小,且支持源同步接口所需的时钟-数据对齐。控制器侧的用户时钟可以走全局时钟网络,但必须在时序约束中声明与PHY时钟的相位关系。一个常见的规划原则是:参考时钟从专用时钟输入引脚进入,经CCC产生PHY时钟和控制器时钟;PHY时钟直接驱动DDR I/O寄存器,控制器时钟驱动用户逻辑;两者之间通过异步FIFO或同步握手跨域,而不是让用户逻辑直接使用PHY时钟。

PolarFire DDR时钟树与复位同步结构 参考时钟输入 100 MHz 差分 CCC / PLL M=16, N1=1, VCO=1600 MHz N2=2 → 800 MHz N2=4 → 400 MHz PHY时钟 800 MHz 专用I/O时钟网络 控制器时钟 400 MHz 全局时钟网络 DDR PHY DQS/DQ 采样 DDR4 器件 1600 Mbps 异步复位输入 低有效 / 按键或外部 复位同步器 两级触发器 + 复位桥 同步到控制器时钟域 控制器复位释放 同步于400 MHz 跨时钟域处理 控制器时钟域(400 MHz)与PHY时钟域(800 MHz)之间 使用异步FIFO或同步握手,禁止直接跨域采样

三、复位同步策略:异步置位、同步释放

DDR接口的复位设计有一个基本原则:异步置位、同步释放。异步置位保证复位信号到来时立即生效,不受时钟是否存在的影响;同步释放保证复位撤销时与时钟边沿对齐,避免触发器进入亚稳态。PolarFire的DDR PHY通常提供复位输入端口,但控制器侧的用户逻辑需要自行实现复位同步器。

一个典型的复位同步器由两级触发器串联构成,第一级接收异步复位信号,第二级输出同步后的复位释放信号。两级触发器使用同一个控制器时钟,复位信号低有效时直接拉低两级触发器,复位撤销时经过两个时钟沿后同步释放。对于400 MHz控制器时钟,两个时钟周期为5 ns,这意味着复位释放会比复位撤销晚约5 ns,这个延迟是正常且必要的。

更完整的复位策略还需要区分“硬复位”和“软复位”。硬复位用于上电初始化,会复位PLL、PHY和控制器全部逻辑;软复位只复位控制器数据通路,保留PLL和PHY的锁定状态,用于运行中恢复。PolarFire CCC提供锁定信号(LOCK),控制器应在LOCK有效后再释放PHY复位,否则PLL未稳定时PHY可能进入错误状态。推荐的释放顺序是:参考时钟稳定 → PLL锁定 → PHY复位释放 → 控制器复位释放 → 用户逻辑复位释放。每一级释放都应经过同步处理。

不要把复位释放直接接到按键或外部引脚上。外部复位信号与内部时钟异步,直接释放会导致不同触发器在不同时钟沿退出复位,轻则状态机跑飞,重则DDR训练失败。必须经过至少两级同步触发器。

四、PolarFire CCC对DDR时钟的具体要求

PolarFire CCC在DDR应用中需要满足以下要求。第一,参考时钟必须从专用时钟输入引脚进入,不能使用普通I/O引脚,否则抖动和偏斜会显著恶化。第二,PLL输出到DDR PHY的时钟应使用专用I/O时钟资源,并在约束文件中声明为create_clock或create_generated_clock,让时序分析工具正确计算建立/保持关系。第三,DDR时钟的抖动预算要留有余量,通常要求PLL输出抖动在目标数据速率的1%以内。以1600 Mbps为例,单位间隔(UI)为625 ps,1%即6.25 ps,实际设计中应争取更低的RMS抖动。

第四,CCC的复位和锁定状态需要接入系统复位逻辑。PolarFire CCC提供LOCK输出,该信号应作为PHY和控制器复位释放的条件之一。第五,若使用多个CCC,应确保DDR相关时钟来自同一个CCC或同一参考源,避免多个PLL之间的低频漂移导致跨域FIFO溢出。第六,DDR时钟的相位关系需要在PHY训练阶段通过DQS门控和读/写电平校准来补偿,CCC提供的相位偏移只是粗调,精细对齐由PHY训练完成。

五、配置检查清单

完成PLL和时钟树配置后,建议按以下清单逐项核对,避免遗漏关键约束:

检查项 目标值/要求 判断依据
VCO频率 1600~3200 MHz,取中段 器件手册VCO范围
PHY时钟 800 MHz(DDR4-1600) 数据速率/2
控制器时钟 400 MHz或200 MHz PHY时钟/2或/4
参考时钟引脚 专用时钟输入 引脚规划报告
时钟约束 create_clock / create_generated_clock 时序分析无未约束路径
复位同步 两级触发器,异步置位同步释放 综合后无亚稳态报告
LOCK条件 PLL锁定后再释放PHY复位 上电波形或仿真

实际调试时,可以先用示波器或片上调试逻辑观察PLL LOCK信号、PHY复位释放时刻和控制器复位释放时刻的先后关系。若发现PHY复位释放早于LOCK,应检查复位同步链是否把LOCK纳入了释放条件。若DDR训练反复失败,优先排查参考时钟抖动和时钟树偏斜,而不是急于调整训练参数。时钟与复位是DDR接口的地基,地基不稳,上层训练和校准都难以稳定收敛。