详解Xilinx GTP结构原理以及验证

2024-08-26 18:28

本文主要是介绍详解Xilinx GTP结构原理以及验证,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 一、GT简介
  • 二、GTP内部结构
    • 2.1 整体结构
    • 2.2 Quad的内部结构
    • 2.3 一对收发器的内部结构
      • 2.3.1 发送器的内部结构
      • 2.3.2 接收器的内部结构
  • 三、时钟和复位
    • 3.1 输入的参考时钟结构
      • 3.1.1 IBUFDS_GTE2原语
      • 3.1.2 IBUFDS_GTE2原语端口属性说明
    • 3.2 参考时钟选择和分配
      • 3.2.1 GTPE2_COMMON 部分时钟端口信号
    • 3.3 复位和初始化
  • 四、环回模式
    • 4.1 环回选择端口属性
  • 五、发送模块讲解
    • 5.1 TX 接口介绍
    • 5.2 发送时钟结构
      • 5.2.1 TXUSRCLK 和 TXUSRCLK2 关系
      • 5.2.2 使用 TXOUTCLK 驱动 TX 接口
    • 5.3 TX BUFFER
  • 六、接收模块讲解
    • 6.1 接收器结构框图
    • 6.2 模拟前端
    • 6.3 RX_EQ均衡器
    • 6.4 CDR时钟恢复
    • 6.5 接收时钟结构
    • 6.6 极性控制
    • 6.7 接收字节对齐
    • 6.8 接收弹性缓冲区
    • 6.9 时钟矫正
    • 6.10 用户接口
  • 七、配置GTP
  • 八、分析官方例程
  • 九、仿真验证
  • 十、下板验证
  • 参考:


一、GT简介

  SerDes是(Serializer/Deserializer)的缩写,即串行器和解串器也叫串行收发器,是一种将并行数据转换成串行数据发送,将接收的串行数据转换成并行数据的模块。Xilinx的GT系列是在高速SerDes的基础上,增加了其他模块,如8b/10b编解码、预加载、PCIE协议控制等(具体可以看Xilinx相关文档,如ug476、ug482)形成的一个高速串行收发器,GT是Gigabit Transceiver的意思,它是实现当下一些高速串行接口的基础:如PCIe、RapidIO等。GTP , GTX , GTH,GTZ都是Xilinx的串行收发器,区别在速率不一样,支持的一些功能不一样。

  • A7系列支持GTP:最高速率可到6.6Gb/s
  • K7系列支持GTX:最高速率可到12.5Gb/s
  • 部分V7系列支持GTH:最高速率可到13.1Gb/s
  • 部分V7系列支持GTZ:最高速率可到28.05Gb/s

在这里插入图片描述

二、GTP内部结构

2.1 整体结构

在这里插入图片描述
  由GTP在a7100t内部结构图可以看出:GTP在A7系列是上下分布,接下来我们解释这些名词什么意思。

  1. 每个 GTPE2_CHANNEL 原语由一个发射器和一个接收器组成。
  2. GTPE2_COMMON 原语包含两个环形振荡器 PLL(PLL0 和 PLL1)。
  3. 四个 GTPE2_CHANNEL 通道与一个 GTPE2_COMMON 原语聚集在一起称为 Quad 。

2.2 Quad的内部结构

  一个Quad的内部结构图如下:
在这里插入图片描述
  一个Quad外部有两个参考差分时钟REFCLK,参考时钟是两个PLL的输入时钟,可以用用户选择两个PLL的时钟源是哪个参考时钟,从而来产生其它生成时钟。

2.3 一对收发器的内部结构

  一个GTPE2_CHANNEL 的内部结构图如下:
在这里插入图片描述

  由图可看出,一个GTPE2_CHANNEL是由上面一个发送器和下面一个接收器组成。无论是接收器还是发送器都有PMA和PCS两部分组成。

  • PCS:(Physical Coding Sublayer,物理编码子层):含8B/10B编解码、缓冲区、通道绑定和时钟修正等电路。
  • PMA:(Physical Media Attachment,物理媒介适配层):包含高速串并转换(PISO)、预/后加重、接收均衡、时钟发生器及时钟恢复等电路。

  PMA是最基本的单位,负责模拟部分,而PCS主要负责并行的数字电路处理,理论上来说PCS完全可以由逻辑设计完成;但是硬核专用电路实现肯定功能更强大更稳定。

