分三个模块介绍GTX收发器的原理
首先是时钟篇
GTX收发器主要的时钟输入有四个
①input wireQ2_CLK1_GTREFCLK_PAD_N_IN,
②
input wireQ2_CLK1_GTREFCLK_PAD_P_IN,
③
input wire DRP_CLK_IN_P,
④
input wire DRP_CLK_IN_N,
前两个是125M的GMII时钟,用来gtx_common生成QPLLOUTCLK_OUT 和QPLLOUTREFCLK_OUT(后文的2---GMII时钟)
后两个是200M系统时钟用来控制gtx_gt_usrclk_source.v文件生成TXUSRCLK和TXUSRCLK2(后文的1---系统时钟)
我们使用的开发板为FPGA:XC7K325T-2FFG900
这个板子的时钟资源有四个
1.系统时钟
XC7K325具有16个GTX的通道,按照bank进行划分,一个bank中有4个独立的GTX通道,每个bank (Quad)拥有两个参考时钟Pin,也可以从上下两个Quad中获得参考时钟。(以bank117举例,其可用时钟为MGTREFCLK0--SGMII时钟,MGTREFCLK1--SMA时钟,还可以时钟上下bank116\118的时钟,116的成为南向时钟,118成为北向时钟)
XC7K325的GTX时钟如下所示,
红色方框部分是两个差分参考时钟输入,每个外部参考时钟的输入必须经过IBUFDS_GTE2源语之后才能使用。绿色方框是来自其他Quad的参考时钟输入,7系列FPGA支持使用相邻(南北方向)Quad的参考时钟作为当前Quad的参考时钟,多路参考时钟源经过一个选择器之后,分两路进入QPLL和CPLL,
路参考时钟源如何经过一个选择器进入CPLL和QPLL呢?主要利用一个多路选择器,QPLLREFCLKSEL,如3b'001为选择GEREFCLK0进入QPLL
CPLL同理不做介绍
QPLL和CPLL的区别,在于两者支持的线速率不同,对于CPLL来说,支持的线速率位1.6GHz到3.3GHZ之间,而对于QPLL来说,GTX支持的线速率分两档,Lower Baud支持5.93GHz~8.0GHz,Upper Baud支持9.8GHz~12.5GHz
输入信号为125mhz,但是QPLL支持输出的线速率为12.5GHZ,那么信号的频率是如何改变的呢?信号通过多路选择器,经过分频器M和倍频器N进行倍频。然后根据官网手册的计算公式得到相关的线速度。表2-3说明了如何通过代码控制M\N和D。
这样,我们的时钟就从GMII那个固定的时钟,扩展到了支持的线速率,这个线速率如何进入TX和RX端呢?主要通过TXSYSCLKSEL来进行选择,为1时,进入QPLL。为0时,进入CPLL,如下图所示。这样时钟基本配置的原理就说清楚了!
GTX发射端的各个模块如下图所示
①
用户数据的输入接口
②
PCIe
物理层接口,如果使能了
PCIE
接口,则该通道是
PCIE
的数据通道。
③
GTX
除了支持
8B / 10B
编码外还支持
64B / 66B
和
64B / 67B
编码方式,以此来提高有效数据的传输效率,支持这些通过对该模块的配置实现。
④
产生伪随机序列,用于高速串行通信通道传输的误码率测试
⑤
8B/10B
编码
⑥
TX
相位插值器控制器模块,对
TX PMA
中的数据进行微调。
⑦
为了保证数据传输速率一致,
XCLK
必须和
TXUSERCLK
时钟的速率匹配,并且要解决
2
个时钟域之间的相位差异。
⑧
串口硬盘
⑨
提供
PCIE
的唤醒功能
⑩
从
PSC
子层输出的编码数据,在发送端的串行化处理之前进行极性翻转(为了兼容不同板卡间极性的不同或是
PCB
搞错的了情况。)
⑪
并行输入串行输出,实现数据的串并转换功能
⑫
发器
TX
驱动器是高速电流模式差分输出缓冲器
⑬
这个主要是当
GTX
作为
PCIE
或
SATA
接口时所需要的功能
⑭
CLK:
用户接口的数据输入到串行数据的输出要跨四个时钟域
⑮
MUX:
多路选择器
介绍了模块的作用后,还需要了解GTX发射端的时钟,才可以了解他的工作方式。
①
其中红框部分和黄底部分的内容是我们需要重点了解的地方,图中的
MGTREFCLK
是前面提到的
GTX
的参考时钟,经过一个
IBUFDS_GTE2
源语之后进入
GTX
,用以驱动
CPLL
或者
QPLL
。对于
TX PMA
来说,主要实现的功能是并串转换,其并串转换的时钟可以由
CPLL
提供,也可以由
QPLL
提供,由
TXSYSCLKSEL
选择,
TX PMA
子层里面有三个红色方框部分是串行和并行时钟分频器,作用是产生并行数据的驱动时钟。
②
D
分频器主要用于将
PLL
的输出分频,以支持更低的线速率。
③
÷2/÷4
这个选项由
TX_INT_DATAWIDTH
决定,如果
TX_INT_DATAWIDTH
为“
0”
,则选择
÷2
,反之选择
÷4
。
④
对于
÷4/÷5
,则由
TX_DATA_WIDTH
决定,如果是位宽是
16/32/64
,则选择
÷4
,如果位宽是
20/40/80
,则选择
÷5
。
然后红框的1是通过QPLL或者CPLL的时钟输出,由图所知,分别负责PISO的时钟。和GTX的发射域时钟,红框2为具体控制发射域时钟的数据方法。
数据域时钟又是什么呢?我们回到刚刚的图。框框所示。
根据这个公式还有我们上面计算的线速度,我们可以计算出TXUSERCLK的时钟
根据这个表格,我们可以计算出
TXUSERCLK2的时钟。具体的控制方式如下图,通过TXOUTCLK和位宽来控制这两个时钟的速度
①
模拟前端
②
OOB
信号
③
均衡器
④
CDR
时钟数据恢复
⑤
串并行转换
⑥
极性翻转
⑦
伪随机序列码检查其
⑧
字节、字的对齐功能
⑨
8/10bit
解码
⑩
接收弹性缓冲区
⑪
变速器
⑫
用户数据的输入接口
具体各个模块的功能介绍如下:
OOB信号:带外信号,为了发送这些数据,协议一般不使用与普通数据相同的通道,而是使用另外的通道。
DFE均衡器:RX信号从AFE(模拟前端)进来之后,首先经过RX均衡器,均衡器的主要作用是用于补偿信号在信道传输过程中的高频损失,因为信道是带宽受限的,所以信号经过它必将造成衰减甚至遭到破坏。RX接收端的均衡器有两种,分别是LPM和DFE,两者功耗和性能有所不同,其中LPM功耗较低,DFE能提供更精确的滤波器参数,从而可以更好的补偿传输信道损失,因此性能更好。
RX CDR:RX的时钟数据恢复电路是图1的绿色圆圈部分,因为GTX传输不带随路时钟,因此在接收端必须自己做时钟恢复和数据恢复,时钟数据恢复电路如图所示:
具体过程如图2所示,首先外部数据进来之后经过均衡器,紧接着均衡器出来的数据就进入时钟数据恢复电路。GTX使用相位旋转CDR结构,从DFE进来的数据分别被边缘采样器和数据采样器捕获,然后CDR状态机根据两者决定数据流的相位并反馈控制相位内插器(PI),当数据采样器的位置位于眼图中央的时候边缘采样器锁定到数据流的传输域。其中CPLL或者QPLL为相位内插器提供基础时钟,使CDR状态机能很好进行相位控制。
GTP收发器接收器包括一个内置的PRBS检查器:可以将此检查器设置为检查四种行业标准PRBS模式之一。检查器是自同步的,并在K码对齐或解码之前处理传入的数据。此功能可用于测试通道的信号完整性。
GTX RX端接收的串行数据在进行解串(并行化)之前,需要进行特征边界对齐,使得并行数据得到正确的恢复。GTX进行对齐操作的方式是通过检测K码实现的。RX接收器从输入的串行数据流中搜索comma,若RX接收器检测到K码则将K码移动到字节边界,使得接收端接收的并行数据与发送端发送的数据一致。为实现该功能,
8/10bit的解码不做介绍
接收弹性缓冲区:GTX收发器RX数据通路的PCS部分有两个内部并行时钟域:PMA并行时钟域(XCLK)和RXUSRCLK域。要保证数据的正确接收,不仅要求速率一致,也要解决两个时钟域之间的相位差异。
变速器是处理64B / 66B编的
FPGA RX接口与TX端类似
综上,信号回到了数据输入输出接口,可以继续从发送端发射数据
PS关于时钟域的问题
RX接收端的时钟结构和TX发送端的很类似,如图所示,图中红色方框的CDR部分是和TX端最大的区别。