1.为什么需要TX Gearbox
在高速串行通信中,8B/10B 编码虽然实现了最佳的直流平衡,但其编码开销较高。当链路速率继续提升时,64B/66B(以及 Interlaken 使用的 64B/67B)因效率更高而成为主流选择。但效率提升带来新的实现问题:Header、Payload、用户侧并行位宽与物理层发送节拍之间并不天然对齐,必须在不破坏协议语义的前提下完成精确重组。
这正是 TX Gearbox 的作用,它不是简单的数据通道,而是连接协议层与物理发送路径的关键重排单元。在 2-byte、4-byte、8-byte、16-byte 等不同接口宽度下,将 Header 与 Payload 按协议规则组合,保证块边界正确、比特顺序连续、输出节拍稳定。
TX Gearbox 主要用于 64B/66B 和 64B/67B 编码场景。在这两种编码下,发送比特都遵循同一规则:MSB 先发,LSB 后发。问题在于:用户侧接口宽度(例如 32-bit)与编码块宽度(66-bit 或 67-bit)不整除,因此数据不能 “按输入拍原样输出” ,必须经过跨周期重排。
以 64B/66B、4-byte 逻辑接口(每拍输入 2-bit Header + 32-bit TXDATA)为例,TX Gearbox 的输出过程如下:
- 第 1 个周期:输出 Header[1:0] + 30 bit 数据。
- 第 2 个周期:先输出上一拍剩余的 2 bit,再拼接当前拍的 30 bit 数据。
- 第 3 个周期:先输出上一 66-bit 块剩余的 2 bit,再输出新 66-bit 块的 Header,最后输出该块的 28 bit 数据。
由此可见,TX Gearbox 的作用不是简单透传,而是:
- 在固定并行接口宽度下,通过缓存与重排实现编码块边界对齐。
- 保证跨周期拼接时的比特顺序连续性。
- 最终确保 66-bit/67-bit 编码块在串行链路上被正确发送。
2.同步TX Gearbox的运行过程
下面通过两个案例详细说明同步TX Gearbox的运行过程。
- 64B/66B
- Normal Mode
- TX_DATA_WIDTH = 32
- TX_INT_DATAWIDTH = 1(4-byte)
- 文档给出的TXSEQUENCE PAUSE = 32(注意这里是从0开始计算的)
- 具体的移位过程请参考下图
下图展示了同步TX Gearbox 在64B/66B Normal Mode 下的完整重排过程:左侧是每周期输入的 TXHEADER[1:0] + TXDATA[31:0],中间是 Gearbox 内部按发送顺序重新组织后的比特流,右侧是因块边界与接口位宽不整除而产生的残留缓存变化。可以看到,发送过程始终遵循 MSB 先发、LSB 后发;Header 不会固定出现在同一列,而是随周期相位滑动,并与跨周期残留数据共同拼接为连续输出。这正是 Gearbox 的核心价值:在固定 32-bit 逻辑接口下,保证 66-bit 编码块边界连续、比特顺序正确、链路输出无缝衔接。通过 Header 移位的过程可以很直观的看到,随着发送数据的累积,内部缓存的内容增加,导致在某一个时刻无法接收外部输入,这对应了UG578 Table3-10的TXSEQUENCE PAUSE的参数(32为当前配置下的示例计数点)。
- 64B/67B
- Normal Mode
- TX_DATA_WIDTH = 32
- TX_INT_DATAWIDTH = 1(4-byte)
- 文档给出的TXSEQUENCE PAUSE = 22,44,66(注意这里是从0开始计算的)
下图展示的是 64B/67B 模式下 TX Gearbox 在 Normal Mode 的“跨周期重排”过程:每个周期输入一组 32-bit 数据和 3-bit Header,但输出到发送序列时并不是整组原样吐出,而是按 MSB 先发送、LSB 后发送的规则,把当前周期新数据和上一周期未发完的低位残留拼接在一起连续输出。图中蓝色区域代表本周期输入数据,黄色区域代表缓存/残留数据,绿色区域是对外发送序列,从下图可以看到 Header(H2/H1/H0)的位置会随周期滑动,这是因为 67-bit 块长与 32-bit 接口宽度不整除,Gearbox 必须通过这种相位滚动来保证块边界连续、比特顺序正确。与此同时,因为Gearbox内部缓存并非无限大,当残留持续累积并接近缓存上限时,暂停由 TXSEQUENCE 指定的计数点决定,等待内部缓存数据被发送后再恢复接收外部数据。
通过 Header 移位的过程可以很直观的看到,随着发送数据的累积,内部缓存的内容增加,导致在某一个时刻无法接收外部输入,这对应了UG578 Table3-11的TXSEQUENCE PAUSE的参数(22、44和66为当前配置下的示例计数点,不同参数配置下可能不同)。
3.异步TX Gearbox的运行过程
同步 TX Gearbox 用于 PCS 数据宽度与 PMA 数据宽度不一致时的数据重组,其正常工作的前提是 PCS 侧与 PMA 侧存在确定的时钟关系(同源或固定频率比关系)。例如将 PCS 侧编码后的 66-bit 或 67-bit 数据映射到 PMA 所需的并行宽度,以保证串行发送的连续性。其主要解决的是数据格式与位宽匹配问题,而不承担跨时钟域的速率补偿功能。
异步 TX Gearbox 则用于两个时钟域之间的数据搬运与匹配。在完成数据重组的同时,通过内部 FIFO 机制吸收由于位宽转换引起的瞬时读写节奏不均衡,并实现跨时钟域的数据传递。异步 TX Gearbox 可在一定范围内完成速率匹配与相位容忍,从而支持连续数据输入,异步 TX Gearbox两侧时钟来源于同一 PLL 体系或存在确定频率关系,因此 内部 FIFO 仅用于吸收瞬时吞吐不均衡与相位偏移,而不用于补偿长期频率漂移。
在同步 TX Gearbox 模式下,需要根据 TXSEQUENCE 的指示,在特定 TXUSRCLK2 周期对用户数据输入进行节奏控制,以协调数据块与 PMA 并行接口之间的非整数位宽关系;而在异步 TX Gearbox 模式下,由内部机制维持持续的数据吞吐,用户可在每个 TXUSRCLK2 周期连续输入数据,而无需周期性停顿。
对应 UG578 Page 126 的描述:
While the TX synchronous Gearbox requires you to pause transmission of your data during various sequence counter values, the TX asynchronous Gearbox allows data to be continuously applied every TXUSRCLK2 cycle.
需要注意的是TX Async Gearbox 与 TX Buffer 在 GTY 架构中为并行独立模块。前者位于 PCS→PMA 数据路径中,负责位宽转换及结构约束型跨时钟接口;后者属于通用时钟补偿与弹性缓冲机制,两者不构成包含关系。
文章来源:AMD开发者社区

