提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
xilinx QSFP模块ip调试
前言
提示:这里可以添加本文要记录的大概内容:
xilinx fpga 提供了光通讯模块ip,例如qsfp,这个模块通讯速率可以达到40G/50Gbps,而且集成和使用相对比较简单,很多公司利用xilinx的qsfp来做高速通讯。
下面仅就使用过程中的一些坑及技巧记录一下,给各位高手做个参考。
一、ip配置注意事项
- 基本的配置比较简单,但是如果可能的话,尽量不要使用256bit的axis协议。一些FAE也和我反馈说256bit的比较难调试。
- axis协议:qsfp的axis协议有自己的特殊性,要仔细阅读文档,与网上的axis协议稍有差异。
- config端口:axi4-lite协议和普通配置口可选,我选的是axi4-lite协议,注意这里要仔细读一下rtl,aw/ar channel和w/r channel是相关的。这句话可能难以理解,看下rtl便知。
- fast sim:example的仿真一定要加上fast SIM选项,否则时间太久了。当然,正常使用的时候,等待的时间一定要足够。
- pipline 的输入,312.5M的时钟对fpga来说需求还是不小的,选pipline后对布线的压力会小很多,虽然不知道内部采用了多少级的pipline,如果不是很在乎面积的话,还是勾选上吧。
- dclk,有消息说两个光模块的dclk频率要一致才好,实测下来选多少MHz对通讯结果没啥影响。
- gt_ref_clk,曾经想通过pll来做这个时钟,后来发现用片内pll的话会报错。这个时钟要求200ppm精度(实际上开发板也是pll出来的,片外pll)
二、避坑指南
- reset后的时间要留够再传输数据,qsfp会用很长的时间来做initial和training,如果reset的时间不够,会导致很多误码的问题。我这里因为代码是自己写的,对initial的时间要求不太严格,就没有拉太多的stat信息,
- 仔细阅读example和debug指南,文档还是给了不少的信息可以参考的,我在受误码率困扰的时候仔细参考了xilinx的文档,还是有用的。
- 虚拟io和ila要好好使用。cdc要特别注意。
- 版本:不同版本的qsfp接口还是有很大差别的,要注意,比如dclk有要求50~250的,也有要求10 ~ 250的,要注意当前使用的版本。不同版本的vivado配置的ip也有差异,
三、调试,调试请参考文档,文档已经很详尽了,我只在文档之外啰嗦几句
- 光模块对温度敏感,如果你的误码率突变,可以考虑温度的影响
- 有时tx,rx单向好用,这个时候可以考虑是不是光模块的金手指受损或者腐蚀了。
- 参考时钟一定要准,不然会有很多意想不到的错误。
- 调试的时候光模块可以交换一下看看会不会有问题。
- qsfp其实是个以太网协议,但是做了简化,axis相当于一个dma接口。
- 如果误码率较高,要注意ila的使用。
- 如果误码率较高,要注意系统内的干扰。
- 如果误码率较高,要注意系统间的干扰,光电隔离还是比较彻底的。
- 最好有信得过的参考端来帮助调试,比如光口的网卡。我这次调试是一个support很不好的设备,吃了很多亏。
- 10.使用者要对tcp/ip协议有点了解会帮助分析。(或者说不容易受误导)
- 有眼图测试工具和ip,可以搜一下,我本来想使用的,后来发现问题搞定了就没用,仅记录下。
总结
qsfp这个ip还是比较容易使用的,但是个人认为文档对于初次使用的人员来说还不是很友好,上面罗里吧嗦的记录了一些我遇到的坑,希望能给后面使用的人一点点参考。
后记
有朋友遇到了QSFP数据误码的问题,一起撸了一遍
- 没有什么明显的问题,reset都做了sync,cdc也都是对的。
- 重新撸了下reset流程,发现时间不太对,这里说一下,文档里的reset时间是没有描述的,给他找了example,发现里面有个cvt_us函数,描述了每一个流程持续的时间。比较坑的一点,是文档中对这个时间没有任何详细解释。
- axis_wclk , axis_rclk的信号,要想被ila观测到,要注意cdc的问题,换句话说,如果没有仔细做cdc,ila观测到的数据,使用的时候要自己甄别一下,能间接放映问题的。
- **_user里的信号要处理好,理论上user的信号要和valid一起生效,虽然试过了不一起变化也问题不大(主要是ena),但是最好一起选通。
- 感觉128bit的比256bit的稳定,也可能是研究的不够,时间问题,调通128比较容易。