逸江南

spartan6 SERDES中原语“BUFPLL”的使用问题

0
阅读(4536)

最近使用Spartan6 的serdes接口,调试一个传输数据的小项目,需求如下:

IV@_Q%ESW1C$OOB3AO`5~8B.png

如图中所示,把板卡A中的数据,通过一对差分线,传输给另一个板卡B,要求数据能完全传输正确,不能有误码、不能丢失数据。经过一个多星期的努力,终于搞定了。在没有随路时钟的条件下,通过使用数据编码和解码(8B/10B编解码)、动态相位调整、循环冗余检测(CRC)码生成器、CRC检测器、数据字节对齐功能、同步丢失状态机等技术,在FPGA中使用纯逻辑,完成了该功能。

在开发过程中,用到了原语“BUFPLL”,这个玩意第一次用到,一些注意事项写出来,供大家参考一下,有不对的,欢迎指正哈。

QQ图片20171122201557.png

该原语如图中箭头所指的地方。

由图中的连接关系可知,经PLL产生的时钟,输入到BUFPLL时没有经过BUFG。如果经过了BUFG,程序编译不过去,有兴趣的同学可以试试。

设置PLL产生的时钟不经过BUFG,可参考下图中的步骤,在ISE的IP核中做一些设置:

QQ图片.png


当设置PLL的输出时钟经过BUFG时,PLL的时钟反馈控制信号会自动添加,如图中显示的“Automatic Control On Chip”。如果PLL输出的时钟没有经过BUFG,那么需要自己给PLL添加反馈信号,如图中显示的选项“User Controlled On-Chip”。

自己添加PLL的反馈信号,可参考如下:

QQ图片20171122202222.png

参考资料:1、xapp1064_Source Synchronous Serialization and Deserialization.pdf

2、时序分析约束——Xilinx时钟资源 & ISE时序分析器.pdf

3、AR# 61775 Vivado - Critical warning [Timing 38-1] DLL output pin(s) used on clock modifying cell clk_gen_i0clk_core_i0instmmcm_adv_inst without a feedback net CLKOUT0 CLKOUT1.pdf。

My QQ:2935270450 ,有疑问可以Q我哈!

PS:基于FPGA的视频编解码QQ群:623495899 ,有兴趣的可以进来交流学习哈。



Baidu
map