随着需求的多样化, FPGA 的功能也进一步的增强。其中,高速 收发器 从本来是只有高端FPGA才有的模块,已经变为相对普及的甚至必备的功能模块。而10G的线速率也从多年前的少数FPGA支持,变为目前的主流线速率。
由于FPGA的最大特点就是灵活,所以FPGA的高速收发器也拥有非常繁琐的配置选项,目的就是为了灵活地支持各种传输协议。之所以称之为繁琐,就是灵活性带来的弊端,即想要理清楚诸多的功能,就需要非常多时间在高速收发器上。
不过对于大部分的用户来说,需要使用高速收发器的接口通常是相对固定的,这样功能也就相对固定。这样就没有必要理解高速收发器全部的功能,只要理解需要使用的配置含义即可。这样可以快速进行尝试/测试,在尝试/测试过程中结合文档进行深入理解。这样比强行读完文档再动手实践,学习效果上有可能更好。所以Xilinx的高速收发器中默认就带了一些常用接口的配置,便于用户的学习/使用。
Xilinx 7系列FPGA芯片配置四种高速收发器,按照支持的最高线速率从低到高排列分别是GTP,GTX,GTH,GTZ。
GTP由于结构问题,使用起来灵活性较差,同时支持的最高线速率也只有6.x个G。GTZ属于7系列中最高端的高速收发器,集成GTZ的FPGA很少,同时也是用了多die技术,物理上和FPGA主体是两个部分。对这两种GT,本文不做更多的介绍。
与GTX相比,GTH整体结构几乎一样,只是在个别细节有更多的配置或者更强大的性能。考虑到文档都是同一篇文档,所以本文以GTX为例。本文所有内容,除非特别注明,都同时适用于GTX和GTH。
对于高速收发器GTX来说,虽然可以通过IP中的默认配置来进行初步的学习,而且有一定基础之后,可以手动配置GTX参数。但是如果不充分理解GTX的各个功能,最常见的被卡住的地方,就是不能/不知道如何进行正确的问题定位。所以文本的主题就是介绍一些常用的调试手段和步骤,便于使用者初步定位问题。即使无法定位,将这些调试工作详细记录并提交给FAE,也会有很大的帮助。
这里需要说明,GTX的问题通常都不简单,调试工作更是繁琐。而且很可能无功而返,最终还是要请FAE/技术支持来帮忙解决。但是这不代表可以将所有的工作都推给FAE/技术支持。进行一些初步的调试,并将结果反馈给FAE/技术支持,可以让专家更快的理解问题的现象并给出进一步的建议,而无需从最基础的工作开始一步一步检查。
第一步,在配置好的GTX的IP基础上,生成GTX的example design,并做仿真。
首先,Vivado工具的一个优点就是几乎所有IP都会提供一个基于IP配置的example design,对于GTX这样复杂的IP,这个example design是一个完成的工程,提供了多种用途,是一个非常好用的学习/调试工具。第一步先使用这个工程进行仿真,这样便于理解GTX的具体操作,并与实际结果做对比。
这里强调一下,并不是针对GTX的,对于任何FPGA的设计,都推荐尽量进行充分的仿真。
第二步,直接使用GTX的example design作为工程,抓一下rx fsm reset done和rx status状态机。如果有条件,可以使用8b10b在真实环境中进行测试。
说明一下8b10b的作用。8b10b在这里的作用是用于查看是否有8b10b的错误,如果出现8b10b的错误则表明有很高的概率是硬件有问题,可以重点查看 PCB 走线质量、 时钟 /电源等地方。如果没有使用8b10b的环境(连测试环境都无法使用8b10b),那么问题会棘手一些。
rx fsm reset done是接收端任务完成的标记,通常这个信号拉高表示接收端没有问题,通常就代表GTX可以正常工作。如果无法稳定拉高,则查看rx status的变化,看看是哪一步(或者哪几步)导致无法拉高rx fsm reset done。
至于这两个信号的出处。example design中提供了一个复位状态机。默认是不包含在IP Core中,放在example design中。最终的设计,建议使用example design作为一个整体,而不是只使用IP Core。
第三步,使用ibert工具测试一下误码率,并查看一下眼图。
如果example design能够正常工作了,那么除非GTX IP设置有问题,通常来说,GTX最基本的应用是没问题的,很大可能是GT的上层控制有问题。如果example design测试有问题,rx fsm reset done信号无法拉高,并有8b10b错误,下一步用ibert检查一下硬件 电路 是必要的。
在对端可以发送prbs的条件下(比如对端FPGA上运行的也是ibert),ibert可以测试误码率。通过误码率来查看一下链路质量是否有问题。
无论误码率测试是否可以进行,ibert都可以对接收端进行眼图的扫描。通过查看眼图的大小,可以初步判断链路的质量。
ibert是Xilinx针对FPGA的高速收发器提供的测试工具。通常在PCB完成之后就可以先用ibert对高速收发器的链路质量进行测试。另外,如果需要进行高低温测试,直接使用ibert也是一个不错的选择。
第四步,有条件的情况下进行外部环回测试。
FPGA使用高速收发器的时候,一个常见的场景就是使用外部线缆,比如光模块/ 光纤 ,或者同轴电缆等。这个时候是条件进行外部环回测试的。将example design进行外部环回测试,及同一个GTX的TX发出信号通过外部线缆返回到自己的RX端。如果这个测试结果是稳定的,表明GTX是可以正常工作的。
另外还有很多情况是无法进行外部环回测试的,比如收发器走线是固定在PCB上的,例如PCIE。这种情况下,如果是两个Xilinx的FPGA对接,可以考虑利用FPGA内部的远端环回进行测试。具体原理是待测GTX的TX发送数据,送往辅助的FPGA的GTX,辅助GTX从RX收到数据后直接送给TX发送出去,待测GTX的RX端接收到辅助GTX TX端发来的数据,完成环回。相当于利用辅助GTX来实现一个外部环回。需要注意的是,远端环回的使用是由条件限制的,具体请参考7系列GTX/GTH的手册UG476。
外部环回测试,如果example design的结果不理想,可以用ibert再进行一次测试,有条件的情况下误码率和眼图都查看一下。可以作为对比分析的数据。
第五步,在有条件的情况下,使用高速 示波器 ,查看FPGA GTX RX接收端 PI N上的眼图。
这一步的条件限制最大。高速示波器的价格昂贵,而且使用复杂。同时由于FPGA多为BGA封装,GTX的RX PIN很可能无法使用示波器探头进行测试。所以很多用户是没有办法进行这一步的测试的。
至于GT内部的2D eye s can 眼图的使用,理论上是可以用来帮助调试的。但是实际上,当用户会使用2D eye scan的时候,通常也就不需要本文的一个初步调试的建议。所以本文针对的是初级用户,相对高级/复杂的2D eye scan在这里不做介绍。
下面更进一步分析一下第二到第五步的具体作用。
第二步的rx fsm reset done信号可以作为GTX正常工作的指示信号。如果example design在最终的使用/测试场景中可以稳定工作,该信号稳定为高,可以表示设计几乎没有问题。如果用户自己的设计出现问题,大概率是GTX代码集成时的问题,比如没有正确使用example design,或者,问题不来自GTX模块。另外,如果配置有不合适的地方,可以参考仿真,并参考第四步的测试。
这里要注意一下,example design中用自带数据源和接收数据进行比较验证,来判断数据是否正确。如果用户使用自己的数据源,可能会导致数据验证模块一直输出出错,从而导致rx复位状态机持续被复位。
这个问题可以通过查看rx status来判断。另外其他的可能性也都会反映在rx status信号的变化中。所以rx status是个很重要的调试信号。
至于8b10b,最大的优势就是自带错误检查。如果出现8b10b的错误,则很大概率是链路有问题。
在第二步的基础上用ibert进行测试,原因是除了可以测试误码率和眼图之外(其实这两个功能自己设计逻辑也可以实现),ibert将GTX的所有参数都拉了出来,可以进行任意的配置。如果第一步的发现是怀疑硬件链路有问题,利用ibert检查一下链路是个不错的方法,并且可以通过调整部分GTX的参数来尝试降低误码率,扩大眼图。另外,眼图的大小也是有参考意义的。
这里需要注意一下,ibert和GTX example design是完全不一样的设计。ibert只是为了便于测试,GTX的很多参数值与实际使用中的值不一样。所以相比ibert,GTX example design更接近最后实现的结果。
当说到大概率是硬件链路的问题时候,这个结论对调试可能没什么帮助。所以这个时候需要进行环回测试。如果可以进行外部环回测试,发现环回测试正常,那么可能是某一端的端接部分有问题,或者两边GTX参考时钟频偏比较大。如果外部环回测试无法正常通过检查,那么可以打开GTX的近端PMA环回进行测试(不要用近端PCS环回进行测试)。如果近端PMA环回测试正常,可以认为是外部链路质量有问题(比如光模块/光纤有问题),如果近端PMA环回测试不正常,大概率是时钟/电源有问题。
环回测试可以做两次,一次用GTX example design,一次用ibert,来对比结果。类似光纤有问题这样的原因两次测试都能得出一样的结果。如果结果符合预期,那么就离真正的问题原因更进一步了。
眼图的测量是判断链路质量的最终依据。通过使用外部示波器和ibert来测量眼图,具体数据可以交给FAE,可以得知是否符合GTX的要求(原厂应该有相关数据,但是似乎没有开放给普通用户查看)。
示波器和ibert测试的眼图,是不一样的。通常用示波器,测量FPGA GTX RX pin脚出的眼图,称之为远端眼图。用ibert测量出来的原图,称之为近端眼图。
远近端眼图是按信号是否经过RX PMA来区分的。远端眼图是没有经过RX PMA的信号,近端眼图是通过RX PMA的信号。
出自UG476
RX PMA的对接收到的信号有一定的处理功能(上图中RX EQ、DFE)。处理后的信号质量会变好。所以通常经过RX PMA的信号会比Pin脚处更好,导致近端眼图好于远端眼图。
具体的调试步骤,虽然总结成5个步骤,但是如果不熟悉,实现起来还是很麻烦的。不过由于GTX的问题通常都比较难以定位,所以这些测试一方面有很多参考价值,另一方面也加强了对GTX的理解。在研发过程中,提前进行相关的测试,可以排查很多问题,便于项目的按计划进行。