vivado在implementation时出现错误[Place 30-494] The design is empty的一个可能原因和解决方法

在查询类似帖子时我发现这一问题是由于在设计实现时vivado认为没有输出端口所以报错。

于是在.v文件中我添加了一个随意的端口,并且在.xdc文件中为它分配了管脚
在这里插入图片描述
在这里插入图片描述
这样做的确可以让设计实现的过程顺利进行,但是会发现在summary中,设计实现的资源量与分析综合的资源量有较大差距,在设计实现的资源量表格中几乎无资源占用(我的工程中甚至只占用了一个IO口),并且时序报告中显示NA,这显然是不正确的。

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

针对这种问题,有两种解决方法,一种是老老实实把每个内部输出分配一个输出端口(这里的内部输出指的是从一个例化模块输出而不再输入到其他模块的输出),另一种,在我们不知道分配到哪个管脚合适,只是想看设计报告时,可以通过对内部输出信号添加“keep true”的方式,阻止它被视为多余输出导致整个模块被优化掉的情况,如下所示:
在这里插入图片描述
这样就能正常进行设计实现,这是我在出现[Place 30-494]错误时我的工程存在的问题与我的解决办法,遇到这一报错可以检查一下代码中是否有被vivado视为多余的输出端口并为它添加一些处理。

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

在这里插入图片描述
为了完整计算实现功能需要占用的资源量,有两个改进策略:
一是为输出信号安排输出端口,并在约束文件中为其分配管脚,这对一些验证性工作来说有些没必要,因为很可能端口不够用
二是设置一个ila核作为对输出信号的监测,这种方法在上版验证时很有用。我采用这一方案解决了布线后功能未实现的问题

  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值