TX的8B/10B编码功能

2021-11-12 18:29:12 浏览数 (1)

Transmitter功能介绍

每个收发器(Transceiver)包括一个独立的发射器(Transmitter),它由PCS和PMA组成。下图显示了发射器(Transmitter)的功能块。并行数据从FPGA逻辑流入FPGA TX接口,通过PCS和PMA,然后作为高速串行数据流出TX驱动器 。

如下图所示,GTX/GTH Transceiver的TX功能框图:

TX功能框图

可见,TX中包含以下功能块:

  1. FPGA TX Interface
  2. TX 8B/10B Encoder
  3. TX Gearbox
  4. TX Buffer
  5. TX Buffer Bypass
  6. TX Pattern Generator
  7. TX Polarity Control
  8. TX Fabric Clock Output Control
  9. TX Phase Interpolator PPM Controller
  10. TX Configurable Driver
  11. TX Receiver Detect Support for PCI Express Designs
  12. TX Out-of-Band Signaling

TX Interface

下面会有取舍的介绍,本文主要介绍TX Interface,即逻辑并行数据与TX交互的窗口,还有Tx 8B/10B编码模块。

关于这部分,我们在GT Transceiver的时钟篇已经介绍了一部分,和时钟有关的一部分,可见下方的往期回顾。

FPGA逻辑生成并行数据使用的时钟是TXUSRCLK,它来自于时钟TXOUTCLK,而TXOUTCLK的来源,可以是GT Transceiver的外部参考时钟,这些都可以参考下面的往期回顾。

  • GT Transceiver中的重要时钟及其关系(8)TXOUTCLK的来源及其产生
  • GT Transceiver中的重要时钟及其关系(7)TXUSRCLK以及TXUSRCLK2的产生
  • GT Transceiver中的重要时钟及其关系(6)TXUSRCLK以及TXUSRCLK2的用途与关系

TX 8B/10B编码

许多协议对输出数据使用8B/10B编码。8B/10B是一种行业标准的编码方案,它用每个字节的两个比特的开销来换取实现的直流平衡和bounded disparity,以允许合理的时钟恢复。

GTX/GTH收发器有一个内置的8B/10B TX路径(集成的硬核资源),对TX数据进行编码而不消耗FPGA资源。启用8B/10B编码器会增加通过TX路径的延迟。如果不需要,可以禁用或绕过8B/10B编码器,以尽量减少延迟。

8B/10B位和字节排序

8B/10B编码器后的位顺序与如下 "8B/10B编码表 "中的顺序相反,因为8B/10B编码要求先传送位a0,而GTX/GTH收发器总是先传送最右边的位。

部分编码表截取

为了与8B/10B匹配,GTX/GTH收发器中的8B/10B编码器会自动颠倒位序。

下图显示了当TX_DATA_WIDTH=20、40和80时GTX/GTH收发器传输的数据。TXDATA使用的比特数和相应的字节顺序由TX_DATA_WIDTH决定。

  • 如果TX_DATA_WIDTH = 20,只使用TXDATA[15:0]
  • 如果TX_DATA_WIDTH = 40,只使用TXDATA[31:0]
  • 如果TX_DATA_WIDTH = 80,使用全部TXDATA[63:0]

8B/10B位和字节排序

当8B/10B编码器被绕过,TX_DATA_WIDTH被设置为10的倍数,10位字符以这种格式传递给TX数据接口。- 相应的TXCHARDISPMODE代表第9位 - 相应的TXCHARDISPVAL代表第8位 - 相应的TXDATA字节代表[7:0]位

Running Disparity

8B/10B编码是直流平衡的,也就是说,传输的1和0的长期比例应该正好是50%。为了实现这一点,编码器总是计算传输的1和0的数量之间的差异,并在每个字符传输结束时,使其差异为 1或-1。这个差值被称为Running Disparity。

为了适应使用Disparity来发送控制信息的协议,运行中的Disparity不仅可以由8B/10B编码器产生,而且还可以通过TXCHARDISPMODE和TXCHARDISPVAL来控制,如下所示。例如,发送的空闲字符与颠倒的Disparity可能被用来触发时钟校正。

TXCHARDISPMODE和TXCHARDISPVAL与输出差异的关系

上面提到了TXCHARDISPMODE和TXCHARDISPVAL,其基本含义以在表中说明,下面介绍下这两个端口的位与数据的对应关系:

  1. TXCHARDISPMODE[7:0] ,这是一个输入端口,时钟域TXUSRCLK2,设置为高,以便在编码TXDATA时与TXCHARDISPVAL一起工作,强制执行负数或正数的Running Disparity。设置为低,则使用正常的Running Disparity。
  • TXCHARDISPMODE[7]对应于TXDATA[63:56]
  • TXCHARDISPMODE[6]对应于TXDATA[55:48]
  • TXCHARDISPMODE[5]对应于TXDATA[47:40]
  • TXCHARDISPMODE[4] 对应于TXDATA[39: 32]
  • TXCHARDISPMODE[3]对应TXDATA[31:24]
  • TXCHARDISPMODE[2]对应TXDATA[23:16]
  • TXCHARDISPMODE[1]对应TXDATA[15:8]
  • TXCHARDISPMODE[0] 对应TXDATA[7:0]
  1. TXCHARDISPVAL[7:0] ,输入端口,时钟域TXUSRCLK2,与TXCHARDISPMODE合作,提供Running Disparity控制。

其对应关系与TXCHARDISPMODE一致,不再赘述。

下面在看下其他端口:

  1. TX8B10BBYPASS[7:0] ,这个高电平有效的端口允许字节交错的数据以每个字节为单位绕过8B/10B。TX8B10BEN必须为高电平,才能使用这种逐个字节的旁路模式。
  • TX8B10BBYPASS [7] 对应于TXDATA[63:56]
  • TX8B10BBYPASS [6] 对应于TXDATA[55:48]
  • TX8B10BBYPASS [5] 对应于TXDATA[47:40]
  • TX8B10BBYPASS [4] 对应于TXDATA[39:32]
  • TX8B10BBYPASS [3] 对应于TXDATA:31: 24]
  • TX8B10BBYPASS [2] 对应TXDATA[23:16]
  • TX8B10BBYPASS [1] 对应TXDATA[15:8]
  • TX8B10BBYPASS [0] 对应TXDATA[7:0]

TX8B10BBYPASS[x] = 1,字节x的编码器被绕过。TX8B10BBYPASS[x] = 0,使用字节x的编码器。

  1. TX8B10BEN ,TX8B10BEN被设置为高电平以启用8B/10B编码器。启用8B/10B编码器时,TX_DATA_WIDTH必须被设置为20、40或80。0:8B/10B编码器被绕过。该选项可以减少延迟。1:启用8B/10B编码器。
  2. TXCHARISK[7:0] ,当高电平时,表示TXDATA上对应的数据字节是一个有效的K字符。
  • TXCHARISK[7]对应TXDATA[63:56] * TXCHARISK[6]对应TXDATA[55:48] * TXCHARISK[5]对应TXDATA[47:40] * TXCHARISK[4]对应TXDATA[39:32] * TXCHARISK[3] 对应TXDATA[31: 24]
  • TXCHARISK[2]对应TXDATA[23:16] * TXCHARISK[1]对应TXDATA[15:8] * TXCHARISK[0]对应TXDATA[7:0] 当来自 txdata 的相应数据字节被设置为绕过8b/10b 编码器时, TXCHARISK 位应该被拉低。

启用和禁用8B/10B编码

  1. 要启用8B/10B编码器,TX8B10BEN必须被驱动为高电平。TX8B/10B编码器允许字节交错的数据以每个字节为单位绕过编码器。
  2. 当TX8B10BEN被驱动为低电平时,所有编码器被关闭,不能对TXDATA的数据进行编码。
  3. 当TX8B10BEN为高电平时,将TX8B10BBYPASS的一个位驱动为高电平可以使来自TXDATA的相应字节通道绕过8B/10B编码。

当编码器关闭时,TXDATA端口的操作与FPGA TX接口中描述的一样。即当8B/10B编码器被绕过且TX_DATA_WIDTH为20、40或80时,TXCHARDISPMODE和TXCHARDISPVAL端口被用来将TXDATA端口从16位扩展到20位,32位扩展到40位,或64位扩展到80位。

编码器关闭时,数据传输

0 人点赞