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

news2024/9/24 21:25:09

文章目录

  • 一、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眼图下板测试
    • 7.1 IBERT核例化
    • 7.2 连接光纤
    • 7.3 下载程序
    • 7.4 创建眼图扫描
  • 八、配置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眼图下板测试

7.1 IBERT核例化

  在配置GTP之前,我们可以使用Xilinx提供的IBERT核来测试一下我们的GTP功能是否正常,通过收发器由外部回环进行自收自发而实现。就是将同一组收发器的 TX 和 RX 进行短接,TX 发送端通过发送某种特定序列的数据流,在 RX 接收端接收后,通过比对发送和接收的数据,从而得出误码率和眼图信息,来验证开发板 GTP 部分工作的稳定性和可靠性。

在这里插入图片描述
  打开IP库搜索IBERT,然后打开。
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

7.2 连接光纤

  配置好后直接打开设计例程,然后分配管脚直接下板;
在这里插入图片描述
  首先插入一个SFP,然后用光纤把发送和接收端短接在一起,然后下载程序。

7.3 下载程序

在这里插入图片描述
  下载后会自动弹出响应的收发器链接的通道以及速率。

在这里插入图片描述
  选择7bit伪随机序列,然后复位后跑一段时间观察误码率一直为0,说明GTP允许没问题,我们更改一下伪随机序列为31bit,然后点击复位。

在这里插入图片描述
  更换了31bit的伪随机序列误码率依然为0。

在这里插入图片描述
  更换另一组GTP收发器测试依然误码率一直为0

在这里插入图片描述

7.4 创建眼图扫描

在这里插入图片描述
  点击加号创建一个眼图扫描
在这里插入图片描述
  中间蓝色部分区域越大表示GTP 所对应的 PCB 高速电路的信号完整性越好。

八、配置GTP

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

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

九、分析官方例程

十、仿真验证

十一、下板验证

参考:

《UG482》

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2077995.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

VScode + Python 下载及安装|python环境配置|中文乱码解决

1,下载安装VScode 直接点击2024.9https://vscode.download.prss.microsoft.com/dbazure/download/stable/fee1edb8d6d72a0ddff41e5f71a671c23ed924b9/VSCodeUserSetup-x64-1.92.2.exe 或者百度搜索VScode,可下载安装最新版 点击后等一下,就…

es、kibana及分词器的安装

文章目录 1、搜索引擎2、为什么使用新型搜索?3、底层原理:倒排索引4、底层API5、你使用了什么分词器?6、ElasticSearch安装6.1、准备目录并授予权限6.2、制作配置文件6.3、初始化es容器6.4、重置es用户密码6.5、安装中文分词器6.5.1、 把资料…

人机环境系统智能中的知己、趣时、变通

在易经中,知己、趣时、变通是重要的概念,它们在人机环境系统智能中的作用可以理解为: 知己:指的是对系统自身的深刻了解。在人机环境系统中,这意味着系统能够清晰地识别和理解自身的能力、限制以及用户的需求&#xff…

鸿蒙内核源码分析(gn应用篇) | gn语法及在鸿蒙中巧夺天工

gn是什么? gn 存在的意义是为了生成 ninja,如果熟悉前端开发,二者关系很像 Sass和CSS的关系. 为什么会有gn,说是有个叫even的谷歌负责构建系统的工程师在使用传统的makefile构建chrome时觉得太麻烦,不高效,所以设计了一套更简单,更高效新的构建工具gnninja,然后就被广泛的使用…

从数据生成到图数据库:Linux下Neo4j的CSV导入

文章目录 简介找到import文件夹准备csv表格数据导入neo4jTeacherStudent 简介 介绍如何在Linux系统中设置和使用Neo4j数据库。 首先,找到Neo4j的import文件夹,通常位于Neo4j安装目录下的data文件夹内,并展示通过neo4j.conf配置文件查找和修…

EmguCV学习笔记 C# 6.S 特别示例

版权声明:本文为博主原创文章,转载请在显著位置标明本文出处以及作者网名,未经作者允许不得用于商业目的。 EmguCV是一个基于OpenCV的开源免费的跨平台计算机视觉库,它向C#和VB.NET开发者提供了OpenCV库的大部分功能。 教程VB.net版本请访问…

Datawhale AI夏令营 第五期 CV方向 Task1笔记

Task1:跑通YOLO方案baseline! 赛题解读 根据您提供的图片内容,这是一份关于城市管理违规行为智能识别竞赛的赛题描述。以下是对内容的分析: 一、赛题描述 背景:随着城市化进程的加速,城市管理面临新的挑…