2.3.1 发送器的内部结构

在这里插入图片描述

  其中TX部分各模块的含义如下:

  1. 用户将待发送的数据流以并行是方式送至此处
  2. 全称为Physical Interface for PCI Express,PCIe物理层接口。如果使能PCIE接口,则该通道是PCIE的数据通道,否则将不会被使用。
  3. 发送数据变速箱:实现任意数据位宽之间转换,数据除了使用8b10b编码,还可以使用64b66b等编码方式,如果使用后面这种编码方式,那么就需要使用此模块。
  4. 完成对输入数据的8B/10B编码(目的与TMDS编码原理以及Verilog实现HDMI接口一致,保持直流均衡)。常用于速率低于8G的场景。
  5. 伪随机序列(Pseudo-random bit sequences,PRBS),一般用于高速串行通信通道传输的误码率测试。
  6. 这是TX相位插值器控制器模块,支持动态控制TX相位插值器(TX PI),TX PMA中的数据进行微调。
  7. 在发送端的PCS子层里面有两个并行时钟域,分别是PMA相连的并行时钟(XCLK)和TXUSRCLK时钟。要传输数据,XCLK速率必须与TXUSRCLK速率匹配,并且必须解决两个域之间的所有相位差。GTP的发送数据通道包括一个FIFO缓冲器和一个TX相位插值器,用于解决XCLK和TXUSRCLK域之间的相位差。缺点是使用此FIFO后的数据延迟比较大,导致用户把数据输入GTP到GTP输出数据的时间比较长,如果不考虑这部分延迟,推荐直接使用FIFO即可。
  8. SATA是硬盘接口,建立通信主要是通过检测OOB(Out Of Band)实现的,并且向上层传输连接情况,因此只有在使用SATA协议时,才会使用该模块,否则不用考虑。
  9. PICE唤醒功能,只有在使用PCIE协议时才会用到,否则不考虑。
  10. 极性控制,主要时针对PCB设计时将差分对设计反了,模块内部可以将极性反转,从而解决PCB设计问题。
  11. 并串转换模块(parallel input Serial output):实现数据的串并转换功能。
  12. 光标前和光标后传输预加重:高速信号在长距离、线速率较高的传输时,损耗是很严重的。经过损耗衰减之后,为了让接收端还能检测到数据,在发送端会做预加重和去加重处理,增大差分输出信号的摆幅等等,让其经过传输损耗之后差分信号的幅值变为零。
  13. 使用PCIE、SATA协议时才会使用的功能,否则不会用到。
  14. 发送驱动器,主要是数模转换。
  15. 发送时钟分频模块,来自PLL0或者PLL1。

2.3.2 接收器的内部结构

在这里插入图片描述
  其中RX部分各模块的含义如下:

  1. RX_EQ:自适应连续时间线性均衡器(CTLE),以补偿由于物理信道中的高频衰减引起的信号失真;RX_OOB:这个与SATA、PCIE这些协议有关,如果不使用这些协议,可以忽略。
  2. 接收参考时钟,时钟进入PMA之后,需要先经过CDR调整时钟相位,然后再经过分频作为串并转换模块的串行时钟和并行时钟,保证时钟与数据的相位关系正确。
  3. 串并转换模块,将接收的串行数据转换为并行数据,然后输出到PCS侧。
  4. 极性控制,主要时针对PCB设计时将差分对设计反了,模块内部可以将极性反转,从而解决PCB设计问题。
  5. GTP接收器包括一个内置的PRBS检查器,与前文发送端生成的四种PRBS序列保持一致。
  6. 字节对齐,用来寻找K码来对齐数据。为了对齐,发送端发送一个可识别的序列,即Comma,通常称为逗号。接收方在传入数据中搜索逗号,当发现逗号时,将该逗号移动到一个字节边界,以便接收的并行字与发送的并行字匹配。
  7. 8b10b解码模块,将接收到的10b并行数据转换成8b并行数据。
  8. 这个与发送通道的 PIPE Control功能是一样的,与PCIE协议有关,不使用该协议时可以忽略。
  9. RX Status Control对弹性buffer的一些状态进行检测,包括溢出等等,然后去做一个时钟纠正的处理。
  10. 弹性buffer主要用于解决PMA并行时钟域(XCLK)和PCS内部并行时钟域RXUSRCLK的跨时钟域问题。
  11. 和发送一样,如果使用了64B66B这入需要通过这个模块来解码
  12. 用户接收到的并行数据模块。

