一、高速收发器概述
1.1 什么是高速收发器
高速收发器,说白了就是FPGA芯片上那些能跑上Gbps的串行接口。我刚开始接触这东西时,觉得它跟普通GPIO没啥区别——不就是输入输出嘛。结果第一次调10Gbps链路时,眼图全乱,我才意识到这玩意儿水有多深。
高速收发器的核心任务很简单:把并行数据转成串行发出去,再把收到的串行数据转回并行。但要做到每秒几十亿次的可靠传输,背后是一整套复杂的模拟和数字电路在支撑。
关键指标:目前主流FPGA的高速收发器速率范围从1Gbps到112Gbps不等。我常用的Xilinx GTH收发器能跑到16.3Gbps,而最新的GTM已经能支持112Gbps PAM4调制了。
1.2 SerDes基本原理
SerDes是Serializer/Deserializer的缩写。你想想看,为什么非要用串行?
举个例子:你要传32位数据,如果用并行总线,需要32根数据线+时钟线。到了10Gbps这个量级,PCB上走线长度稍微差个几毫米,时序就崩了。而串行只用一对差分线,省引脚、省PCB面积,关键是——没有并行数据的skew问题。
SerDes的工作流程大致如下:
- 发送端:并行数据 → 8B/10B编码(或64B/66B) → 并串转换 → 差分输出
- 接收端:差分输入 → CDR时钟恢复 → 串并转换 → 解码 → 并行数据
这里面最核心的,其实是时钟数据恢复(CDR)。我在项目中遇到过好几次,链路调不通,最后发现是CDR锁定不了——参考时钟抖动太大,或者频率偏差超了规格。
个人经验:调试SerDes链路时,第一步永远先看CDR Lock信号。如果这个灯不亮,后面全是白费功夫。
1.3 PMA与PCS层架构
高速收发器的内部结构,通常分为两层:PMA(物理介质适配层)和PCS(物理编码子层)。
我习惯这么理解:PMA是"肌肉",负责硬核的模拟信号处理;PCS是"大脑",负责数字逻辑的编码解码。
| 层级 | 功能 | 典型模块 |
|---|---|---|
| PMA | 模拟信号处理 | PLL、CDR、SerDes、TX/RX均衡器 |
| PCS | 数字编码/解码 | 8B/10B编码、CRC校验、通道绑定 |
PMA层包含:
- PLL:产生高速时钟。我记得第一次调PLL参数时,把电荷泵电流设错了,结果输出频率一直锁不住,折腾了两天才发现是寄存器配反了。
- TX均衡器:预加重/去加重,补偿高频损耗。
- RX均衡器:CTLE(连续时间线性均衡)+ DFE(判决反馈均衡),把被信道衰减的信号"拉"回来。
- CDR:从数据流中恢复时钟,这是SerDes的命门。
PCS层包含:
- 8B/10B编码:保证DC平衡,提供足够的跳变沿给CDR。说白了就是让数据里0和1的数量差不多,避免长串的连续相同位。
- 通道绑定:把多个SerDes通道对齐,用于更高带宽的场景。
- PRBS生成/校验:测试用的伪随机码型。
避坑指南:我曾经在8B/10B编码的comma字符选择上吃过亏。不同协议对comma的定义不一样,选错了会导致通道无法对齐。一定要仔细看协议规范。
1.4 典型应用场景
高速收发器最常见的三个应用场景:PCIe、SATA、Ethernet。我这些年基本都碰过一遍,每个都有自己的脾气。
PCIe
PCIe用的是8B/10B编码(Gen1/Gen2)或128B/130B编码(Gen3+)。它的链路训练过程很复杂——从复位到L0状态,要经历好几个握手阶段。我调试PCIe时最头疼的是LTSSM状态机卡住,经常需要抓逻辑分析仪看训练序列。
SATA
SATA也是8B/10B编码,但它的OOB(带外信号)检测比较特殊。我记得有一次调SATA链路,死活识别不到设备,最后发现是COMRESET信号的脉宽没满足规范要求——差了那么几十纳秒。
Ethernet
以太网从1G到100G,编码方式一直在变。1G用8B/10B,10G用64B/66B,100G用RS-FEC。我个人觉得以太网是最"友好"的——调试工具多,文档全,而且大部分问题都能通过看CRC错误计数器定位。
下面这张图展示了高速收发器的整体架构和信号流向:
1.5 小结
高速收发器是FPGA连接外部世界的"高速公路"。理解SerDes的基本原理、PMA/PCS的分层架构,以及不同协议的特点,是后续上板调试的基础。
嗯,这里要注意:不要一上来就想着调通链路。我见过太多人拿到开发板就急着跑例程,结果连参考时钟都没测就怀疑收发器坏了。先搞清楚架构,再动手调试,这才是正确姿势。
一句话总结:高速收发器 = PMA(模拟硬核)+ PCS(数字逻辑)+ 协议栈。调试时从底层往上走,先看PMA再看PCS最后看协议。
可可精品资料库