如何理解GTX接收通道相关模块?(高速收发器三)

  前文讲解了GTX的时钟及发送通道相关内容,本文讲解GTX接收通道的一些功能及其IP配置,接收往往比发送设计更难,与调制解调,加密解密其实相差不大,后者难度都比前者高出很多。GTX的接收通道的功能相比发送通道更加重要,需要从接收的串行数据中恢复数据,并且解码,字节对齐等等。

在这里插入图片描述

图1 GTX/GTH收发器接收框图

  GTX接收部分的框图如下所示,也包括PCS和PMA两部分,PMA部分主要处理模拟信号,内部有均衡器、并串转换模块等,而PCS则是对接收的并行数据进行处理,包括极性翻转、8B/10B解码、弹性Buffer、字节对齐等等模块。

在这里插入图片描述

图2 GTX/GTH收发器接收框图

  下面从接收通道输入数据到输出数据的方向,依次对各个模块做简要讲解:

1、模拟前端

  从手册中可以获知,接收通道的开始部分有一个模拟前端,结构如下图所示,模拟前端一般就是对信号进行放大、滤波等等,消除信号传输过程中的一些干扰,并且然后端能够正常采集输入信号,该电路也是类似作用。

在这里插入图片描述

图3 模拟前端

  由于GTX的差分信号线速率很高,可以达到10.312Gb/S,并且传输距离可能会很长,导致接收数据的幅值可能很小,甚至达不到检测要求,比如输入端发送时幅值有1.5V,经过几十米的光纤传输,到接收端时,幅值可能只有600mv了。

  解决方式就是在发送时,通过预加重、后加重把幅值增大一点,同时在接收时把门限降低一点,比如接收时检测幅值大于500mv就认为是高电平了,还是正确检测到衰减后的信号。

  至于预加重、后加重、检测门限设置多少合适,这与实际的信号传输路径和线速率有关。一般做法是当硬件条件确定后,通过眼图对所有参数进行扫描,确定一个最合适的参数,用作后续开发的值就行了。

  眼图内容在后续眼图测试时进行讲解。

2、RX OOB

  GTX接收器支持解码串行ATA(SATA)和串行连接SCSI(SAS)规范中描述的带外(OOB)序列,并支持PCI Express规范中描述的信标。这个与SATA、PCIE这些协议有关,如果不使用这些协议,可以忽略,具体使用时在查阅手册即可。

3、DFE

  根据功率和性能之间的系统级权衡,GTX接收通道有两种类型的自适应滤波器可以使用。其中的适用于,如果传输过程中损耗比较小,可以使用低功耗模式(LPM)的节能自适应滤波器,对应结构如下图所示。

在这里插入图片描述

图4 LPM模式

  如果传输过程中损耗比较大,传输距离远,此时应该使用DFE自适应滤波器,对应结构如下图所示。DFE通过提供更接近的滤波器参数调整来更好地补偿传输信道损耗,DFE模式是一种离散时间自适应高通滤波器,抽头值是由自适应算法设置的该滤波器的系数。

在这里插入图片描述

图5 DFE模式

  在调用IP时,如下图所示,在1处可以设置滤波器类型,短距离、低损耗首选LPM模式,节省功耗。

  在2处把接收数据的幅值检测设置为可编程,之后可以通过IP端口信号gt0_txdiffctrl_in的值调节输入检测幅值。

在这里插入图片描述

图6 IP设置

4、RX Clock Divider

  这部分与发送通道的时钟部分一致,直接去查看发送通道的原理即可。对应框图如下所示,与发送通道一摸一样,不再赘述。

在这里插入图片描述

图7 RX串行和并行时钟分频器

  注意接收端只有一对差分数据线,并没有时钟线,接收端如何采集数据线的数据呢?

  接收端可以得知数据传输的频率,从而确定时钟频率,但是如何得知时钟的相位呢,发送的时候在时钟双沿完成的并串转换。由上图知,串并转换也应该是在时钟双沿进行的,此时就需要保证时钟与数据的相位关系。

  因此上图中QPLL或CPLL输出时钟进入PMA之后,需要先经过CDR调整时钟相位,然后再经过分频作为串并转换模块的串行时钟和并行时钟,保证时钟与数据的相位关系正确。

  时钟数据恢复(CDR)技术是从接收的串行数据中提取恢复的时钟和数据的相位关系,CDR的结构框图如下所示。