三、时钟和复位

3.1 输入的参考时钟结构

在这里插入图片描述
  参考时钟输入会先进入一个缓冲器,上图为缓冲器的内部结构。参考时钟输入在内部以每条支路上的 50Ω 电阻端接至 4/5 MGTAVCC。参考时钟在软件中使用 IBUFDS_GTE2 软件原语实例化。

3.1.1 IBUFDS_GTE2原语

  IBUFDS_GTE2是对于高速接口差分转单端的原语,例化代码如下:

IBUFDS_GTE2 #(.CLKCM_CFG("TRUE"),   // Refer to Transceiver User Guide.CLKRCV_TRST("TRUE"), // Refer to Transceiver User Guide.CLKSWING_CFG(2'b11)  // Refer to Transceiver User Guide)IBUFDS_GTE2_inst (.O(O),         // 1-bit output: Refer to Transceiver User Guide.ODIV2(ODIV2), // 1-bit output: Refer to Transceiver User Guide.CEB(CEB),     // 1-bit input: Refer to Transceiver User Guide.I(I),         // 1-bit input: Refer to Transceiver User Guide.IB(IB)        // 1-bit input: Refer to Transceiver User Guide);

3.1.2 IBUFDS_GTE2原语端口属性说明

  端口属性说明如下所示:

信号名称方向 描述
I,IB in 外部输入的差分时钟
CEB in 时钟缓冲器的低电平有效异步时钟使能信号。将此信号设置为高电平可关闭时钟缓冲器
O out转换后的单端时钟信号
ODIV2 out 输出时钟信号的二分频
CLK_RCV_TRST 保留。此属性将 50Ω 终端电阻切换至信号路径。此属性必须始终设置为 TRUE
CLKCM_CFG 保留。此属性切换 50Ω 终端的终端电压。此属性必须始终设置为 TRUE
CLKSWING_CFG 保留。此属性控制时钟的内部摆幅。此属性必须始终设置为 2'b11

3.2 参考时钟选择和分配

在这里插入图片描述
  提供给指定Quad 中的 PLL 的参考时钟可以来自本地的参考时钟CLK0或CLK1,也可以来自设备同一半中的相邻 Quad。给GTPE2_COMMON 中PLL0和PLL1输入时钟可以来自于以下:

  1. 两个本地参考时钟引脚对,GTREFCLK0 或 GTREFCLK1
  2. 位于设备同一半部分的另一个 Quad 的两个参考时钟引脚对
    在这里插入图片描述

3.2.1 GTPE2_COMMON 部分时钟端口信号

信号名称方向 描述
PLL0REFCLKSEL[2:0] in输入以动态选择 PLL0 的输入参考时钟;更改参考时钟输入后必须对 PLL0 进行复位
PLL1REFCLKSEL[2:0] in 输入以动态选择 PLL1 的输入参考时钟;更改参考时钟输入后必须对 PLL1 进行复位
RXSYSCLKSEL[1:0] in选择 PLL 时钟源来驱动 RX 数据路径:
RXSYSCLKSEL[0] = 1'b0 (PLL0);RXSYSCLKSEL[0] = 1'b1 (PLL1)
选择参考时钟源来驱动 RXOUTCLK:
RXSYSCLKSEL[1] = 1'b0(来自PLL0的参考时钟);RXSYSCLKSEL[1] = 1'b1 (来自PLL1的参考时钟)
TXSYSCLKSEL[1:0] in选择 PLL 时钟源来驱动 TX 数据路径:
TXSYSCLKSEL[0] = 1'b0 (PLL0);TXSYSCLKSEL[0] = 1'b1 (PLL1)
选择参考时钟源来驱动 TXOUTCLK:
TXSYSCLKSEL[1] = 1'b0(来自 PLL0 的参考时钟);TXSYSCLKSEL[1] = 1'b1 (参考时钟来自 PLL1)

