光纤接口调试实战——换了根光纤链路就不通了?基本上就这两个原因 很多人以为光纤调试比铜缆简单——插上就能用不用关心阻抗匹配。但真正踩过坑的都知道光纤里的坑比铜线多得多同样的GT配置换个光模块就不link up短光纤正常换成长光纤就开始丢包链路能起来但BER就是压不下去接收光功率明明在范围内误码却一直有光纤的问题不在FPGA里在光模块和光路上。这篇文章把光纤调试的核心知识全部拆开从SFP模块选型到光功率预算从CDR适配到IBERT眼图分析全部覆盖。本文与前几篇的关系前文讲了GTX/GTH配置、Aurora协议把FPGA侧的逻辑调通。本文转向光模块、光纤、光路、DOM监测等硬件链路层打通“FPGA芯片 → 高速收发器 → 光模块 → 光纤链路”完整闭环解决“代码调通、上光链路就翻车”的典型断层问题。痛苦点一同样的GT配置换个光模块就不link up问题描述你的Aurora链路在实验室调通了换了一对光模块到现场结果链路训练一直跑不通——lane_up拉不高报RXNOTINTABLE错误。你换回原来的光模块又好了。问题不在FPGA代码在光模块。根本原因SFP光模块内部不只是光转电它还包括CDR时钟数据恢复芯片有些SFP模块自带CDR会重新处理时钟FEC前向纠错部分10G光模块带FEC与GTX/GTH的8B/10B编码可能冲突MSA标准版本不同厂商的SFP遵循MSA标准版本不同CDR直通模式DAC模式行为不一致光模块有三种模式模式说明兼容性CDR BypassCDR直通不处理数据✅ GTX/GTH最佳搭档CDR EnabledCDR开启重新恢复时钟⚠️ 可能与GT内部CDR冲突10G速率下问题最突出FEC EnabledFEC纠错开启❌ 与GT 8B/10B不兼容低速场景备注速率低于6Gb/s时双重CDR的影响相对较小部分DAC铜缆模块也自带CDR调试思路与光模块一致。❌ 错误做法verilog// ❌ 随便买一对SFP光模块插上就用// 结果模块带CDR与GTX的CDR冲突lane_up拉不高// 或者模块带FECGTX不认识FEC编码误码不断// ❌ 看都不看光模块型号// 某宝9.9包邮的光模块 CDR Enabled FEC可能不兼容✅ 正确做法verilog// ✅ 第一步确认光模块型号查datasheet// 关键是看CDR和FEC配置// ✅ 第二步选对模式——CDR Bypass模式的光模块// 典型CDR Bypass光模块特征// - 描述含 CDR Bypass 或 CDR Pass-through// - 传输距离标注 ≤ 300m多模 或 ≤ 10km单模// - 速率10.3125 Gbps 8B/10B 无FEC// 不带CDR的光模块真光模块// - 纯光收发不含CDR直接把光信号转电信号给GT// - 价格稍贵但兼容性最好// ✅ 第三步如果必须用CDR Enabled模块// 关闭GTX/GTH内部的CDR改为直接模式仅UltraScale及更高版本支持// 7系列GTX不支持关闭内部CDR只能换模块// ✅ 验证方法用IBERT测试// 换模块前后都跑一遍IBERT BER测试// CDR Bypass模块BER稳定 10^-12// CDR Enabled模块可能有波动或不兼容光模块选型速查应用场景推荐光模块类型关键参数板间互联 300mSFP SR多模CDR Bypass850nm OM3光纤远距离 ≥ 1kmSFP LR单模CDR Bypass1310nm LC光纤10G Ethernet透传SFP LR无FEC确认无FECAurora 8B/10B直连必须CDR Bypass确认无FEC痛苦点二短光纤正常换成长光纤就开始丢包问题描述实验室里用2米的跳线光链路完美——lane_up常亮BER10⁻¹²。换了30米光纤lane_up偶尔掉线误码开始出现。换了100米光纤彻底不通。这是典型的光功率预算不足。根本原因光信号在光纤里传播会衰减每公里都有固定损耗光纤类型波长损耗OM3多模50/125μm850nm~3.5 dB/kmOM4多模850nm~3.0 dB/kmOM1/OM2多模850nm~4.0 dB/km (跨等级混用损耗更大)OS1/OS2单模1310nm~0.4 dB/kmOS1/OS2单模1550nm~0.2 dB/km光功率链路预算公式text接收光功率 发射光功率 - 光纤损耗 - 连接器损耗 - 余量链路可通的必要条件接收光功率 光模块灵敏度通常 -14 dBm❌ 错误做法verilog// ❌ 只看光纤长度不算光功率预算// 100m OM3光纤损耗 0.35 dB看起来很小// 但加上两个LC连接器每个0.5dB 1dB// 再加上光模块发射功率偏差-3dB 实际更糟// ❌ 认为单模光纤损耗低长距离随便用// 1000m单模光纤损耗 0.4dB确实很低// 但如果发射光功率只有 -5dBm接收灵敏度 -14dBm// 余量只有 9dB如果连接器脏了损耗2dB 余量为负✅ 正确做法verilog// ✅ 第一步查光模块规格书得到两个关键参数// - 发射光功率TX Power典型 -5 ~ 0 dBm// - 接收灵敏度RX Sensitivity典型 -14 ~ -7 dBm// 例如SFP SR模块// - 发射功率-5 ~ -1 dBm取典型值 -3 dBm// - 接收灵敏度-11 dBm10.3Gbps8B/10B// ✅ 第二步计算链路损耗// 100m OM3光纤 0.35 dB// 2个LC连接器 2 x 0.5 dB 1 dB// 总损耗 ≈ 1.35 dB// ✅ 第三步计算接收光功率// 接收 发射-3 dBm- 链路损耗1.35 dB -4.35 dBm// 对比灵敏度 -11 dBm-4.35 -11✅ 余量 6.65 dB链路稳定// ✅ 第四步长距离场景重新计算// 10km单模光纤 0.4 x 10 4 dB// 2个LC连接器 1 dB// 总损耗 5 dB// 接收 -3 - 5 -8 dBm// -8 -11余量 3 dB勉强能用建议留 ≥ 3dB 余量// ✅ 长距离必须用LR模块发射功率更高// SFP LR模块发射功率 0 ~ 5 dBm// 用 0 dBm 发射功率 10km单模// 接收 0 - 5 -5 dBm// -5 -11余量 6 dB ✅光功率链路预算计算器参数值单位发射光功率-3dBm- 光纤损耗-3.5 × L(km)dB- 连接器损耗-0.5 × NdB 接收光功率XdBmvs. 接收灵敏度-11dBm余量X - (-11)dB结论余量 ≥ 3 dB 才算安全≥ 6 dB 才算稳健。高温、多转接、老旧链路场景建议预留≥6dB余量。⚠️光功率上限提醒接收光功率建议区间-8 ~ -3 dBm。高于 0 dBm 易烧毁光器件低于灵敏度直接断链。痛苦点三IBERT扫了眼图不知道是好是坏问题描述你用IBERT扫了眼图——看到眼图张开了但不确定是否达标。有人说是好图有人说误码压不下去就是眼图不够好。你对着屏幕发呆这张眼图到底能不能交付根本原因IBERT眼图反映的是链路质量综合结果但需要正确解读眼图特征说明判断眼高Eye Height大信号幅度清晰开眼好✅ 好眼宽Eye Width大时钟采样窗口宽✅ 好眼图中间有杂散有码间干扰ISI⚠️ RX均衡不够眼图歪斜时钟相位偏差⚠️ CDR锁定不稳眼图上部/下部有缺口TX Pre-emphasis过强/过弱⚠️ 需调TX均衡眼图全闭合光模块或GT配置错误❌ 查配置注眼高200mV差分峰峰值400mV是典型参考值不同速率、不同厂商模块指标略有浮动最终以BER结果为判定依据。❌ 错误做法verilog// ❌ 眼图张开了就认为OK// 实际上眼图张开度60%只是基本要求// 还要看BER——眼图看着好BER可能不达标噪声累积// ❌ 只看眼图不看BER// IBERT显示眼图完美但跑了1小时BER10^-8// 说明眼图扫描时间太短没抓到偶发误码// ❌ 用短时间扫描代替长时间测试// 10秒扫描能发现重大问题但偶发误码需要1小时扫描✅ 正确做法tcl# ✅ IBERT完整测试流程从快速扫描到长时验证# 第一步快速眼图扫描2分钟open_hw_managerconnect_hw_server -url localhost:3121open_hw_targetcurrent_hw_device [get_hw_devices xc7k325t_0]create_hw_ila_setup -name ila_ibert -depth 4096start_rx_scan -mode EYE_SCAN -duration 60# 观察眼图张开度目标 60%# 第二步BER快速测试10分钟start_tx_rx_scan -pattern PRBS31 -duration 600# 目标BER 10^-9这步只是初筛# 第三步BER长时验证1小时工业级要求start_tx_rx_scan -pattern PRBS31 -duration 3600# 目标BER 10^-12工业控制级# 达不到就回去调TX Pre-emphasis / RX CTLE / 光模块# 第四步温度循环可选但强烈建议# GT对温度敏感高温下CDR抖动增加# 在25°C / 45°C / 65°C各跑1小时IBERT# 任一温度点BER超标都要处理verilog// ✅ 眼图质量判断标准实战版// 满足以下全部条件才算OK// 1. 眼高 200 mV差分峰峰值 400 mV// 2. 眼宽 0.4 UIUIUnit Interval即一个符号周期// 3. 眼图中心 20% 区域内无明显杂散// 4. BER 10^-121小时扫描// 5. 不同温度点25°C / 65°CBER都达标// ✅ 如果眼图看着好但BER不达标问题在RX均衡// 增加CTLE增益或开启DFE模式(* DONT_TOUCH true *)GTHCE3_CHANNEL #(.RX_CTLE_CFG (16h7C41), // 手动加强CTLE实测调优.RX_DFE_GAIN (6h20), // 提高DFE增益.RX_DFE_LPM_NOHOLD (1b0), // 关闭LPM使用DFE模式) u_gth_rx (/* ... */);痛苦点四光纤插进去没有光功率读数问题描述你的GT设计里有光功率监测功能PRBS检测期间但插上光纤后接收光功率显示为0。你以为是光纤坏了换了一根还是0。你以为是光模块坏了换了一个还是0。但真正的问题是你的光功率监测没有正确配置。根本原因GTX/GTH的光功率监测Optical Monitor需要光模块支持DOMDigital Optical Monitoring不是所有SFP都带DOMGT内部有A/D转换器读取模块EEPROM需要配置I2C读取光模块状态正确解析SFF-8472标准DOM数据光功率在A2h地址的特定字节❌ 错误做法verilog// ❌ 以为只要插上光纤就能读到光功率// 实际上需要I2C读取光模块的DOM数据// GTX/GTH本身不直接输出光功率需要读取SFF-8472数据// ❌ 直接读光模块I2C地址但时序不对// SFF-8472要求// - 写地址1010_0000 (0xA0)// - 读数据地址1010_0001 (0xA1)// - A2h页存DOM数据// 时序Start - 0xA0 - 寄存器地址 - Restart - 0xA1 - 读数据 - Stop✅ 正确做法verilog// ✅ 第一步确认光模块支持DOM// DOM模块有A2h地址空间不带DOM的模块没有// 判断方法插上模块后I2C读0xA2地址能读出数据说明带DOM// ✅ 第二步I2C读取SFF-8472 DOM数据// 光功率数据在Page A2h地址偏移量// - TX Power MSB: 0x96// - TX Power LSB: 0x97// - RX Power MSB: 0x9A// - RX Power LSB: 0x9B// 注意数据是线性刻度需要转换localparam SFP_ADDR 7h50; // 0xA0 1localparam SFP_DOM_ADDR 7h51; // 0xA2 1localparam RX_POWER_H 8h9A; // 接收光功率高字节localparam RX_POWER_L 8h9B; // 接收光功率低字节reg [15:0] rx_power_raw;reg [15:0] rx_power_dbm; // 单位0.1 dBm// I2C读取光模块DOM状态机示例always (posedge i2c_clk) begincase (dom_state)DOM_IDLE: beginif (start_read) begindom_state DOM_WRITE_ADDR;i2c_valid 1b1;i2c_addr SFP_DOM_ADDR;i2c_wdata RX_POWER_H;i2c_rw 1b0; // 写地址endendDOM_WRITE_ADDR: beginif (i2c_done) begindom_state DOM_RESTART;i2c_valid 1b0;endendDOM_RESTART: begini2c_valid 1b1;i2c_addr SFP_DOM_ADDR;i2c_rw 1b1; // 读数据dom_state DOM_READ_H;endDOM_READ_H: beginif (i2c_done) beginrx_power_raw[15:8] i2c_rdata;dom_state DOM_READ_L;endendDOM_READ_L: beginif (i2c_done) beginrx_power_raw[7:0] i2c_rdata;dom_state DOM_CALC;endendDOM_CALC: begin// SFF-8472 线性格式转换通用公式单位0.1 dBm// 注不同厂商光模块偏移值略有差异量产建议以模块datasheet为准// 如需dBm需再除以10rx_power_dbm (rx_power_raw[15:0] * 10) / 32 - 130;dom_state DOM_DONE;enddefault: dom_state DOM_IDLE;endcaseendDOM数据速查SFF-8472参数字节地址说明RX Power MSB0x9A线性格式需转换RX Power LSB0x9BTX Power MSB0x96线性格式需转换TX Bias Current0x9C偏置电流μA模块温度0x96 (Page 00)单位0.5°C偏移-128告警标志0xC0RX_LOS / TX_FAULT等⚠️ 重要注意事项量产级规范注意事项一光纤接口必须做好防尘这是最容易忽略、但出问题时最难排查的问题。光模块的LC接口进灰尘后短距离内光功率可能只损失1~2dB看起来连接正常但高功率密度下灰尘颗粒会吸收大量光能产生热效应长期下来接口会进一步恶化清洁步骤用压缩空气吹掉松散灰尘用清洁笔酒精棉签沿一个方向擦拭陶瓷插芯立即插入光模块不要等待清洁完成后立即盖上防尘帽注意事项二光模块的CDR和GT的CDR不能同时全开10G速率下双重CDR问题最突出部分DAC铜缆模块也自带CDR调试思路与光模块一致解法优先选用CDR Bypass模块若必须用CDR Enabled模块且平台支持UltraScale可尝试关闭GT内部CDR注意事项三光纤弯曲半径有下限光纤类型最小弯曲半径OM3/OM4多模7.5 cm动态/ 3 cm静态OS1/OS2单模15 cm动态/ 3 cm静态超过最小弯曲半径损耗急剧增加甚至断裂。布线时用光纤绑扎带固定保持大于最小半径。注意事项四光纤的PMD类型必须匹配PMD类型波长典型距离光纤类型SR850nm≤ 300mOM3/OM4多模LR1310nm≤ 10kmOS1/OS2单模ER1550nm≤ 40kmOS1/OS2单模SR光模块不能用于单模光纤LR光模块不能用于多模光纤。不同等级多模光纤OM1/OM2/OM3/OM4也不建议跨等级混用会增大损耗、限制传输距离。注意事项五多模光纤不同波长损耗差异大波长OM3损耗OM4损耗850nm3.5 dB/km3.0 dB/km1300nm1.5 dB/km1.0 dB/km用850nm SFP模块时不要用1300nm波长的跳线。光纤接口完整调试清单检查项方法期望结果光模块型号确认查datasheetCDR Bypass 无FEC发射光功率I2C读DOM 0x96/0x97在规格书范围内±2dB接收光功率I2C读DOM 0x9A/0x9B 接收灵敏度余量≥3dB建议-8~-3dBm链路损耗预算计算接收功率 - 灵敏度 ≥ 3dBIBERT眼图扫描IBERT 60秒眼图张开 60%IBERT短时BERIBERT 10分钟BER 10⁻⁹IBERT长时BERIBERT 1小时BER 10⁻¹²光纤类型匹配看光纤标签SR配OM3/OM4LR配OS1/OS2弯曲半径目视检查 最小弯曲半径光接口清洁度目视或显微镜无灰尘、无划痕CDR配置查光模块型号与GT CDR不冲突常见问题 FAQQ1光模块带不带CDR怎么判断看型号和datasheet。型号含“CDR-Bypass”或“CDR Pass-through” → CDR直通型号含“CDR-Enabled”或“CDR-ON” → CDR开启无描述 → 可能不带CDR需要实测实测方法插上模块I2C读A2h页地址0x00~0xFF如果全0或全F说明不带DOM也可能不带CDR或CDR直通。Q2光功率在范围内但BER很高什么原因按以下顺序排查眼图质量差 → IBERT扫眼图TX Pre-emphasis不够 → 长光纤场景加强预加重RX CTLE/DFE不够 → 手动加强RX均衡光模块CDR冲突 → 换成CDR Bypass模块光纤端面脏 → 清洁光纤接口和光模块接口最常见原因光模块CDR冲突 光纤接口脏。Q3多模光纤和单模光纤能混用吗不能。纤芯直径不同多模50/62.5μm单模9μm混用会导致发射光功率严重衰减20dB链路完全不通。两端必须用相同光纤类型。Q4两根光纤方向都要用LC双工吗是的。Aurora 8B/10B是全双工协议需要两根光纤分别承载TX和RX。只用一根光纤只能单向传输链路不通。Q5光功率余量越大越好吗有没有上限适中最好。接收光功率 -3 dBm → 部分模块CDR可能过载产生非线性失真接收光功率 0 dBm → 可能损坏光模块接收端理想范围-8 ~ -3 dBmQ6光纤拉远了链路不稳定但重启后又好了什么原因最可能温度漂移 光功率余量不足。光纤损耗随温度变化~0.1dB/°C光模块发射功率和接收灵敏度也随温度变化解法增加光功率余量到 ≥ 6dB选用工业级温度范围光模块-40°C ~ 85°C优先选用1310nm波长比850nm温度稳定性更好总结痛苦点根因解法换模块就不通光模块CDR/FEC与GT冲突选CDR Bypass 无FEC模块长光纤丢包光功率预算不足计算链路损耗留足≥3dB余量眼图不知好坏不会解读IBERT眼图60% BER10⁻¹²双指标光功率读0DOM未配置/I2C时序错正确读取SFF-8472 DOM数据光纤调试三件事——选对光模块、算清光功率、看懂眼图。把这三件事搞清楚了光纤调试就不再靠运气。关注我SerDes高速串行接口专题持续更新。