在(常规)软件中,我曾在使用GCC选项 - 墙来显示所有警告的公司。然后需要处理他们。对于Verilog或VHDL中的非平凡的FPGA/ASIC设计,通常会有许多警告。我应该担心所有这些吗?您有什么具体的建议吗?我的流程主要用于FPGA(尤其是Altera和Xilinx),但是我认为相同的规则将适用于ASIC设计,可能更可能是由于设计后无法更改设计。

更新4/29/2010:我最初是在考虑合成和P&R(位置和路线)警告,但模拟警告也有效。

有帮助吗?

解决方案

这是我来自ASIC世界的观点(99%Verilog,1%VHDL)。

我们努力消除从日志文件中的所有警告,因为通常,我们将警告解释为工具告诉我们我们不应该期望可预测的结果。

由于有许多类型的工具可以生成警告(仿真/调试器/linter/ninthesis/equielce-checking等),我将重点关注此讨论 模拟器编译器 警告。

我们将警告分析并将其分为两个主要组:我们认为不会影响模拟结果,而其他可能影响结果的结果。首先,我们使用工具的选项来明确启用尽可能多的警告。对于第一组,我们使用工具的选项有选择地禁用这些警告消息。对于第二组,我们修复了Verilog源代码以消除警告,然后将警告提升为错误。如果以后在这些类别中引入任何警告,我们会强迫自己在允许模拟之前对其进行修复。

上述方法的一个例外是第三方IP,我们不允许我们修改其Verilog代码。

该方法适用于RTL模拟,但是当我们使用反向注释的SDF运行门模拟时,它会变得更加困难。根本没有足够的时间来分析和消除数百万个警告。我们能做的最好的方法是使用脚本(PERL)来解析日志文件并对警告进行分类。

总而言之,我们尽力消除警告,但这并不总是实用的。

其他提示

这是我要做的,供参考。我从工具中检查所有日志文件。

对于Altera Quartus II,包括地图,合并和合并报告。我还打开设计规则检查(DRC)选项并检查该文件。对于一些易于修复的消息,例如,实例化中缺少端口或不正确的恒定宽度,我将其修复。我看的其他。对于内核中的那些,例如宽度不匹配,因为我不使用完整的输出故意,我将其标记为在.srf文件中被抑制。我仅抑制特定消息,而不是所有“类似消息”,因为现在或将来可能会有其他消息,这是问题。

我编写了一个脚本,该脚本将一组Regexps应用于日志文件中,以扔掉我“知道可以的”的线条。它有帮助,但是您必须对Regexps有点谨慎 - JWZ对它们说了什么:)

我能想到的最重要的原因是模拟合成不匹配。综合工具可以进行很多优化(正如他们应该应应有的那样),如果您在设计中留下漏洞,则需要麻烦。有关合成标准的详细信息,请参阅IEEE 1364.1-2002。

无需删除所有警告,但应审查所有警告。为了使大型设计成为可能,可以通过其类型或ID来抑制某些警告。

例如,某些综合工具如果verilog发出警告 parameter 定义,在模块实例化期间未分配值。对我来说,此警告只是使用的建议 localparam. 。通过其ID抑制它是一个好主意(例如LINT-01)。

在某些情况下,我想查看警告,不要抑制它们。例如,每当我通过约束定义虚拟时钟时,我的工具就会发出警告。警告并不意味着有问题,但我可以遇到失踪 source 不打算虚拟的时钟。

有时不存在警告,指出了一个问题。例如,如果我更改应用程序变量,则应有警告。

有太多情况。有时警告是不可避免的。有时,有警告能够审查一些关键内容是很高兴的。如果设计师知道他/她做什么,那就没问题了。

预计会有一些警告,如果您没有发出警告,就会有问题。

例如,如果您真的真的想要一个闩锁,但是没有警告要推断闩锁,那么您的合成可能不会制作您的意图。

所以不,您并不总是想“处理”所有警告。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top