在这里插入图片描述

3.3 复位和初始化

  GTP 收发器必须在 FPGA 器件上电和配置后初始化,然后才能使用。GTP 收发器的发射器 (TX) 和接收器 (RX) 可以独立且并行地初始化,如图 2-11 所示。GTP 收发器的 TX 和 RX 初始化包括两个步骤:

  1. 初始化驱动 TX/RX 的相关 PLL
  2. 初始化 TX 和 RX 数据路径 (PMA + PCS)
      GTP 收发器的 TX 和 RX 可以从 PLL0 或 PLL1 接收时钟。TX 和 RX 使用的相关 PLL(PLL0/PLL1)必须先初始化,然后才能初始化 TX 和 RX。TX 和 RX 使用的任何 PLL 都单独复位,其复位操作完全独立于所有 TX 和 RX 复位。TX 和 RX 数据路径必须仅在相关 PLL 锁定后初始化,初始化流程如下:

在这里插入图片描述
  这一部分有官方的复位逻辑代码,感兴趣的朋友可以仔细阅读一下官方代码。

在这里插入图片描述

四、环回模式

  环回模式是收发器数据路径的专门配置,其中流量被折回源。通常,会传输特定的流量模式,然后进行比较以检查错误。一共有四种环回模式,如下如所示:

在这里插入图片描述
  控制接口如下:

//----------------------------- Loopback Ports -----------------------------.gt0_loopback_in                (gt0_loopback_in), // input wire [2:0] gt0_loopback_in

  环回测试模式分为两大类:

  1. 近端环回模式将数据回传到最靠近流量生成器的收发器中
  • ①Near-end PCS Loopback:必须启用 RX 弹性缓冲区,并将 RX_XCLK_SEL 设置为 RXREC,以使近端 PCS 环回正常工作。在近端 PCS 环回中,RX XCLK 域由 TX PMA 并行时钟 (TX XCLK) 提供时钟。如果在正常运行期间使用 RXOUTCLK 为 FPGA 逻辑提供时钟,并将 RXOUTCLKSEL 设置为 RXOUTCLKPMA,则在将 GTP 收发器置于近端 PCS 环回中时,必须更改以下两项之一:
    1、Set RXOUTCLKSEL to select RXOUTCLKPCS
    2、Set RXCDRHOLD = 1’b1

  • ②Near-end PMA Loopback :进入和退出近端 PMA 环回后需要 GTRXRESET

  1. 远端环回模式将接收到的数据环回到链路远端的收发器中
  • ③Far-end PMA Loopback:必须启用 TX 缓冲区,并且必须将 TX_XCLK_SEL 设置为 TXOUT,以使远端 PMA 环回正常工作。 在远端 PMA 环回中,TX 缓冲区的写入侧由 RX PMA 并行时钟 (RX XCLK) 计时。 进入和退出远端 PMA 环回后,需要 GTTXRESET。
  • ④ Far-end PCS Loopback:如果未使用时钟校正,远端 PCS 环回中的收发器必须使用与作为环回数据源的收发器相同的参考时钟。无论是否使用时钟校正,端口 TXUSRCLK 和 RXUSRCLK 都必须由相同的时钟资源 (BUFG、BUFH) 驱动。 当通道中的两个或一个变速箱均启用时,不支持远端 PCS 环回。

4.1 环回选择端口属性

信号名称方向 描述
LOOPBACK[2:0]in 000: Normal operation
001: Near-End PCS Loopback
010: Near-End PMA Loopback
011: Reserved
100: Far-End PMA Loopback
101: Reserved
110: Far-End PCS Loopback

五、发送模块讲解

  对于用户来说,发送数据只需使用以下三个信号即可,其它的根据GUI配置后,GTP就会自动将数据发送出去:

//---------------- Transmit Ports - FPGA TX Interface Ports ----------------.gt0_txdata_in                  (gt0_txdata_in), // 代发送的数据.gt0_txusrclk_in                (gt0_txusrclk_i), // 发送时钟.gt0_txusrclk2_in               (gt0_txusrclk2_i), // 发送时钟的二分频

5.1 TX 接口介绍

  FPGA TX 接口是 FPGA 到 GTP 收发器 TX 数据路径的网关。 用户通过在 TXUSRCLK2 的上升沿将数据写入 TXDATA 端口来通过 GTP 收发器传输数据。端口的宽度可以配置为两个或四个字节宽。端口的实际宽度取决于 TX_DATA_WIDTH 属性和 TX8B10BEN 端口设置。端口宽度可以是 16、20、32 和 40 位。接口处的并行时钟 (TXUSRCLK2) 的速率由 TX 线路速率、TXDATA 端口的宽度以及是否启用 8B/10B 编码决定。必须为发射器中的内部 PCS 逻辑提供第二个并行时钟 (TXUSRCLK)

在这里插入图片描述
  GTP 收发器包含 2 字节内部数据路径。FPGA 接口宽度可通过设置 TX_DATA_WIDTH 属性进行配置。当启用 8B/10B 编码器时,必须将 TX_DATA_WIDTH 属性配置为 20 位或 40 位,在这种情况下,FPGA TX 接口仅使用 TXDATA 端口。例如,当 FPGA 接口宽度为 16 时,使用 TXDATA[15:0]。当绕过 8B/10B 编码器时,TX_DATA_WIDTH 属性可以配置为任何可用宽度:16、20、32 或 40 位。

在这里插入图片描述

  当启动8b10b编码后,对于用户来说,发送端口模块的信号就变成了6个,新增三个信号代码如下:

//---------------- Transmit Ports - TX 8B/10B Encoder Ports ----------------.gt0_txchardispmode_in          (gt0_txchardispmode_in), // input wire [3:0] gt0_txchardispmode_in.gt0_txchardispval_in           (gt0_txchardispval_in), // input wire [3:0] gt0_txchardispval_in.gt0_txcharisk_in               (gt0_txcharisk_in), // 置1表示发送K码,否则就是发送数据

  当禁止8b10b编码时

信号名称方向 描述
TXCHARDISPMODE[3:0]in 当 8B/10B 编码被禁用时,TXCHARDISPMODE 用于扩展 20 位和 40 位 TX 接口的数据总线。
TXCHARDISPVAL[3:0]in 当 8B/10B 编码被禁用时,TXCHARDISPVAL 用于扩展 20 位和 40 位 TX 接口的数据总线。

在这里插入图片描述

  当启动8b10b编码后,有了极性控制的作用

TXCHARDISPMODETXCHARDISPVAL 描述
00 保留
01反转RD极性
10 设置RD为负
11 设置RD为正

5.2 发送时钟结构

5.2.1 TXUSRCLK 和 TXUSRCLK2 关系

  FPGA TX 接口包括两个并行时钟:TXUSRCLK 和 TXUSRCLK2。 TXUSRCLK 是 GTP 收发器发射器中 PCS 逻辑的内部时钟。TXUSRCLK 所需的速率取决于 GTPE2_CHANNEL 原语的内部数据路径宽度和 GTP 收发器发射器的 TX 线速率。在这里插入图片描述
  TXUSRCLK2 频率与 TXUSRCLK 的关系:

FPGA Interface WidthTX_DATA_WIDTH TXUSRCLK2 Frequency
2-Byte16, 20 TXUSRCLK2 = TXUSRCLK
4-Byte 32, 40 TXUSRCLK2 = TXUSRCLK/2

5.2.2 使用 TXOUTCLK 驱动 TX 接口

在这里插入图片描述
  上图展示了发送模块的详细时钟结构,其中TXOUTCLK 来自 MGTREFCLK0[P/N] 或 MGTREFCLK1[P/N],还有TXOUTCLKPCS、TXOUTCLKPMA;通过TXOUTCLKSEL端口来选择。TXOUTCLK可以提供TXUSRCLK和TXUSRCLK2,具体如下所示:
