2. 收发器(Transceiver)概述:什么是收发器、收发器在FPGA中的作用、高速串行接口基础

2.1 到底什么是收发器?

收发器,英文叫 Transceiver,是 Transmitter(发送器)和 Receiver(接收器)的合称。说白了,它就是 FPGA 内部专门用来处理高速串行数据的硬核电路。

我刚开始接触 FPGA 时,总觉得收发器是个很神秘的东西。后来拆开一个高端 FPGA 的 die 图才明白——收发器就是芯片里那些专门为高速信号设计的专用通道。它不像普通的逻辑门那样靠 LUT 和 FF 搭出来,而是一套完整的模拟+数字混合电路。

收发器通常包含以下几个核心模块:

  • PMA(物理介质适配层):负责处理模拟信号,比如时钟恢复、串并转换、预加重、均衡等
  • PCS(物理编码子层):负责数字域的处理,比如 8B/10B 编码、CRC 校验、通道绑定等
  • 时钟管理单元:提供多速率时钟,支持 CDR(时钟数据恢复)

关键点:收发器不是用 FPGA 逻辑资源搭出来的软核,而是芯片上固化的硬核。这意味着它的性能(速率、抖动、功耗)远优于软实现方案。

2.2 收发器在 FPGA 中的作用

收发器在 FPGA 里扮演的角色,我总结为三个字——「桥」与「路」。

传统 FPGA 的 IO 口都是并行接口,比如 LVCMOS、LVDS,速率做到几百 MHz 就顶天了。但现代通信、数据中心、视频传输等领域,动不动就是 Gbps 级别的速率。这时候,收发器就成了连接 FPGA 内部逻辑与外部高速世界的桥梁。

具体来说,收发器的作用包括:

  1. 实现高速串行通信:比如 PCIe、SATA、Ethernet、JESD204B 等协议,底层都依赖收发器
  2. 降低引脚数量:并行接口需要几十甚至上百根线,串行接口只需几对差分线
  3. 减少 EMI 和信号完整性问题:差分信号天生抗干扰,加上预加重和均衡技术,能跑更远的距离
  4. 支持多协议:同一个收发器通道,通过配置可以跑不同的协议

我记得有一次做项目,客户要求用 FPGA 采集高速 ADC 的数据,ADC 输出的是 JESD204B 接口,速率 12.5 Gbps。如果没有收发器,这个项目根本没法做——普通 IO 连 1 Gbps 都跑不稳。

个人经验:选型时一定要看清楚收发器的速率等级。比如 Xilinx 的 GTH 最高能跑 16.3 Gbps,GTY 能跑 32.75 Gbps。别选低了,否则后期想提速都没办法。

2.3 高速串行接口基础

收发器处理的是高速串行信号。那什么是高速串行接口?我习惯用一句话概括:把并行数据变成串行比特流,通过一对差分线传过去,接收端再恢复成并行数据。

这里面有几个核心概念,我一个个讲:

2.3.1 串行化与解串行化

这是收发器最基础的功能。发送端把 N 位并行数据(比如 16 位、32 位)转换成 1 位串行数据,按位发送。接收端再把串行数据恢复成并行数据。

举个例子:

// 发送端:并行转串行
并行数据: 1011_0010_1100_1001 (16位)
串行输出: 1→0→1→1→0→0→1→0→1→1→0→0→1→0→0→1

// 接收端:串行转并行
串行输入: 1→0→1→1→0→0→1→0→1→1→0→0→1→0→0→1
恢复并行: 1011_0010_1100_1001

你想想看,如果并行接口需要 16 根数据线,串行接口只需要 2 根(一对差分线)。这就是收发器最大的优势。

2.3.2 时钟数据恢复(CDR)

串行信号里没有单独的时钟线,时钟是嵌在数据里的。接收端需要从数据流里把时钟恢复出来。

CDR 的原理其实不复杂:

  • 数据信号在 0 和 1 之间跳变时,包含了时钟信息
  • 接收端用 PLL 锁定数据跳变沿,提取出时钟
  • 用恢复出来的时钟去采样数据

