一、光通信基础与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μm | 50μ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.937 | 5.8dB | 10G以太网 |
| LDPC(672,504) | 0.75 | 8.5dB | 100G/400G |
| Staircase码 | 0.87 | 9.4dB | 超长距离 |
1.5.3 时钟恢复与时钟管理
光通信系统对时钟的要求极高。FPGA内部的MMCM/PLL可以生成多种频率的时钟,同时配合外部CDR芯片完成时钟恢复。
嗯,这里有个细节——FPGA的时钟网络是分区域的。不同Bank的时钟域之间做数据交互时,一定要用异步FIFO或同步器。我见过有人直接把两个时钟域的信号连在一起,结果仿真没问题,上板就跑飞了。
1.6 典型光通信系统架构框图
下面这张图是我自己总结的典型FPGA光通信系统架构。你仔细看,FPGA处在整个系统的核心位置——它既管数据收发,又管协议处理,还管监控管理。
从这张图可以看出,FPGA处在发射端和接收端的中间,负责数据的收发、处理、监控。SerDes直接对接光模块的电接口,FEC保证链路的可靠性,时钟管理确保整个系统同步。
重要提醒:实际项目中,FPGA和光模块之间往往还有光模块管理接口(如MDIO、I2C)。这些接口用来读取光模块的状态(温度、电压、光功率等),也可以配置光模块的工作模式。千万别忘了加——我见过有人把光模块的I2C接口悬空,结果光模块一直工作在默认模式,性能根本达不到要求。
1.7 小结
光通信系统说白了就是"电→光→光纤→光→电"的过程。FPGA在这个链条里扮演着"大脑"的角色——它控制着数据的收发、纠错、时钟同步,还负责和光模块"对话"。
我个人觉得,理解光通信的关键在于三点:
- 发射端:怎么把数据可靠地"写"到光上
- 信道:光在光纤里会经历什么损伤
- 接收端:怎么从被污染的光信号中恢复出原始数据
FPGA工程师要做的,就是在这三个环节中找到最优的平衡点。后面的章节,我会逐一深入讲解每个模块的设计细节。
公众号:蓝海资料掘金营,微信deep3321