一、GT是什么?

参考链接:https://zhuanlan.zhihu.com/p/46052855

  1. 它是集成在FPGA芯片内部的固定电路, 因此我们只需要关心该固定电路与FPGA的逻辑部分接口时序即可;
  2. 它是串行收发器, 发送出去只有1bit数据, 而接收端也是1bit线。 但FPGA与该器件的接口数据是多bit的, 因此该收发器同时也是一个高速并串转换器;
  3. 它是高速收发器, 一般线速率可达Gbps, GT分为不同系列, 在不同的系列中有不同的速度。
  4. GT(包括GTX、 GTH和GTP)是Xilinx在高速SerDes的基础上, 增加了其他模块, 如LVDS、 PLL、 8b/10b编解码+绕解码等(具体可以看Xilinx相关文档, 如ug476)形成的一个高速串行收发器, GT是Gigabit Transceiver的意思, 它是实现当下一些高速串行接口的基础: 如PCIe、 RapidIO等

二、如何实现的高速传输

  1. 采用差分接口, 能够很好地抑制共模干扰, 有效提高传输的可靠性;
  2. 由于采用了SERDES, 使用串行总线传输数据, 不需要考虑并行总线的位对齐的问题, 并行总线由于在布线时很难保证每条线路长度与电气特征一致, 导致信号到达时间不同, 在较高的工作频率下很难实现完全同步, 以致出现信号偏移。 这使接收器难以确定采样时间, 容易造成数据错误。 所以串行总线可以以很高的速率传输串行数据;
  3. 由于寄生电容的影响, 在并行的两条数据线中容易产生串扰, 甚至改变信号原有真实电平。 采用地线进行屏蔽可以在一定程度上消除串扰, 但同时也造成总线线路数目的急剧增加。 而串行总线不存在这样的问题。
  4. SERDES不需要传输随路时钟, 因为接收端的时钟提取核恢复模块可以从接收到的串行数据中提取出时钟, 所以不存在随路时钟的抖动带来的问题。

三.GT高速收发器结构

在这里插入图片描述

1. PMA、 PCS

GT高速收发器结构图主体分为PMA(Physical Media Attachment, 物理媒介适配层)和PCS(Physical Coding Sublayer, 物理编码子层)。PMA的功能为:串并转换(图中的SIPO-串入并出和PISO-并入串出)和模拟部分;PCS中的功能, 都是并行的数字电路处理。理论上说GTX的最小必要单元就是PMA, 其主要原因就是核心的模拟部分。 而PCS理论上可以全部由FPGA普通逻辑来实现。 当然作为硬核提供的PCS功能更多、 性能更好、 使用更方便。

2. Elastic Buffer:

弹性buffer, 基本结构是一个FIFO, 常用于处理buffer两边的跨时钟问题。 不过其实有更多的用途, 比如Clock Correction或者Channel Bonding。另外还有一种不用Elastic Buffer的模式, 一般称为buffer bypass模式, 算是一种高级应用。

3. 8B10B:

通常说8b10b是一个编码方式。 在这里还指GTX PCS中的一个模块。作为编码,8b10b有平衡电平, 防止连续1/0的功能。 编码分为正负码和特殊K码。 最常用的K码应该是k28.5。 8b10b最大的优势在于自带错误检测。 当出现8b10b错误的时候, 大概率是链路质量有问题。 8b10b最大的劣势是效率比较低, 有20%的额外开销, 所以常用于低于8G的场景, 最常见的、 使用8b10b、 同时又高于8G线速率的似乎是CPRI Rate7, 线速率9.8G左右。作为GTX的一个模块, 发送端提供了方便使用的编码接口, 接收端提供了方便使用的输出指示, 直接使用即可。另外, GTX还提供了Gearbox。 除了8b10b之外, 还有其他很多编码方式, 比如64b66b, Gearbox就是为这一类编码做准备的。

4. PRBS:

PRBS是伪随机序列码, GTX自带了PRBS的生成器(在TX内部) 和PRBS接收/检查模块(在RX内部)。 ibert中的误码率检查就是基于内置的PRBS模块。从结构图可以看到, PRBS和8b10b没有项目连接的直接关系, 所以ibert的测试中没有使用8b10b编码(也没有使用其他编码)。 同时内部的PRBS也不支持使用其他编码。 所以如果想在GTX外部使用PRBS信号源, 可以另外单独做PRBS的生成器和校验模块。 Xilinx似乎是有相关参考设计的。

5. ibert:

ibert是Xilinx提供的一个用于GT辅助调试的IP。首先明确一下, 这是一个IP。 所以ibert有两种用法:
1.直接使用example design进行独立使用;
2.集成到某个工程中进行使用;
ibert最常用的两个用途是:
1.基于PRBS模块的误码率检查;
2.基于眼图扫描模块的测量近端眼图;
另外, ibert中可以方便的设置GTX的所有参数。 是个不错的参数测试平台。通常可以尝试几个参数的调整来查看对GTX的误码率/眼图是否有帮助, 这几个参数是TX部分的预加重。 而接收端的设置是均衡模式, 由于均衡的原理较为复杂, 而且多为自动调整, 所以不会有简单的几个参数就能看出变化。

