Transmitter功能介绍
每个收发器(Transceiver)包括一个独立的发射器(Transmitter),它由PCS和PMA组成。下图显示了发射器(Transmitter)的功能块。并行数据从FPGA逻辑流入FPGA TX接口,通过PCS和PMA,然后作为高速串行数据流出TX驱动器 。
如下图所示,GTX/GTH Transceiver的TX功能框图:
TX功能框图
可见,TX中包含以下功能块:
- FPGA TX Interface
- TX 8B/10B Encoder
- TX Gearbox
- TX Buffer
- TX Buffer Bypass
- TX Pattern Generator
- TX Polarity Control
- TX Fabric Clock Output Control
- TX Phase Interpolator PPM Controller
- TX Configurable Driver
- TX Receiver Detect Support for PCI Express Designs
- 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,其基本含义以在表中说明,下面介绍下这两个端口的位与数据的对应关系:
- 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]
- TXCHARDISPVAL[7:0] ,输入端口,时钟域TXUSRCLK2,与TXCHARDISPMODE合作,提供Running Disparity控制。
其对应关系与TXCHARDISPMODE一致,不再赘述。
下面在看下其他端口:
- 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的编码器。
- TX8B10BEN ,TX8B10BEN被设置为高电平以启用8B/10B编码器。启用8B/10B编码器时,TX_DATA_WIDTH必须被设置为20、40或80。0:8B/10B编码器被绕过。该选项可以减少延迟。1:启用8B/10B编码器。
- 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编码
- 要启用8B/10B编码器,TX8B10BEN必须被驱动为高电平。TX8B/10B编码器允许字节交错的数据以每个字节为单位绕过编码器。
- 当TX8B10BEN被驱动为低电平时,所有编码器被关闭,不能对TXDATA的数据进行编码。
- 当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位。
编码器关闭时,数据传输