嗯,这里要注意:如果数据长时间没有跳变(比如连续 100 个 0),CDR 可能会失锁。所以高速串行协议都会做编码,保证数据有足够的跳变密度。比如 8B/10B 编码,保证连续 0 或 1 不超过 5 个。

避坑指南:我曾经在一个项目里,收发器链路偶尔出现误码,查了三天才发现是 CDR 锁定不稳定。原因是 PCB 走线太长,信号衰减太大,导致 CDR 无法准确恢复时钟。后来加了均衡器才解决。

2.3.3 预加重与均衡

高速信号在 PCB 上传输时,会因为趋肤效应和介质损耗而衰减。频率越高,衰减越严重。这就导致信号的眼图闭合,接收端很难正确判断 0 和 1。

解决方法是:

  • 发送端做预加重:在信号跳变时,额外增加幅度,补偿高频损耗
  • 接收端做均衡:对接收到的信号进行滤波,提升高频分量

收发器内部通常集成了可编程的预加重和均衡器。我一般会在板卡调试时,先用眼图仪看信号质量,再调整这些参数。

2.3.4 编码与解码

为了确保 DC 平衡和足够的跳变密度,串行数据通常要经过编码。常见的编码方式有:

编码方式 效率 特点 典型应用
8B/10B 80% DC 平衡,最多 5 个连续相同位 PCIe 1.0/2.0、SATA、USB 3.0
64B/66B 97% 效率高,开销小 10G Ethernet、PCIe 3.0
128B/130B 98.5% 效率极高,实现复杂 PCIe 4.0/5.0

收发器的 PCS 层通常内置了这些编码器/解码器。你只需要配置好协议模式,剩下的硬件帮你搞定。

2.4 收发器的知识体系

为了让你更直观地理解收发器的整体架构,我画了一张图:

收发器(Transceiver)知识体系 FPGA 内部逻辑(用户设计) 收发器(Transceiver) PCS(物理编码子层) 8B/10B 编码/解码 CRC 校验 通道绑定 时钟修正 PMA(物理介质适配层) 串行化/解串行化 时钟数据恢复(CDR) 预加重/均衡 差分驱动/接收 物理介质(PCB 走线、连接器、线缆) 收发器是 FPGA 内部逻辑与外部物理介质之间的高速桥梁 关键参数:线速率(Gbps) | 通道数 | 支持的协议 | 预加重/均衡等级 | 参考时钟频率

2.5 收发器的典型应用场景

收发器在 FPGA 项目里无处不在。我列几个常见的:

  • PCIe 接口:连接 CPU 和 FPGA,做数据加速卡
  • 万兆以太网:做网络数据包处理、防火墙、流量分析
  • JESD204B:连接高速 ADC/DAC,做软件无线电、雷达信号处理
  • SATA/SAS:做存储控制器、SSD 测试
  • CPRI/OBSAI:基站和 RRU 之间的通信
  • 自定义协议:用 Aurora、GTH 等 IP 核实现私有高速链路

我个人习惯是,只要项目里需要跑超过 1 Gbps 的接口,第一反应就是「用收发器」。别想着用 LVDS 去拼,那是在给自己挖坑。

小技巧:调试收发器时,先用回环模式(Loopback)测试。把发送端直接连到接收端,看误码率。如果回环都过不了,说明配置有问题。回环过了再接外部链路,这样能快速定位问题。

好了,关于收发器的基本概念就讲到这里。你只要记住:收发器是 FPGA 实现高速串行通信的硬核电路,它包含了 PCS 和 PMA 两层,负责数据的串行化、时钟恢复、编码解码和信号调理。后面的章节我们会深入具体的协议实现和调试技巧。

一句话总结:没有收发器,FPGA 就只能跑几百 MHz 的并行接口;有了收发器,FPGA 就能跑几十 Gbps 的串行链路。这就是现代 FPGA 和传统 FPGA 最大的区别。

可可精品资料库