使用 Verilator 进行 Verilog Lint

问题

最近 发现vverilog代码的lint检查用vcs做的不是太好,而verilator的lint功能非常强大,甚至比vcs 还要好,当然也许是vcs lint设置不熟练?

解决

正好发现下面这个链接对verilator的lint说得非常详细,完全满足我的需求:

https://cloud.tencent.com/developer/article/2331867使用 Verilator 进行 Verilog Lint-腾讯云开发者社区-腾讯云 (tencent.com)

基本用法

verilator --lint-only -Wall -I../maths top.v
--lint-only- 告诉 Verilator 进行 lint 但不生成任何仿真输出
-Wall- 打开额外的风格检查
可以使用多个-I参数来包含多个目录。

黑匣子和空模块:

大多数设计依赖于没有源的供应商原语或 IP 核,例如使用 PLL 生成时钟。当尝试对引用供应商原语的模块进行 lint 处理时,
可以通过为原语创建一个空模块来解决这个问题。空模块包含 IO,但不包含任何逻辑。

Linting Waivers

如果需要对较大的设计或使用第三方源的设计消除 linter 警告,那么/* verilator lint_off */注释可能不行。从 Verilator 4.028 开始,可以创建Waivers来处理警告,而无需触及源代码。要了解更多信息,请参阅 Stefan Wallentowitz 的帖子Verilator Waivers(https://wallento.cs.hm.edu/post/20200612-verilator-waivers/)。

Linting Shell Script

如果有许多顶级模块和/或包含目录,可以使用 Makefile 或简单的 shell 脚本自动检查。

以下 shell 脚本 lint 与该脚本位于同一目录中的所有顶级模块:

#!/bin/sh

DIR=`dirname $0`

echo "## Linting top modules in ${DIR}"
for f in ${DIR}/top_*\.*v; do
    echo "##   Checking ${f}";
    verilator --lint-only -Wall -I${DIR} -I${DIR}/../common $f;
done
可以调整-I参数以适合自己的设置。top_*.*v捕获扩展名为 .v 和 .sv 的文件。

注意:

1 为了消除不必要的warning,编译时带上下面这些选项比较好:

SIMULATOR_OPT := -x-assign 0 -Wno-fatal  -Wno-UNOPTFLAT -Wno-IMPLICITSTATIC -Wno-CMPCONST -Wno-MULTIDRIVEN -Wno-UNPACKED --timing -CFLAGS -fcoroutines 

2 verilator移动要用5.024之类的高版本,越来越好用,越来越稳定。

遗留问题

如何提高verilator的仿真速度?这个还是要比vcs慢很多,尤其是对大设计。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值