一、光通信基础与FPGA角色

1.1 光通信系统概述

光通信,说白了就是用光来传数据。你想想看,电信号在铜线上跑,频率高了损耗就大,距离一远就不行。光就不一样了——频率高、带宽大、损耗小,一根光纤能顶上千根铜线。

我刚开始接触光通信时,总觉得这东西很神秘。后来拆了几个光模块,发现核心结构其实没那么复杂。一个完整的光通信系统,主要由三部分组成:

  • 发射端:把电信号转成光信号,然后打出去
  • 光纤信道:光信号在里面跑,从A点到B点
  • 接收端:把光信号再转回电信号,恢复出原始数据

嗯,这里要注意——发射端和接收端之间,往往还有中继器或放大器。长距离传输时,光信号会衰减,中间得补一补。

1.2 发射端:电到光的转换

发射端的核心器件是激光器(LD)和调制器。激光器产生连续的光波,调制器把数据"写"到光波上。

我见过很多刚入行的工程师,以为发射端就是把电信号直接接到激光器上就完事了。其实没那么简单。发射端内部通常包含:

  • 数据编码:比如8B/10B、64B/66B编码,保证DC平衡
  • 串行化:把并行数据转成高速串行流
  • 激光驱动:提供足够的电流驱动激光器发光
  • 偏置控制:稳定激光器的工作点,防止温度漂移

关键指标:发射端最核心的参数是消光比(ER)和光功率。消光比太低,接收端误码率会飙升。我曾在某个项目中,因为激光器老化导致消光比从8dB掉到5dB,误码率直接翻了一个数量级。

1.3 接收端:光到电的恢复

接收端的工作比发射端更棘手。光信号经过光纤传输后,已经变得很弱了,而且还有噪声和失真。

接收端的核心器件是光电探测器(PD)和跨阻放大器(TIA)。PD把光信号转成电流,TIA把电流转成电压信号。

但光有这些还不够。接收端还需要:

  • 时钟恢复(CDR):从数据流中提取时钟信号
  • 均衡器:补偿光纤色散造成的码间干扰
  • 判决器:把模拟信号恢复成数字0和1
  • 解串器:把高速串行数据转回并行

个人经验:接收端的设计难点在于灵敏度动态范围的平衡。我曾经调试过一个10G光模块,接收端灵敏度做到-18dBm,但动态范围只有10dB。结果在实际链路中,光功率稍微波动就出误码。后来加了自动增益控制(AGC),动态范围才做到20dB以上。

1.4 光纤信道:光信号的传输介质

光纤本身也有不少门道。单模光纤和多模光纤,区别很大:

参数单模光纤多模光纤
纤芯直径9μm50μm或62.5μm
传输距离几十公里几百米到几公里
带宽极高中等
成本较高较低
典型应用长途骨干网数据中心内部

光纤信道的主要损伤包括:

  • 衰减:光功率随距离指数下降,1550nm窗口衰减约0.2dB/km
  • 色散:不同波长的光跑得不一样快,导致脉冲展宽
  • 非线性效应:光功率太高时,光纤本身会产生非线性失真
  • 偏振模色散(PMD):两个偏振态的光速度不同

为什么会这样?说白了,光纤不是完美的。它是个物理介质,有损耗、有延迟、有非线性。我们做系统设计的,就是要跟这些"不完美"打交道。

1.5 FPGA在光通信中的核心作用

FPGA在光通信系统里扮演什么角色?我个人的理解是——胶合逻辑 + 高速处理引擎

FPGA能干的事很多,但最核心的有三个:

1.5.1 SerDes——高速串行接口

FPGA内部集成了高速SerDes硬核,速率从1Gbps到112Gbps不等。这些SerDes可以直接对接光模块的电接口。

我记得第一次用Xilinx的GTH时,被那密密麻麻的配置寄存器搞得头大。但用顺手之后,发现SerDes的灵活性确实高——可以调预加重、调均衡、调时钟相位,几乎能适配任何光模块。

避坑指南:我曾经因为SerDes的参考时钟抖动超标,导致整个链路误码率居高不下。查了两天才发现是时钟源的问题。后来我养成了一个习惯——先测时钟,再调SerDes

1.5.2 FEC——前向纠错

光通信链路的误码率通常在10^-12到10^-15之间。但有些场景(比如长距离传输),原始误码率可能只有10^-6。这时候就需要FEC来救场。

FPGA实现FEC的优势在于:

  • 可以灵活选择编码方案(RS、LDPC、BCH等)
  • 可以动态调整编码率
  • 可以结合软判决信息提升增益

常见的FEC编码参数:

编码类型编码率净编码增益典型应用
RS(255,239)0.9375.8dB10G以太网
LDPC(672,504)0.758.5dB100G/400G
Staircase码0.879.4dB超长距离

1.5.3 时钟恢复与时钟管理

光通信系统对时钟的要求极高。FPGA内部的MMCM/PLL可以生成多种频率的时钟,同时配合外部CDR芯片完成时钟恢复。

嗯,这里有个细节——FPGA的时钟网络是分区域的。不同Bank的时钟域之间做数据交互时,一定要用异步FIFO或同步器。我见过有人直接把两个时钟域的信号连在一起,结果仿真没问题,上板就跑飞了。

1.6 典型光通信系统架构框图

下面这张图是我自己总结的典型FPGA光通信系统架构。你仔细看,FPGA处在整个系统的核心位置——它既管数据收发,又管协议处理,还管监控管理。

典型FPGA光通信系统架构框图 发射端 激光器 + 调制器 激光驱动 + 偏置控制 光功率监控 接收端 PD + TIA CDR + 均衡器 判决 + 解串 光纤信道 单模/多模光纤 衰减 ~0.2dB/km 色散 + 非线性 FPGA 核心处理 SerDes 硬核 GTH/GTY/GTM 速率: 1G~112G FEC 引擎 RS/LDPC/BCH 软判决 + 迭代 时钟管理 MMCM/PLL 时钟恢复 + 去抖 协议 MAC PCS 监控与管理 光功率监测 / 温度 告警 / 性能统计 数据通路 FIFO / 帧同步 速率匹配 / 字节对齐 接口 AXI / PCIe MDIO / I2C

从这张图可以看出,FPGA处在发射端和接收端的中间,负责数据的收发、处理、监控。SerDes直接对接光模块的电接口,FEC保证链路的可靠性,时钟管理确保整个系统同步。

重要提醒:实际项目中,FPGA和光模块之间往往还有光模块管理接口(如MDIO、I2C)。这些接口用来读取光模块的状态(温度、电压、光功率等),也可以配置光模块的工作模式。千万别忘了加——我见过有人把光模块的I2C接口悬空,结果光模块一直工作在默认模式,性能根本达不到要求。

1.7 小结

光通信系统说白了就是"电→光→光纤→光→电"的过程。FPGA在这个链条里扮演着"大脑"的角色——它控制着数据的收发、纠错、时钟同步,还负责和光模块"对话"。

我个人觉得,理解光通信的关键在于三点:

  • 发射端:怎么把数据可靠地"写"到光上
  • 信道:光在光纤里会经历什么损伤
  • 接收端:怎么从被污染的光信号中恢复出原始数据

FPGA工程师要做的,就是在这三个环节中找到最优的平衡点。后面的章节,我会逐一深入讲解每个模块的设计细节。


公众号:蓝海资料掘金营,微信deep3321