目录
1.8、TX Pre/Post Emp和10、TX Driver
1.11、TX Phase Interpolator Controller(包括12)
2.3、RX Equalizer (DFE and LPM)
文章总目录点这里:《FPGA接口与协议》专栏的说明与导航
1、TX端的剩余模块
在前面几篇文章已经把TX端的比较重要的模块都介绍过一遍了,剩下的不太常用(或者比较简单)的模块在这篇文章一次性介绍完。首先贴出TX通道的架构图,并把模块编号:
1.1、TX PIPE Control
全称为Physical Interface for PCI Express,PCIe物理层接口。如果使能PCIE接口,则该通道是PCIE的数据通道,否则将不会被使用。
1.2、TX Gearbox
一些高速数据速率协议使用64B/66B编码来减少8B/10B编码的开销,同时保留编码方案的优点。TX Gearbox提供了对64B/66B和64B/67B编码支持。常见的高速协议Interlaken就采用了64B/67B编码方案。TX Gearbox支持2字节和4字节接口定义,数据加扰是在FPGA逻辑内实现的。这部分的内容在后面讲 64B/66B编码再详解。
1.3、PCIE Beacon
PICE唤醒功能,只有在使用PCIE协议时才会用到,否则不考虑。
1.4、SATA OOB
SATA是硬盘接口,建立通信主要是通过检测OOB(Out Of Band)实现的,并且向上层传输连接情况,因此只有在使用SATA协议时,才会使用该模块,否则不用考虑。
1.5、Phase Adjust FIFO
相位调整FIFO缓冲器,TX端的时钟分布如下:
在发送端的PCS子层里面有两个并行时钟域,分别是PMA相连的并行时钟(XCLK)和TXUSRCLK时钟。要传输数据,XCLK速率必须与TXUSRCLK速率匹配,并且必须解决两个域之间的所有相位差。
GTX的发送数据通道包括一个FIFO缓冲器和一个TX相位对准电路,用于解决XCLK和TXUSRCLK域之间的相位差。FIFO缓冲器优势就是设计比较简单,用户可以不用去管内部实现,只需要在调用IP时勾选相关选项即可,缺点是FIFO的延迟比较大,导致用户把数据输入GTX到GTX输出数据的时间比较长,如果不考虑这部分延迟,推荐直接使用FIFO即可(Xilinx推荐)。如果对延时比较敏感,则可以使用相位对齐电路,只不过需要用户自己编写这部分控制代码,难度比较大而且很麻烦。
下表给出了这两种方法在选取时的权衡:
1.6、Polarity
极性控制,这个作用比较大,主要时针对PCB设计时将差分对设计反了,模块内部可以将极性反转,从而解决PCB设计问题。在生成IP时勾选极性控制选项,如果PCB设计或者其他板卡引脚极性相反时,只需要将该信号设置为1’b1,将板卡内部的极性输出也翻转即可,如下图所示。
1.7、PISO
Parallel In Serial Out,即并入串出,也就是并串转换器。
1.8、TX Pre/Post Emp和10、TX Driver
GTX的TX驱动器是高速电流模式差分输出缓冲器,如下图所示。为了最大限度地提高信号完整性,具有差分电压控制、光标前和光标后传输预加重、校准终端电阻功能。
高速信号在长距离、线速率较高的传输时,损耗是很严重的。经过损耗衰减之后,为了让接收端还能检测到数据,在发送端会做预加重和去加重处理,增大差分输出信号的摆幅等等,让其经过传输损耗之后差分信号的幅值变为零。
用户只需要调节两个参数的值就可以调节预加重和去加重了,在配置IP时勾选下面两个选项即可。至于参数具体应该设置为多少,要根据实际的电路进行眼图扫描,然后确定最佳参数。
1.9、 TX OOB and PCIE
使用PCIE、SATA协议时才会使用的功能,暂时不介绍。
1.10、TX Driver
见第8条。
1.11、TX Phase Interpolator Controller(包括12)
TX相位插值器控制器模块,允许使用PCS中的TX相位插值器PPM(百万分之一)控制器模块来控制TX PMA中的TX PI,以优化高速数据传输过程中的信号质量,保持传输的稳定性和可靠性。
2、RX端的剩余通道
在前面几篇文章已经把RX端的比较重要的模块都介绍过一遍了,剩下的不太常用(或者比较简单)的模块在这篇文章一次性介绍完。首先贴出RX通道的架构图:
2.1、RX模拟前端
RX模拟接收前端(AFE)是高速电流模式输入差分缓冲器,如图4-2所示。该缓冲器具有以下特性:
-
可配置的RX端接电压
-
校准的端接电阻
由于GTX的差分信号线速率很高,可以达到10.312Gb/S,并且传输距离可能会很长,导致接收数据的幅值可能很小,甚至达不到检测要求,比如输入端发送时幅值有1.5V,经过几十米的光纤传输,到接收端时,幅值可能只有600mv了。
解决方式就是在发送时,通过预加重、后加重把幅值增大一点,同时在接收时把门限降低一点,比如接收时检测幅值大于500mv就认为是高电平了,还是正确检测到衰减后的信号。
至于预加重、后加重、检测门限设置多少合适,这与实际的信号传输路径和线速率有关。一般做法是当硬件条件确定后,通过眼图对所有参数进行扫描,确定一个最合适的参数,用作后续开发的值就行了。
2.2、RX OOB
接收器RX提供:
-
支持解码SATA和SCSI协议要求的OOB信令以及PCIe规范描述的信令
-
支持SATA/SAS OOB信令的GTP接收机包括解码OOB信号状态所需的模拟电路
-
支持解码SATA/SAS OOB信号突发的状态机COM序列
带外信号,为了发送这些数据,协议一般不使用与普通数据相同的通道,而是使用另外的通道。GTP收发器接收器支持解码串行ATA(SATA)和串行连接SCSI(SAS)规范中描述的带外(OOB)序列,并支持PCI Express规范中描述的信标。支持SATA / SAS OOB信令的GTP收发器接收器包括解码OOB信号状态和状态机所需的模拟电路,以解码SATA / SAS COM序列的OOB信号突发。GTP收发器接收器还通过使用PCI接口(PIPE)规范的PHY接口中定义的接口信号,支持符合PCI Express的信标。FPGA逻辑对信标序列进行解码。
2.3、RX Equalizer (DFE and LPM)
接收通道有两种类型的自适应滤波器可以使用。如果传输过程中损耗比较小,可以使用低功耗模式(LPM)的节能自适应滤波器;如果传输过程中损耗比较大,传输距离远,此时应该使用DFE自适应滤波器。
在调用IP时,左侧可以设置滤波器类型,低损耗首选LPM模式。在右侧可以把接收数据的幅值检测设置为可编程,之后可以通过IP端口信号gt0_txdiffctrl_in的值调节输入检测幅值。
2.4、CDR
时钟数据恢复(CDR)技术是从接收的串行数据中提取恢复的时钟和数据的相位关系,是GTX和SerDes技术的一大基石,GTX之所以跑这么快,不用传时钟是一个很大的原因,因为没有时钟自然就没有Skew过大的问题。
2.5、SIPO
Serial In Parallel Out ,即串入并出,也就是串并转换器。
2.6、Rx Gearbox
RX Geartox与TX Gearbox类似,只有在使用64B/66B或者64B/67B编码的时候才会被使用,后续一起讲解。
2.7、Clock Correction
RX Status Control对弹性buffer的一些状态进行检测,包括溢出等等,然后去做一个时钟纠正的处理。
Clock Correction,时钟校正,RX弹性buffer用于同步两个不同的时钟域RXUSRCLK和XCLK的数据,XCLK是从CDR恢复的时钟。即使RXUSRCLK和XCLK以相同的时钟频率运行,频率差异也始终很小,日积月累也会导致读写数据的速率不一致,可能造成数据溢出。这是因为RXUSRCLK和XCLK差异决定的,并不能消除,因此提供了一种时钟纠正的方式来防止数据出现错误。即通过删除或者复制特定的空闲字符来防止 RX 弹性缓冲器上溢出或者下溢出,如图所示:
具体来说,就是要要保证缓存区始终处于半满状态,这种状态既不会因读空导致数据中断或重复,也不会应写满造成数据覆盖,而时钟纠正就是通过动态调整保证缓冲区时钟时半满状态。调整方式时插入空闲字符,也就是K28.5(也可能时别的K码),当读比较快时,可能导致下溢读空,这时候就插入特殊字符进行调整,如果快溢出了就删除写特殊字符。
2.8、Channel Bonding
弹性缓冲区不仅可以时钟纠正,还能支持通道绑定。在使用XAUI和PCI Express之类的协议时会将多个GT组合在一起,以实现更高的吞吐量。如果使用这种方式,则不同点GT的数据流必须是对齐的。这个过程通常称作通道绑定。通道绑定可以吸收两个或多个通道之间的偏差,将数据提交给用户,就像只使用一条链路进行传送一样。
一般会在TX发送端的数据流中加入一个特殊序列,称之为“通道绑定序列”,各个接收端收到通道绑定序列之后,指定其中一个接收端为主通道。主通道和从通道之间存在“CHBONDO”通信链路,主通道向各个从通道发送通道绑定序列在缓冲区的位置,各个从通道根据自己的通道绑定序列在缓存区的位置,计算与主通之间的偏差,调整缓存区的读指针,从而实现各个通道同步输出数据,如下图所示。