数字通信基础回顾:从比特到SerDes的桥梁
在深入FPGA高速接口与SerDes设计之前,我们必须先夯实数字通信的底层逻辑。SerDes(Serializer/Deserializer)本质上是一个复杂的数字通信系统,它将并行数据转换为高速串行比特流,再通过物理信道传输,最后在接收端恢复出原始数据。理解比特率、波特率、信道编码、同步与时钟恢复这些基础概念,是掌握SerDes工作原理、解决实际链路调试问题的前提。本章将系统回顾这些核心知识点,并建立它们与SerDes架构之间的映射关系。
2.1 比特率与波特率:串行传输的度量基石
核心原理:比特率(Bit Rate)是单位时间内传输的二进制比特数,单位bps(bit per second)。波特率(Baud Rate)是单位时间内传输的符号(Symbol)数,单位Baud。在多电平调制中,一个符号可以携带多个比特。对于SerDes而言,通常采用NRZ(Non-Return-to-Zero)编码,即一个符号对应一个比特,此时比特率等于波特率。但在PAM4等高级调制中,一个符号携带2比特,波特率仅为比特率的一半。
判断方法:在FPGA高速接口设计中,我们通常关注的是线速率(Line Rate),即串行链路上的比特率。例如PCIe Gen3的线速率为8GT/s(Giga Transfers per second),采用128b/130b编码,有效数据速率为7.877Gbps。计算有效吞吐量时,必须扣除编码开销。
| 调制方式 | 每符号比特数 | 比特率 vs 波特率 | 典型应用 |
|---|---|---|---|
| NRZ | 1 | 比特率 = 波特率 | PCIe Gen1/2/3, USB 3.0, SATA |
| PAM4 | 2 | 比特率 = 2 × 波特率 | PCIe Gen6, 400G Ethernet |
| QPSK | 2 | 比特率 = 2 × 波特率 | 卫星通信 |
2.2 信道编码:为可靠传输加装"安全带"
核心原理:信道编码在原始数据中引入可控冗余,以换取传输可靠性。在SerDes系统中,最常用的编码方案是8B/10B和64B/66B。8B/10B编码将每8位数据映射为10位码字,保证DC平衡(即0和1的数量大致相等),同时提供足够的跳变沿用于时钟恢复。64B/66B编码则通过2位同步头(01或10)实现接收端对齐,有效开销仅为3.125%。
操作流程:以8B/10B编码为例,其编码过程分为3B/4B和5B/6B两个子映射。编码器首先将8位数据拆分为高3位和低5位,分别映射为4位和6位码字。控制字符(如K28.5)用于帧对齐和训练序列。接收端解码时,通过查找表还原原始数据,同时检测非法码字以报告链路错误。
// 8B/10B编码示例(简化)
// 数据字节: 0xBC (10111100)
// 拆分: 高3位=101, 低5位=11100
// 5B/6B映射: 11100 → 110001 (RD-)
// 3B/4B映射: 101 → 1011 (RD-)
// 最终10位码字: 1100011011
2.3 同步与时钟恢复:接收端的"心脏"
核心原理:串行通信中,发送端和接收端必须共享时间基准才能正确采样数据。由于SerDes通常不传输独立的时钟信号,接收端必须从数据流中提取时钟信息,这一过程称为时钟数据恢复(CDR)。CDR的核心是一个锁相环(PLL),它通过鉴相器比较本地时钟与数据边沿的相位差,调整压控振荡器(VCO)的频率,使采样时钟锁定在数据眼图的中心位置。
判断方法:CDR的锁定状态可以通过以下指标判断:抖动(Jitter)——时钟边沿与理想位置的偏差,通常以UI(Unit Interval)为单位;眼图——将多次采样叠加显示,眼图张开越大,说明信号质量越好。在FPGA调试中,使用IBERT(Integrated Bit Error Ratio Tester)工具可以实时观察眼图和误码率。
| CDR参数 | 典型值 | 影响 |
|---|---|---|
| 环路带宽 | 1-10 MHz | 带宽越大,锁定越快,但抖动抑制能力下降 |
| 抖动容限 | 0.5 UI | 超过此值可能导致误码 |
| 锁定时间 | < 100 μs | 影响链路建立速度 |
2.4 从基础到SerDes:知识映射与工程实践
核心原理:SerDes架构将上述基础概念整合为一个完整的收发系统。发送端包括编码器、并串转换器和驱动器;接收端包括均衡器、CDR、串并转换器和解码器。理解每个模块的作用及其相互制约关系,是进行FPGA高速接口设计的前提。
操作流程:在FPGA中实现SerDes链路时,通常遵循以下步骤:
1. 确定协议标准(如PCIe、Ethernet、JESD204B),明确线速率和编码方式。
2. 选择合适的收发器(如Xilinx GTY、Intel E-Tile),配置其参数。
3. 设计物理层电路,包括AC耦合电容、端接电阻、PCB阻抗控制。
4. 编写逻辑代码,实现PCS(Physical Coding Sublayer)和PMA(Physical Media Attachment)层的接口。
5. 使用IBERT或类似工具进行链路调试,优化均衡参数。
常见误区与总结:初学者常犯的错误包括:将比特率和波特率混为一谈,导致带宽计算错误;忽视编码开销,实际吞吐量达不到理论值;认为CDR可以容忍任意差的参考时钟;在PCB设计中忽略差分对等长和阻抗匹配。正确的做法是:始终从协议规范出发,逐层分析数据流;在设计中预留调试接口(如眼图监测、误码计数);进行充分的信号完整性仿真,确保链路余量。