在这里插入图片描述

图8 CDR结构

  CDR原理手册中是这么说的:CDR状态机使用来自边沿和数据采样器的数据确定输入数据流的相位并控制相位插值器(PI)。边缘采样器的相位被锁定到数据流的过渡区域,而数据采样器的相位位于数据眼的中间。

  具体实现方式可能就是CDR FSM能够精确控制相位,根据两个输入去调整相位偏移量,猜测是这样。

5、SIPO

  串并转换模块,将接收的串行数据转换为并行数据,然后输出到PCS侧进行解析。

6、Polarity

  如果PCB的RXP和RXN差分走线被意外交换,GTX接收的差分数据就会反转。GTX接收通道可以在串并转换之后对PCS中的并行字节进行反转,以抵消差分对上的反转极性。

  在配置IP时勾选RXPOLARITY选项,可启用接收极性控制引脚,当gt0_rxpolarity_in信号为高电平时,接收数据极性翻转。

在这里插入图片描述

图9 勾选接收极性控制引脚

  便于阅读,将接收通道的图在贴一遍,如下所示。

在这里插入图片描述

图10 GTX/GTH收发器接收框图

7、PRBS Checker

  GTX收发器接收器包括一个内置的PRBS检查器,如下图所示,能够检测四种函数对应的PRBS序列,与前文发送端生成的四种PRBS序列保持一致。

在这里插入图片描述

图11 PRBS序列检测器

  要使用内置PRBS检查器,检测序列类似必须为与发送通道发送的PRBS序列匹配。

  如果输入数据被发送器反转或RXP/RXN反转,则接收数据也应通过控制RXPOLARITY反转,否则,PRBS检查器不会锁定。

  当PRBS检查器运行时,会在传入数据中查找选定的PRBS序列。当它找到该模式时,它可以通过将输入数据与预期数据进行比较来检测PRBS错误。

8、Comma Detect and Align

  字节对齐,低速串口UART这种通信会有一个起始位,来判断一次传输的开始,但是GTX这类高速串行接口在传输数据时,并没有起始位、停止位这类标志,那接收端如何确定每个字节的开始位置呢?

  下图是发送端发送一段数据,接收机可能因为上电等各种原因,并不是从第一位数据开始接收的,可能是从红色框开始接收第一个并行数据,也可能是从蓝色框位置接收第一个数据,也可能是紫红色框处开始接收,该如何确定哪个位置开始接收数据才能正确解析出并行数据?

在这里插入图片描述

图12 接收数据

  这里的功能与ISERDESE的功能其实一致,需要在合适的位置接收数据,对齐方式就是通过检测规定的K码数据来调整串并转换的起始位置。

  如上图所示,首先将蓝色框中的10位数据通过8B/10B解码,如果解码结果是设定的K码,则从蓝色框开始,每10位数据转换为并行数据去解码输出。

  如果蓝色框中的解码结果不是K码,则将起始位置后移一位,把紫红色框中10位数据拿去解码,之后再进行比对,循环往复,直到检测到K码为止。

  为了使对齐成为可能,发射机发送一个可识别的序列,即Comma,通常称为逗号。接收方在传入数据中搜索逗号,当发现逗号时,将该逗号移动到一个字节边界,以便接收的并行字与发送的并行字匹配。

  如下图中1所示,字节对齐常用K码为K28.5,2处可以设置在数据的什么位置进行字节对齐检测,一般可以设置为全程检测。

在这里插入图片描述

图13 IP设置

  2处还有个comma Mask信号,检测器支持检测部分K码的数值。如下图所示,Mask高三位设置为0,则检测K码时,不需要检测高三位,只需要低5位满足要求即可,从而实现部分检测。但一般不会这么使用,了解即可。

在这里插入图片描述

图14 K码部分检测

  图13的3处Decode valid comma only勾选后,检测器就只会检测默认的K28.5和K28.1的K码。勾选Combine plus/minus commas使用双字节对齐检测,要求比较严格时才会使用。

  查看图13中1处可知,当K码设为K28.5后,由于8B/10B编码的极性问题,下面会出现两种编码结果Plus Comma和Minus Comma,两种编码的各位数据相反。检测器怎么知道检测哪种编码的K码呢?通过使能图中4的ENPCOMMALIGN和ENMCOMMALIGN两个选项进行选择,与其中一种模式对齐即可。

  为实现字节,GTX有两种方式,一种是自动对齐,IP默认使用自动对齐。另一种是手动对齐,勾选图13的RXSLIDE来启用手动对齐,该功能与ISERDESE一致,通过拉高一个信号来对串并转换的起始位置进行调整,如果不是需要字符,则继续调整,会比较麻烦。

  RXBYTELSALIGN信号为高电平时,表示已经完成字节对齐,输出给用户的数据正确。RXBYTEREALIGN信号为高电平时,表示IP正在进行字节对齐。RXCOMMADET为高电平表示检测到K码,该信号有效几个周期。

  在线路速率大于5 Gb/s且系统噪声过大的应用中,字节对齐模块可能会错误地对齐错误的字节边界,并在没有有效数据时错误地拉高RXBYTEISALIGNED信号。在此类应用中,应进行系统级检查,以检查RXBYTEISALIGNED是否符和数据的有效性。

9、8B/10B Decoder

  8B/10B解码模块,将接收的10位并行数据解码位8位并行数据,具体的在8B/10B相关文章进行讲解,本文不过多叙述。

10、RX Elastic Buffer

  弹性buffer主要用于解决PMA并行时钟域(XCLK)和PCS内部并行时钟域RXUSRCLK的跨时钟域问题。

  XCLK是串并转换后,并行数据的时钟信号,由图7可知,QPLL或者CPLL的时钟经过CDR相位调整后作为串并转换模块的时钟。

  而RXUSRCLK一般是由TXOUTCLK或者RXOUTCLK经过MMCM生成的,而TXOUTCLK或者RXOUTCLK的来源有几种,可能并不是CDR输出时钟,因此XCLK和RXUSRCLK的相位不相同,即两者是异步时钟。

  需要解决两个时钟域的相位差,最简单的方法就是使用buffer,如下图所示。

在这里插入图片描述

图15 弹性buffer

  与发送通道一样,接收通道提供了两种解决方式,一种是通过buffer同步数据,优点是用户不需要进行控制,硬核内部即可完成同步,缺点在于延迟比较大,如果对延迟没有要求,首选buffer,IP设置如下所示。

在这里插入图片描述

图16 使能接收通道buffer

  注意如果发送通道和接收通道的协议和速率一致,可以使用TXOUTCLK生成RXUSRCLK,原因在于同一个高速收发器的发送和接收通道共用同一个QPLL和CPLL,那么TXOUTCLK和RXOUTCLK其实可以是同一QPLL或者CPLL的参考时钟信号。

  当然如果对延迟比较敏感,则可以将弹性buffer旁路,使用相位对准电路调整SIPO并行时钟域和XCLK之间的相位差,实现从SIPO到PCS可靠数据传输。还可以通过调整RXUSCLK来补偿温度、电压变化,从而执行RX延迟对齐。接收相位和延迟组合对准可以由GTX收发器自动执行或由用户手动控制。

  当RX恢复时钟用于提供RXUSRCLK和RXUSRCLK2时,可以旁路RX弹性buffer以减少延迟。当RX弹性buffer被旁路时,通过RX数据路径的延迟很低且具有确定性,但时钟校正和通道绑定不可用。

  相位对准电路整体还是比较复杂的,并且支持多个通道对齐,手册中也花费了大量篇幅进行讲解,如果需要该模式,还是推荐阅读手册,毕竟目前我也没有使用该模式,不好讲解。

11、RX PIPE Control与RX Geartox

  这个与发送通道的 PIPE Control应该功能是一样的,与PCIE协议有关,不使用该协议时可以忽略。

  RX Geartox与TX Gearbox类似,只有在使用64B/66B或者64B/67B编码的时候,才会被使用,其余时间忽略。

12、RX Status Control及时钟校正

  RX Status Control对弹性buffer的一些状态进行检测,包括溢出等等,然后去做一个时钟纠正的处理。

  RX弹性buffer用于同步两个不同的时钟域RXUSRCLK和XCLK的数据,XCLK是从CDR恢复的时钟。即使RXUSRCLK和XCLK以相同的时钟频率运行,频率差异也始终很小,日积月累,也会导致读写数据的速率不一致,可能造成数据溢出。

  这是因为RXUSRCLK和XCLK差异决定的,并不能消除,因此提供了一种时钟纠正的方式来防止数据出现错误。为了允许校正,发送数据时需要在有效数据中周期性的插入一个或多个特殊字符,GTX接收通道可以根据需要在弹性buffer中删除或者复制这些字符。

  当弹性buffer快要装满数据时,可以删除buffer中的一些特殊字符使得buffer不被溢出。当弹性buffer快要被读空时,可以复制一些特殊字符存入buffer,防止弹性buffer被读空,最终使得弹性buffer始终保持在半满的状态。

  由于XCLK和RXSUCLK频率只有微小差异,所以可以通过上述方式进行纠正,防止buffer上溢或者下溢。

在这里插入图片描述

图16 时钟校正概念视图

  上述所说的特殊字符一般为K码,IP设置如下所示,勾选1处启用时钟校正功能,在2处选择每次插入特殊字符的个数,3处设置需要插入特殊字符的数值,4处确定插入的字符是不是K码。下图插入2个特殊字符,一个是K28.5对应的8’hBC,另一个是普通字符8’h50。

在这里插入图片描述

图17 IP中时钟校正设置

13、通道绑定

  XAUI和PCI Express等协议结合了多个串行收发器连接,以创建一个更高吞吐量的通道。每个串行收发器连接称为一个通道,除非每个串行连接的长度完全相同,否则通道之间的偏斜会导致数据同时传输,但到达时间不同。

  RX buffer可以用作可变延迟模块,信道绑定消除了GTX收发器各个通道之间的偏斜。用于绑定信道的发送通道在发送数据都同时发送信道绑定字符(或字符序列)。

  当接收到序列时,GTX接收通道可以确定每个通道之间的偏斜,并调整RX buffer的延迟,以便在RX fabric用户界面上呈现无偏斜的数据。

  后续在使用PCIE这种多通道协议时,在进行详细了解,本质上发送端向每个通道同时发送一组数据,接收端检测这组数据,确定每条线路延迟,进而调整弹性buffer输出数据的延迟,来达到多个通道输出给用户的数据对齐的目的。

14、用户接收端口

  经过前文这么久的讲述,终于来到最后GTX接收数据的用户接口了,毫无疑问该接口的主要作用就是将接收的数据输出给用户。

  该接口的所有信号与RXUSRCLK2的上升沿对齐,读取数据RXDATA的位宽可以配置为2、4或8字节,实际位宽与RX_DATA_WIDTH和RX_INT_DATAWIDTH的取值有关,与发送通道的设置一样,如下图所示。

在这里插入图片描述

图18 FPGA RX接口数据路径配置

  接口宽度配置7系列GTX收发器包含2字节和4字节内部数据路径,可通过设置RX_INT_DATAWIDTH属性进行配置。FPGA接口宽度可通过设置RX_DATA_WIDTH属性进行配置。

  当8B/10B解码器使能时,RX_DATA_WIDTH必须配置为20位、40位或80位,这种情况下,FPGA RX接口仅使用RXDATA端口。

  当8B/10B解码器被旁路且RX_DATA_WIDTH为20、40或80时,RXDISPERR和RXCHARISK端口用于将RXDATA端口从16位扩展至20位、32位扩展至40位或64位至80位,如下图所示。

在这里插入图片描述

图19 旁路8B/10B解码器时接收的RX数据

  IP相关配置如下图所示,因为细节与发送通道的用户接口其实是一致的,所以这里就不再赘述。

在这里插入图片描述

图20 IP配置数据位宽及解码方式

  最后手册还讲解了RXUSCLK和RXUSCLK2,这部分内容与TXUSCLK其实一致的,区别在于RXUSCLK和RXUSCLK2可以通过TXOUTCLK生成,也可以通过RXOUTCLK生成。而TXUSCLK和TXUSCLK2一般只推荐使用TXOUTCLK通过MMCM生成。如下IP配置所示。

在这里插入图片描述

图21 时钟源的设置

  本文到此结束,手册中这部分内容有一百二十多页,此处用五千多字进行简要概括,像通道绑定很多与PCIE、SATA协议有关内容并没有进行讲解,需要使用推荐查看手册详解。


  如果对文章内容理解有疑惑或者对代码不理解,可以在评论区或者后台留言,看到后均会回复!

  如果本文对您有帮助,还请多多点赞👍、评论💬和收藏⭐!您的支持是我更新的最大动力!将持续更新工程!

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Linux】进程的隔离和控制:namespace 隔离、cgroup 控制

文章目录 五、namespace 隔离dd -- 读取、转换并输出数据mkfs -- 格式化文件系统df -- 显示文件系统磁盘使用情况mount -- 加载文件系统到指定的加载点unshare -- 创建子进程,同时与父程序不共享namespace一个 demo 六、cgroup(Control Group) 相关命令pidstat -- 监…

Redis 源码安装(CentOS 单机)

序言 本文给大家介绍如何在 CentOS 上,通过 Redis 源码单机部署 Redis 服务。 一、部署流程 通过官网下载源码 # 下载源码 wget https://download.redis.io/redis-stable.tar.gz# 解压源码包 tar -xzvf redis-stable.tar.gz在 linux 中执行以下命令,安…

百度云内容审核快速配置 (java)

为什么要选择百度云 ? 因为他免费用一年 首先要先开通百度云内容安全服务 按照操作指引走完整套 ContentCensor Java SDK目录结构** com.baidu.aip├── auth //签名相关类├── http //Http通…

深度解析DPO及其变体在多种任务上的表现如何,该如何选择

深度学习自然语言处理 原创作者:wkk 单位:亚利桑那州立大学paper:Insights into Alignment:Evaluating DPO and its Variants Across Multiple TasksLink:https://arxiv.org/pdf/2404.14723 今天,我要带大家深入了解一…

Qt在任务栏图标和系统托盘图标上显示红点

在任务栏图标上显示红点 关键类&#xff1a;QWinTaskbarButton #include <QWinTaskbarButton>QPointer<QWinTaskbarButton> taskbarBtn nullptr; if (!taskbarBtn) {taskbarBtn new QWinTaskbarButton(window);taskbarBtn->setWindow(window->windowHand…

git bash退出vim编译模式

解决方法&#xff1a; 1.按esc键&#xff08;回到命令模式&#xff09; 此时是没有分号让我们在后面输入命令的 2.按shift键: 3.再输入&#xff1a;wq&#xff0c;并按enter键 此时我们发现又回到git bash窗口 希望对大家有所帮助&#xff01;

厚德提问大佬答3:让AI绘画更有效率

遇到难题不要怕&#xff01;厚德提问大佬答&#xff01; 厚德提问大佬答 你是否对AI绘画感兴趣却无从下手&#xff1f;是否有很多疑问却苦于没有大佬解答带你飞&#xff1f;从此刻开始这些问题都将迎刃而解&#xff01;你感兴趣的话题&#xff0c;厚德云替你问&#xff0c;你解…

SSM+Vue在线OA办公系统

在线办公分三个用户登录&#xff0c;管理员&#xff0c;经理&#xff0c;员工。 SSM架构&#xff0c;maven管理工具&#xff0c;数据库Mysql&#xff0c;系统有文档&#xff0c;可有偿安装调试及讲解&#xff0c;项目保证质量。需要划到 最底 下可以联系到我。 功能如下&am…

Redis之Linux下的安装配置

Redis之Linux下的安装配置 Redis下载 Linux下下载源码安装配置 方式一 官网下载&#xff1a;https://redis.io/download ​ 其他版本下载&#xff1a;https://download.redis.io/releases/ 方式二&#xff08;推荐&#xff09; GitHub下载&#xff1a;https://github.com/r…

游戏全自动打金搬砖,单号收益300+ 轻松日入1000+

详情介绍 游戏全自动打金搬砖&#xff0c;单号收益300左右&#xff0c;多开收益更多&#xff0c;轻松日入1000 可矩阵操作。 项目长期稳定&#xff0c;全自动挂机无需人工操作&#xff0c;小白&#xff0c;宝妈&#xff0c;想做副业的都可以。

css浮动(float)

浮动&#xff08;Float&#xff09; 在CSS中是一个重要的布局技术&#xff0c;它允许元素向左或向右移动&#xff0c;其周围的元素会重新排列。当一个元素被设置为浮动时&#xff0c;它会脱离正常的文档流&#xff0c;这意味着它不再占据原本在文档流中的空间&#xff0c;而会尽…

VS编辑器下使用MFC完成数据相册系统

背景&#xff1a; 实验项目8:数字相册系统 (2周) (一)实验目的 通过该实验&#xff0c;使学生掌握windows程序设计的基本方法。了解相册的基本功能&#xff0c;在传统相册的基础上&#xff0c; 通过应用时钟、图形绘制功能、图形文件的读写功能以及数据库技术&#xff0c;实现对…

《Linux运维总结:ARM64架构CPU基于docker-compose一离线部署rabbitmq 3.10.25容器版镜像模式集群工具》

总结&#xff1a;整理不易&#xff0c;如果对你有帮助&#xff0c;可否点赞关注一下&#xff1f; 更多详细内容请参考&#xff1a;《Linux运维篇&#xff1a;Linux系统运维指南》 一、部署背景 由于业务系统的特殊性&#xff0c;我们需要面向不通的客户安装我们的业务系统&…

DC-DC电路中电感的下方该不该挖空

DC-DC电路中的电感下方该不该挖空&#xff1f; 在回答这个问题之前&#xff0c;先来了解一下DC-DC电路中常见的功率电感类型 一&#xff0e;DC-DC电路常用功率电感类型 图1 DC-DC电路常用电感类型 这四种类型电感&#xff0c;按照无屏蔽电感→磁封胶半屏蔽电感→组装式全屏蔽…

01-MySQL 基础篇笔记

一、MySQL 概述 1.1 数据库相关概念 数据库:(DB:DataBase) 存储数据的仓库,数据是有组织的进行存储 数据库管理系统:(DBMS:DataBase Management System) 操作和管理数据库的大型软件 SQL:(SQL:Structured Query Language,结构化查询语言) 操作关系型数据库的编…

ThreeJS:常见几何体与基础材质入门

在前文《ThreeJS:Geometry与顶点|索引|面》中&#xff0c;我们了解了与Geometry几何体相关的基础概念&#xff0c;也尝试了如何通过BufferGeometry自定义几何体。 常见Geometry几何体 ThreeJS内部也提供了诸多封装好的几何体&#xff0c;常见的Geometry几何体如下图所示&#…

为什么 ChatGPT 不火了?

不火了是有原因的&#xff0c;下面我来从大部分人拿到 ChatGPT 之后的两大痛点开始讲起&#xff1a; 很多朋友拿到 ChatGPT 后的第一个痛点就是&#xff1a;用的不好 你经常会感觉到 ChatGPT 回答的好空&#xff0c;没有太多参考价值。 而第二个痛点则是&#xff1a;无处去用…

【C++历练之路】红黑树——map与set的封装实现

W...Y的个人主页&#x1f495; gitee代码仓库分享&#x1f60a; 前言&#xff1a;上篇博客中&#xff0c;我们为了使二叉搜索树不会出现”一边倒“的情况&#xff0c;使用了AVL树对搜索树进行了处理&#xff0c;从而解决了数据在有序或者接近有序时出现的情况。但是AVL树还会…

Isaac Sim 3(学习笔记5.8)

Isaac Sim 利用深度学习获取mask掩码图 参考内容 Kubernetes官网 在 Linux 系统中安装并设置 kubectl | Kubernetes准备开始 kubectl 版本和集群版本之间的差异必须在一个小版本号内。 例如&#xff1a;v1.30 版本的客户端能与 v1.29、 v1.30 和 v1.31 版本的控制面通信。 用…

风与水如何联合优化?基于混合遗传算法的风-水联合优化运行程序代码!

前言 为提高风电场的供电质量同时增加其发电效益,利用储能技术为风电场配置一个蓄能系统是比较重要的解决措施之一。风电的蓄能技术有水力蓄能、压缩空气蓄能、超导磁力蓄能、流体电池组、电解水制氢等&#xff0c;其中水力蓄能是技术较成熟的一种蓄能方式&#xff0c;且小型的…