第三章 光通信芯片关键模块: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怎么配置,以及和光模块的接口设计。