FPGA SERDES 通用基础(一)从 GTX 架构图看懂一条高速收发通路
对于 FPGA 初学者或刚接触高速通信设计的工程师GTX 往往是一个不容易下手的模块。打开 UG476首先看到的是密集的端口、时钟和功能框图。单独查清每个名词并不难真正困难的是把这些内容连接起来形成一条完整的高速收发链路。这篇文章不从端口和配置参数讲起而是先建立一张 GTX 的结构地图。本文以 UG476 和 Kintex-7 XC7K325T 的器件视图为主线依次介绍 GTX 在芯片中的位置、一个 Quad 内的时钟资源以及 GTXE2_CHANNEL 的 TX 和 RX 数据通路。读完本文读者应当能够沿着框图说清楚数据从 FPGA 逻辑到差分引脚再从差分引脚返回 FPGA 逻辑所经过的主要模块。我也在持续学习和实践文章如有不准确之处欢迎各位 FPGA 工程师指正和补充。1. GTX 在 FPGA 的什么位置AI 生成的 XC7K325T 裸 Die 资源分布概念图非实物照片不按比例Vivado Device 视图UG476 Figure 1-1三张图从左到右分别为 XC7K325T 裸 Die 资源分布概念图、Vivado Device 视图和 UG476 Figure 1-1。概念图右上区域对应四组 GTX BankVivado Device 视图中显示为四组 GTX 资源在 UG476 中则抽象为四个 GTX Quad。每个 Quad 包含四个 GTXE2_CHANNEL 和一个 GTXE2_COMMON因此该器件共有 16 个 GTX Channel编号为 GTXE2_CHANNEL_X0Y0 至 GTXE2_CHANNEL_X0Y15。2. 一个 Quad 里的 CPLL 和 QPLL一个 GTX Quad 包含四个 GTXE2_CHANNEL 和一个 GTXE2_COMMON。每个 Channel 包含独立的 TX、RX 和 CPLLQPLL 位于公共资源 GTXE2_COMMON 中。时钟资源资源位置使用范围CPLL每个 GTXE2_CHANNEL 内部服务于当前 Channel可供该 Channel 的 TX 或 RX 选择QPLLGTXE2_COMMON 内部作为 Quad 公共资源可供同一 Quad 内的 Channel 选择外部差分参考时钟经 IBUFDS_GTE2 输入进入 REFCLK Distribution 后可送往 CPLL 或 QPLL。PLL 输出再经 TX/RX Clock Dividers 产生 PMA 和 PCS 所需的串行、并行时钟。CPLL 属于 ChannelQPLL 属于 Quad。具体选择取决于目标线速、参考时钟频率和 PLL 工作范围。单个参考时钟如何送入一个 QuadUG476 Figure 2-5 Single External Reference Clock with Multiple Transceivers in a Single QuadUG476 Figure 2-5 展示一个外部差分参考时钟在单个 Quad 内的连接方式。MGTREFCLKP/N 先进入专用输入缓冲 IBUFDS_GTE2图中缓冲器输出同时连接到四个 GTXE2_CHANNEL 和一个 GTXE2_COMMON 的 GTREFCLK0 输入。这些 primitive 还提供 GTREFCLK1 输入用于选择 Quad 的另一组专用参考时钟。该图说明参考时钟输入与 PLL 选择是两个不同层次。IBUFDS_GTE2 和参考时钟网络负责把外部时钟送到 Channel 与 Common随后由 Channel 内的 CPLL 或 Common 内的 QPLL 使用该参考时钟。一个参考时钟可以在同一 Quad 内供多个收发通道使用但每个 TX/RX 最终采用 CPLL 还是 QPLL仍由对应的时钟选择配置决定。3. GTXE2_CHANNEL 总体架构Figure 1-3 展示单个 GTXE2_CHANNEL 的总体结构。读图时先确定数据方向和功能边界。上半部分是 TX数据从右向左下半部分是 RX数据从左向右靠近 FPGA 接口的是 PCS靠近高速差分引脚的是 PMA从 Figure 1-3 的区域边界看TX 和 RX 都由 PCS、PMA 与差分引脚三部分构成。PCS 位于 FPGA 并行接口一侧PMA 位于高速串行引脚一侧。TX FPGA TX Interface → TX PCS → TX PMA → TXP/TXN ├─ PISO 完成并串转换 └─ 发送电气前端完成预加重和差分驱动 RX RXP/RXN → RX PMA → RX PCS → FPGA RX Interface ├─ 接收电气前端完成均衡和数据判决 └─ SIPO 完成串并转换TX 方向的数据由 FPGA 并行接口进入 TX PCS经过编码、Gearbox、测试码型选择和并行时钟处理后进入 TX PMA。PMA 内的 PISO 将并行比特转换为高速串行比特流再经预加重和 TX Driver 从 TXP/TXN 输出。RX 方向则相反。差分信号从 RXP/RXN 进入 RX PMA先经过均衡和高速采样再由 SIPO 转换为并行比特。随后数据进入 RX PCS完成极性处理、字符对齐、解码、弹性缓冲和 Gearbox最终送到 FPGA RX Interface。因此PISO 和 SIPO 是 PMA 内部连接并行域与串行域的关键模块但 GTX 的一级结构仍应按 PCS、PMA 和差分引脚理解。以下沿数据方向说明各主要模块。4. TX 数据通路与功能模块Figure 1-3 上半部分为 TX 数据通路。沿图中箭头从右向左看数据从 FPGA TX Interface 进入 TX PCS完成并行侧的数据组织与路径选择随后进入 TX PMA完成并串转换、发送均衡和差分驱动最终从 TXP/TXN 输出。FPGA TX Interface → TX PCS → TX PMA → TXP/TXN │ │ │ └─ PISO、Pre/Post Emphasis、TX Driver └─ Gearbox、8B/10B、Pattern Generator、Phase Adjust FIFOTX PCS组织并行数据FPGA TX Interface 是可编程逻辑与 GTX 发送通路之间的并行接口。用户逻辑按 TX 用户时钟提交多 bit 数据后续的位宽组织、编码和串化由 GTX 内部完成因此 FPGA Fabric 不需要直接工作在串行线速对应的 GHz 级频率。进入 TX PCS 后数据可能经过多条可配置路径。图中的梯形结构是多路选择器用于选择编码器、Gearbox、测试码型或旁路数据实际经过哪些模块由 GTX 的工作模式和属性配置决定。模块主要作用对数据的影响TX Gearbox在不同并行位宽和传输节拍之间重组数据保持比特流内容不变改变并行排列方式8B/10B Encoder将 8 bit 数据映射为 10 bit 线路字符增加控制字符、运行差异控制和跳变密度可旁路Pattern Generator产生内部测试码型可替代 FPGA 用户数据用于链路测试Phase Adjust FIFO隔离并吸收并行时钟之间的相位差可经过 FIFO也可在相位对齐后旁路TX Polarity对发送比特执行逻辑反相补偿板级差分对 P、N 互换TX Gearbox位于 TX PCS 的并行数据路径中用于衔接不同的数据位宽和时钟节拍。它把若干个用户时钟周期内接收的数据重新排列为后级所需的并行格式改变的是每拍承载的位数以及数据在多个周期中的组织方式不改变比特流的先后顺序。是否使用 Gearbox以及输入、输出位宽之间如何转换取决于所选数据宽度和编码模式。8B/10B Encoder以 8 bit 数据或控制信息为输入输出 10 bit 线路字符。编码过程中会选择具有受控运行差异的码字并保证线路上具有足够的跳变密度从而有利于接收端进行时钟恢复和字符对齐。编码开销为 25%因此 8 Gb/s 的有效数据率需要 10 Gb/s 的线路比特率。未使用 GTX 内部 8B/10B 功能时数据可以经多路选择器旁路编码器此时线路码型和直流平衡需要由外部逻辑或所采用的链路方案保证。Pattern Generator是 TX 内部测试数据源可由多路选择器替代 FPGA TX Interface 提供的用户数据。它通常用于产生 PRBS 等规定码型并与接收端 PRBS Checker 配合统计误码。由于测试码型直接在 GTX 内部产生该路径可以绕开用户数据发生逻辑用于判断异常来自用户接口、GTX 内部数据通路还是外部传输通道。Pattern Generator 是测试支路正常业务传输时仍选择用户数据路径。Phase Adjust FIFO位于 TX PCS 的并行时钟边界用于衔接 TXUSRCLK 与内部 XCLK 时钟域。当启用 TX Buffer 时数据通过 FIFO 吸收两个时钟域之间的相位差当采用 TX Buffer Bypass 时则需要通过发送相位对齐过程建立确定的时钟关系。该 FIFO 解决的是时钟相位衔接问题不用于缓存连续业务流量也不能替代协议层的数据缓冲。TX Polarity在串化前对发送数据执行逻辑反相用于补偿 PCB 上 TXP 与 TXN 的差分极性互换。该处理等效于交换差分对的 P、N 逻辑含义不改变数据速率、并行位宽或字符边界。它只修正极性不承担编码或位序调整功能。TX PMA串化并驱动差分引脚PCS 处理完成后并行比特进入 TX PMA。这里完成并串转换、发送波形补偿和差分输出是 TX 从并行数字域进入高速串行电气域的关键边界。模块主要作用对发送信号的影响PISO将 PCS 并行比特转换为高速串行比特流改变数据表示宽度不改变比特顺序TX Pre/Post Emphasis调整主游标及前、后游标权重预补偿通道损耗改变发送波形TX Driver产生芯片引脚上的差分输出决定差分摆幅及输出电气特性TX Clock Dividers / Phase Interpolator产生串行、并行时钟并调整发送相位服务于时钟路径不承载用户数据PISO是 Parallel In Serial Out 串化器。它按照 TX PMA 的高速串行时钟将 TX PCS 输出的并行字依次移出形成线路上的连续串行比特流。PISO 改变数据的并行宽度和传输节拍但保持既定的比特发送顺序编码、字符组织和测试路径选择已经在前级 PCS 中完成。TX Pre/Post Emphasis用于补偿 PCB 走线、过孔、连接器和封装造成的频率相关损耗。发送端通过调节主游标以及前、后游标的权重增强数据跳变附近的高频分量减小信号到达接收端后的脉冲展宽和码间干扰。该模块调整的是模拟输出波形不会插入、删除或重新编码数据比特。TX Driver将内部高速串行信号转换为芯片引脚上的差分电压输出至 TXP/TXN。其配置决定差分摆幅及相关输出电气特性。TXP 和 TXN 是同一条差分信号的两根导线不是两个独立的 Channel两根导线共同表示一个串行数据比特的差分状态。TX Clock Dividers 与 TX Phase Interpolator位于发送时钟路径。Clock Dividers 根据所选 PLL 时钟产生 TX PMA 串行侧和 TX PCS 并行侧所需的时钟Phase Interpolator 对发送时钟相位进行细粒度调整为串化和相位对齐提供时序基础。两者控制数据何时被移位和输出但不处理用户数据内容。5. RX 数据通路与功能模块Figure 1-3 下半部分为 RX 数据通路。沿箭头从左向右看差分信号由 RXP/RXN 进入 RX PMA经过均衡、采样和串并转换后进入 RX PCSPCS 再完成极性处理、边界对齐、解码、时钟域衔接和位宽组织最后由 FPGA RX Interface 输出并行数据。RXP/RXN → RX PMA → RX PCS → FPGA RX Interface │ │ │ └─ Polarity、Comma Align、Decoder、Elastic Buffer、Gearbox └─ RX EQ、DFE、SIPORX PMA恢复并解串高速信号差分信号首先进入 RX PMA。这里完成输入信号均衡、高速采样和串并转换把引脚上的模拟差分波形恢复为可供 RX PCS 处理的并行比特。模块主要作用对接收信号的处理RX EQ对输入信号进行线性均衡补偿通道的高频衰减DFE根据历史判决抵消后游标干扰抑制线性均衡后残留的码间干扰SIPO将高速串行比特转换为内部并行比特完成解串但不确定字符边界RX Clock Dividers产生 RX 串行侧和并行侧时钟为采样、数据恢复和解串提供时钟RX EQ是接收线性均衡通路。高速信号经过有损通道后高频分量通常比低频分量衰减更明显导致脉冲展宽和采样裕量下降。RX EQ 对不同频率分量施加不同增益用于补偿通道的频率响应使采样点附近的眼图重新张开。它处理的是模拟波形质量不负责字符对齐或协议解码。DFE是 Decision Feedback Equalizer即判决反馈均衡器。它利用已经判决的历史比特估计后游标码间干扰并从当前采样结果中抵消相应影响。RX EQ 主要进行线性频率补偿DFE 则针对判决后的残余码间干扰进行反馈校正。DFE 的工作依赖正确的数据判决因此属于接收数据恢复环路的一部分。SIPO是 Serial In Parallel Out 解串器。它按照恢复出的高速时钟对串行比特进行采样并把连续比特分组为内部并行数据。SIPO 完成的是串并转换只建立固定宽度的并行分组并不知道分组起点是否与线路字符边界一致正确的字符边界仍需由后级 Comma Detect and Align 确定。RX Clock Dividers根据接收时钟体系产生 RX PMA 高速串行侧和内部并行路径所需的时钟为数据采样、时钟恢复以及 SIPO 输出提供时序基础。它决定各级数据处理的工作节拍但不改变接收比特内容。RX PCS对齐、检查并交付并行数据进入 RX PCS 后各模块围绕三个问题展开比特方向是否正确、字符边界是否正确、并行数据能否稳定送入用户时钟域。模块主要作用关键说明RX Polarity对接收比特执行逻辑反相补偿差分对 P、N 互换Comma Detect and Align检测 Comma 并修正并行字边界SIPO 完成解串但字符边界仍需在 PCS 中确定PRBS Checker比较接收比特与本地期望序列位于检查支路不替代正常接收主路径8B/10B Decoder将 10 bit 线路字符还原为数据或控制字符同时给出无效码、运行差异错误等状态可旁路RX Elastic Buffer完成 XCLK 到 RXUSRCLK 的时钟域衔接吸收相位差和允许范围内的频率偏差RX Gearbox转换并行位宽和传输节拍形成 FPGA RX Interface 所需的数据组织形式RX Polarity对接收比特执行逻辑反相用于补偿 PCB 上 RXP 与 RXN 的差分极性互换。该操作只翻转比特逻辑含义不改变数据速率、并行位宽或字符边界。Comma Detect and Align用于确定正确的线路字符边界。以 10 bit 线路字符为例如果 SIPO 的并行分组起点偏移 3 bit后续每个分组都会跨越真实字符边界。该模块检测预定义的 Comma 模式并调整并行数据的分组位置使 Decoder 能够从正确的 bit 边界开始处理字符。PRBS Checker将接收比特流与本地产生的期望伪随机序列进行比较并统计不一致的比特。Figure 1-3 中Checker 从 RX Polarity 后的节点分支取样正常数据主路径仍继续进入 Comma Detect、Decoder、Elastic Buffer 和 Gearbox。因此 PRBS Checker 是并行的检查支路不是所有业务数据必须串行经过的处理级。8B/10B Decoder将接收到的 10 bit 线路字符还原为 8 bit 数据或控制字符并给出无效码、运行差异错误等状态。Decoder 必须在字符边界已经正确对齐后工作如果发送端未使用 GTX 内部 8B/10B Encoder则接收数据可以经多路选择器旁路该模块。RX Elastic Buffer位于 XCLK 与 RXUSRCLK 两个并行时钟域之间。数据在 XCLK 域写入、在 RXUSRCLK 域读取缓冲区用于吸收两个时钟域之间的相位差以及允许范围内的频率偏差。时钟关系、缓冲模式或相关控制配置不正确时可能出现上溢、下溢或数据异常。RX Gearbox对并行数据进行位宽转换和时序重组将 RX PCS 内部的数据格式转换为 FPGA RX Interface 所需的输出宽度和节拍。它改变并行组织方式不应改变已经恢复出的线路比特顺序。RX Status Control 与 FPGA RX Interface位于接收路径末端。RX Status Control 汇集部分接收状态并提供给用户逻辑不参与数据恢复FPGA RX Interface 则按照 RX 用户时钟把处理完成的并行数据送入可编程逻辑。图中的其他特殊模式控制和带外检测支路服务于特定工作模式不是通用接收数据的必经路径。6. 四种内部回环路径UG476 Figure 2-26 使用近端 GTX、远端 GTX、Traffic Generator 和 Traffic Checker 展示四种回环路径。图中的近端和远端以测试逻辑所在位置为参照。编号回环模式数据方向主要用途1Near-End PCS Loopback近端 TX PCS → 近端 RX PCS在并行侧返回数据绕过近端 PMA 和外部链路2Near-End PMA Loopback近端 TX PMA → 近端 RX PMA在芯片内部检查近端收发 PMA不经过外部引脚和板级通道3Far-End PMA Loopback远端 RX PMA → 远端 TX PMA数据经外部链路到达远端后在 PMA 内返回绕过远端 PCS4Far-End PCS Loopback远端 RX PCS → 远端 TX PCS远端在 PCS 侧返回数据将远端 PCS 纳入往返路径Near-End 回环用于检查测试逻辑所在一端数据由本端发送路径返回本端接收路径。Far-End 回环由链路另一端将接收数据送回发送路径因此测试数据需要经过外部链路到达远端再返回近端 Traffic Checker。四种模式的差别不只是方向还包括回环点位于 PCS 还是 PMA。回环位置决定测试路径包含和绕过哪些模块因此可以用于逐步隔离 PCS、PMA 与外部通道问题。7. 用一张表收住整条 GTX 链路位置关键模块解决的问题TX PCSGearbox、编码器、Pattern Generator、Phase Adjust FIFO组织并行数据、选择测试路径、处理并行侧时钟关系TX PMAPISO、Pre/Post Emphasis、TX Driver串化数据并形成差分输出波形RX PMARX EQ、DFE、SIPO补偿通道损伤把串行信号恢复为并行比特RX PCSPolarity、Comma Align、PRBS Checker、Decoder、Elastic Buffer、Gearbox修正极性和边界检查或解码数据完成时钟域与位宽衔接8. 总结XC7K325T 的 GTX 资源按 Quad 组织每个 Quad 包含四个 GTXE2_CHANNEL 和一个 GTXE2_COMMON。CPLL 位于 Channel 内部QPLL 位于 Common 内部外部参考时钟经专用输入缓冲和参考时钟网络送入相应资源。单个 GTXE2_CHANNEL 由 TX 和 RX 两条相对独立的数据通路组成。TX 数据从 FPGA 并行接口进入 TX PCS经数字处理后进入 TX PMA完成并串转换、发送均衡和差分驱动RX 数据从差分引脚进入 RX PMA经均衡、采样和串并转换后进入 RX PCS完成极性处理、对齐、解码、缓冲和位宽组织随后送入 FPGA 并行接口。PCS 负责并行数据的组织与处理PMA 负责高速串行转换和电气收发。CPLL、QPLL 为收发通路提供时钟基础内部码型与不同层级的回环路径则为 GTX 数据通路的分段测试提供支持。以上关系构成了 7 系列 GTX 的基本结构。