在这里插入图片描述
  上图中TXOUTCLK 用于在一个通道配置中驱动 2 字节模式(TX_DATA_WIDTH = 16 或 20)的 TXUSRCLK 和 TXUSRCLK2。TXUSRCLK2 的频率等于 TXUSRCLK

在这里插入图片描述
  上图中TXOUTCLK 用于驱动 4 字节模式 (TX_DATA_WIDTH = 32 或 40) 的 TXUSRCLK2。TXUSRCLK2 的频率等于 TXUSRCLK 频率的一半。 MMCM 或 PLL 是位于器件上半部分的时钟管理块 (CMT) 的一部分,只能驱动器件上半部分的 BUFG。同样,位于下半部分的 MMCM 或 PLL 只能驱动下半部分的 BUFG。

 &emspTXSYSCLKSEL是一个2bit数据,用来选择TXOUTCLK源和TXPMA时钟源,高位[1]选择TXOUTCLK源来自PLL0或者PLL1的参考时钟,低位[0]选择TXPMA来自PLL0或者PLL1的输出。“/D”分频器为我们提供了每通道实现不一样速率的方式,但只能实现1、2、4、8分频。所以每个发送器PMA模块都有一个D分频器,它将PLL的时钟分频,以降低线路速率,通过TXRATE来控制。
在这里插入图片描述

5.3 TX BUFFER

  发送缓冲fifo可以选择不使用,但是如果没有特别的速率要求还是打开好一点。

在这里插入图片描述
  还有一个信号来指示缓冲FIFO的状态,TXBUFSTATUS [1:0]:

在这里插入图片描述

端口名方向 时钟域 说明
TXBUFSTATUS[1:0]out TXUSRCLK2 TX 缓冲区状态。 TXBUFSTATUS[1]:TX 缓冲区溢出或下溢状态。当 TXBUFSTATUS[1] 设置为高电平时,它将保持高电平直到 TX 缓冲区复位。
1:TX FIFO 有溢出或下溢。
0:无 TX FIFO 溢出或下溢错误。
TXBUFSTATUS[0]:TX 缓冲区已满。
1:TX FIFO 至少为半满。
0:TX FIFO 未满半满。
  其它的端口设计到具体的通信协议,比如PCIE,SRIO等等,等以后用到了再讲解。

六、接收模块讲解

6.1 接收器结构框图

在这里插入图片描述
  每个 GTP 收发器都包含一个独立的接收器,由 PCS 和 PMA 组成。上图显示了 GTP 收发器 RX 的模块。高速串行数据从电路板上的走线流入 GTP 收发器 RX 的 PMA,再流入 PCS,最后流入 FPGA 逻辑。

6.2 模拟前端

  模拟信号进入GT收发器后,该部分需要对其进行数字化分析处理。例如信号放大,电压均衡等,也就是上图的RX_EQ模块,具体更详细的内部结构图如下所示:

在这里插入图片描述
  对于用户来说,需要配置的有两点:

  1. 配置接收端电压模式
  2. 校准终端电阻

在这里插入图片描述
  配置终端电阻来选择接收的电压摆幅范围。

6.3 RX_EQ均衡器

在这里插入图片描述
  GTP 收发器接收器具有节能的自适应连续时间线性均衡器 (CTLE),可补偿物理信道中高频衰减导致的信号失真。CTLE 被称为低功耗模式 (LPM)

6.4 CDR时钟恢复

在这里插入图片描述

  每个 GTPE2_CHANNEL 收发器中的 RX 时钟数据恢复 (CDR) 电路从传入数据流中提取恢复的时钟和数据。PLL0 或 PLL1 为相位插值器提供基准时钟。相位插值器依次产生精细、均匀间隔的采样相位,以允许 CDR 状态机进行精细相位控制。CDR 状态机可以跟踪可能与本地 PLL 参考时钟存在频率偏移的传入数据流。

6.5 接收时钟结构

