ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

JESD204B时钟配置全解析:Xilinx FPGA三个关键细节

JESD204B时钟配置全解析:Xilinx FPGA三个关键细节 搞JESD204B接口调试最让人头疼的不是协议状态机也不是数据对齐而是时钟配置。我见过太多项目在硬件回板后卡在这一步SYSREF时序不对、device clock频率算错、GT参考时钟抖动超标最后表现就是link training过不去、确定性延迟来回跳、偶发误码找不着根因。这些坑Xilinx的官方文档里其实都写了只是写得比较分散不逐字逐句抠很难注意到。这篇博文就围绕PG066JESD204 LogiCORE IP Product Guide和PG198JESD204 PHY Product Guide两份文档把JESD204B时钟配置里最关键的3个文档细节讲透。内容主要针对使用Xilinx 7系列、UltraScale/UltraScale系列FPGA做高速数据采集、软件无线电、宽带收发信机的工程师也适合刚接手JESD204B链路、正在看文档但不知道重点在哪的入门者。看完你至少能少走两个月的弯路。1. JESD204B时钟架构先把三路时钟捋清楚JESD204B的时钟配置本质上是在处理三路时钟device clock设备时钟、SYSREF系统参考时钟、以及GT参考时钟refclk。这三路时钟各有各的职责也各有各的坑。很多人一开始只关心lane rate和refclk等调试到确定性延迟才发现SYSREF才是真正决定成败的那一路。1.1 device clock、SYSREF、refclk各管什么device clock是整个链路的“心跳”。在Xilinx的JESD204 IP里它既用于逻辑侧的时钟域也作为SYSREF采样的基准。FPGA侧的JESD204 IP核其内核逻辑时钟就是通过device clock经过MMCM/PLL处理后得到的。PG066里明确要求device clock必须和远端转换器ADC/DAC的采样时钟同源否则sysref对齐做得再好也会因为频率偏差导致LMFC逐渐漂移最终链路失锁。SYSREF是JESD204B标准里专门为确定性延迟Deterministic Latency引入的参考信号。它的作用是告诉收发两端“LMFC边沿在哪”让接收端能够在一个已知的LMFC边界上建立本地多帧时钟。这里有个很容易被忽略的点SYSREF不是简单给一个脉冲就够了它的频率必须满足和LMFC之间的约束关系而且采样时序必须满足FPGA内部触发器的建立时间setup time和保持时间hold time要求。Xilinx在PG066里专门讲了SYSREF的采样方式简单说就是如果你的SYSREF到来时刻刚好落在device clock边沿附近就会产生亚稳态导致采样结果不确定。GT参考时钟refclk负责驱动高速收发器的PLLQPLL或CPLL。它的频率由lane rate和PLL配置决定必须严格按照PG198里给出的公式去算。refclk的抖动要求通常比device clock更苛刻因为它是直接进入模拟前端的关键信号。很多板卡布线时把refclk走线拉太长或者参考层不连续导致实测误码率居高不下查到最后发现问题出在refclk的SSC展频时钟没有关闭被误当作普通时钟用了。1.2 一个典型的时钟树实例以一片12位、采样率2.5GSPS的ADC输出JESD204B为例假设配置为4条lane、每条lane速率10Gbps那么你需要提供一个2.5GHz的采样时钟给ADC同时也是device clock的来源。注意JESD204B的device clock并不一定非要等于采样频率它可以是一个分频后的“内核时钟”但前提是分频后的时钟必须依然和转换器采样时钟同源。一个SYSREF信号频率一般为LMFC频率的整数分之一具体见PG066推荐的SYSREF频率范围由同一个时钟源经过分频器产生。一个156.25MHz或125MHz的GT参考时钟给FPGA的GT位置具体频率取决于lane rate和PLL配置。这个时钟树看起来简单但实际板卡上要做到“同源”并不容易。最稳妥的做法是用一个高端时钟芯片比如LMK04828同时产生采样时钟、SYSREF和GT refclk三路出来的信号在PCB走线上严格等长。项目里如果图省事用独立晶振分别给FPGA和转换器提供时钟后面SYSREF对齐大概率出问题。2. 这3个文档细节决定了你的链路能不能收敛PG066和PG198加起来上千页如果从头读到尾大多数人在看到时钟章节之前就已经放弃了。这里直接划重点把最容易出问题的3个细节单独拎出来逐条拆解。2.1 细节一PG066里的SYSREF不是“随便给个脉冲”PG066在Clocking章节里对SYSREF的要求写得很细很多人在调试时会忽略这些约束第一SYSREF高电平宽度必须足够宽保证能被device clock在低频率下也采得到。PG066给出的要求通常是用SYSREF的高电平时间至少要覆盖一个device clock周期以上。实操中我习惯把SYSREF高电平宽度设为LMFC周期的1/2或至少大于10个device clock周期然后通过调整FPGA侧的采样位置来保证setup/hold时间裕量。第二SYSREF频率不能太高。标准里虽然允许连续SYSREF但在FPGA实现里SYSREF的采样电路通常只能在特定窗口内工作。PG066建议SYSREF的频率不要超过device clock频率的四分之一同时它的上升沿要和LMFC边界之间有确定的相位关系。如果你用的是连续SYSREF比如10MHz的周期性脉冲那么它的相位噪声会直接影响到确定性延迟的稳定性。第三SYSREF必须和device clock同源。这个“同源”不仅指来自同一个参考振荡器还指分频链路必须确定。实际调试时可以用示波器看SYSREF上升沿和device clock上升沿之间的相位差。如果这个相位差在长时间内漂移说明时钟分频器没有复位到确定状态需要检查时钟芯片的同步输出是否接到了所有分频器的复位端。我自己的经验是调试SYSREF采样问题第一步不是改代码而是用ILA抓内部信号看“sysref detected”标志是否按照预期周期出现。如果标志不稳定多半是硬件上SYSREF的沿位置有问题如果标志稳定但link还是不能确定性对齐那是LMFC相位配置的问题。2.2 细节二PG066多设备同步里的时钟域陷阱多芯片同步是JESD204B最典型的高级应用场景比如一片FPGA对接4片ADC做波束形成或者多个FPGA之间互通。PG066在多设备同步章节里提到一个关键点所有参与同步的设备必须共享同一个SYSREF并且各设备的device clock相位偏差必须在允许范围内。这里有个容易被忽略的陷阱一片FPGA内部可能有多套JESD204 IP分别对接不同的转换器它们虽然共用同一个SYSREF但各自内部的LMFC相位并不一定对齐。原因是每套IP的复位时序不同内部MMCM的锁定时间也有差异。PG066给出的解法是在系统层面通过SYSREF和周期间隔多帧周期的约束来保证确定性而不是依赖各IP自行对齐。实际项目中多片ADC同步最容易出现的问题是“第一拍数据对齐了跑一段时间后偏了一个多帧”。这个现象十有八九是device clock的来源有问题——比如ADC的采样时钟和FPGA的device clock在不同板上通过连接器传输没有做源同步导致时钟相位随温度漂移。PG066文档里虽然没有直接给出PCB布局建议但从它要求的“device clock和SYSREF之间相位关系必须固定”就可以反推硬件设计时两个时钟的布线延迟必须严格可控。另一个容易忽略的点是SYSREF的端接和信号完整性。多片ADC接收同一个SYSREF时如果采用菊花链连接各个设备的SYSREF到达时间会不同。PG066要求的是各设备看到的SYSREF沿在同一时刻这就必须用扇出缓冲器fanout buffer给每个设备单独分配SYSREF并保证PCB走线等长。另外SYSREF信号的压摆率也很重要——如果信号边缘太缓那么在有噪声干扰时沿位置会产生抖动直接影响采样时刻。2.3 细节三PG198藏在GT复位顺序里的门道PG198是JESD204 PHY的文档重点在GTGigabit Transceiver的配置和复位。很多人以为PHY层的复位就是按标准模板拉一下reset、gt_reset、power_down就完事但PG198里强调了一个顺序问题GT的复位必须在参考时钟稳定之后、并且在device clock和SYSREF已经有效的前提下进行。之前有项目为了省事在 FPGA 配置完成后立刻对GT做复位忽略了此时参考时钟可能还在锁定过程中比如时钟芯片的PLL还没有稳定。导致的结果是GT的PLL虽然显示locked但输出时钟的频率抖动很大JESD204B链路训练时断时续。后来在代码里加了固定延时等到时钟芯片的lock信号有效后再复位GT问题才消失。文档细节里还有一个容易被忽略的点PG198对不同速率下CPLL和QPLL的选择建议不同通道速率大于10.3125Gbps时通常用QPLL低于这个速率可以用CPLL也可以QPLL具体要看GT所在的bank限制。如果误把CPLL用在高速率下会出现PLL锁定不稳定、眼图劣化的问题。还有GT的power_down信号它不是简单的高电平有效而是有具体的状态机控制顺序。PG198里有张表列出了power_down状态下的复位顺序很多人拿到示例代码直接抄但示例里的GT位置和你的设计并不一定一致导致power_down时序不匹配。我在调试GT时习惯在Vivado的硬件管理器里观察QPLL/CPLL的锁定状态以及GT的复位状态寄存器。如果发现PLL显示锁定但RX的comma对齐始终出不来我会检查refclk的实际送入路径是不是被MMCM或者BUFG干扰了。Xilinx要求refclk必须直接进入GT的专用时钟引脚MGTREFCLK不能先经过普通BUFG再绕进GT很多新手在这里踩坑。3. 实操从参数推导到上板配置文档细节看再多最终还是要在工程里落地。这一节以一个实际例子来演示参数推导、IP配置和上板验证的完整流程。3.1 先把link参数算清楚假设项目需求是采集一个带宽1GHz的中频信号选用ADC采样率2.5GSPS、12位精度、JESD204B输出4条lane。我们需要计算出一组满足JESD204B协议约束的link参数。先回顾JESD204B的线速率公式。对于配置为L条lane、F个字节每帧、采样精度N包括控制位的链路lane rate 采样率 × N × M / L × (10/8)使用8B/10B编码时。其中M是转换器数量。以本例子为例M1N12假定无控制位L4原始数据率 2.5GSPS × 12 30Gbps每条lane需要传输 30/4 7.5Gbps 的有效数据。经过8B/10B编码后每条lane的物理速率为 7.5 × 10/8 9.375Gbps。所以lane rate 9.375Gbps。这个速率已经超过10Gbps了吗没有因此CPLL和QPLL理论上都可以但为了裕量我倾向于选择QPLL因为9.375Gbps已经比较接近GT的单lane极限CPLL在这种高速率下相位裕量会比较紧。接下来计算F和K参数。JESD204B的每个帧包含F个字节一个多帧包含K个帧。对于ADC输出F的取值一般由采样位数和通道数决定。示例里可以配置一个样本为2字节16位其中高12位有效低4位可作控制位或保留每个frame填充1个样本则F2。K的取值只需满足多帧字节数 F×K 能被L整除同时要保证SYSREF频率 采样率 / (F × K × L × 每个多帧包含的LMFC周期数)。通常工程里推荐K取32这样多帧字节数64可以被4整除。算一下LMFC频率 采样率 / (F × K) 2.5G / (2 × 32) 39.0625MHz。这个LMFC频率是SYSREF的基准频率参考SYSREF一般建议取LMFC频率的1/1、1/2或1/4等分频。这里如果取SYSREF9.765625MHz即LMFC的四分频那么SYSREF高电平宽度在时域上约为51.2ns很容易满足FPGA的采样要求。GT refclk频率的计算在PG198中QPLL的VCO频率范围是5.93Gbps到13.1Gbps以UltraScale为例具体视器件型号而定。如果你选择QPLL的反馈分频比使得VCO运行在9.375GHz那么refclk可以是VCO频率除以一个整数。比如156.25MHz9.375GHz / 60就是常见的FEC参考钟频率也可以用125MHz9.375GHz / 75。选择哪个refclk频率主要看板卡上是否已有合适时钟源。3.2 配置顺序与寄存器要点在Vivado中例化JESD204 IP和JESD204 PHY IP时有几个关键配置项需要和上面的计算结果保持一致JESD204 IP核中的Line Rate填9.375参考时钟频率填156.25MHz。IP会自动算出GT的QPLL配置参数但需要确认PG198中对应的QPLL设置范围是否覆盖。JESD204 IP核中的F设为2、K设为32L设为4。多帧字节数F×K64可以被L整除Per-channel buffer的深度设置要注意至少大于2×K×F/L否则数据缓冲会溢出或下溢。SYSREF配置选择“external”并在代码里使能SYSREF检测和LMFC对齐逻辑。如果使用单片ADC可以配置为“SYSREF sync”模式让IP在检测到SYSREF后自动校准LMFC相位。配置顺序上我的习惯是先确保时钟芯片锁定、输出稳定。可以从时钟芯片的lock引脚读回状态如果没有lock引脚就做一个固定延时至少10ms。释放GT的复位deassert gt_reset等待GT TX/RX的PLL锁定。此时不急着启动JESD204 IP。拉高JESD204 IP核的s_axi_reset并开始配置AXI-Lite寄存器如将core时钟使能、RX/TX使能。等待IP核内部PLL锁定、以及JESD204链路状态机进入“DATA”状态。最后再发送SYSREF脉冲或使能连续SYSREF让RX端完成LMFC对齐。这个顺序和很多示例工程里的顺序不完全一样原因是示例工程里的复位顺序是针对单板验证的而实际工程里时钟芯片的锁定时间往往被忽略。我在两个项目里都遇到过“GT复位先于时钟锁定”导致偶发失锁的情况调整顺序后问题消失。3.3 上板验证的观察点上板后不能只盯着“链路是否link up”还需要关注几个关键信号JESD204 IP核的rx_sync状态。这个信号拉高表示接收端已经完成了码组同步、帧同步和多帧同步。如果该信号一直拉不高优先检查SYSREF有没有被正确检测到以及lane rate是否和远端设备匹配。GT的rxbyteisaligned和rxcommadet。这两个信号如果为0说明物理层还没对齐K28.5字符。排查方向是GT参考时钟是否稳定、lane的极性设置是否错误。数据内容的校验。用ILA抓取JESD204 IP核输出的并行数据发送一个斜坡信号或者正弦波测试向量看数据是否按预期排列。如果数据顺序正确但值不对可能是样本字节序endianness配置错了需要在IP配置中调整字节序或总线位宽。有一次调试时ILA里看到的输出数据是“0, 1, 2, 3”的斜坡但DAC那边收到的却是“1, 0, 3, 2”最后定位是PHY层输出总线的高低位序配置反了。这个在PG066里有讲IP核提供可选的字节交换逻辑但默认不打开需要用户根据实际转换器的数据手册手动配置。4. 常见问题排查速查JESD204B时钟配置的问题往往现象雷同但根因五花八门。下面把几个高频问题的排查思路做成速查表后续调试时可以直接对着查。现象可能原因排查方法Link始终无法建立rx_sync一直为低lane rate计算错误、GT refclk频率不对、SYSREF采样失败先用IBERT验证GT物理层检查PG066/PG198中要求的refclk范围用ILA观察sysref_detectedLink能建立但数据偶发错位时钟同源关系没保证、SYSREF相位漂移示波器查看device clock和SYSREF的相位差是否稳定检查时钟芯片分频器是否被正确复位确定性延迟每次上电都不一样SYSREF采样点落在亚稳态区间或者没有等待LMFC对齐就启动数据调整SYSREF采样相位在IP内配置确保建立/保持时间裕量确认IP配置为“Deterministic Latency”模式GT PLL锁定不稳定refclk抖动过大、SSC未关闭、参考时钟经过非专用路径检查板卡时钟布线使用MGTREFCLK专用引脚关闭SSC用频谱仪确认时钟频率精度多片ADC同步后长时间运行跑偏device clock不同源、分频器没有公共复位确认所有器件共用同一参考振荡器在设计里把时钟芯片的sync信号连到所有分频器复位端从现象到根因的排查过程里有一个容易误导人的方向值得单独提醒很多工程师一看到链路失锁第一反应是去调JESD204 IP核的寄存器其实大量问题出在PHY层或者时钟源。我通常的做法是先把物理层独立验证通过再排查协议层。单独的GT物理层验证可以用Xilinx IBERT这个现成方案。IBERT是FPGA开发工具里自带的debug工具它可以不经过用户逻辑直接对GT做误码率测试BER test。如果IBERT测试全速率无误码说明GT物理层、refclk、PCB走线都没问题如果IBERT就有误码那就直接绕过了JESD204协议层定位到硬件层。这一步可以节省掉一大半的调试时间。还有一个容易被忽略的方向是掉电顺序和启动顺序。在某些硬件平台上FPGA和ADC的上电时序如果没有按要求错开可能导致SYSREF和device clock在启动阶段出现毛刺IP核即使配置正确也无法完成同步。解决方法是检查硬件设计的上电时序或在FPGA逻辑里增加“等待时钟稳定”的状态机。5. 最后几点经验JESD204B的时钟配置本质上是在处理两件事频率对不对相位稳不稳。频率参数可以通过计算解决但相位稳定性必须在硬件设计和软件初始化两个层面同时保证。硬件上device clock、SYSREF、refclk三者要严格遵守同源、等长、信号完整性要求软件上必须按照时钟锁定、GT复位、IP启动、SYSREF对齐的顺序来顺序错了后面全是奇怪的偶发问题。如果项目周期紧我建议在原理图设计阶段就把时钟树画到最简能用一个时钟芯片产生的绝不用两个能少一级分频就少一级分频。多一个分频器就多一个相位不确定的来源。调试的时候优先看ILA和IBERT不要凭感觉改配置。踩过几次坑之后你会明白PG066和PG198里的时钟章节才是整个JESD204B设计里最该反复精读的部分。
返回列表