Vivado [Place 30-574] Poor placement for routing between an IO pin and BUFG

场景

Vivado版本: 2016.4

FPGA开发板:NEXYS 4 DDR

所在项目:31条单周期CPU

完整报错信息


解决问题思路

在过去的一次课程作业中实现了分频器,在这个实验当中,没有用到板子上的晶振,也就是E3管脚,但是又有时钟信号,所以需要在XDC文件中添加:


XXX是要作为clk的时钟的信号的端口名,报错信息里的get_nets reset_IBUF只是表述一种格式,不要生搬硬套。举例如下:

如果你的模块名是:


然后你并不打算使用板子上的晶振,比如你只是想通过按板子上的按钮或者开关来手动模拟时钟,那么在下板时就会报这个错。这时候在xdc文件中添加一句:


就可以生成比特流了。

故当这条报错跳出来的时候我很困惑,因为我的引脚确实是板子的晶振E3,难道Vivado不认为我这个是晶振?新建一个工程,移植过去,还是报错。Xillinx官方社区的大意也不太理解。

Github上有讨论:

https://github.com/hamsternz/ArtyEtherentTX/issues/1

但并没什么帮助。

然后找到这个:

https://wiki.nus.edu.sg/pages/viewpage.action?pageId=167808307

可能需要翻墙,截图如下:


大意是:连接到一个同步电路的时钟输入的信号不是同步的,换成人话就是:有一个信号作为了一个同步电路的时钟输入,但这个信号不是同步的信号,然后我还是不能理解。

在我的CPU里,比如Ram,我是采取写需要clk,读直接读的方法,并且读写隔离,如:


这样岂不是必然报错?

最后,我死马当活马医,还是添加了上述所说的set_property CLOCK_DEDICATED_ROUTE FALSE,最后下板出现了预期的结果!

结论

这条xdc语句更像C++里的一条屏蔽错误的宏定义一样。具体的错误原因还是没有找到。但无论你的管脚要不要用板子上的晶振,出了这条报错都暂且需要这么解决。

————————————————

版权声明:本文为CSDN博主「showhands5」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/weixin_43162818/article/details/89434960

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容