赞
踩
参考链接:https://zhuanlan.zhihu.com/p/46052855
GT高速收发器结构图主体分为PMA(Physical Media Attachment, 物理媒介适配层)和PCS(Physical Coding Sublayer, 物理编码子层)。PMA的功能为:串并转换(图中的SIPO-串入并出和PISO-并入串出)和模拟部分;PCS中的功能, 都是并行的数字电路处理。理论上说GTX的最小必要单元就是PMA, 其主要原因就是核心的模拟部分。 而PCS理论上可以全部由FPGA普通逻辑来实现。 当然作为硬核提供的PCS功能更多、 性能更好、 使用更方便。
弹性buffer, 基本结构是一个FIFO, 常用于处理buffer两边的跨时钟问题。 不过其实有更多的用途, 比如Clock Correction或者Channel Bonding。另外还有一种不用Elastic Buffer的模式, 一般称为buffer bypass模式, 算是一种高级应用。
通常说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就是为这一类编码做准备的。
PRBS是伪随机序列码, GTX自带了PRBS的生成器(在TX内部) 和PRBS接收/检查模块(在RX内部)。 ibert中的误码率检查就是基于内置的PRBS模块。从结构图可以看到, PRBS和8b10b没有项目连接的直接关系, 所以ibert的测试中没有使用8b10b编码(也没有使用其他编码)。 同时内部的PRBS也不支持使用其他编码。 所以如果想在GTX外部使用PRBS信号源, 可以另外单独做PRBS的生成器和校验模块。 Xilinx似乎是有相关参考设计的。
ibert是Xilinx提供的一个用于GT辅助调试的IP。首先明确一下, 这是一个IP。 所以ibert有两种用法:
1.直接使用example design进行独立使用;
2.集成到某个工程中进行使用;
ibert最常用的两个用途是:
1.基于PRBS模块的误码率检查;
2.基于眼图扫描模块的测量近端眼图;
另外, ibert中可以方便的设置GTX的所有参数。 是个不错的参数测试平台。通常可以尝试几个参数的调整来查看对GTX的误码率/眼图是否有帮助, 这几个参数是TX部分的预加重。 而接收端的设置是均衡模式, 由于均衡的原理较为复杂, 而且多为自动调整, 所以不会有简单的几个参数就能看出变化。
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:预加重调节
首先8B/10B编码是把一个8bit数通过某种编码变成10bit数, 并且得出的10bit数中的0和1的个数更平衡, 以此减少直流分量。8B/10B编码是由高3位的3B/4B编码加上5B/6B编码组成的, 而K28.5就是由5(101) 和28(11100) 组成, 即101_11100, 十六进制则是BC。 经过编码表变成10bit数。
如下所示, 串行收发器接收到一个一个的1bit数据, 就像汉字一样, 接收到一个一个的汉字。 我们需要逗号把汉字隔开才能明白句子的意思, 而数据也一样
如下图所示, 左边为发送端的并行数据, 右边为接受端的并行数据。 当接收到逗号码之后才开始接收Data1, 有点类似于开始符。
发送端和接收端与FPGA的接口除之前定义的32bit数之外, 还有4个1bit组成的4bit CHARISK数据。
TXCHARISK端口用于指示TXDATA上的数据是K码还是常规数据。 8B/10B编码器检查接收到的TXDATA字节, 以匹配任何K字符, 如果对应的TXCHARISK位驱动为高。 简单来说, TXCHARISK拉高, 编码器就把该数据编码为逗号, 否则编码为普通数据。当接收检测到逗号码的时候, 对应RXCHARISK会拉高。 来辅助接收端把数据进行对齐, 当勾选了IP核中的RXSLIDE, 就需要手动产生RXCHARISK。(简单来说,该信号就是K码指示信号,和AXI当中的keep信号类似)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。