3. PolarFire高速串行收发器与JESD204B接口基础
在高速数据采集系统中,ADC采样率一旦进入百MSPS甚至GSPS量级,传统的并行LVDS接口就会遇到引脚数量、走线偏斜和时钟-数据对齐的瓶颈。PolarFire FPGA内置的高速串行收发器(SerDes)正是为解决这一问题而设计:它把并行数据串行化,通过一对差分线以数Gbps速率传输,再在接收端恢复时钟并解串。JESD204B则是在这条物理链路之上定义的一套标准化协议,规定了链路建立、参数协商、数据成帧和确定性延迟的完整规则。理解SerDes的配置方法与JESD204B的分层结构,是后续把高速ADC可靠接入PolarFire的前提。
一、PolarFire SerDes的物理层与配置要点
PolarFire器件中的SerDes以Lane为基本单位,每个Lane包含发送端(PMA-TX)、接收端(PMA-RX)以及时钟生成与恢复电路。发送端完成并串转换、预加重和输出摆幅控制;接收端完成均衡、时钟数据恢复(CDR)和串并转换。配置一个可用Lane,核心是确定以下几组参数:
- 线速率(Line Rate):单位Gbps,由参考时钟频率与PLL倍频比共同决定。例如参考时钟125MHz,倍频比40,则线速率5Gbps。
- 参考时钟:PolarFire每个SerDes区域有独立的参考时钟输入,需保证频率精度与抖动满足协议要求,JESD204B通常要求参考时钟抖动在数百fs量级。
- 编码方式:JESD204B使用8b/10b编码,因此有效数据速率 = 线速率 × 8/10。若线速率5Gbps,则有效载荷4Gbps。
- 发送预加重与接收均衡:根据PCB走线损耗设置,短距离背板可关闭或低档,长距离需提高预加重并开启接收均衡。
在Libero SoC中,这些参数通过High Speed Serial Interface(HSSI)配置器或直接例化SerDes IP核完成。配置完成后,需要关注两个状态信号:tx_ready与rx_ready,它们分别表示发送PLL锁定和接收CDR锁定。只有两者都有效,物理链路才具备承载JESD204B数据的基础。
二、JESD204B协议分层
JESD204B协议从下到上分为三层,理解每层的职责有助于定位链路问题:
物理层(PHY):对应SerDes本身,负责电气特性、时钟恢复和8b/10b编解码。这一层不关心数据内容,只保证比特流可靠传输。
链路层(Link Layer):负责代码组同步(CGS)、初始通道对齐(ILAS)和用户数据成帧。它把ADC送来的样本按帧(Frame)和多帧(Multiframe)结构组织,并插入对齐字符。链路层还管理SYNC信号,用于请求发送端重新发起同步。
传输层(Transport Layer):定义样本如何映射到帧中。它决定每个转换器样本占多少字节、多少样本组成一帧、多少帧组成一个多帧。传输层的参数包括L(Lane数)、M(转换器数)、F(每帧每Lane的字节数)、S(每帧每转换器的样本数)、N(转换器分辨率)、N'(每样本实际传输位数)等。
三层之间的关系可以用下面的信号链示意图表示:ADC样本先经传输层映射,再由链路层成帧并插入控制字符,最后经物理层SerDes串行发出;接收端则反向逐层还原。
三、链路参数计算
JESD204B链路能否建立,取决于一组参数是否自洽。最常用的计算关系如下:
设ADC通道数为M,每通道采样率fs,分辨率N,每样本实际传输位数N'(通常N'=N或N+填充位),Lane数为L,每帧每Lane字节数为F,每帧每转换器样本数为S,多帧包含帧数为K。
则单Lane有效数据速率(Gbps)为:
LaneRate = (M × N' × fs × 10/8) / L (单位:Gbps,含8b/10b开销)
帧时钟(Frame Clock)频率为:
FrameClock = fs / S (单位:Hz)
多帧时钟频率为:
MultiframeClock = FrameClock / K (单位:Hz)
以一个教学示例说明:某双通道ADC,M=2,fs=250MSPS,N=14,N'=16,L=2,F=2,S=1,K=32。则单Lane线速率 = (2 × 16 × 250M × 10/8) / 2 = 5Gbps。帧时钟 = 250M / 1 = 250MHz,多帧时钟 = 250M / 32 = 7.8125MHz。这些数值需要与SerDes参考时钟、PLL倍频比以及ADC输出的帧时钟/多帧时钟严格匹配,否则链路层无法完成ILAS对齐。
四、建立JESD204B链路的关键步骤
实际工程中,把高速ADC与PolarFire通过JESD204B连接,通常按以下顺序推进:
- 确认ADC侧参数:从ADC数据手册或配置软件中读出M、L、F、S、N、N'、K、子类(Subclass 0/1/2)以及线速率。子类1需要SYSREF信号,子类0不需要,子类2使用SYNC信号作为时序参考。
- 配置PolarFire SerDes:在Libero中设置参考时钟频率、线速率、编码方式、预加重/均衡档位,并确认
tx_ready与rx_ready可正常拉高。 - 配置JESD204B IP核:输入与ADC一致的L、M、F、S、N、N'、K参数,选择子类,设置SYSREF采样方式(连续或单次)。
- 连接SYSREF与SYNC:子类1下,SYSREF必须与器件时钟同源且满足建立/保持时间;SYNC从接收端拉低表示请求同步,拉高表示同步完成。
- 观察链路状态:依次检查CGS完成、ILAS完成、
sync拉高、rx_ready有效。若卡在CGS,优先检查线速率与参考时钟;若卡在ILAS,优先检查L/M/F/S/K参数是否与ADC一致。 - 验证数据:使用递增码或正弦波测试模式,在FPGA内抓取解帧后的样本,确认无错位、无重复、无丢帧。