项目需要通过QSFP光纤实现互连,硬件采用Xilinx的KCU1500和Altera芯片Stratix_IV系列的EP4SGX230芯片互连,最初因为本人没有用过xilinx的Srio,本想偷个懒直接用过8B/10B编码实现互连,进行数据传输,实际也是可以实现的,但是测试发现存在 字节不对齐的问题,https://blog.csdn.net/jingjiankai5228/article/details/104213874
问题也得到解决,但是项目需要实现断开自动重连,测试发现无法实现自动重连,索性放弃8B/10B这种直接的方式(个人觉得也不是什么大问题,只是需要人为的进行握手控制),进行通过Srio来实现光纤互连通信。
设计之初发现一个讲解非常详细的博客,可以参考转载的博客。https://www.cnblogs.com/liujinggang/p/10091216.html,看完之后就基本上可以知道怎么回事了,调试过程中如有问题,还是需要研读pg007 ip 核手册,由于KCU1500默认是156.25的参考时钟,所以测试之初采用了6.25G的线速率。无奈Altera那边只能跑5G线速率,好在KCU1500还有一个可编程的时钟芯片。可以通过编程参数125M实现5G线速率通信:关于核的设置及参数参考上面的博客地址即可:这里贴一下自己的设置参数:
下一步就是再基础工程上进行修改:其实只要看完上面的博客,基本上知道了框架,说白了,就是要通过AXI总线实现一个HELLO包的打包即可:
需要修改的主要是生成请求事务的模块srio_request_gen.v和srio_response_gen.v,最终修改的代码框架如图:
最终模块接口如下:
可以发现最终就是一个类似RAM的接口:
设计上板初始化效果:
KCU1500刚好有两个光口,通过例化两个Srio测试将光纤拨出再擦回,也可实现自动重连:,下一步测试与Altera测试情况。