在这里插入图片描述
  接收器的时钟结构和发送器的时钟结构几乎一模一样,因此这里不过多介绍。

6.6 极性控制

  如果 PCB 上的 RXP 和 RXN 差分走线意外接反了,GTP 收发器 RX 接收的差分数据将被反转。GTP 收发器 RX 允许在 SIPO 之后对 PCS 中的并行字节进行反转,以抵消差分对上的反转极性。 极性控制功能使用 RXPOLARITY 输入,该输入由结构用户界面驱动为高电平以反转极性。

在这里插入图片描述

端口名方向 时钟域 说明
RXPOLARITYin RXUSRCLK2 RXPOLARITY 端口可以反转输入数据的极性:0:不反转。RXP 为正,RXN 为负。 1:反转。RXP 为负,RXN 为正

6.7 接收字节对齐

  串行数据必须与符号边界对齐,然后才能用作并行数据。为了实现对齐,发送器发送一个可识别的序列,通常称为逗号。接收器在传入数据中搜索逗号。当它找到逗号时,它会将逗号移动到字节边界,以便接收的并行字与发送的并行字匹配。

在这里插入图片描述
  下图左侧显示TX为并行数据,右侧显示RX接收到逗号对齐后可识别的并行数据。
在这里插入图片描述
  要启用逗号对齐块,RXCOMMADETEN 端口将被驱动为高电平。 RXCOMMADETEN 将被驱动为低电平,以完全绕过该块,从而实现最短延迟
在这里插入图片描述
  这些逗号码都是8B10B里面的内容,后续会单独出一篇文章来了解并实现8B10B,这里就先大致了解一下即可。

6.8 接收弹性缓冲区

  GTP收发器RX数据通路的PCS部分有两个内部并行时钟域:PMA并行时钟域(XCLK)和RXUSRCLK域。要保证数据的正确接收,不仅要求速率一致,也要解决两个时钟域之间的相位差异,如下图所示:

在这里插入图片描述
  为解决该问题,Xilinx提供了两种解决方案,一是利用弹性缓冲区,二是用相位对齐。

  1. RX 相位对齐电路用于在绕过 RX 弹性缓冲器时调整 PMA 并行时钟域 (XCLK) 和 RXUSRCLK 域之间的相位差。它还通过调整 RXUSRCLK 来执行 RX 延迟对齐,以补偿温度和电压变化。组合的 RX 相位和延迟对齐可以由 GTP 收发器自动执行,也可以由用户手动控制。
  2. RX 缓冲区是建议尽可能使用的默认缓冲区。它功能强大且更易于操作;可以使用 RX 恢复时钟或本地时钟(带时钟校正);时钟校正和通道绑定所需
    在这里插入图片描述

6.9 时钟矫正

  RX 弹性缓冲器旨在桥接两个不同的时钟域,即 RXUSRCLK 和 XCLK,后者是从 CDR 恢复的时钟。即使 RXUSRCLK 和 XCLK 以相同的时钟频率运行,也总是存在微小的频率差异。由于 XCLK 和 RXUSRCLK 并不完全相同,因此除非纠正,否则差异可能会累积,最终导致 RX 弹性缓冲器溢出或下溢。为了允许纠正,每个 GTP 收发器 TX 都会定期传输一个或多个特殊字符,GTP 收发器 RX 可以根据需要在 RX 弹性缓冲器中移除或复制这些字符。通过在 RX 弹性缓冲器太满时移除字符并在 RX 弹性缓冲器太空时复制字符,接收器可以防止溢出或下溢。

在这里插入图片描述

6.10 用户接口

  上面介绍的大部分是接收器的功能配置,实际上对于用户来说,需要使用的端口只有几个:

 //---------------- Receive Ports - FPGA RX Interface Ports -----------------.gt0_rxdata_out                 (gt0_rxdata_out), // output wire [31:0] gt0_rxdata_out.gt0_rxusrclk_in                (gt0_rxusrclk_i), // input wire gt0_rxusrclk_i.gt0_rxusrclk2_in               (gt0_rxusrclk2_i), // input wire gt0_rxusrclk2_i

  如果启用了8B10B解码,则还增加两个:

