资讯详情

资讯详情

FPGA实测100G光模块:从PAM4、FEC到误码率测试全流程

1. 从“能点亮”到“测明白”为什么用FPGA做100G光模块测试先说个现实问题现在数据中心和通信设备里25G、100G、400G光模块早已经不是新鲜事物但很多做硬件、做FPGA的工程师第一次拿到100G光口/光模块时往往卡在同一个地方——模块插上link灯亮了就不知道下一步该测什么、怎么测了。别笑这真的是绝大多数人的第一反应。我自己踩过这个坑。早期用FPGA点到点跑过千兆、万兆以太网总觉得100G就是速率翻几倍换个IP核就完事了。真上手才发现100G光模块从信号类型、编码方式到故障排查逻辑跟低速SerDes完全是两个物种。光口这边模块可能是QSFP28、QSFP-DD甚至OSFP里面跑的可能是100G SR4/CR4也可能是单波100G的DR/FRFPGA这边你得选GTH/GTY/GTM还得配相应的100G MAC/PCS IP核。光把这些名词理清楚就够喝一壶了。这篇博文就是围绕“用FPGA实测100G光模块”这件事把整个链路拆开讲从硬件平台的选型、光模块的关键指标到FPGA内部IP核的配置、误码率测试的完整流程再到实际调试中遇见的坑。内容偏工程向适合正在做高速接口验证、数据中心硬件开发或者FPGA高速通信方向的工程师参考也适合刚入手100G光模块测试、但还没找到完整路线图的学习者。一句话总结这篇内容的核心价值不是教你“怎么把光模块点亮的”而是教你怎么把100G光链路“测出结论、发现隐患、定位问题”。这中间的差距就是工程经验和理论文档之间的差距。2. 100G光模块的底牌PAM4、FEC与模块形态这些参数决定你的FPGA设计聊FPGA怎么测100G光模块之前得先把光模块本身的底裤翻出来看。很多人一看到“100G光模块”就默认它是类似“4×25G NRZ”的东西这在五年前还是对的但现在这个假设很可能让你整个测试方案从一开始就跑偏。2.1 模块形态QSFP28、QSFP-DD与OSFP端口定义不一样100G光模块最主流的形态是QSFP28四通道每通道25.78125Gbps这个是64B/66B编码后的速率对应100G以太网。但如果你接触到的是QSFP-DDDouble Density或者OSFP那就要小心了——QSFP-DD虽然也是100G模块常见载体但它的电气接口定义、引脚间距和QSFP28并不完全兼容OSFP在散热和信号完整性上做了加强但PCB footprint完全不同。FPGA测试时这些差异直接关系到你的测试板怎么设计QSFP28用标准笼子加高速连接器就行QSFP-DD需要额外的Sideband信号处理比如更高的管理总线带宽OSFP则需要更严格的高速差分走线等长控制。我做第一版测试板时想“兼容”三种模块结果高速走线一塌糊涂4路25G信号串扰严重白白浪费了两周时间。2.2 调制方式25G NRZ时代已经过去50G PAM4才是100G单波真相早期100G光模块是4×25G NRZ也就是4路25G不归零码并行。但到了100G单波时代也就是所谓的100G DR1/FR1用的却是单路50G PAM4。PAM4是四电平脉冲幅度调制一码元承载2bit信息所以50G Baud的符号率就能实现100Gbps传输。这个区别对FPGA测试来说极其关键你的FPGA高速串行收发器必须支持PAM4模式否则没办法直接对接单波100G光模块。举个例子Xilinx UltraScale的GTY收发器支持NRZ和PAM4两种模式但GTX就不支持PAM4到了VersalGTM收发器把PAM4支持做进了硬核。如果你选错FPGA型号测单波100G光模块这件事就直接没戏。2.3 FEC不是可选项是必选项100G光模块链路几乎必开FEC前向纠错。原因很简单50G PAM4的信噪比余量比25G NRZ小得多不开FEC误码率根本压不到1E-15以下。100G以太网标准里定义的FEC是RS(544,514)能纠错10个符号同时还有KP4用于400G但也常出现在100G/dr设计中。FPGA测试时FEC的开关状态直接决定你的误码率测试基线不开FEC100G SR44×25G NRZ可能要跑到1E-12以下才算健康开FECPAM4链路的纠前误码率pre-FEC BER只需要优于1E-6甚至很多模块厂家标1E-5就能出货测pre-FEC还是post-FEC取决于你的FPGA IP核能不能把FEC纠错的统计信息透传出来。实际测试中我遇到过一种情况模块本身已经劣化到pre-FEC BER 1E-4了但post-FEC显示仍然为0链路看起来非常正常。如果你只看FPGA上报的最终误码大概率会漏掉模块的性能隐患。所以我的习惯是测试环境里一定要同时统计pre-FEC和post-FEC并且设定一个告警阈值比如pre-FEC超过1E-7就标黄超过1E-5就标红。提示做100G光模块测试不要只看最终误码是否为0。一定要弄清楚FEC在链路中的位置确认FPGA能读到FEC纠错计数否则你会被“假健康”骗过去。3. 搭建测试平台前的五项决策FPGA选型、光模块规格、误码仪替代方案进入实操前先把测试平台的选型逻辑讲清楚。这个东西直接影响到整套方案的可行性和投入成本而且每一项决策之间还有耦合关系一起梳理清楚比较稳妥。3.1 FPGA开发板资源怎么评估收发器、参考时钟、IP核授权缺一不可很多人选板子的第一反应是“LUT够不够、DSP够不够”但做100G光口测试两个更关键的指标是高速收发器数量和参考时钟的灵活性。以Xilinx UltraScale为例100G光模块需要用到4路GTY收发器4×25G或者2路GTM2×50G PAM4如果做单波100G只需要1路GTM/GTY。但有一个容易忽略的细节每路高速收发器都必须有独立的参考时钟输入或者至少保证相邻的几个收发器共享一个清洁时钟。100G对参考时钟的抖动要求很高典型值是0.3ps RMS以内所以开发板上那个可编程晶振比如Si534x系列质量很关键。否则你会发现IP核里PLL锁定困难、噪声地板过高、误码率始终降不下去。此外100G MAC和PCS的IP核比如Xilinx 100G Ethernet Subsystem通常是需要License的。很多开发板带的是评估License时间限制、速率限制都有。做测试一定要提前确认IP核版本和授权期限否则做到一半IP到期整个环境直接罢工。3.2 100G光模块怎么选热插拔的便利性背后藏着参数陷阱市面上100G光模块品牌和型号非常多但测试用途和业务用途的选型逻辑完全不同。做FPGA测试我更推荐选择可热插拔的QSFP28模块而不是直焊接模块理由很实际方便做对比实验——换一个模块只需要拔插不需要重新焊接能试不同厂商、不同方案比如国产模块和国际大厂模块在发射光功率、消光比上差异不小便于做眼图、光谱等光学测试——热插拔的模块直接怼到仪器上就行。选模块时关键指标你要拿到手参数含义测试中的关注点发射光功率模块输出光功率单位dBm是否在规格范围内过高可能损坏对端接收灵敏度保证BER达标的最小接收光功率判断链路裕量用于衰减测试消光比高电平与低电平光功率之比影响眼图和误码率色散容限单模模块在不同距离下的性能长距离测试FR/LR时尤为重要Tx/Rx波长例如850nmSR、1310nmDR/FR必须和光纤、对端模块匹配我个人做测试时通讯模块的序列号、DDM数字诊断监控信息、温度电压电流都会记录存档。因为有些模块掉链路的频率是有规律的第一步就是先看DDM数据是不是有温度过高的报警。3.3 商用误码仪还是FPGA自建误码仪成本的权衡专业误码仪BERT测100G是标准做法比如安立、泰克、是德的高端产品一台设备动辄几十万上百万元。如果只是偶尔测几个模块租用或者送外测都可以。但如果你像我一样需要频繁、反复地调测FPGA和光模块的配合自建误码仪其实是更经济也更灵活的选择。FPGA自建误码仪的核心思路是用FPGA产生伪随机序列PRBS数据发送到光模块再接收回环数据对比是否一致统计误码率。具体可以参考的测试模式是PRBS31压力最大的模式适合长距离和高阶调制测试或是PRBS9、PRBS15适合短距快速测试。FPGA里跑一个误码统计模块产生计数器、错误计数器、运行时间这样就可以在电脑上通过串口或寄存器接口实时看到误码率。这个方案的缺点也很明显FPGA自建误码仪无法像商用BERT那样提供精确的抖动注入和分析能力。如果你要测接收机的抖动容限Jitter Tolerance那还是得仪器的帮助。但如果你只是验证模块能不能用、链路稳不稳定、隔一段时间后误码有没有漂移FPGA自己测试已经非常够用了。3.4 回环拓扑怎么搭哪种回环能测出真实问题回环测试有三种主要方式一定要清楚地知道它们的区别电回环Electrical Loopback在FPGA内部把发送端数据直接送到接收端。这测的是FPGA逻辑和IP核本身光模块和光电转换链路完全不参与。优点快速验证FPGA设计是否正确排除光模块影响。缺点不能验证任何光口物理层指标。光回环Optical Loopback把光模块的Tx光信号用光纤连回同一或另一光模块的Rx端。比如用一个短光纤跳线把QSFP28的TX和RX连起来或通过光衰减器/光开关控制。这种方式会经过真正的光电转换、光纤传输和信号恢复能反映光模块的性能。系统级回环System Level Loopback两端分别接不同的FPGA或设备一端发一端收测试整条端到端链路。这在真实系统中更有意义但调测复杂度也最高。我的测试策略是“三明治”式的先电回环保证FPGA逻辑干净再短光纤光回环保证模块本身没问题最后接上手头能用的对端设备最好是另一块同样的FPGA板把误码率跑一晚上验证长期稳定性。这个流程走下来基本能把故障范围从FPGA硬件、IP核配置、光模块、光纤跳线这样一层层剥出来排错过程非常顺利。3.5 时钟架构100G测试里最容易被低估的一环高速光模块测试的时钟架构比大多数人想象的更严格。100G以太网需要收发时钟同源吗这个问题的答案直接影响你的FPGA设计。在长距离以太网中两端设备是通过CDR时钟数据恢复从数据里提取时钟的不需要外部共享参考时钟。这个机制在FPGA内部是由SerDes的CDR模块完成的。但在自建误码仪场景中如果FPGA发送时钟和接收时钟不是同源你就会看到非常规律的误码——这些误码并不是纯净的光模块问题而是因为收发时钟有极小的频偏例如±100ppm范围内导致发送端和接收端的数据速率不匹配缓冲器弹性FIFO周期性溢出或欠载。解决思路分两种短距离连两根短跳线时可以用同一个参考钟源驱动TX和RX配合CDR链路会非常稳定长距离或者跨设备时必须依赖CDR的跟踪能力和FIFO深度设计要让FPGA的弹性缓冲足够大能容忍预期范围内的频偏。一个常见的工程习惯是先测“同源时钟”确认链路基本健康再切换成“独立时钟”模拟真实组网环境观察误码率变化。如果变化量超过一个数量级说明FIFO设计可能偏保守了需要调整IP核中的弹性缓冲深度参数。4. 100G光模块FPGA测试IP核选型与配置从MAC/PCS到底层物理编码子层到这一步你已经有了光模块、FPGA开发板也明确了测试拓扑接下来要把FPGA内部的数据通路搭起来。这不是一个简单的“调IP核参数”的活儿而是要把100G以太网的协议栈分层、每一层干什么、每一层怎么和光模块对接、怎么调试都搞清楚才能动手。4.1 100G协议栈分层物理介质相关子层和MAC层的分工100G以太网的数据通路分很多层做了FPGA一般都接触过OSI模型但100G以太网内部的协议栈更有意思。简化的分层是这样的MAC层媒体访问控制负责组帧、地址解析、FCS校验等就是传统网卡干的事。PCS层物理编码子层负责64B/66B编码NRZ或RS-FEC编码PAM4链路、加扰、多通道分发。PMA层物理介质接入负责串行化、时钟恢复、SerDes和光模块电接口的匹配。PMD层物理介质相关就是光模块的光学部分包括激光器驱动、光探测器、TIA等。FPGA测试时Xilinx 100G Ethernet Subsystem这个IP核把MACPCSPMA打包在一起你只需要在上面接你自己的数据逻辑产生以太网帧或PRBS流下面直接通过高速收发器连到光模块。实际调测过程中最容易出问题的不是MAC层而是PCS层的多通道对齐和FEC状态。原因在于100G PCS把数据分发到多个SerDes通道上每个通道的延迟不同必须做对齐补偿lane alignment。如果对齐逻辑没有正常启动你看到的现象就是接收数据全错、误码率直接100%。4.2 Xilinx 100G Ethernet Subsystem配置实例一个可复用的模板下面以Xilinx UltraScale VCU118/VU9P开发板为例演示100G光模块测试时IP核的关键配置项。以下配置基于Vivado 2020.2或更高版本具体菜单名称略有差别但思路通用。配置步骤大致如下创建工程时选择正确的FPGA器件确认高速收发器是GTY因为100G需要至少4路25GGTY能跑25.78125Gbps。在IP Catalog里搜索100G Ethernet Subsystem双击打开配置界面。在“Line Rate”里选择100G确认参考时钟频率通常为156.25MHz内部生成的TX/RX时钟。在“PCS/PMA”设置里RS-FEC模式如果是100G SR425G NRZ可以不选FEC或选Fire Code具体看模块规格如果是100G DR1/FR150G PAM4必须选RS-FECKP4协议。通道数4对应QSFP28四通道。编码方式64B/66B会被自动设置。在“MAC”设置里选择带FCS帧校验的MAC通常开CRC pass-through方便自建误码仪做原始数据比对。关闭流控Pause Frame测试模式下不需要。勾选“Management Interface”Axi-Lite因为后面要通过寄存器查看FEC统计信息、通道对齐状态等关键调试信息。生成IP后在example design基础上修改或者直接使用example design自带的回环测试逻辑。这个配置里我觉得最值得留意的是第4步FEC的选择。很多刚入手的人直接拿模板默认值No FEC拿去测PAM4光模块结果误码率高到怀疑人生。原因很简单模块侧的PAM4链路没开FEC根本压不住噪声。所以拿到光模块先看规格书确认它是NRZ还是PAM4再决定FEC策略顺序不能乱。4.3 参考时钟与复位顺序IP核启动时的“行规”IP核配置好之后复位和时钟上电顺序有讲究。直接说结论Xilinx 100G Ethernet IP核的复位流程建议“先复位时钟再复位逻辑最后释放PMA的复位”。延后太短会让CDR锁定不稳定延后太长又会让系统卡在复位状态。标准的做法是把IP核的tx_rst和rx_rst信号拉高至少2μs然后释放tx_rst等待TX的PLL锁定信号tx_reset_done拉高再释放rx_rst。RX这边要额外等待CDR锁定和数据稳定抽取rx_reset_done信号作为对齐和误码统计的使能条件。这里有个调试小技巧用ILA集成逻辑分析仪抓rx_reset_done和gt_rxcdrlock这两个信号的时序。如果在释放复位后1ms内没看到CDR lock大概率是哪条高速链路的数据根本没到FPGA引脚。接下来该查的就不是逻辑了而是物理层的东西光模块有没有供电、笼子的压降是不是太高、复位脚是不是没拉对。4.4 用PRBS模式还是以太网帧模式两种模式谁更适合光模块测试IP核配好之后测试数据得选一种。两种主流方式是PRBS测试模式IP核里可以配置一个PRBS生成器/校验器直接发PRBS31或PRBS9等伪随机序列。做链路误码分析PRBS是最直接的因为不需要组帧对端也不需要有MAC层逻辑只要串行通道能过就行。以太网帧模式用MAC层生成标准的以太网帧对端接收后检查FCS。这种方式更贴近实际业务但调试复杂一些因为帧对齐、CRC、帧尾空隙等都会引入额外变量。我的经验是初期调链路时用PRBS9快速、好定位跑长时间稳定性测试时用PRBS31高压力最后接真实业务逻辑比如Ping或TCP时再用以太网帧模式。PRBS31跑一晚上不出误码基本可以放心交付。不过有一点要提醒PRBS模式和以太网模式在IP核上不是完全独立的很多IP核把PRBS功能放在PMA层。换句话说PRBS测试通过不代表MAC层就没有问题。我见过一个案例PRBS31跑了几个小时零误码结果切到以太网模式后10秒钟就刷屏报错。原因在于MAC层的FIFO深度不够数据稍微突发一些就溢出。所以我的标准流程是“PRBS验证物理层、MAC帧验证协议层”两边都跑通了才敢说链路没问题。5. 实操过程与核心环节实现一次完整的100G光模块FPGA测试记录理论讲了不少来点实在的。下面是我最近一次在实验室测QSFP28 100G SR4光模块的完整记录包括环境、步骤、参数和中间遇到的小插曲尽量还原当时的操作现场。5.1 测试环境准备从硬件接线到软件工程清单测试环境如下FPGA板卡Xilinx VCU118VU9P芯片有GTY收发器IP核Xilinx 100G Ethernet Subsystem配置为无FEC的4×25G SR4模式光模块某国产厂商的QSFP28 SR4模块850nm多模光纤两根短的多模MPO/MTP跳线用于光回环以及一套LC双工转接跳线如果模块是双工接口衰减器可调光衰减器用于做灵敏度测试时逐步加压工具软件Vivado 2020.2自带ILA用来实时观测寄存器状态串口用来打印FPGA内部统计信息接线时先把QSFP28插入板卡的笼子确认笼子的Power Good指示灯正常。然后连接光纤如果是光回环直接把MPO跳线两端分别插到模块的TX和RX口。注意MPO跳线的公头母头、导向针方向都不能搞错这个地方我第一次做的时候硬是插反了结果肉眼可见的光功率断崖式下降。软件侧打开Vivado工程加载已经生成好的100G IP核的Example Design把工程综合、实现、生成bitstream下载到板卡。5.2 电回环测试确认FPGA逻辑本身零误码上来直接测光模块如果误码过多都不确定是FPGA的问题还是光模块的问题所以我先做了电回环。具体操作是在Example Design里找到“Loopback”相关设置把PMA层回环打开软件里通常是一个寄存器位。这样FPGA发出的数据不经过光模块直接弹回接收端。用ILA观察误码计数器和链路状态寄存器如果电回环的误码计数长期至少15分钟为0说明FPGA内部逻辑、串行收发器、时钟配置都没问题。这一步跑出来的结果是直接复用Example Design默认参数零误码。注意这里有个小坑打开PMA层电回环时某些IP核会默认把RX端的CDR改成参考时钟模式而不是数据恢复模式所以回环出来的数据采样相位可能不是最优。如果误码不为0先确认CDR状态寄存器的值是不是在正常范围。5.3 光回环测试加入光模块和光纤跑第一轮误码率电回环干净之后关闭PMA回环把光模块和光纤接入链路。这是一个重点环节我把步骤和注意事项写清楚关闭PMA回环让FPGA收发数据真正从GTY引脚输出到光模块。光模块插入笼子后等待其初始化完成观察模块的管理接口MDIO/I2C读到的状态确认模块无告警LOS告警、Temperature High告警都不能有。发送PRBS31或者用MAC层发一个连续的单播帧流同时打开接收统计模块。通过ILA或者串口读取误码计数连续跑10分钟记录每分钟的误码数。我记得第一次跑光回环时误码率大概在1E-12附近看起来很不错但还没到零。于是排查了一会儿才发现问题出在MPO跳线的插芯污染——用光纤显微镜一看端面上有两个灰尘颗粒清理后重新插上误码率直接归零。所以别小看光纤端面清洁100G对端面污染的容忍度比10G低太多了。注意每次插拔光纤之前务必用光纤显微镜检查端面保证没有污染和划痕。100G PAM4链路对端面污染的敏感性远超10G/25G一点点脏东西就能导致BER老驴拉磨似的一直上不去。5.4 灵敏度测试用可调衰减器找到光模块的BER拐点链路健康之后可以做更进一步的测试——灵敏度测试即慢慢加大光纤链路的损耗观察误码率什么时候开始劣化。具体做法是在光电回环的光路上串入可调光衰减器初始衰减0dB然后按0.5dB/步逐步加大衰减每步停留1分钟记录对应误码率。当误码率超过1E-9时记下当前光功率从模块的DDM里读的接收光功率或者用光功率计实测这个功率点就是该模块在该速率下的实际灵敏度拐点。从衰减器测试的数据看我手上这块SR4模块大约在接收光功率-10dBm相当于衰减了约10dB时误码率从0跳变到1E-6量级再往下继续衰减误码率急剧恶化。这个数值比规格书上标称的灵敏度低了不少标称-12dBm这也提醒我规格书上的极限值是基于理想环境和测试仪的实际FPGA链路里对着模块的评估要留3~5dB余量才安全。这个测试对产品级验证很有意义因为如果你给客户交付的系统恰好工作在模块灵敏度的边缘温度一变、连接器一松链路就会间歇性丢包。提前摸清楚模块的BER拐点后续系统设计心里就有底了。5.5 长期老化测试跑12小时看误码是否随时间漂移最后一轮测试我习惯跑长期老化。把光回环链路锁定在当前光功率下通常比灵敏度拐点高5dB左右然后让FPGA持续发送PRBS31数据每30分钟通过串口自动记录一次误码累计值。跑12小时事后画出“误码率-时间”曲线。如果有偶发误码曲线会出现台阶如果光模块或链路有温漂问题曲线会出现“后半夜突然恶化”的现象。我第一次做长期测试时发现凌晨3点左右误码累计量会跳了一截排查后发现是实验室空调在凌晨自动切换到节能模式环境温度上升导致光模块温度告警、接收灵敏度下降。从那以后我的长期测试都会同时记录温度和DDM状态并标注空调切换时间、机房计费等外部因素避免把外部干扰误判为模块自身问题。长期测试跑下来如果稳定这轮测试基本可以收工了。6. 遇到过的坑与排查清单11个高频问题按实用度排序做100G光模块测试这几年踩过的坑大体可以分为三类物理链路问题、FPGA内部逻辑问题、参数配置问题。下面挑实用的、出现频率最高的整理成速查表方便大家直接对照排查。现象可能原因排查方向模块插上后FPGA识别不到模块没插到位、笼子压降过大、模块供电异常检查笼子Power Good、测量模块供电引脚电压、确认模块I2C地址CDR锁定失败光信号没到、时钟参考不对、信号质量太差用光功率计确认收端光功率检查参考时钟频率和抖动抓gt_rxcdrlock信号PRBS双链路能做到0误差但MAC帧频繁报错MAC层FIFO溢出或帧间隙过小加大弹性缓冲深度检查帧间隙配置降速运行观察是否复现误码率在1E-10附近浮动下不去光模块端面污染、光纤跳线损耗异常、电源纹波较大清洁光纤端面、换一根跳线对比、用示波器看电源纹波4条通道中只有1条误码高单通道的光路或连接器问题、模块单个通道器件性能退化单独测该通道用光开关/衰减器定位跑BER单项测试pre-FEC BER低于1E-6但post-FEC正常链路余量不足模块接近灵敏度极限检查光功率余量确认FEC统计配置正确考虑增加衰减压测长时间老化后误码突然增加温度漂移、模块性能热衰减监测模块DDM温度、电流控制实验室温湿度FPGA复位后IP核状态不稳复位释放条件不满足、复位时序不对严格按“时钟稳定→TX复位→RX复位→释放”顺序操作误码统计模块计时不准统计使能和时钟域的边界没处理好用独立计数器验证统计模块确保使能信号同步到目标时钟域回环数据周期性错1bit时钟频偏导致弹性FIFO溢出检查收发时钟是否同源增大FIFO深度或使用CDR跟踪模式光模块DDM读到的温度异常的高散热没做好、笼子周围空气流通差检查测试台通风必要时加风扇强制散热这里挑两个案例多说一句因为它们值得仔细琢磨。第一个是“MAC层频繁报错但PRBS零误码”的案例。当时怀疑是光模块问题但换了好几个模块都一样。后来查了IP核配置发现MAC层被设置成“Support multiple outstanding transactions”之类的参数导致内部FIFO在某些帧长度分布下频繁溢出。调整FIFO深度后问题消失。这个案例说明链路测试必须分层次物理层干净不代表协议层干净。第二个是“4条通道中只有1条误码高”。当时排查了很久发现这根通道对应的模块管脚虚焊。用热风枪补焊后立刻好了。如果遇到单通道问题优先查物理连接器、焊接点、PCB走线而不是急着换模块或者调IP参数。提示排查误码问题时一定要先做物理层初步检查光纤端面、光功率、连接器再做逻辑层检查时钟域、FIFO、对齐状态顺序能帮你省掉80%的无用功。7. 工具链与选型心得从Vivado调试到光功率计一套趁手的家伙什儿做100G光模块测试除了FPGA和光模块之外工具链的成熟度决定了你的调试效率。这一节聊聊我实际用下来觉得值得投入的工具和技能。7.1 Vivado里必会的三个调试姿势ILA、VIO、寄存器读写ILA集成逻辑分析仪抓内部信号时序的必备工具。100G链路调试时我一般会抓rx_reset_done、gt_rxcdrlock、rx_axis_tvalid、rx_axis_tlast、错误计数器的递增沿。注意ILA采样速率需要够高否则抓到的是“假信号”会把毛刺当成真实错误。VIO虚拟IO可以在线修改FPGA内部寄存器比如手动复位、打开或关闭某个功能、切换回环模式非常实用。直接寄存器读写如果你在IP核的管理接口例如AXI-Lite上做了封装可以直接通过在Vivado里写一段Tcl脚本或使用SDK/嵌入式方式周期性读取FEC纠错计数、通道对齐状态、误码统计等寄存器输出到串口或者写入文件。这是比ILA更适合长时间记录的方式。我通常的组合是联合使用ILA和寄存器读写。ILA用来抓波形把问题看透寄存器读写用来跑长时间统计拿数据两边配合效率很高。7.2 光模块测试必备仪器和简易替代正经的光模块测试需要光谱仪、眼图仪、误码仪、可调光衰减器等这些仪器对个人学习者来说门槛很高。但做FPGA侧的光模块验证一个基础配置可以只用这些设备光功率计便宜的手持式即可关键是能测出dBm级别功率光纤显微镜看清光纤端面判断是否脏污强烈建议买便宜又能防患于未然可调光衰减器做灵敏度测试必须几百块钱就能买到二手或者国产件光开关可选如果要做双通道切换对比如果实在连这些都没有还有一个野路子利用模块的DDM数字诊断监控功能直接通过I2C读取模块内部上报的接收光功率。FPGA通过I2C总线去读DMIDiagnostic Monitoring Interface寄存器也能判断收光强度和告警标志。虽然精度不如独立光功率计但足以应付80%的故障判断。7.3 FPGASTM32做光模块管理为什么我推荐加一个监控MCU很多FPGA板卡会搭配一颗STM32或者类似的MCU专门做光模块的I2C管理和系统监控。这个搭配在100G光模块测试中很有价值FPGA不擅长处理慢速管理总线I2C/MDIO的时序复杂度加个MCU可以方便地在系统侧用UART/USB读写模块寄存器MCU可以做DDM数据采集和记录定期上报到串口异常时自动告警如果后续要接上位机MCU还可以分担一部分数据处理和网络协议栈。热词里有人问“光模块MCU需要什么规格”我的建议是不需要多高端Cortex-M0或者M3的MCU带2路硬件I2C、1路UART、足够Flash和RAM存储DDM历史数据就完全够用。STM32F103之类的大路货就很好因为生态成熟、代码示例多、调试工具好找。真正的难点不在MCU本身而在于I2C总线上光模块的地址轮询、掉线重连、以及和FPGA主控之间的信号交互逻辑。8. 写在最后的经验复盘100G光模块的FPGA测试说到底不是在测“光模块好不好”而是在测“FPGA知不知道光模块好不好”。整套测试体系的核心永远是把链路拆开成一层一层的、每层都能单独验证、每层都有明确的判据。从我做了这么多次测试的经验来看收获最大的往往是那些“模棱两可”的时刻——比如PRE-FEC和POST-FEC不一致的时候、单通道误码飘高的时候、长期老化数据里出现一个小时异常的时候。这些时刻逼着你把协议栈、物理层、模块DDM数据、甚至实验室的空调温度关联起来看逼着你真正去理解100G链路不是一台设备的事而是整套链路共同作用的结果。最后再分享一个工具上的小技巧如果你要频繁测试不同型号的光模块强烈建议写一个简单的上位机小工具通过MCU或FPGA的串口去读取模块的DDM数据、误码计数并自动套用一个“健康评分”公式例如pre-FEC BER在1E-9以下记10分1E-9~1E-7记8分1E-7~1E-5记5分超过1E-5记0分。这个方法能帮你批量快速筛选模块省下大量手动看寄存器的时间。实测下来在不同供应商的光模块横向评测中这套评分系统比肉眼观察寄存器数值靠谱得多。如果你刚开始接手100G光模块测试建议从最简单的环境开始一块支持GTY收发器的开发板、一个QSFP28 SR4光模块、两根短的多模跳线、一台能跑Vivado的电脑。先跑通一条PRBS31回环把那些寄存器状态、CDR锁定、FEC统计这些名词搞明白然后再逐步增加复杂度。这条路走下来你对100G光口和光模块的理解会比看一百篇理论文档都深刻得多。
觉得有用,分享给同行:

为您的企业打造数字门面

稳重轻奢商务风格,端正雅致视觉,长效耐看不易过时。

立即咨询 →