4. PolarFire收发器(SerDes)架构与配置

PolarFire系列FPGA内部集成的SerDes收发器,是构建高速串行接口的物理基础。理解它的分层结构,比记住“支持多少Gbps”更重要——因为每一层决定了你能做什么、不能做什么。本节从PMA与PCS的分工讲起,再落到Libero SoC中的实际配置流程。

一、PMA与PCS:收发器的两层分工

PolarFire的每个收发器通道(Lane)在逻辑上分为PMA(Physical Media Attachment,物理媒介附加层)和PCS(Physical Coding Sublayer,物理编码子层)两大部分。这个划分不是PolarFire独有的,但PolarFire的实现方式决定了它的配置粒度。

PMA层直接面对差分引脚,负责最底层的模拟与高速数字处理。它包含:

  • 发送端:并串转换(Serializer)、发送均衡器(TX Equalizer,通常为前馈均衡FFE)、差分驱动器。串行化比例支持8:1、10:1、16:1、20:1等,取决于协议和参考时钟方案。
  • 接收端:连续时间线性均衡器(CTLE)、判决反馈均衡器(DFE,部分速率下可用)、时钟数据恢复(CDR)、串并转换(Deserializer)。CDR负责从数据流中恢复采样时钟,是接收链路能否锁定的关键。
  • 参考时钟与PLL:每个收发器Quad(四个通道为一组)共享PLL和参考时钟输入,PLL输出频率决定了该Quad内通道可用的线速率范围。

PCS层位于PMA之上,处理的是“有格式”的数据。它负责:

  • 8b/10b编解码(用于PCIe Gen1/2、SGMII、XAUI等);
  • 64b/66b编解码(用于PCIe Gen3、10G以太网等);
  • 通道绑定(Lane Bonding)与去偏斜(Deskew);
  • 弹性缓冲(Elastic Buffer)与时钟域跨越;
  • 协议相关的对齐、有序集(Ordered Set)检测、链路状态机接口。

关键点在于:PMA决定“能不能跑这个速率”,PCS决定“跑这个协议时数据怎么组织”。如果PCS配置为8b/10b模式,而外部协议要求64b/66b,即使PMA速率匹配,链路也无法正常建立。

PolarFire收发器通道分层结构(单Lane视角) FPGA Fabric / 用户逻辑(AXI4-Stream、Avalon-ST 或原生并行接口) PCS 层(物理编码子层) 8b/10b 编解码 PCIe Gen1/2, SGMII 64b/66b 编解码 PCIe Gen3, 10GbE 通道绑定/去偏斜 多Lane对齐 弹性缓冲 时钟域跨越 PMA 层(物理媒介附加层) 发送路径 (TX) 并串转换 → TX均衡(FFE) → 差分驱动 串行化比: 8:1 / 10:1 / 16:1 / 20:1 接收路径 (RX) CTLE → DFE → CDR → 串并转换 CDR锁定是链路建立的前提 Quad共享PLL + 参考时钟 决定该Quad可用线速率范围 差分引脚 (TX_P/N, RX_P/N)

二、支持协议与速率:先看PMA能力,再看PCS匹配

PolarFire收发器的线速率范围通常覆盖250 Mbps到12.7 Gbps(具体取决于器件等级和Quad位置)。这个范围不是每个通道都能任意取值的,而是由参考时钟频率和PLL分频/倍频比共同决定。例如,使用125 MHz参考时钟,通过PLL倍频到5.0 GHz,再经过20:1串行化,得到250 Mbps;若倍频到10.3125 GHz,经过64:66编码开销后,有效数据速率约为10.0 Gbps。

常见协议与配置对应关系如下:

协议线速率编码方式PCS关键配置典型参考时钟
PCIe Gen12.5 Gbps8b/10b8b/10b + 有序集检测100 MHz
PCIe Gen25.0 Gbps8b/10b8b/10b + 去加重100 MHz
PCIe Gen38.0 Gbps128b/130b64b/66b + 加扰100 MHz
SGMII1.25 Gbps8b/10b8b/10b + 自动协商125 MHz
10GbE (XAUI)3.125 Gbps/lane8b/10b4 Lane绑定 + 去偏斜156.25 MHz
10GbE (XFI)10.3125 Gbps64b/66b64b/66b + 弹性缓冲156.25 MHz

配置时有一个容易忽略的约束:同一个Quad内的四个通道共享PLL。如果Quad内一个通道用于PCIe Gen3(8.0 Gbps),另一个用于SGMII(1.25 Gbps),两者无法同时从同一个PLL获得所需频率。此时要么将不同速率的通道分配到不同Quad,要么使用PMA的独立参考时钟模式(部分器件支持)。

三、Libero SoC中的收发器配置流程

在Libero SoC中配置收发器,核心工具是Transceiver Configurator(在较新版本中集成于SmartDesign或作为独立IP)。以下是一个PCIe Gen2 x1通道的配置示例流程:

  1. 创建或打开SmartDesign,从Catalog中拖入“PolarFire Transceiver”或对应的协议IP(如“PCIe Gen2”)。
  2. 选择协议模板。Libero提供预置模板,选择PCIe Gen2后,工具会自动填充线速率5.0 Gbps、8b/10b编码、参考时钟100 MHz等参数。
  3. 指定Quad和Lane。在器件引脚视图中选择可用的收发器Quad,并勾选使用的Lane。注意查看该Quad的参考时钟输入引脚是否已连接。
  4. 配置PMA参数:确认TX均衡器设置(通常PCIe Gen2需要3.5 dB去加重)、RX CTLE增益、CDR锁定范围。这些参数在模板基础上可根据实际信道损耗微调。
  5. 配置PCS参数:确认8b/10b使能、有序集检测使能、弹性缓冲深度(通常为2或4个时钟周期)。
  6. 生成IP并连接用户逻辑。Transceiver IP会暴露AXI4-Stream或Avalon-ST接口,将其与PCIe控制器或自定义逻辑对接。
  7. 分配引脚约束。在I/O Editor中确认TX_P/N、RX_P/N、REFCLK_P/N的引脚位置与PCB一致。
实操提示:配置完成后,务必在Libero的“Device Utilization”中检查该Quad的PLL是否被其他通道占用。如果同一Quad内已有其他速率的通道,Transceiver Configurator会报错或自动切换参考时钟方案。

四、配置后的验证要点

生成比特流并下载后,不能只看“链路是否起来”。建议按以下顺序观察:

  • CDR锁定状态:通过Transceiver Configurator生成的寄存器接口读取CDR锁定信号。若未锁定,优先检查参考时钟频率和差分对极性。
  • 8b/10b对齐:读取PCS状态寄存器中的“Code Group Alignment”位。若未对齐,检查发送端是否发送了足够的逗号字符(K28.5)。
  • 弹性缓冲溢出/下溢:若弹性缓冲频繁溢出,说明收发两端时钟偏差超出缓冲深度,需检查参考时钟精度(PCIe要求±300 ppm以内)。
  • 误码率:在用户逻辑中嵌入PRBS检查器,或使用Libero内置的PRBS生成/检查模式,观察误码计数是否在可接受范围内(通常要求BER < 1e-12)。

PolarFire收发器的配置本质上是在PMA能力边界内,为PCS选择正确的协议“语言”。Libero SoC的Transceiver Configurator把大部分参数模板化了,但理解PMA与PCS的分工,才能在链路异常时快速定位是物理层问题还是编码层问题。