FPGA SERDES 通用基础(七)Xilinx 7 系列 GTX TX Buffer 与 RX Elastic Buffer

📅 2026/8/21 6:23:02
FPGA SERDES 通用基础(七)Xilinx 7 系列 GTX TX Buffer 与 RX Elastic Buffer
GTX 的 TX 和 RX 数据通路都跨越两个内部并行时钟域。发送方向需要从 TXUSRCLK 域进入 XCLK 域接收方向需要从 XCLK 域进入 RXUSRCLK 域。如果两个时钟域之间的相位关系没有得到处理PCS 与 PMA 之间就无法稳定传递并行数据。7 系列 GTX 为此提供了两种实现方式保留 Buffer由缓冲器吸收时钟域之间的相位差或者旁路 Buffer改用 Phase Alignment 电路建立相位关系。本文重点说明默认 Buffer 模式结合 UG476 的时钟域框图、模式对比表和端口表分析 TX Buffer 与 RX Elastic Buffer 的位置、配置关系、状态监测和工程取舍。1. 缓冲器在收发通路中的位置TX 与 RX 的缓冲器都位于 PCS 内部但两侧的数据方向和时钟边界相反TXFPGA TX Interface → TX PCSTXUSRCLK→ TX Buffer → TX PMAXCLK→ PISO RXSIPO → RX PMA 并行侧XCLK→ RX Elastic Buffer → RX PCSRXUSRCLK→ FPGA RX InterfaceTX架构使用时钟域划分虚线将发送通路划分为四个时钟区域。最右侧的 FPGA TX Interface 工作在 TXUSRCLK2 域负责接收 FPGA 逻辑提供的并行数据和控制信号进入 TX PCS 后8B/10B Encoder、TX Gearbox 等模块主要工作在 TXUSRCLK 域。继续向左数据跨过 Phase Adjust FIFO 后进入 PMA Parallel Clock也就是 XCLK 域随后由 PISO 完成并串转换最终进入 TX Serial Clock 域。图中的 Phase Adjust FIFO 就是 TX Buffer 在数据通路中的核心位置。它处于 TXUSRCLK 与 XCLK 的交界处写入侧按 TXUSRCLK 接收 PCS 并行数据读出侧按 XCLK 将数据送往 PMA。Buffer 不改变字符内容、编码格式或并行位宽只处理两个同频时钟域之间的相位关系。Phase Adjust FIFO 上下两条路径和相邻多路选择器还表明TX Buffer 并不是不可替代的固定级。使用 Buffer 时数据通过 FIFO 完成时钟域衔接旁路 Buffer 时数据绕过 FIFO但必须由 TX Phase Alignment 电路建立 TXUSRCLK 与 XCLK 的相位关系。两种方式解决的是同一个边界问题不能同时省略。RX架构使用时钟域划分接收模拟前端和 CDR 工作在 RX Serial Clock 域SIPO 将串行码流转换成并行数据后数据进入 PMA Parallel Clock也就是 XCLK 域。Polarity、Comma Detect and Align、8B/10B Decoder 位于 Elastic Buffer 之前因此这些模块处理的仍是恢复时钟体系下的并行数据。RX Elastic Buffer 正好跨在 XCLK 与 RXUSRCLK 的边界上。写指针跟随恢复时钟侧的 XCLK读指针跟随用户侧的 RXUSRCLK通过在存储空间中保持一定读写间隔Buffer 可以隔离两侧的相位差。数据离开 Buffer 后RX Gearbox 等后级逻辑工作在 RXUSRCLK 域最右侧 FPGA RX Interface 则使用 RXUSRCLK2 与用户逻辑交换数据。RXUSRCLK2 是 FPGA Interface 的主要同步时钟但它不是 RX Elastic Buffer 的读时钟。图中虚线边界清楚表明Elastic Buffer 直接连接的是 XCLK 与 RXUSRCLKRXUSRCLK 到 RXUSRCLK2 的频率关系由接口位宽组织决定。图中绕过 Elastic Buffer 的支路用于 Buffer Bypass选择该支路后存储缓冲不再承担跨域作用必须改由 RX Phase Alignment 完成 XCLK 与 RXUSRCLK 的相位匹配。UG476 对 Buffer 模式与 Phase Alignment 模式的取舍分别给出了 TX、RX 两张对比表。从易用性、时延和多 Lane 去偏斜三个维度比较 TX Buffer 与 TX Phase Alignment。在易用性方面TX Buffer 是 UG476 推荐的默认方案。Buffer 能容纳两个时钟域的初始相位差初始化时不需要用户逻辑执行额外的相位对齐序列。Phase Alignment 则要求 TXOUTCLKSEL 选择 GTX 参考时钟作为 TXOUTCLK 的来源并由 TXOUTCLK 驱动 TXUSRCLK同时增加对齐控制逻辑和相应的时钟约束因此属于更高阶的使用方式。在时延方面Buffer 内部的存储和读写控制会增加数据通路延迟。旁路 Buffer 后数据通过更少的寄存级进入 PMA并由专用相位对齐电路维持时钟关系因此能够获得更低、可重复的发送时延。在多 Lane 应用中各 Channel 的时钟树和内部路径可能产生 Lane 间偏斜。TX Buffer 本身不负责让多个 Lane 的输出同时到达需要减小发送端 Lane 间偏斜时可以使用 TX Phase Alignment使参与对齐的 Channel 在相同线路速率下建立统一的相位关系。RX Elastic Buffer 不只处理相位差还参与接收端的频差补偿和多 Lane 对齐。在时钟选择方面保留 Elastic Buffer 时RXUSRCLK 可以来自恢复时钟也可以来自频率接近的本地时钟。若使用本地时钟收发两端参考源的 ppm 偏差会使 Buffer 占用量缓慢移动需要 Clock Correction 通过插入或删除规定的校正序列把读写间隔维持在允许范围内。旁路 Buffer 后不再有空间吸收这种长期频差因此 RXUSRCLK 必须使用 RX 恢复时钟派生。在初始化方面Elastic Buffer 随 RX 数据通路完成复位后即可建立读写关系Phase Alignment 必须等恢复时钟和用户时钟稳定再执行相位与延迟对齐过程。其优势是移除了缓冲存储能够获得更低且更确定的接收时延。Clock Correction 与 Channel Bonding 都依赖 Elastic Buffer 的可变占用空间。前者利用缓冲深度吸收收发两端的频率误差后者通过调节各 Lane 的读出位置补偿 Lane 间到达偏斜。旁路 RX Buffer 后这两项功能不能继续由 GTX 内部完成如系统仍然需要它们就必须在用户逻辑中重新实现。2. TX Buffer连接 TXUSRCLK 与 XCLKTX Buffer 的写侧接收 TXUSRCLK 域数据读侧向 XCLK 域输出数据。两侧时钟必须保持相同的平均数据处理速率Buffer 只负责吸收相位差不用于补偿长期频率偏差。启用 TX Buffer 时两个关键属性是配套关系配置关系设置作用启用 TX BufferTXBUF_EN TRUE数据通过 TX Buffer 连接两个时钟域选择 Buffer 模式的 XCLKTX_XCLK_SEL TXOUT使用 TXOUTCLK 作为 PMA 并行时钟域 XCLK 的来源TX_XCLK_SELTXOUT 是使用 TX Buffer 时的模式要求。TXBUF_EN 选择是否经过缓冲器TX_XCLK_SEL 则确定 PMA 并行侧 XCLK 的来源两者共同建立 Buffer 模式的数据与时钟路径。TXBUF_RESET_ON_RATE_CHANGE 不属于固定的启用条件。设置为 TRUE 时GTX 在线速率变化后内部复位 TX Buffer设置为 FALSE 时需要由外部控制逻辑保证速率切换后的缓冲区重新初始化。是否启用取决于设计是否支持运行期速率切换及其复位方案。TXBUFSTATUS[1:0] 报告 Buffer 状态。TXBUFSTATUS[0] 是容量指示位。其值为 0 时FIFO 占用量小于一半为 1 时FIFO 至少达到半满。该位适合观察复位后建立的初始读写间隔不代表已经发生错误也不要求仅因半满而执行复位。TXBUFSTATUS[1] 是上溢或下溢汇总错误位。读指针追上写指针会导致下溢写指针追上尚未读取的数据则会导致上溢端口本身不进一步区分两种原因。该错误位具有 Sticky 特性一旦拉高会保持到 TX Buffer 被复位因此即使异常只出现了一个瞬间用户逻辑仍能在随后读到故障记录。正常配置下TXUSRCLK 与 XCLK 的频率相同Buffer 内部读写指针保持稳定间隔。二者之间允许存在相位差这部分差异由 Buffer 深度吸收。如果时钟频率、接口位宽或复位过程配置错误读写指针会持续靠近最终触发上溢或下溢。3. RX Elastic Buffer连接 XCLK 与 RXUSRCLKRX Elastic Buffer 的写侧由 XCLK 驱动接收 SIPO 输出的并行数据读侧由 RXUSRCLK 驱动将数据送往 RX PCS 后段。RX 的 XCLK 通常由恢复时钟分频得到而 RXUSRCLK 既可以由 RXOUTCLK 派生也可以来自频率相近的本地时钟因此两侧除了相位差还可能存在 ppm百万分之一级频率偏差。启用 RX Elastic Buffer 时对应的模式关系如下配置关系设置作用启用 RX Elastic BufferRXBUF_EN TRUE数据通过 Elastic Buffer 进入 RXUSRCLK 域选择 Buffer 模式的 XCLKRX_XCLK_SEL RXREC使用 RX 恢复时钟作为 XCLK 来源RXBUF_ENTRUE 与 RX_XCLK_SELRXREC 共同构成 RX Buffer 模式。若旁路 Elastic Buffer则应将 RX_XCLK_SEL 改为 RXUSR并执行 RX Phase Alignment不能只关闭 RXBUF_EN 而保持原来的时钟关系。RXBUF_ADDR_MODE 用于进一步选择缓冲器的工作范围。FULL 模式使用完整地址空间支持 Clock Correction 与 Channel BondingFAST 模式只进行相位补偿不提供这两项功能。它属于功能选择不应与 RXBUF_EN、RX_XCLK_SEL 的基本启用关系混在同一个“默认配置”概念中。RXBUFSTATUS[2:0] 用于监测RX Elastic Buffer占用状态。RXBUFSTATUS000 表示 Buffer 占用量处于正常范围。001 表示有效字节数低于 CLK_COR_MIN_LAT010 表示有效字节数高于 CLK_COR_MAX_LAT这两种状态说明读写间隔已经偏离设定的目标区间但尚未发生数据丢失。Table 4-40 还特别说明在关闭 Clock Correction 时将 RXBUF_ADDR_MODE 设为 FULL仍可利用 001 和 010 观察缓冲区是否向低水位或高水位移动。RXBUFSTATUS101 表示下溢110 表示上溢。与 TXBUFSTATUS[1] 不同这两个 RX 错误码不是 Sticky 状态异常条件消失后端口可能重新回到 000。因此 RX 侧不能只依赖软件偶尔读取一次状态工程中通常需要在 RXUSRCLK2 域锁存错误、累计次数或者通过 ILA 捕获故障前后的占用变化。出现 101 或 110 后即使状态随后恢复已受影响的数据也不能继续作为有效数据使用应重新初始化 RX Elastic Buffer 或 RX 数据通路。4. 两类缓冲器的功能TX Buffer 与 RX Elastic Buffer 都用于处理 PCS 内部并行时钟域之间的关系但二者并不对称。对比项TX BufferRX Elastic Buffer时钟边界TXUSRCLK → XCLKXCLK → RXUSRCLK基本功能吸收同频时钟之间的相位差吸收相位差并隔离恢复时钟与用户时钟长期频差补偿不支持可配合 Clock Correction多 Lane 对齐不支持可配合 Channel Bonding状态端口TXBUFSTATUS[1:0]RXBUFSTATUS[2:0]TX 侧能够要求 TXUSRCLK 与 XCLK 同频是因为两个时钟都属于本地发送时钟体系。Buffer 模式下TX_XCLK_SELTXOUT使 XCLK 由 TXOUTCLK 路径产生工程中通常也使用 TXOUTCLK 经 FPGA 时钟资源生成 TXUSRCLK 和 TXUSRCLK2因此它们具有共同的时钟根源和确定的频率关系。这并不表示 TXUSRCLK 在所有设计中都必须直接由 TXOUTCLK 生成。用户也可以提供独立的 TXUSRCLK但其频率必须与 TXOUTCLK/XCLK 严格匹配。TX Buffer 只能容纳缓冲深度范围内的相位差不能像异步 FIFO 一样承受持续累积的频率误差。RX 的情况不同。XCLK 跟随远端串行数据恢复出来的时钟而 RXUSRCLK 可能来自本地时钟网络。若两端由独立晶振提供参考时钟即使标称频率相同也会存在容差与温漂。RX Elastic Buffer 因而需要保留可调节的读写间隔并通过 Clock Correction 周期性修正长期频差。5. 缓冲区状态与复位处理TXBUFSTATUS[1] 拉高表示 TX Buffer 已经发生上溢或下溢。该状态为 Sticky必须通过 GTTXRESET、TXPCSRESET或者启用速率变化内部复位后重新初始化 TX Buffer。复位前应先检查 TXUSRCLK 与 XCLK 的频率、TX_DATA_WIDTH/TX_INT_DATAWIDTH 对应的用户时钟关系以及 TX_XCLK_SEL 是否与 Buffer 模式一致。RXBUFSTATUS 的上溢、下溢状态不是 Sticky错误消失后可能返回 000但发生异常时缓冲区数据已经失效。设计可以使用 RXBUFRESET 只重新初始化 Elastic Buffer也可以通过 GTRXRESET 或 RXPCSRESET 重建更完整的 RX 数据通路。调试时应使用 ILA 或错误计数器捕获瞬态状态不能只读取某一时刻的 RXBUFSTATUS。缓冲区异常的定位顺序可以归纳为确认 CPLL/QPLL 锁定TXOUTCLK/RXOUTCLK 持续输出核对 USRCLK、USRCLK2 与接口位宽的频率关系检查 BUF_EN 与 XCLK_SEL 是否采用同一工作模式观察 TXBUFSTATUS、RXBUFSTATUS 的具体编码修正时钟或配置问题后再执行对应方向的 Buffer 或数据通路复位。如果错误在初始化后立即出现应优先检查时钟频率、位宽组合和模式属性如果 RX 运行较长时间后才逐步接近上溢或下溢则需要检查恢复时钟与本地 RXUSRCLK 的频差以及 Clock Correction 是否获得了有效校正机会。6. 缓冲与时延的工程取舍保留 Buffer 的主要价值是实现稳健。缓冲器隔离了 PCS 与 PMA 并行时钟域复位后的相位变化和时钟树偏斜不会直接破坏数据采样。TX Buffer 适合绝大多数发送配置RX Elastic Buffer 则是使用本地 RXUSRCLK、Clock Correction 或 Channel Bonding 时的必要基础。Buffer 的代价是增加数据通路时延。RX Elastic Buffer 的实际延迟还会受初始读写位置、Clock Correction 和 Channel Bonding 调整影响因此不适合要求每次复位后时延完全一致的场景。Buffer Bypass 移除缓冲存储通过专用 Phase Alignment 电路匹配 XCLK 与 USRCLK可获得更低、可重复的通路时延。相应代价是时钟来源受限、初始化流程更复杂并需要额外的对齐控制与时序约束。RX 旁路 Buffer 后还会失去 GTX 内部的 Clock Correction 和 Channel Bonding。这部分将在第九篇结合自动与手动相位对齐流程展开。7. 总结TX Buffer 与 RX Elastic Buffer 都位于 PCS 内部并行时钟域的交界处。TX Buffer 连接 TXUSRCLK 与 XCLK主要吸收本地同频时钟之间的相位差RX Elastic Buffer 连接 XCLK 与 RXUSRCLK除相位隔离外还为频差补偿和多 Lane 对齐提供缓冲空间。配置时应把 BUF_EN 与 XCLK_SEL 视为成对的模式选择而不是互不相关的典型参数。调试则应从时钟频率、位宽关系和模式属性入手再结合 TXBUFSTATUS、RXBUFSTATUS 判断读写关系是否稳定。只有在固定时延成为明确要求并且系统能够承担更严格的时钟与对齐约束时才需要进一步采用 Buffer Bypass。