sanxin005

Xilinx FPGA测试光纤通信质量---IBERT

0
阅读(1487)

  欢迎各位朋友关注“郝旭帅电子设计团队”公众号,本公众号会定时更新相关技术类资料、软件等等,感兴趣的朋友可以浏览一下本公众号的其他“模块”,希望各位朋友都能在本公众号获得一些自己想要的“东西”。


       本篇主要讨论Xilinx FPGA测试光纤通信质量---IBERT。


       在FPGA开发设计时,某些情况需要进行光纤通信。开发光纤通信的板卡上一般都会有一个类似于下图的“东西”。



       在它的旁边一般会标注“SFP”,SFP (Small Form Pluggable) 可以简单理解为GBIC(Gigabit Interface Converter的缩写)升级版本,是将千兆位电信号转换为光信号的接口器件,可以热插拔使用。GBIC是一种符合国际标准的可互换产品。采用GBIC接口设计的千兆位交换机由于互换灵活,在市场上占有较大的市场份额。


       其实他只是一个四面漏风的筒子,里面主要是连接了几个银角,这些银角连接到了FPGA上面。




       内部有20个管脚,和FPGA相连接的一般只有这么几个:18、19为一对发送数据的差分数据线;3为发送禁止信号(发送时需要给低电平,有的设计者在设计板卡时,可能直接将此信号接地,那么FPGA也就无需控制了);12、13为一对接收数据的差分数据线;8为外部输入光功率低信号(如果光功率低,数据一般出错,我们分析数据也会知道,所以一般不使用这个信号);


       发送数据的差分数据线和接收数据的差分数据线会接到FPGA的高速bank(A735T的216bank)上面。发送禁止信号一般会接到一个普通的io bank上面。









       我手里的板卡上面有两个光口,用的就是tx0(px0)和tx1(px1)这两个通道。


       这个一个四面漏风的筒子,FPGA也仅仅只能够发出电信号,他是如何变为光信号的呢?


       此时我们需要一个光电转换模块(有很多的速度类型和封装类型);



       它可以插到板卡上面那个“筒子”里面,他的作用就是将FPGA发出的电信号转为光信号,将接收到光信号转换为电信号。然后将下面的黑色塞子拔掉,插上光纤即可。在进行开发设计时,发送端的发送要和接收端的接收进行链接。




       我手里的板卡有两路光通信接口,我是直接用光纤做了一个链接。如果开发项目时,可以用两块板卡进行测试。



       硬件链接好后,不建议直接对用应用进行开发,建议首先进行光链路和底层高速收发器的测试,别到时候因为硬件的问题而耽误了开发的进度。


    Xilinx给我们提供了一个ip----IBERT。


    IBERT (Integrated Bit ErrorRatio Tester,集成误比特率测试工具),是Xilinx提供用于调试FPGA高速串行接口比特误码率性能的工具,最常用在GT 高速串行收发器测试 。

   

    其实就是发送端发送一些固定的随机值,观测接收端能否接收到。根据接收到错误和正确的数据的个数给出一个误码率,也可以绘制出一个眼图,供给设计者评判通信链路的情况。


     下面给出ibert这个ip的使用过程(以我手里的板卡为例:A7 35T)。


      1. 利用vivado建立一个新工程,工程名字:a7_35t_ibert_test

      2. 打开ip catalog,搜索IBERT,双击打开 IBERT 7 Series GTP。



    3. 选择对应的线速度和参考时钟(其他保持默认)。









    LineRate:线速率,也就是我们准备光纤上跑的线速度,这里输入5(根据自己的需求和FPGA支持选择一个)。







Refclk:参考时钟,选择125.00(这个要看自己的板卡在设计的时候,选择的是那一个晶振);










       Quad Count:四通道数量,作者的A7的FPGA只有一个四通道。


       4. 选择协议和参考时钟信息(其他保持默认)。




       Protocol Selected:协议选择为Custom,自定制即可。Refclk:选择自己板卡对应连接的通道(在3中,说明为125M以及连接在MGTREFCLK1上面)。

    5. 配置运行时钟




     选择由GTP产生的,这样就不需要外部收入了,也相对比较简单(其他保持默认)。


    6. 到此配置完毕,点击OK即可,生成对应的ip。
    7. 右击生成的ip,选择Open IP Example Design...




   8. 点击OK即可。此时会生成另外一个vivado工程,我们切换到那个界面。




    9. 打开顶层文件,并在端口中加上两个(作者板卡有两个SFP接口)输出sfp_tx_disable(作者的板卡的SFP输出接口需要拉低此端口,如果自己板卡上面的tx_disable直接接地了,那就不需要设置了,直接调过9、10步骤),并且加上输出逻辑为0;




       注意添加端口后,原来最后一个,就不是最后一个记得加逗号。


       10. 分配管脚和电平标准,保存后,生成bit流,连接好光纤,做好下板的准备,并且下板。


       注:如果是两个板卡通信,记得两个板卡都需要做对应的操作。
       这个要看自己板卡的设计,选择对应的io和电平标准。





       11. 下板后,可以看到如下界面。





       可以看到PLL已经锁定;通道0和通道1正在通信,并且检测到线速度为5G(与我们设计的相同)。

       12. 选择创建links。



       13. 选择正确的发送和接收,点击OK。


       作者这里是0通道的发送给1通道的接收,1通道的发送给0通道的接收。(其他设计可以按照自己的选择,我这边选择0发1收)。






       14. 刚刚打开可能会有误码,可以复位一下看看,如果还是有误码的话,怀疑线路有一定的问题。


       没有复位之前:




       复位之后:




       等一段时间,错误率一直为0;


       15. 观测眼图,右击Link 0 ,选择Create Scan,然后点击OK。






       根据眼图的一些信息,可以评估通信线路的好坏。



       16. 如果是两个板卡(通道)进行通信时,我们也可以利用GTP自带的一些回环模式进行测试。





       上图中是A、B两个端口在互相通信,我们站在A端口的角度去考虑。

       如果A端口的tx PCS发送给A端口RX PCS,称为近端PCS回环。

       如果A端口的TX PMA发送给A端口RX PMA,称为近端PMA回环。

       如果B端口的RX PMA发送给B端口的TX PMA,称为远端PMA回环。

       如果B端口的RX PCS发送给B端口的TX PCS,称为远端PCS回环。


       在这里,可以将B设置为远端PCS回环,那么A端就是自发自收,带着所有的双方收发器和通信线路。


       创建两个link,一个A发A收,一个B发B收的link,然后将B设置为远端PCS回环。复位A端口,观测错误率。



注:使劲儿向后拉,否则显示不出来。