JavaScript初级——获取元素的样式

1、获取元素当前的显示样式 语法:元素.currentStyle.样式名 可以用来读取当前元素正在显示的样式,如果当前的元素没有设置样式,则获取他的默认值 currentStyle只有IE8浏览器支持,其他的浏览器不支持。 2、在其他浏览器中&#xf…

修复 502 Bad Gateway 错误的 6 种方法

通常,我们在使用网站时可能会遇到一系列错误。有些非常常见,例如 404,有些则不太常见,例如 101。这些被称为 HTTP 状态代码。其中,502 错误是某种服务器错误。那么,让我们先了解一下 Bad Gateway 502 的含义…

JetBrains Rider 2024 for Mac/Win:跨平台.NET IDE集成开发环境的全面解析

JetBrains Rider 2024作为一款专为Mac和Windows用户设计的跨平台.NET IDE集成开发环境,以其强大的功能和卓越的性能,在.NET开发领域脱颖而出。这款IDE不仅集成了IntelliJ IDEA的代码编辑优势,还融合了ReSharper的C#开发体验,为开发…

STM32(F103ZET6)第十六课:WIFI模块的配置与应用

目录 需求一、wifi模块简述二、配置流程1.配置通信串口2.配置引脚与中断接受3.简述AT指令4.程序编写 三、需求实现代码 需求 完成WiFi模块的配置,使其能连接服务器并最终能和服务器相互发送消息。 一、wifi模块简述 本项目开发版上没有封装好的WIFI模块,所以借助…

SpringBoot日常:基于DeferredResult的异步处理

文章目录 示例代码代码执行结果代码执行过程解析DeferredResult 的优势 本章内容主要讲讲基于DeferredResult的异步处理 在 Servlet 容器中启用了异步请求处理功能,控制器方法就可以用 包装任何支持的控制器方法返回值DeferredResult,控制器可以从不同的…

谷粒商城实战笔记-261~262-商城业务-订单服务-页面环境搭建-SpringSession

文章目录 一,261-商城业务-订单服务-页面环境搭建1,静态资源上传2,配置域名映射3,网关配置4,页面静态资源引用修改 二,262-商城业务-订单服务-整合SpringSession1,页面跳转2,配置Spr…

Python实战:如何使用K-means算法进行餐馆满意度NLP情感分析

🍊作者:计算机毕设匠心工作室 🍊简介:毕业后就一直专业从事计算机软件程序开发,至今也有8年工作经验。擅长Java、Python、微信小程序、安卓、大数据、PHP、.NET|C#、Golang等。 擅长:按照需求定制化开发项目…

详解Apache 和 Tomcat 整合原理及区别

Apache 和 Tomcat 都是Web服务器,它们之间既有联系又有区别。Apache主要负责静态解析,如HTML。Tomcat主要负责动态解析,如JSP。 为什么要让 Apache 与 Tomcat 之间进行连接呢? 原因有下面几个: 提升对静态文件的处理性能 利用…

ms_送给新人的面试题简单解答

第一部分 1 项目中遇到的bug或者难题 这个问题比较容易,每个人都会在开发过程中遇到或多或少的问题,你不可能答我已经天下无敌了,大家开发的项目类型都不太一样,事实上也没人听得太仔细,就算你要说的‘难题‘并不难&…

Apache Druid日志实时分析

业务分析 ​ 秒杀业务中,通常会有很多用户同时蜂拥而上去抢购热卖商品,经常会出现抢购人数远大于商品库存。其实在秒杀过程中,热卖商品并不多,几乎只占1%,而99%的流量都源自热卖商品,很有可能因为这1%的热…

【SQL】分类统计的薪水

目录 题目 分析 代码 题目 表: Accounts ------------------- | 列名 | 类型 | ------------------- | account_id | int | | income | int | ------------------- 在 SQL 中,account_id 是这个表的主键。 每一行都包含一个银行帐户的月收入的…

深入解析Go语言os/user包:用户和组管理实战指南

深入解析Go语言os/user包:用户和组管理实战指南 引言什么是os/user包?为什么要学习os/user包?本文将介绍的内容 os/user包基础如何导入os/user包获取当前用户信息示例代码 *user.User类型详解常见错误处理小结 用户查询与管理根据用户名查询用…

这本大模型书籍我敢说知道的人不超过1%,大模型入门必备书籍

当然可以!我为您推荐一本关于大模型的书籍:《Transformer Tutorials: From Theory to Practice》。虽然这本书不是直接以“大模型”命名,但它涵盖了构建和理解大规模语言模型(如GPT系列和BERT)所需的关键技术和理论。接…