上篇文章讲了8B/10B编码功能模块,这篇文章讲的是TX Buffer,但是在正式进入主题之前,为了内容的完整性,提一下Tx Gearbox,这是个什么?
我们看下图:
TX功能模块示意
TX Gearbox和8B/10B Encoder从电路结构上看,地位相同,都是进入一个选择器。其作用是提供64B/66B编码,一些高速数据率协议使用64B/66B编码,以减少8B/10B编码的开销,同时保留编码方案的好处。关于其具体的功能,以及使用注意事项,一时半会也弄不清楚,这里暂时就不讲了。深入了解,请看手册。
GTX/GTH收发器的TX数据通路有两个用于PCS的内部并行时钟域:PMA并行时钟域(XCLK)和TXUSRCLK域。为了传输数据,XCLK速率必须与TXUSRCLK速率相匹配,并且必须解决两个域之间的所有相位差。下图显示了XCLK和TXUSRCLK域的情况。
TX时钟域
GTX/GTH Transmitter包括一个TX缓冲器和一个TX相位校准电路,以解决XCLK和TXUSRCLK域之间的相位差异。当TX buffer被旁路时,TX相位校正电路(phase alignment)被使用。所有的TX数据路径必须使用TX缓冲器或TX相位对准电路。
下面给出缓冲区和相位对齐之间的权衡。
下面介绍一下TX buffer的端口TXBUFSTATUS[1:0]:
TX缓冲区状态。TXBUFSTATUS[1]: TX缓冲区的溢出或下溢状态。当TXBUFSTATUS[1]被设置为高电平时,它一直保持高电平,直到TX缓冲器被复位。1:TX FIFO有溢出或下溢。0:TX FIFO没有溢出或下溢错误。TXBUFSTATUS[0]: TX缓冲区的满度。1:TX FIFO至少满了一半。0:TX FIFO小于半满。
再介绍两个属性:
TX_XCLK_SEL:
选择用于驱动PMA并行时钟域(XCLK)的时钟源。TXOUT: 选择TXOUTCLK作为XCLK的来源。在使用TX缓冲器时使用。TXUSR:选择TXUSRCLK作为XCLK的来源。在绕过TX缓冲器时使用。
TXBUF_RESET_ON_RATE_CHANGE:
GTX/GTH收发器在速率变化时内部产生的TX缓冲器复位。TRUE: 启用速率变化时的自动TX缓冲区复位。FALSE: 禁用速率变化时的自动TX缓冲器复位。
每当TXBUFSTATUS表明出现溢出或下溢情况时,就应复位TX缓冲区。可以通过使用 GTTXRESET、TXPCSRESET 或当 TXBUF_RESET_ON_RATE_CHANGE = TRUE 时 GTX/GTH 收发器内部生成的 TX 缓冲器在速率变化时复位。
GTTXRESET的断言会触发一个序列,复位GTX/GTH收发器的整个发射器。
这些设置用于启用TX缓冲器,以解决XCLK和TXUSRCLK域之间的相位差异: