如何理解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协议有关内容并没有进行讲解,需要使用推荐查看手册详解。


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

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

西奥CHT-01软胶囊硬度测试仪:重塑行业标杆,引领硬度测试新纪元

西奥CHT-01软胶囊硬度测试仪:重塑行业标杆,引领硬度测试新纪元 在当今医药领域,软胶囊作为一种广泛应用的药品剂型,其品质的稳定性和安全性直接关系到患者的健康。而在确保软胶囊品质的各项指标中,硬度测试尤为关键。…

AIGC实战——多模态模型DALL.E 2

AIGC实战——多模态模型DALL.E 2 0. 前言1. 模型架构2. 文本编码器3. CLIP4. 先验模型4.1 自回归先验模型4.2 扩散先验模型 5. 解码器5.1 GLIDE5.2 上采样器 6. DALL.E 2 应用6.1 图像变体6.2 先验模型的重要性6.3 DALL.E 2 限制 小结系列链接 0. 前言 DALL.E 2 是 OpenAI 设计…

领域驱动设计架构演进

领域驱动设计由于其强调对领域的深入理解和关注业务价值,其架构演进依赖于领域的变化和特定领域中的技术实践。 初始阶段 一个单体架构,所有的功能都集成在一个应用程序中,领域模型可能还不完全清晰,甚至并未形成。这个阶段主要是为了验证产品的可行性,快速迭代并尽快推…

有没有国内个人可用的GPT平替?推荐5个AI工具

随着AI技术的快速发展,AI写作正成为创作的新风口。但是面对GPT-4这样的国际巨头,国内很多小伙伴往往望而却步,究其原因,就是它的使用门槛高,还有成本的考量。 不过,随着GPT技术的火热,国内也涌…

2023年度合肥市优秀知识产权服务机构评选申报主体条件、材料和时间程序须知

一、申报主体 在合肥市行政区域内登记注册的知识产权服务机构, 二、申报条件 (一)在合肥市登记注册时间满1年,营业执照经营范围包含知识产权代理、服务等相关内容; (二)在全国专利代理信息公示平台进行备案; (三)有稳定的专业服务人才队伍和服务对象…

【SSL证书】免费单域名SSL证书怎么申请

1、访问证书颁发机构(CA):比如JoySSL、ZeroSSL、各大云平台等,这些机构提供免费的SSL证书申请,并支持单域名证书。在网站上注册账号,并根据提示选择单域名证书进行申请。 !!&#xf…

工厂模式应用实例

引言 设计模式概念 设计模式(Design Pattern)的官方概念可以表述为:在软件设计中,设计模式是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。它是针对特定问题或特定场景的解决方案,是一种经过…

使用STM32CubeMX进行STM32F4的定时器配置

目录 1. Pin脚2. 配置2.1 时钟配置2.2 RCC配置2.3 Timer配置2.4 输出文件 3. 代码3.1 使能定时器3.2 回调函数 1. Pin脚 2. 配置 2.1 时钟配置 timer3时钟挂载在APB1上: 时钟配置如下: 外部使用8MHz晶振 开启内部16MHz晶振 使用锁相环 开启最高100MHz。…

揭秘依赖注入:软件开发人员的基本指南

Dependency injection (DI) is a design pattern and programming technique to manage dependencies between different components. 依赖注入(DI)是一种用于管理不同组件之间依赖关系的设计模式和编程技术。 In DI, the dependencies of a class or ot…

机台统一管理有多困难?但现在出现可行的解决方案了

机台的统一管理对于企业来说对提高生产效率、降低成本、优化资源配置以及保障生产安全等方面都具有至关重要的作用。但企业机台统一管理却存在实际的困难,主要体现在: 多样化的设备和运作模式:由于机台设备可能来自不同的厂商,其规…

如何描述自己的算法?

算法的表达 好的,让我们来一起探讨如何向别人介绍我们的算法。说话很简单,但要把话说清楚,说明白就不那么容易了。同样的道理,能够通俗易懂,直观清晰和严谨地描述一个算法,也是一项具有挑战性的任务。接下…

106短信群发平台在金融和法务行业的应用分析

一、金融行业应用 1.客户通知与提醒:银行、证券、保险等金融机构经常需要向客户发送各类通知和提醒,如账户余额变动、交易确认、扣费通知、理财产品到期提醒等。106短信群发平台可以快速、准确地将这些信息发送到客户的手机上,确保客户及时获…

.NET邮箱API发送邮件的步骤?怎么配置API?

.NET邮箱API发送邮件需要注意哪些?如何使用API发信? 在.NET环境中,使用邮箱API发送邮件是一个常见的需求。无论是企业级的邮件通知,还是个人项目中的邮件验证,都少不了.NET邮箱API的帮助。下面,AokSend将详…

我的创作纪念日(365天)

时间如白驹过隙,转眼间,我已经在技术写作这条路上走过了365个日夜。回望2023年5月9日,我敲下了第1篇技术博客的标题——《什么是代理IP?代理IP有什么用途》。那一天,平凡而又不平凡,因为我决定将自己的知识…

政安晨【零基础玩转各类开源AI项目】:基于Ubuntu系统本地部署使用GPT-SoVITS进行语音克隆与TTS语音生成

目录 介绍 什么是TTS 安装Miniconda 框架功能 测试通过的环境 开始 1. 安装好miniconda 2. 进入下载的GPT-SoVITS目录 3. 创建虚拟环境并执行脚本 4. 执行过程中可能会出错 5. 下载预训练模型 6. 训练过程中可能会报错 7. 使用过程中可能出错 8.以下是使用全过程…

信息安全管理体系介绍(含全套体系文档)

信息安全管理体系英文全称Information Security Management System,简称为ISMS,是1998年左右从英国发展起来的信息安全领域中的一个全新概念,是管理体系(Management System,MS)思想和方法在信息安全领域的应…

Flask-大体了解介绍

初识Flask Flask是使用 Python编写的Web微框架。Web框架可以让我们不用关心底层的请求响应处理,更方便高效地编写Web程序。 Flask主要有两个依赖,一个是WSGI(Web Server Gateway Interface,Web服务器网关接口)工具集…

探索大语言模型在信息提取中的应用与前景

随着人工智能技术的快速发展,大语言模型(LLMs)在自然语言处理(NLP)领域取得了显著的进展。特别是在信息提取(IE)任务中,LLMs展现出了前所未有的潜力和优势。信息提取是从非结构化文本…

ChatGPT-Next-Web漏洞利用分析(CVE-2023-49785)

1. 漏洞介绍 ​ 日常网上冲浪,突然粗看以为是有关Chat-GPT的CVE披露出来了,但是仔细一看原来是ChatGPT-Next-Web的漏洞。漏洞描述大致如下:(如果有自己搭建了还没更新的速速修复升级防止被人利用,2.11.3已经出来了&am…

解决ModuleNotFoundError: No module named ‘skfuzzy‘,这个库全名可不叫skfuzzy哦,否则直接报错!!

ModuleNotFoundError: No module named skfuzzy 在这里插入图片描述在这里插入图片描述如何解决 ModuleNotFoundError: No module named skfuzzy 的问题?skfuzzy 模块介绍什么是模糊C均值聚类?skfuzzy 的应用如何使用 skfuzzy 进行模糊聚类 结论 如何解决…