前文讲解了GTX的时钟及收发数据通道的组成,之后讲解了眼图、加重、均衡等原理及原因,本文通过xilinx提供的IBERT IP完成实际工程的眼图扫描,确定加重和幅值调节的参数。
1、回环模式
在此之前,需要了解一下GTX的回环模式。如果板卡有两个光口,可以通过光纤把两个光口连接进行测试,如果只有一个光口,通过GTX的回环模式也可以完成测试。
回环模式的链路如下图所示,左侧是FPGA的一个GTX通道,右侧可以是其余板卡的一个高速收发器通道,中间使用光纤连接。
信号可以通过4条路径回环,路径1是经过FPGA内部PCS之后直接回环到接收端的PCS。路径2是经过FPGA发送端的PCS和PMA之后,直接环回到接收端的PMA。
路径3是经过其他板卡的高速收发器通道接收端的PMA后环回到发送端的PMA,然后输出给FPGA的接收通道。
路径4的原理与路径3类似,只不过经过了PCS转换。下图是GTX中对应的三条回环路径,红色路径对应上图路径2,蓝色路径对应上图路径3,紫色路径对应上图路径4,路径1在下图中没有体现。
其中路径1和路径2在自身的GTX中完成回环,被称为近端回环。而路径3和路径4在另一个GTX中回环,回环的节点相对于发送端的距离较远,被称为远端回环。
在GTX IP或者IBERT IP中,都可以通过信号的取值来更改回环模式,在GTX IP中勾选LOOPBACK,在生成IP后,会提供给用户一个gt0_loopback_in信号,用户修改回环模式。
进入和退出近端PMA回环后需要复位GTX的接收通道。要使近端PCS回送正常工作,必须使能接收通道的弹性buffer并选择接收通道恢复时钟作为XCLK的时钟源(RX_XCLK_SEL设置为RXREC)。
在近端PCS回送中,RX XCLK域由TX PMA并行时钟(TX XCLK)提供时钟。
回环模式的设置如下表示所示,在光口的测试中,没有光纤时使用较多的是近端PMA回环,有光纤时,可以使用远端PCS进行测试。
LOOPBACK取值 | 回环模式 |
---|---|
3’b000 | 正常工作模式 |
3’b001 | 近端PCS回环 |
3’b010 | 近端PMA回环 |
3’b100 | 远端PMA回环 |
3’b110 | 远端PCS回环 |
其余取值 | 保留 |
2、IBERT IP配置
GTX IP自身也支持眼图测试功能,但是在实际使用时,更多会通过IBERT IP来测试信道的眼图。眼图测试的数据也是通过GTX内部的PRBS发生器生成,在接收端通过PRBS检查器接收数据。
关于IBERT IP生成如下图所示,在vivado的IP catalog中搜索ibert即可。
对IBERT IP的Protocol Definition进行配置,本文对万兆网口进行测试,因此协议可以直接选择”tenGBASE-R”,然后线速率固定为10.3125Gbps。
上图中3处是设置GT参考时钟的频率,根据开发板提供给GT bank的时钟频率进行设置,我板卡的GT参考时钟是使用一个可编程晶振实现的,原理图如下所示。
可编程时钟信号通过左侧的SW6拨码开关调节输出差分时钟的频率,开发板默认使用的是156.25MHz时钟,因此图5的参考时钟选择156.25MHz。
因为线速率大于6.5Gbps,必须使用QPLL,因此图5中的4处勾选QPLL。
然后设置的Protocol Selection界面参数,如下图所示,Protocol Selected选择前面设置的tenGBASE-R/10.3125Gbps。
参考时钟的来源需要根据开发板上的差分时钟输入位置确定,我使用开发板上述可编程晶振接在REFCLK0引脚上,因此选择CLK0时钟引脚。
3是选择发送端用户时钟源,选择需要测试的通道即可。
之后配置Clock Settings界面,这是用于配置IP的系统时钟信号,该时钟信号可以来源于任何bank,为了方便,可以直接使用GTX的时钟通过BUFG输出作为IP的系统时钟。
如下图所示,系统时钟来源直接选择QUAD112 0,表示将高速收发器时钟作为IP系统时钟,2、3、4处就不需要用户配置时钟输入引脚和时钟频率了。
如果时钟其余时钟,需要配置时钟管脚以及时钟频率。
最后IP的参数汇总如下图所示,点击OK生成IP。
生成IP之后,在Hierarchy中选中生成的IP,然后鼠标右键点击Open Example Design…,打开示例工程,用户可以直接使用示例工程完成眼图测试。
注意如果发现Open Example Design…是灰色的,可能是因为vivado还在生成IP,右上角的圆圈还在旋转,等待IP生成之后再进行操作即可。
选择示例工程存放路径,如下图所示。
下图是光纤的原理图,需要注意该模块有一个失能引脚SFPB_TX_DIS,该引脚为高电平时,光纤模块无法工作,又由于该引脚通过4.7K电阻上拉到VCC,默认为高电平。因此在使用时,需要给该引脚提供低电平,才能正常工作。
打开示例工程的顶层文件,添加一个2位的失能信号,输出低电平,分别接到两个光模块的失能引脚。
之后综合示例工程,然后分配顶层模块信号的各个管脚,如下图所示,默认会使用一个bank的所有高速收发器,实际测试时,只有正常工作的才会显示眼图。
引脚信息保存后,直接生成bit流文件。
3、眼图扫描
当bit流生成完成后,通过光纤连接两个光纤,如下图所示。
将生成的bit流下载到FPGA中,然后再Hardware下可以查看QPLL的状态,如下图所示,1处显示QPLL已经锁定,如果显示没有锁定,请检查输入GT的参考时钟的频率与IP设置的频率是否一致,另外差分参考时钟信号的引脚是否分配正确。
2处显示两个高速收发器通道正在运行,而另外两个通道没有连接,这是因为板卡上另外两个通道用于PCIE,本次并没有使用这两个通道。
在Serial I/O Links选项卡下面可以查看正常收发数据各个通道的状态,如果想要查看其余通道,也可以点击+号添加没有连接的通道状态。
在1处可以查看两个通道的误码率,2处可以复位IP。
后续的参数和状态设置如下所示,1处可以设置发送通道和接收通道的伪随机序列。2处可以设置加重、幅值门限、DFE使能。3处可以复位发送、接收的通道,4处显示各个通道锁相环的状态,5处可以设置回环模式。
选中需要查看眼图的通道,然后鼠标右击,选择Create Scan…,如下图所示。
之后会弹出如下界面,可以对一些参数进行修改,一般保持默认即可。
扫描得到的眼图如下所示,眼睛张开的区域占33.33%,K7芯片线速率10.3125Gbps,能够达到这个效果也可以了。
综上所述,查看了一组加重、均衡参数对应的眼图结果,如果要得到眼图张开最大,误码率最低的参数该如何做呢,可以手动修改参数,然后复位,重复获取每组数据的眼图,软件还给用户提供了眼图扫描功能,如下所示。
选中需要扫描的通道,然后鼠标右键,点击Create Sweep…,如下图所示。
会弹出如下选项框,勾选每次扫描之后复位接收端,其余设置保持不变,如下图所示。
由于参数比较多,扫描的时间会比较久,在Serial I/O Scans选项卡中可以看到一些扫描完成的参数。
下图中每一项代表一组参数对应的眼图扫描结果,左侧红框中的参数就是加重和接收端幅值参数,右侧框中表示对应参数眼图扫描结果眼睛睁开区域的占比,该值越大,表示眼睛睁开越大,采集数据越准确。
双击上图中扫描的结果,便可以打开对应参数对应的眼图。双击UI占比为22.22%的一次扫描结果,得到如下所示眼图。
4、回环测试
如果用户没有光纤,可以使用回环模式,进行测试。前文讲到,我开发板有两个高速收发器通道用于PCIE通信,并没有接光纤,因此不能使用光纤连接,眼图扫描时显示的未连接,本文使用这两个通道来说明回环的使用吧。
首先需要将这两个通道加入Serial I/O Links界面,如下图所示,点击+号,然后点击Create Links…
如下图所示,首先选中需要添加的通道,然后点击+号即可。
下图将两个未连接的通道添加成功的截图,然后点击OK。
如下图所示,下面框中添加的两个通道没有建立连接,因为没有通道接收数据、也没有通道向他们发送数据。
然后将这两个通道回环模式分别设置为近端PCS回环和近端PMA回环,如下图所示,设置成功之后复位两个收发器的接收和发送通道。
之后再查看两个通道的状态,他们各自已经能够自己回环收发数据了,这种方式可以用来测试自己的代码是否正确。
之后选中近端PCS回环的通道,然后查看其眼图,结果如下所示,眼睛张开区域达到100%。这是因为PCS只是数字信号处理,GTX内部直接回环,并没有经过外部电路的损耗传输,因此可以达到100%。
下图是近端PMA回环的测试结果,因为再GTX中已经转换成串行的物理信号后进行的回环,接收端接收的数据有部分衰减,眼睛睁开达到77.78%。
有兴趣的可是试试远端回环,本文远端的回环与真实情况差不多,因为都经过了光纤和PCB的传输,本文不再赘述。
本文主要讲解眼图扫描IP的使用方式,以及回环模式的含义及作用。需要本文工程的可以在公众号后台回复“眼图扫描”(不包括引号)即可。
如果对文章内容理解有疑惑或者对代码不理解,可以在评论区或者后台留言,看到后均会回复!
如果本文对您有帮助,还请多多点赞👍、评论💬和收藏⭐!您的支持是我更新的最大动力!将持续更新工程!