ARTICLE DETAIL

资讯详情

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

FPGA GTX收发器IP核配置与回环测试实战指南

FPGA GTX收发器IP核配置与回环测试实战指南 1. 为什么GTX收发器让这么多人头疼搞FPGA高速接口的兄弟十个里有八个在GTX收发器上栽过跟头。我见过太多人抱着Xilinx的UG476手册啃了一周每个字都认识连起来就是不知道从哪下手。手册里把GTX的架构、时钟、编码、均衡讲得面面俱到但它不会告诉你在Vivado里点开IP核配置界面之后面对那一百多个参数哪些该动、哪些千万别碰。GTX收发器本质上是FPGA内部集成的SerDes硬核专门干高速串行通信这件事。它支持从500Mbps到12.5Gbps的线速率范围内置了8b/10b编解码、时钟数据恢复CDR、预加重和均衡等一堆功能。你不需要自己用逻辑去搭这些但你必须知道怎么把它配起来、怎么让它跑起来、怎么确认它真的在正常工作。这篇文章面向的是已经装了Vivado、手里有块带GTX的板子比如KC705、VC709或者自己画的板、想跑通高速接口但被IP核配置卡住的工程师。我会从IP核的定制界面开始一个参数一个参数地过告诉你每个选项背后的逻辑然后基于官方例程讲清楚哪些地方必须改、哪些坑我替你踩过了。读完之后你应该能独立完成一个GTX收发器的基本配置和回环测试。2. 动手之前先把这几件事想清楚2.1 你的板子和参考时钟到底能不能用在Vivado里打开IP核之前先翻你板子的原理图。GTX的参考时钟来源通常有两种专用时钟引脚比如KC705上的SMA输入或者板载晶振和从其他GTX通道级联过来的时钟。你得确认三件事参考时钟频率是多少、接在哪个Bank的哪个REFCLK引脚上、这个时钟的质量够不够。参考时钟的频率选择直接决定了你能不能配出目标线速率。GTX内部有PLL和QPLL两种锁相环QPLL覆盖高频段9.8G到12.5GPLL覆盖低频段1.6G到6.25G左右。你选的参考时钟频率乘以PLL的倍频系数再除以分频系数必须落在目标线速率的范围内。举个例子你要跑3.125Gbps的线速率参考时钟是125MHz那QPLL的反馈分频比设成100输出就是12.5GHz再除以4就是3.125Gbps。这个计算过程在IP核配置界面里Vivado会自动帮你算但你必须理解它的逻辑否则出了问题不知道怎么调。注意参考时钟的抖动指标非常关键。如果你用的是普通晶振而不是专用低抖动时钟源眼图可能会惨不忍睹。我实测过用普通125MHz晶振跑5Gbps眼图几乎闭合换成专用时钟芯片后立刻打开。2.2 线速率、编码方式和位宽三者的关系这三个参数是绑死的。GTX内部的数据位宽可以是16位、20位、32位或40位这取决于你选的编码方式。8b/10b编码下内部位宽通常是20位或40位不编码RAW模式下可以是16位或32位。线速率等于参考时钟频率乘以PLL倍频系数再除以分频系数。而用户接口的时钟频率等于线速率除以内部位宽。比如你配3.125Gbps线速率、8b/10b编码、20位内部位宽那用户接口时钟就是3125/20156.25MHz。这个时钟是你后面写发送和接收逻辑时的同步时钟必须记清楚。很多人配完IP核之后发现数据对不上就是因为用户时钟频率算错了。2.3 官方例程能给你什么、不能给你什么Xilinx的GTX IP核在生成时会问你要不要生成Example Design。这个例程包含了收发器的基本回环逻辑、时钟管理和复位状态机是一个很好的起点。但它有几个问题第一它默认的配置参数不一定匹配你的板子第二它的复位逻辑比较保守复位时间偏长第三它用的是内部回环Near-End PCS/PMA Loopback如果你想测外部回环或者实际链路需要自己改。我的建议是先生成Example Design跑通仿真确认逻辑没问题然后再根据自己板子的实际情况修改约束文件和参数。不要一上来就从零开始写那样你会在复位和时钟上浪费大量时间。3. IP核配置界面逐项拆解3.1 GTX IP核定制界面的关键页面打开Vivado的IP Catalog搜索GT找到7 Series FPGAs Transceivers Wizard。双击打开之后你会看到几个标签页GT Selection、Protocol、Encoding、Clocking、Comma、PCIe、PRBS、Simulation。我按重要性顺序讲。GT Selection页面这里选你要用哪个Quad的哪个Channel。如果你用的是KC705GTX在Quad 118和Quad 119上。选Channel的时候注意一个Quad里的四个Channel共享QPLL如果你要用QPLL得确认同一个Quad里没有其他Channel在用冲突的配置。Protocol页面这里选预设协议模板。如果你跑的是Aurora、SATA、PCIe这些标准协议可以直接选对应的模板Vivado会自动帮你填好大部分参数。但如果你跑的是自定义协议选Start from Scratch然后手动配。Encoding页面选8b/10b还是RAW。8b/10b的好处是自带DC平衡和时钟恢复保障坏处是有25%的带宽开销。如果你的协议本身已经有编码比如64b/66b就选RAW。Clocking页面这是最关键的页面。你需要选参考时钟频率、PLL类型QPLL还是CPLL、线速率、内部位宽。Vivado会实时计算用户时钟频率并显示出来。如果显示红色说明你的参数组合不可实现需要调整。3.2 那些容易配错的参数TX Buffer Bypass这个选项控制发送端是否绕过缓冲器。绕过的好处是降低延迟坏处是要求TXUSRCLK和TXUSRCLK2的相位关系非常严格。如果你不确定就选Use TX Buffer让Vivado帮你处理。RX Buffer Bypass接收端类似。但接收端还涉及到一个RX Slide模式用于多通道对齐。如果你做的是多通道绑定比如XAUI必须用RX Buffer Bypass并且要处理好通道间的偏斜。Comma Alignment8b/10b编码下接收端需要找到K码Comma码来对齐字节边界。你可以选自动对齐或者手动对齐。自动对齐模式下GTX会在检测到Comma码时自动调整字节边界。但如果你用的Comma码不是标准的K28.5需要手动配置。PRBS伪随机比特序列生成器用于测试。你可以让GTX内部生成PRBS码流并检查接收到的码流是否正确。这是验证链路质量的好工具建议在初期调试时打开。实操心得配完IP核之后一定要点Validate按钮。Vivado会检查你的参数组合是否有冲突。我遇到过好几次因为QPLL和CPLL的参考时钟源选重了导致Validate报错提前发现比生成完了再改省事得多。3.3 生成Example Design时的选项在IP核定制界面的最后Vivado会问你要不要生成Example Design。选Generate之后还会问你要不要生成仿真脚本和综合脚本。我的建议是全选上。仿真脚本可以帮你快速跑行为仿真综合脚本可以帮你确认时序约束是否合理。Example Design生成之后你会看到一个完整的Vivado工程包含顶层文件、约束文件、仿真文件和一个简单的回环测试逻辑。这个工程可以直接综合、实现、生成比特流。但先别急着上板先在仿真里跑一遍。4. 官方例程修改要点与实操4.1 先跑仿真确认逻辑正确Example Design生成之后打开仿真文件通常叫*_example_sim.v或类似的名字。这个仿真文件会实例化GTX IP核加上一些激励逻辑跑一个内部回环测试。你直接点Run Simulation跑行为仿真观察波形。重点看几个信号txp和txn是发送差分对rxp和rxn是接收差分对。在内部回环模式下发送的数据会直接环回到接收端。你应该能看到接收端的数据和发送端的数据一致。如果仿真里就不对那说明IP核配置有问题别浪费时间上板。仿真时间通常需要跑几十微秒因为GTX的复位和时钟锁定需要时间。如果跑了很久还没看到数据检查复位信号是否已经释放、时钟是否已经锁定。4.2 约束文件的修改Example Design自带的约束文件XDC通常是针对特定开发板的。如果你用的不是同一块板必须改。主要改这几个地方参考时钟的引脚位置和时钟周期约束GTX收发器的差分引脚位置系统复位信号的引脚位置参考时钟的约束特别重要。你需要用create_clock命令定义参考时钟的频率然后用set_property把它绑定到正确的引脚上。如果参考时钟是从外部晶振来的还要注意时钟的抖动和相位噪声是否满足GTX的要求。# 参考时钟约束示例 create_clock -period 8.000 [get_ports refclk_125mhz_p] set_property PACKAGE_PIN AD12 [get_ports refclk_125mhz_p] set_property IOSTANDARD LVDS [get_ports refclk_125mhz_p]差分对引脚的约束也要注意。GTX的收发引脚是专用的不能随便分配到普通IO上。你必须查板子的原理图找到正确的引脚编号。4.3 复位逻辑的调整Example Design里的复位逻辑通常是一个状态机等待时钟锁定、等待PLL锁定、然后释放复位。这个逻辑本身没问题但复位时间可能偏长。在实际应用中你可以适当缩短复位时间但必须确保所有时钟都已经稳定。GTX的复位信号有几个gt_reset、reset、power_down。gt_reset是全局复位会复位整个GTX Quadreset是通道复位power_down是低功耗模式控制。在正常工作时power_down应该拉低gt_reset和reset在初始化完成后应该拉低。注意复位释放的顺序很重要。必须先释放gt_reset等QPLL锁定后再释放reset。如果顺序反了GTX可能无法正常锁定。4.4 上板测试与回环模式选择仿真通过之后就可以上板测试了。GTX支持几种回环模式Near-End PCS Loopback在PCS层回环发送的数据直接环回到接收端不经过PMA。Near-End PMA Loopback在PMA层回环经过部分模拟电路。Far-End PMA Loopback需要外部连接发送的数据经过外部链路环回到接收端。Far-End PCS Loopback类似Far-End PMA但在PCS层回环。初期调试建议用Near-End PCS Loopback确认数字逻辑没问题。然后用外部SMA线缆做Far-End PMA Loopback确认模拟电路和外部链路没问题。上板之后用ILAIntegrated Logic Analyzer抓取发送和接收的数据。如果发送数据正确但接收数据错误检查参考时钟质量、均衡设置和外部链路。如果连发送数据都不对检查用户时钟是否正常、复位是否释放。5. 常见问题与排查技巧实录5.1 时钟锁定失败怎么办这是最常见的问题。GTX的QPLL或CPLL锁定失败通常有几个原因参考时钟频率不对、参考时钟质量太差、PLL配置参数错误、电源噪声太大。排查步骤先用示波器或频谱仪测参考时钟的频率和抖动。如果频率偏差超过100ppmPLL可能锁不上。如果抖动太大换一个低抖动的时钟源。然后检查IP核配置里的参考时钟频率是否和实际一致。最后检查电源GTX对电源噪声很敏感尤其是QPLL的供电。5.2 接收数据错位或乱码接收数据错位通常是Comma对齐没做好。检查Comma码的设置是否和发送端一致。如果用的是自定义Comma码确保在IP核里正确配置了。另外检查RX Slide模式是否使能多通道时还需要做通道绑定。乱码的另一个可能是8b/10b编解码不一致。发送端用8b/10b接收端也必须用8b/10b。如果一端用RAW另一端用8b/10b数据肯定对不上。5.3 眼图不张开眼图不张开说明信号完整性有问题。可能的原因预加重设置不够、均衡设置不够、外部链路损耗太大、参考时钟抖动太大。调整预加重和均衡参数可以改善眼图。GTX的预加重有四个档位均衡有多个档位。你可以通过DRPDynamic Reconfiguration Port在运行时调整这些参数找到最佳值。如果外部链路损耗太大可能需要换更好的线缆或加均衡器。5.4 常见问题速查表问题现象可能原因排查方法QPLL锁定失败参考时钟频率不对测参考时钟频率检查IP核配置接收数据错位Comma对齐未完成检查Comma码设置确认RX Slide使能眼图闭合预加重/均衡不足通过DRP调整参数检查外部链路用户时钟无输出复位未释放检查复位状态机确认时钟锁定数据偶尔出错电源噪声检查电源滤波增加去耦电容多通道偏斜大通道绑定未做使能RX Buffer Bypass做通道绑定实操心得我习惯在初期调试时把PRBS打开让GTX自己生成和检查码流。如果PRBS能过说明物理层没问题问题在逻辑层。如果PRBS都过不了别浪费时间调逻辑先解决物理层。6. 从回环到实际链路的过渡6.1 外部链路的均衡与预加重调优回环测试通过之后下一步是接实际链路。实际链路通常有损耗尤其是长线缆或背板。你需要调整发送端的预加重和接收端的均衡来补偿这些损耗。预加重的作用是增强信号的高频分量补偿传输线的高频衰减。均衡的作用是在接收端恢复被衰减的高频分量。两者配合使用可以让眼图重新张开。调整方法先用默认参数跑用ILA或示波器看眼图。如果眼图闭合逐步增加预加重档位直到眼图张开。然后调整均衡档位进一步优化。注意不要过度预加重否则会引入过冲和振铃。6.2 多通道绑定的注意事项如果你做的是多通道协议比如XAUI、Interlaken需要做通道绑定。通道绑定的目的是让所有通道的数据对齐到同一个字节边界。GTX支持通道绑定但需要正确配置。关键点所有通道必须用同一个QPLL参考时钟必须同源RX Buffer Bypass必须使能通道间的偏斜必须控制在允许范围内。Vivado的IP核里有通道绑定的选项勾上之后会自动处理大部分逻辑。6.3 动态重配置的实际应用GTX支持通过DRP接口在运行时动态修改参数比如预加重、均衡、线速率等。这在需要自适应链路的场景下很有用。DRP接口是一组地址和数据总线你可以通过它读写GTX的内部寄存器。Xilinx提供了DRP的示例代码你可以直接拿来用。但要注意DRP操作必须在GTX正常工作之前或暂停工作时进行运行时修改参数可能会导致链路中断。7. 几个让我少走弯路的经验第一个经验别迷信手册里的默认参数。手册里的参数是针对典型场景的你的板子、你的链路、你的时钟源都可能不一样。该改的就得改该调的就得调。第二个经验仿真通过不代表上板通过。仿真里没有电源噪声、没有时钟抖动、没有外部链路损耗。上板之后这些问题都会出现。所以仿真通过只是第一步上板调试才是真正的挑战。第三个经验ILA是你最好的朋友。GTX的内部信号很多光看外部引脚很难判断问题出在哪。用ILA抓内部信号能看到复位状态、时钟锁定状态、发送和接收的数据排查问题效率高很多。第四个经验别怕改官方例程。官方例程是给你参考的不是给你直接用的。该改的地方大胆改改坏了再生成一份就是了。我见过太多人不敢动官方例程结果被里面的默认配置坑了很久。第五个经验参考时钟的质量决定了一切。我在这上面栽过跟头用普通晶振跑高速率眼图死活打不开换了专用时钟芯片之后立刻就好了。如果你的链路性能上不去先检查参考时钟。最后分享一个小技巧在Vivado里配置GTX IP核的时候把每个页面的配置截图保存下来。后面调试的时候如果怀疑参数配错了翻出截图对照一下比重新打开IP核配置界面快得多。这个习惯帮我省了很多时间。
返回列表