//---------------- Receive Ports - RX 8B/10B Decoder Ports -----------------.gt0_rxcharisk_out              (gt0_rxcharisk_out), // output wire [3:0] gt0_rxcharisk_out.gt0_rxdisperr_out              (gt0_rxdisperr_out), // output wire [3:0] gt0_rxdisperr_out

  端口信号功能和发送端一样。

七、配置GTP

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

八、分析官方例程

九、仿真验证

十、下板验证

参考:

《UG482》

这篇关于详解Xilinx GTP结构原理以及验证的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1109330

相关文章

C#数据结构之字符串(string)详解

《C#数据结构之字符串(string)详解》:本文主要介绍C#数据结构之字符串(string),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录转义字符序列字符串的创建字符串的声明null字符串与空字符串重复单字符字符串的构造字符串的属性和常用方法属性常用方法总结摘

Java中StopWatch的使用示例详解

《Java中StopWatch的使用示例详解》stopWatch是org.springframework.util包下的一个工具类,使用它可直观的输出代码执行耗时,以及执行时间百分比,这篇文章主要介绍... 目录stopWatch 是org.springframework.util 包下的一个工具类,使用它

Java进行文件格式校验的方案详解

《Java进行文件格式校验的方案详解》这篇文章主要为大家详细介绍了Java中进行文件格式校验的相关方案,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录一、背景异常现象原因排查用户的无心之过二、解决方案Magandroidic Number判断主流检测库对比Tika的使用区分zip

Java实现时间与字符串互相转换详解

《Java实现时间与字符串互相转换详解》这篇文章主要为大家详细介绍了Java中实现时间与字符串互相转换的相关方法,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录一、日期格式化为字符串(一)使用预定义格式(二)自定义格式二、字符串解析为日期(一)解析ISO格式字符串(二)解析自定义

opencv图像处理之指纹验证的实现

《opencv图像处理之指纹验证的实现》本文主要介绍了opencv图像处理之指纹验证的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学... 目录一、简介二、具体案例实现1. 图像显示函数2. 指纹验证函数3. 主函数4、运行结果三、总结一、

springboot security快速使用示例详解

《springbootsecurity快速使用示例详解》:本文主要介绍springbootsecurity快速使用示例,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝... 目录创www.chinasem.cn建spring boot项目生成脚手架配置依赖接口示例代码项目结构启用s

Python中随机休眠技术原理与应用详解

《Python中随机休眠技术原理与应用详解》在编程中,让程序暂停执行特定时间是常见需求,当需要引入不确定性时,随机休眠就成为关键技巧,下面我们就来看看Python中随机休眠技术的具体实现与应用吧... 目录引言一、实现原理与基础方法1.1 核心函数解析1.2 基础实现模板1.3 整数版实现二、典型应用场景2

一文详解SpringBoot响应压缩功能的配置与优化

《一文详解SpringBoot响应压缩功能的配置与优化》SpringBoot的响应压缩功能基于智能协商机制,需同时满足很多条件,本文主要为大家详细介绍了SpringBoot响应压缩功能的配置与优化,需... 目录一、核心工作机制1.1 自动协商触发条件1.2 压缩处理流程二、配置方案详解2.1 基础YAML

Python实现无痛修改第三方库源码的方法详解

《Python实现无痛修改第三方库源码的方法详解》很多时候,我们下载的第三方库是不会有需求不满足的情况,但也有极少的情况,第三方库没有兼顾到需求,本文将介绍几个修改源码的操作,大家可以根据需求进行选择... 目录需求不符合模拟示例 1. 修改源文件2. 继承修改3. 猴子补丁4. 追踪局部变量需求不符合很

Java的IO模型、Netty原理解析

《Java的IO模型、Netty原理解析》Java的I/O是以流的方式进行数据输入输出的,Java的类库涉及很多领域的IO内容:标准的输入输出,文件的操作、网络上的数据传输流、字符串流、对象流等,这篇... 目录1.什么是IO2.同步与异步、阻塞与非阻塞3.三种IO模型BIO(blocking I/O)NI