问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

Vivado设计实现报错"The design is empty"的解决方案

创作时间:
作者:
@小白创作中心

Vivado设计实现报错"The design is empty"的解决方案

引用
CSDN
1.
https://m.blog.csdn.net/weixin_45810064/article/details/139753103

在使用Vivado进行FPGA设计时,有时会遇到错误[Place 30-494] "The design is empty"。这个问题通常发生在设计实现阶段,Vivado认为没有输出端口,因此报错。本文将详细探讨这个问题的原因和解决方案。

问题分析

在查询类似帖子时,我发现这一问题是由于在设计实现时Vivado认为没有输出端口所以报错。于是在.v文件中我添加了一个随意的端口,并且在.xdc文件中为它分配了管脚:

这样做虽然可以让设计实现的过程顺利进行,但是会发现在summary中,设计实现的资源量与分析综合的资源量有较大差距,在设计实现的资源量表格中几乎无资源占用(我的工程中甚至只占用了一个IO口),并且时序报告中显示NA,这显然是不正确的。

经过排查,这一报错在我的工程中出现的原因是我的顶层文件中有多个内部输出没有分配输出端口,所以在设计实现时Vivado才会报错告诉我需要有输出端口。用上述做法固然能解决报错,但设计实现时却会因为内部输出没有输出端口而被优化掉,这解释了为什么设计实现后出现结果异常。

解决方案

针对这种问题,有两种解决方法:

  1. 老老实实把每个内部输出分配一个输出端口(这里的内部输出指的是从一个例化模块输出而不再输入到其他模块的输出)。

  2. 在我们不知道分配到哪个管脚合适,只是想看设计报告时,可以通过对内部输出信号添加“keep true”的方式,阻止它被视为多余输出导致整个模块被优化掉的情况,如下所示:

这样就能正常进行设计实现,这是我在出现[Place 30-494]错误时我的工程存在的问题与我的解决办法,遇到这一报错可以检查一下代码中是否有被Vivado视为多余的输出端口并为它添加一些处理。

另外,虽然使用上述方案可以通过implementation,但是大概率布局布线后的结果仍然有问题。在仅采用keep true 的方法时,布局布线后的结果会发现占用资源量很少,打开schematic发现布线后的结构如图所示,可以看出几个主要功能模块都没有分配时钟资源,这是因为虽然我们人为指定了线网不允许优化,但是布局布线时相关模块的输出并没有实际作用,所以模块被优化掉了。

进一步优化

为了完整计算实现功能需要占用的资源量,有两个改进策略:

  1. 为输出信号安排输出端口,并在约束文件中为其分配管脚,这对一些验证性工作来说有些没必要,因为很可能端口不够用。

  2. 设置一个ILA核作为对输出信号的监测,这种方法在上版验证时很有用。我采用这一方案解决了布线后功能未实现的问题。

通过以上分析和解决方案,可以有效地解决Vivado在设计实现时出现的"The design is empty"错误,确保设计的完整性和正确性。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号