第三章 光通信芯片关键模块:TIA、CDR、MUX/DEMUX、FEC原理
好,咱们今天聊聊光通信芯片里几个最核心的模块。说实话,这些模块我当年刚接触时也觉得头大,但后来发现,只要把每个模块的「脾气」摸透了,系统设计就顺了。
我个人习惯,看一个光通信芯片好不好,先看这四个模块:TIA、CDR、MUX/DEMUX、FEC。它们就像人的眼睛、大脑、血管和免疫系统。缺一个,系统就转不起来。
3.1 TIA(跨阻放大器)—— 光信号的「第一道门」
TIA,全称是Trans-Impedance Amplifier。说白了,就是把光探测器(PD)产生的微弱电流,转成电压信号,同时放大。
为什么叫「跨阻」?因为输入是电流,输出是电压,增益单位是欧姆(Ω)。你想想看,这不就是「跨」过了阻抗嘛。
核心指标:
- 跨阻增益(Transimpedance Gain):通常几十kΩ到几百kΩ。增益太高,带宽就受限;增益太低,后面CDR锁不住。
- 带宽(Bandwidth):一般要求是数据速率的0.7倍左右。比如25Gbps,TIA带宽至少做到17GHz以上。
- 输入噪声(Input Noise):这个很关键。噪声大了,灵敏度就差了。
我在项目中遇到过一个问题:TIA的带宽明明够,但眼图就是睁不开。查了半天,原来是电源纹波太大,耦合到了TIA的输出端。嗯,这里要注意——TIA对电源噪声极其敏感,Layout时一定要做好隔离。
避坑指南:
我曾经在25Gbps项目中,TIA输出端直接接了AC耦合电容,结果低频分量被切掉了,导致CDR失锁。后来我习惯在TIA输出加一个DC恢复电路,或者用大电容(比如100nF)做耦合。
3.2 CDR(时钟数据恢复)—— 系统的「心脏起搏器」
CDR,Clock and Data Recovery。它的任务很简单:从数据信号里把时钟「挖」出来,然后用这个时钟重新采样数据。
为什么会需要CDR?因为光信号在光纤里传输时,时钟信息会被「抖」掉。你想想看,没有时钟,FPGA怎么采样?
CDR的核心结构有两种:
- 基于PLL的CDR:最常见。用鉴相器比较数据边沿和本地时钟,然后调整VCO频率。
- 基于相位插值的CDR:多用于高速SerDes。通过插值器微调采样相位。
我个人习惯,在FPGA里做CDR时,优先用相位插值型。为什么?因为PLL的锁定时间太长,而且对工艺偏差敏感。相位插值型可以做到亚皮秒级的相位调整。
注意:
CDR的抖动容限(Jitter Tolerance)一定要留余量。我记得有一次,系统在实验室跑得好好的,一上现网就误码。后来发现是CDR的抖动容限刚好卡在标准下限,现场环境一恶化就崩了。我建议至少留20%的余量。
3.3 MUX/DEMUX(复用/解复用)—— 数据的「高速公路」
MUX就是把多路低速信号合并成一路高速信号。DEMUX反过来,把一路高速信号拆成多路低速信号。
举个例子:4路25Gbps信号,通过MUX变成1路100Gbps。在FPGA里,我们通常用SerDes的并串转换功能来实现。
MUX/DEMUX的关键参数:
| 参数 | 说明 | 典型值(100Gbps) |
|---|---|---|
| 数据速率 | 单路最高速率 | 25-28Gbps |
| 通道数 | MUX输入/输出路数 | 4:1 或 16:1 |
| 时钟抖动 | 输出时钟的抖动 | < 0.5ps RMS |
| 功耗 | 每通道功耗 | 约50-100mW |
我在做400Gbps光模块时,发现MUX的时钟树设计特别容易出问题。多个通道的时钟相位如果不一致,输出信号就会产生确定性抖动。说白了,就是时序没对齐。
经验之谈:
在FPGA里实现MUX/DEMUX时,我建议用原语(Primitive)而不是RTL代码。比如Xilinx的ISERDESE2和OSERDESE2,这些原语经过了硅验证,时序更可靠。
3.4 FEC(前向纠错)—— 系统的「免疫系统」
FEC,Forward Error Correction。光信号在传输过程中难免会出错,FEC就是在发送端加入冗余校验码,接收端用这些校验码来纠正错误。
常见的FEC类型:
- RS码(Reed-Solomon):比如RS(255,239),可以纠正8个字节错误。开销约7%。
- LDPC码(Low-Density Parity-Check):比如IEEE 802.3bs定义的LDPC(17280, 14592),纠错能力更强,开销约18%。
- 级联码:RS + LDPC组合,用于超长距传输。
我个人习惯,在FPGA里实现FEC时,优先用LDPC。为什么?因为LDPC的编码增益高,而且可以用迭代译码,硬件效率好。
关键指标:
- 编码增益(Coding Gain):比如LDPC在10^-15误码率下,增益可达10dB以上。
- 开销(Overhead):比如7%开销意味着每100bit数据要传107bit。
- 延迟(Latency):LDPC译码延迟通常在几百纳秒到几微秒。
我记得有一次,客户要求误码率低于10^-15,但光模块的原始误码率只有10^-5。怎么办?加FEC。我们选用了LDPC(17280, 14592),编码增益约11dB,最终系统误码率降到了10^-16。嗯,这就是FEC的魅力。
注意:
FEC不是万能的。我曾经遇到一个项目,FEC的纠错能力明明够,但系统还是误码。查了半天,原来是FEC的帧同步没做好,导致译码器一直在「乱译」。所以,FEC的帧同步设计一定要稳健,建议用多级同步头。
3.5 四个模块的协同工作
好了,四个模块都讲完了。它们怎么配合呢?
光信号进来 → TIA放大 → CDR恢复时钟和数据 → DEMUX拆成多路低速信号 → FEC纠错 → 送给FPGA处理。
反过来,FPGA发送数据 → FEC编码 → MUX合并成高速信号 → 驱动激光器 → 光信号出去。
你想想看,任何一个模块出问题,整个链路就断了。所以,做系统设计时,一定要把每个模块的接口时序、噪声容限、功耗预算都算清楚。
我个人习惯,在FPGA里做一个「链路健康监测」模块,实时监控TIA的RSSI、CDR的锁定状态、FEC的误码率。这样一旦有问题,可以快速定位。
最后一点建议:
做光通信芯片和FPGA协同设计,不要只看datasheet。一定要搭一个测试平台,用真实的光模块和光纤来验证。我曾经在仿真里跑得好好的,一上光纤就发现TIA和CDR的接口电平不匹配。嗯,纸上得来终觉浅,绝知此事要躬行。
好,这一章就到这里。下一章我们聊聊FPGA里的SerDes怎么配置,以及和光模块的接口设计。