6.QPLL、 CPLL:

  • 四个GTX为一组, 称呼为Quad, 每个GTX称呼为Channel, 就很容易理解QPLL和CPLL了。 QPLL是一个Quad共用的PLL, GTX一个Quad只有一个QPLL。 CPLL是每个Channel独有的PLL。从底层角度看, 由于CPLL是每个Channel独有的, 所以CPLL的所有接口都在Channel这个底层模块中。 而QPLL是另外使用了一个叫common的底层模块。GTX中QPLL和CPLL, 除了数目(一个Quad一个QPLL四个CPLL) 和归属(QPLL属于common, CPLL属于Channel)不同之外, 最大的不同在于支持的最高线速率频率不同。 CPLL最高只有6.xG, 而QPLL可以超过10G(具体数值要根据器件的速度等级来查询DataSheet)。即使QPLL工作在很高的线速率下, Channel也可以工作在较低的线速率下。 具体的实现方案就是:
  1. 使用Channel自带的CPLL而不用QPLL;
  2. Channel可以将QPLL的速率按2的倍数进行降低;
    这样同一个参考时钟下, 一个Quad的不同GTX有机会跑在不同的线速率下。 当然这一需求需要更多的操作, IP本身无法实现。

四、IP核设计

在这里插入图片描述

  • GT TYPE: GT类型,取决于器件是否支持

  • Shared Logic: 选择Quad PLL、差分参考时钟缓冲器、时钟复位逻辑是否包含在IP核内部还是示例工程当中
    在这里插入图片描述

  • Protocol: 协议类型预设,一般默认

  • TX RX: 输入输出的线速率以及参考时钟频率设置

  • Quad Column: 使用芯片左侧还是右侧芯片。

  • PLL Selection: CPLL是每一个channel都有的PLL,最高速率为6G,QPLL为一个QUAD四个channel共用的PLL,速率可超过10G。

  • 可视化的图形里可以直接约束GT位置以及参考时钟,也可以在XDC文件中约束管脚,后者优先级高。
    在这里插入图片描述

  • TX、RX: 设置FPGA用户侧位宽和编码形式,内部位宽会根据前俩者选项自动计算

  • 一般推荐使用buffer,若设计延时敏感则去掉buffer,采用相位对齐电路
    在这里插入图片描述

  • Comma Value:逗号值,一般为K28.5。逗号的含义就是让接收端知道从哪里开始是有效的用户数据。

  • Comma Mask:逗号值掩码:可将逗号某一位变为x(即任意值),从而加大逗号搜索范围。

  • Align to:控制多少个Byte搜索一次逗号值,默认即时刻都在搜索。

  • RXBYTEISALIGN:接收端字节对齐信号,该信号可告知逗号被成功检测,数据已对齐。

  • Differential Swing and Emphasis Mode:差异摆动和强调模式,特殊协议选择,PCIE,SATA。

  • RX Equalization:RX均衡器:短距离传输使用低功耗的LPM,长距离使用DFE。

  • Automatic Gain Control:自动增益控制

  • RX Termination:RX终止,门限电压值,当电压值可编程的时候,推荐500mV以下。

  • TXPOLARITY:TX端N、P极性控制

  • TXDIFFCTRL:发送端幅值控制

  • TXPOSTCURSOR:后加重调节

  • TXPRECURSOR:预加重调节

4.1、逗号码

首先8B/10B编码是把一个8bit数通过某种编码变成10bit数, 并且得出的10bit数中的0和1的个数更平衡, 以此减少直流分量。8B/10B编码是由高3位的3B/4B编码加上5B/6B编码组成的, 而K28.5就是由5(101) 和28(11100) 组成, 即101_11100, 十六进制则是BC。 经过编码表变成10bit数。

4.1.1、为什么需要逗号码

如下所示, 串行收发器接收到一个一个的1bit数据, 就像汉字一样, 接收到一个一个的汉字。 我们需要逗号把汉字隔开才能明白句子的意思, 而数据也一样
在这里插入图片描述
如下图所示, 左边为发送端的并行数据, 右边为接受端的并行数据。 当接收到逗号码之后才开始接收Data1, 有点类似于开始符。
在这里插入图片描述
发送端和接收端与FPGA的接口除之前定义的32bit数之外, 还有4个1bit组成的4bit CHARISK数据。
TXCHARISK端口用于指示TXDATA上的数据是K码还是常规数据。 8B/10B编码器检查接收到的TXDATA字节, 以匹配任何K字符, 如果对应的TXCHARISK位驱动为高。 简单来说, TXCHARISK拉高, 编码器就把该数据编码为逗号, 否则编码为普通数据。当接收检测到逗号码的时候, 对应RXCHARISK会拉高。 来辅助接收端把数据进行对齐, 当勾选了IP核中的RXSLIDE, 就需要手动产生RXCHARISK。(简单来说,该信号就是K码指示信号,和AXI当中的keep信号类似)
在这里插入图片描述

  • LOOPBACK:环回测试端口
    在这里插入图片描述
  • CLOCK correction:时钟纠正
  • Sequence length:时钟纠正序列个数
  • 图中序列码为0hBC50,即一个K28.5和一个0h50
Logo

瓜分20万奖金 获得内推名额 丰厚实物奖励 易参与易上手

更多推荐