如下图所示,在IP Catalog中搜索gt,然后双击7 Series FPGAs Transcelvers Wizard打开IP配置界面。
1、配置GT Selection界面
首先进入GT Selection配置界面,这个界面主要关注红框部分。从前文对GT的时钟介绍可知,一个GT bank只有一个QPLL,红框部分表示把QPLL的代码放在IP外面实现,这样做的好处在于后续方便扩展收发器通道,便于二次开发。
2、Line Rate, Transceiver Selection, and Clocking界面
Line Rate, Transceiver Selection, and Clocking界面用于选择收发器位置和时钟,此页面左下图显示的可用收发器数量取决于所选的芯片型号和封装。
(1)、协议选择:在协议处可以选择各种协议,本文选择白手起家,不选用其余上层协议。
(2)、发送端口需要设置线速率、参考时钟频率、是否禁用接收通道。
在本次设计中发送通道的线速率(Line Rate)设置为10Gbps,参考时钟频率(Reference Clock)设置为156.25MHz,启用接收通道。
(3)、接收端口需要设置的参数与发送通道类似,接收通道的线速率(Line Rate)设置为10Gbps,参考时钟频率(Reference Clock)设置为156.25MHz,启用发送通道。
(4)、用于选择高速收发器bank在FPGA内部的位置,是否启用QPLL的DRP接口,高速收发器在ZYNQ7030中的位置是固定的,位于右侧。
Use Common DRP:勾选后,用户可以通过DRP接口动态配置QPLL,修改QPLL的参考时钟来源等等信息。
Advanced Clocking Option:勾选后,可以把所有的参考时钟端口开放给用户,用于动态时钟切换。
PRBS pattern generator and check:PRBS模式产生和检测功能经常用来验证信道质量测试。
(5)、PLL选择
对于GTX来说,如果发送通道和接收通道的线速率小于6.5Gbps,那么可以使用QPLL也可使用CPLL,否则只能使用QPLL。由于2和3处将线速率设置为10Gbps,因此此处只能使用QPLL生成的时钟作为发送通道和接收通道的时钟信号。
(6)、收发器通道选择。
在左下侧的框图中,可以选中相应的通道,然后在6中勾选Use GT XmYn,即可使用坐标为(Xm,Yn)的收发器。但是这种方式对于设计者来说并不方便,需要用户知道后续要使用通道在芯片中的坐标。
还有另一种方式也可以对通道位置进行修改,就是通过约束发送和接收通道的引脚,来确定使用的通道,并且约束引脚的优先级大于此处IP设置的位置,因此常用的方式是通过约束引脚来确定使用具体的收发器资源。
由此处可知,可以在一个IP中勾选多个通道,这种方式也行,但是更加常用的方法是生成单通道的IP,需要使用多通道时,多次例化该IP即可,这也是为什么需要把QPLL放在IP外部的原因,防止将QPLL多次例化。
其中TX Clock Source用于确定发送通道的时钟来源,在前文分析过QPLL和CPLL的时钟只能来自GT bank的差分时钟引脚,因此TX Clock Source只能来自参考时钟0管脚或者参考时钟1管脚输入的差分时钟。
RX Clock Source和TX Clock Source是来自同一个QPLL或者CPLL输出时钟,因此设置需要保持一致。
3、Encoding and Optional Ports界面
如下图所示,对Encoding and Optional Ports界面进行配置,主要完成接收端编码、接收端解码、发送通道内部和接收通道内部同步数据的方式。
(1)、发送通道的用户数据位宽及编码方式配置
如果线速率大于6.5Gbps,那么用户数据位宽(Extemal Data Width)可以设置为32或者64位,否则用户数据位宽可以设置为16、20、32、40、64、80位。
编码(Encoding)可以使用8B/10B、64B/66B、64B/67B,也可以不使用编码方式。
线速率也会影响通道内部数据传输位宽的设置,如果线速率大于6.5Gbps,那么内部数据位宽(Internal Data Width)只能设置成40位,否则可以设置位16、20、32、40位。
(Extemal Data Width)与(Internal Data Width)的相关问题在讲解发送通道的时候讲解过,需要了解的可以前往查看。
(2)、接收通道的解码方式和数据位宽设置,与发送端保持一致即可,当然接收端和发送端的(Internal Data Width)不一致也不会影响数据传输,这个位宽是通道内部的一个位宽。
(3)、DRP System Clock Frequecy:设置DRP接口的时钟频率,这个时钟对来源没有要求,因为是配置端口嘛,对速率一般没有要求。因此选中常用的100MHz系统时钟即可。
(4)、与编码相关的可选端口
端口 | 含义 |
---|---|
TXBYPASS8B10B | 允许字节交错数据以每字节为基础旁路8B / 10B编码器,高电平有效。TX8B10BEN必须为高此信号才有用。TXBYPASS8B10B [ x] = 1,字节x绕过编码器。TXBYPASS8B10B [x] = 0,字节x使用编码器。 |
TXCHARDISPMODE | 在启用8B/10B编码时,这两个选项同时勾选可以在字节编码前将运行不一致性强制为正;只勾选“TXCHARDISPMODE”选项可以在字节编码前将运行不一致性强制为负;只勾选“TXCHARDISPVAL”选项时可以在字节编码前将运行的差异性反转;不勾选“TXCHARDISPMODE”和“ TXCHARDISPVAL”时可以保持运行的差异性不变。当发送通道不启用8B/10B编码时,可以利用“TXCHARDISPMODE”和“ TXCHARDISPVAL”扩展端口位宽。 |
TXCHARDISPVAL | |
RXCHARISCOMMA | 高电平有效,表示RXDATA上显示的相应字节是K码。 |
RXCHARISK | 高电平有效,当启用8B / 10B解码时,RXDATA上显示的相应字节为K字符。 |
(5)、发送通道的同步设置
在前文讲解发送通道时,经过这部分内容,可以使用buffer或者对齐电路来同步数据,buffer的劣势在于延迟比较大,对齐电路需要用户自己设计这部分电路,难度比较大。
本文将发送端的buffer使能(勾选Enable TX Buffer),将PCS并行时钟域的时钟源(TXUSRCLK Source)设置为IP输出的时钟TXOUTCLK,并且勾选TXOUTCLK来源于发送通道的PLL参考时钟信号。
(6)、接收通道的同步设置
这部分内容与发送端也是类似的,只不过接收端的是弹性Buffer,相比发送端的buffer功能更多,详细内容可以查看接收通道弹性buffer部分。注意接收通道PCS并行时钟域(RXUSRCLK Source)也可以设置为TXOUTCLK。
(7)、复位相关的可选端口
端口 | 含义 |
---|---|
TXPCSRESET | 发送通道PCS复位信号,高电平有效。 |
TXPMARESET | 发送通道PMA复位信号,高电平有效。 |
TXSYSCLKSEL | 选择驱动TX数据路径的参考时钟源。 |
TXRATE | 传输速率改变端口,该端口动态控制TX串行时钟分频器D的设置,并与TXOUT_DIV一起使用,具体含义参考发送通道的时钟讲解。 |
TXBUFSTATUS | TX buffer的状态,TXBUFSTATUS[1]为高电平表示TX buffer溢出或下溢状态。TXBUFSTATUS [0]表示TX buffer充满度,高电平表示TX buffer至少半满。 |
TX8B10BEN | 高电平表示启用8B / 10B编码器。 |
RXPCSRESET | 接收通道PCS复位信号,高电平有效。 |
RXPMARESET | 接收通道PMA复位信号,高电平有效。 |
RXSYSCLKSEL | 选择驱动RX数据路径的参考时钟源。 |
RXRATE | 接收速率更改端口,类似于TXPATE。 |
RXBUFSTATUS | 指示接收通道弹性buffer的状态:当检测到错误条件时,建议RX弹性缓冲器复位。 |
000b:在正常范围内 | |
001b:缓冲区中的字节数小于CLK_COR_MIN_LAT | |
010b:缓冲区中的字节数大于CLK_COR_MAX_LAT | |
101b:RX弹性缓冲器下溢 | |
110b:RX弹性缓冲区溢出 | |
RXBUFRESET | 接收通道弹性buffer复位信号,高电平有效。当接收通道弹性buffer被旁路时,不能勾选此选项。 |
RXCDRHOLD | 保持CDR控制循环冻结。 |
CPLLPD | CPLL掉电接口。 |
QPLLPD | QPLL掉电接口。 |
CLKRSVD | OOB电路时钟信号。 |
4、Alignment, Termination, and Equalization界面
Alignment, Termination, and Equalization界面配置如下图所示,主要包括逗号对齐和均衡处理两个部分。
(1)、逗号相关设置
Use Comma Detection:启用接收K码检测,用于标识数据流中的K码字符和SONET框架字符。
Decode Valid Comma Only:启用接收逗号检测时,将检测限制在特定的已定义逗号字符,即K28.1或K28.5。
Comma Value:选择标准逗号模式或用户定义的模式之一以输入自定义模式。
Plus Comma:表示要匹配的正差异K码的10位二进制模式(RD+),模式的最右边位是串行到达的第一位。
Minus Comma:表示要匹配的负视差K码的10位二进制模式,模式的最右边位是串行到达的第一位。
Comma Mask:10位二进制模式,表示逗号匹配模式的掩码。1表示要匹配逗号模式中的相应位,0表示不关心逗号模式中的相应位。
Align to…可以选择Any Byte Boundary、Two Byte Boundary、FourByte Boundary等选项,一般保持默认设置即可。
Any Byte Boundary:检测到逗号时,使用逗号模式将数据流与最近的字节边界对齐。
Two Byte Boundary:检测到逗号时,使用逗号模式将数据流与2字节边界对齐。
FourByte Boundary:检测到逗号时,使用逗号模式将数据流与4字节边界对齐。
Combine plus/minus commas:表示使用双逗号检测功能。
下表是逗号检测可选的一下信号,作为辅助控制或者检测。
选项 | 含义 |
---|---|
ENPCOMMAALIGN | 高电平有效,当检测到K码(RD+)模式时,启用字节边界对齐过程。 |
ENMCOMMAALIGN | 高电平有效,当检测到K码(RD-)模式时,启用字节边界对齐过程 |
RXSLIDE | 高电平有效,每次置位都会将字节对齐调整一位,优先于普通逗号对齐。 |
RXBYTEISALIGN | 高电平有效,表示接收端已经完成字节对齐。 |
RXBYTEREALIGN | 高电平有效,表示接收端正在进行字节对齐。 |
RXCOMMADET | 高电平有效,表示逗号对齐逻辑在数据流中检测到逗号模式。 |
(2)发送端加重、接收端均衡设置
Differential Swing and Emphasis Mode表示选择加重的模式,xilinx提供了一些加重模式,本文选择自定义模式即可,如下图所示。
Equalization Mode:设置接收通道的均衡模式,根据接收通道的讲解,一般设置为LPM就行。
Automatic Gain Control:设置接收器的自动增益控制,设置为自动即可。
Termination Voltage:有GND、Floating、AVTT、可编程等几个选项。其中GND会使内部终端网络接地,Floating可隔离网络,AVTT会将内部参考电压源应用于终端网络,选择可编程选项后,可以通过更改Trim Value的值修改接收通道终端网络的电压。
之后就是一些可选的端口,一般会勾选极性翻转信号,TXPRECURSOR、TXPOSTCURSOR、TXDIFFCTRL等信号。这些可选信号的含义如下表所示。
选项 | 含义 |
---|---|
TXPOLARITY | 用于发送通道的差分引脚极性翻转,高电平有效。 |
TXINHIBIT | 强制变送器输出处于稳定状态,高电平有效。 |
TXDIFFCTRL | 发送通道的摆幅控制。 |
TXPOSTCURSOR | TXPOSTCURSOR端口。 |
TXPRECURSOR | TXPRECURSOR端口。 |
TXMAINCURSOR | 高电平有效信号可启用QPI偏置。 |
TXQPISENN | 传输QPI端口(负极性)。 |
TXQPISENP | 传输QPI端口(正极性)。 |
TXQPIBIASEN | 高电平使能QPI偏置。 |
TXQPIWEAKUP | QPI高电平有效信号发送器。 |
TXQPISTRONGPDOWN | 传输QPI掉电端口。 |
RXPOLARITY | 反转接收数据信号的极性,高电平有效。 |
RXDFELPMRESET | 复位接收DFE/LPM模块。 |
RXDFEAGCOVRDEN | DFE AGC覆盖的高电平有效信号。 |
RXLPMLFKLOVRDEN | 接收低通覆盖使能端口。 |
RXQPIEN | 禁用QPI协议的接收端接。 |
RXQPISENN | 检测输出在MGTRX N引脚上的电平状态。 |
RXQPISENP | 检测输出在MGTRX P引脚上的电平状态。 |
RXLPMEN | 高电平启用带有自适应线性均衡器的LPM模式,低电平启用高性能DFE模式使能。 |
5、PCIE & SATA & PRBS
之后需要对PCIE,SATA,PRBS界面进行配置,如下图所示,这个页面多数功能与PCIE和SATA有关;当不使用这两种协议时,只需要将回环控制引出即可,其余设置保持默认即可。
(1)PCIE和SATA协议相关的设置
Enable PCI Express:启用PCI Express特定的某些功能,包括启用PCI Express断电模式和PCIe通道绑定的选项。当收发器用于PCI Express时,应勾选此选项。
SATA COM Sequence的Bursts:表示声明COM匹配的突发序列数,取[0,7]的整数值,默认为4。
SATA COM Sequence的Idles:指示声明COM匹配的空闲序列的数量,取[0,7]的整数值,每个空闲信号都是一个OOB信号,其长度与COMINIT/ COMRESET或COMWAKE相匹配。
PCIE过渡时间(Transition Time)包含To P2、From P2、TO/From Non P2三个参数,但本工程并不会使用这些参数。
To P2:取值范围[0,65535],设置计数器以确定PCI Express到P2电源状态的转换时间,默认值为100。
From P2:取值范围[0,65535],设置计数器以确定PCI Express从P2电源状态的转换时间,默认值为60。
TO/From Non P2:取值范围[0,65535],设置计数器以确定PCI Express进入或离开P2以外的电源状态的转换时间,默认值为25。
其余的端口信号如下表所示。
选项 | 含义 |
---|---|
LOOPBACK | 回环模式的设置信号。 |
RXCOMWAKEDET | 唤醒检测信号,高电平有效。 |
TXDETECTRX | PIPE接口,用于符合PCI Express规范的控制信号。功能取决于TXPOWERDOWN、RXPOWERDOWN、TXELECIDLE、TXCHARDISPMODE和TXCHARDISPVAL的状态。如果RXSTATUS编码格式设置为SATA,则此端口不可用。 |
RXSTATUS | 3位接收器状态信号,该信号的编码取决于RXSTATUS编码格式的设置。 |
TXCOMINIT | 传输初始化端口。 |
TXELECIDLE | 将变送器驱动至电气空闲状态(无差分电压)。在PCI Express模式下,用于电气空闲模式。功能取决于TXPOWERDOWN、RXPOWERDOWN、TXELECIDLE、TXCHARDISPMODE和TXCHARDISPVAL的状态。 |
RXVALID | 高电平有效PCI Express接收OOB/信标信号。指示RXDATA和RXCHARISK[3:0]上的符号锁定和有效数据。 |
TXCOMSAS | OOB信号。 |
PHYSTATUS | PCI Express接收检测支持信号,表示完成了几个PHY功能。 |
RXCOMINITDET | 高电平有效初始化检测信号。 |
TXCOMWAKE | OOB信号。 |
RXCOMSASDET | SATA的高电平有效检测信号。 |
TXCOMFINISH | OOB的完成。 |
TXPOWERDOWN | 发送通道的掉电端口。 |
RXPOWERDOWN | 接收通道的掉电端口。 |
(2)、OOB功能相关设置
Use RX OOB Signal Detection:启用内部OOB信号检测器,OOB信号检测用于PCIe和SATA。
Use PRBS Detector:启用内部PRBS检测器,应用程序可以使用该功能来实现内置自测。
Use Port TXPRBSSEL:选择PRBS传输控制端口。
Use Port TXPRBSFORCEERR:启用PRBS强制误差控制端口,将错误数据插入比特流。
RXPRBSERR_LOOPBACK:选择此选项将RXPRBSERR位回送至同一收发器的TXPRBSFORCEERR。
该页面就配置完成了,可选的端口很多,但如果不使用PCIE和SATA协议,只需要勾选回环模式控制即可。
6、CB and CC Sequence页面配置
最后一个配置页面如下所示,主要包含通道绑定和时钟校准两部分,其中通道绑定是指同时使用多个通道时,多个通道之间需要同步数据,防止数据错位引发的错误,典型应用就是PCIE。
时钟校准可以查看接收通道的讲解,已经详细讲解过原理,此处不再赘述。
(1)通道绑定相关设置
Use Channel Bonding:使用唯一字符序列启用接收器通道绑定逻辑。识别后,允许在接收缓冲器中添加或删除这些字符,以对多个数据收发器进行字节对齐。
Use Two Channel Bonding Sequences:激活可选的第二通道绑定序列,检测到任一序列都会触发通道绑定。
Sequence Max Skew:从下拉列表中选择通道绑定可以处理的最大字符倾斜。必须始终小于通道绑定序列之间最小距离的一半。
Sequence Length:从下拉列表中选择唯一通道绑定序列中的字符数。
本文只使用了一个收发器,所以不需要使用通道对齐。
(2)、时钟校准
Use Clock Correction:使用唯一字符序列使能接收器时钟校正逻辑。识别后,允许在接收通道的弹性buffer中添加或删除这些字符,以防止由于发送/接收时钟频率的微小差异而导致弹性buffer下溢或上溢。
PPM Offset:指示发送和接收时钟之间的PPM偏移。
Use Two Clock Correction Sequences:激活可选的第二时钟校正序列,检测到任一序列都会触发时钟校正。
Periodicity of the CC Sequence:指示在数据流中插入CC序列的间隔。
Sequence Length:从下拉列表中选择唯一时钟校正序列中的字符(子序列)数量。
本文设置两个字符用于时钟纠正,分别是K28.5的8’hBC和8’h50,当弹性buffer中数据过少时,可以复制8’hBC和8’h50这两个字符,存入弹性buffer,防止其下溢出。
至此GTX IP的配置就完成了,参数相对其他IP来说会比较多,但是经过前几节文章的讲解,对于常用参数应该还是比较容易理解,GTX可以自定义PHY功能,所以掌握这个IP至关重要。
最终IP配置结果如下所示,参考时钟使用156.25MHz,接收通道和发送通道的用户时钟信号频率均为250MHz。发送通道和接收通道都启用了buffer作为缓冲,同步数据,代价是延迟会比较大,约为几十个时钟周期。
关于GTX IP配置的讲解到此结束,参数说明参考PG168手册,该手册可以在xilinx官网获取,也可以在公众号后台回复“xilinx手册”(不包括引号)获取。GTP的时钟配置应该会有部分区别,其余配置应该差不多。
如果对文章内容理解有疑惑或者对代码不理解,可以在评论区或者后台留言,看到后均会回复!
如果本文对您有帮助,还请多多点赞👍、评论💬和收藏⭐!您的支持是我更新的最大动力!将持续更新工程!