vcs验证_VCS入门教程(三)

6d5e1900110f3898c5521e07635d9fc4.png

本文授权转发自知乎用户 橘子汽水

链接:https://www.zhihu.com/people/xing-qi-55-65/posts

一、前言

本文主要介绍使用VCS查看verilog代码覆盖率的相关问题。

二、代码覆盖率

1.在进行功能验证时,给设计添加激励信号,查看仿真结果,需要考虑覆盖率的问题。覆盖率分为代码覆盖率(code coverage)和功能覆盖率(function coverage)。功能覆盖率就是检查设计的功能是否完善,需要考虑很多不同的情况,是使用System verilog的重点内容。代码覆盖率是检查代码是否存在冗余,检查所有的代码是否都已经执行,状态机所有的状态是否都有到达,检查 if else 和 case 条件语句的条件是否都有使用。防止一些不必要的代码浪费芯片面积,毕竟面积就意味着钱。我们这里只讨论代码覆盖率。

对于我们写的RTL代码,通常考虑以下覆盖率:

Line coverage :行覆盖率,检查语句是否被执行。

Toggle coverage:检查电路的每个节点是否都有 0 -> 1 和 1 -> 0 的跳变。这种检查通常会使仿真变慢很多。

conditional coverage:检查条件语句是否覆盖了所有的情况。比如有时写了if 语句,没有写else语句。

FSM coverage: 状态机覆盖率,检查状态机所有的状态是否都到达过。

path coverage:在always语句块和initial语句块中,有时会使用 if ... else 和 case 语句,在电路结构上便会产生一系列的数据路径。检查这些路径的覆盖情况。

2.VCS在统计代码覆盖率的过程中,我们通常在编译和仿真命令上添加对应的开关选项,生成一个 .vdb文件记录覆盖率的情况。再使用dve打开该文件查看。下面介绍一些选项。

-cm :打开对应类型的覆盖率,例如 -cm cond+tgl+lin+fsm+path为统计上述所有覆盖率。可根据需要增减。

-cm_name:设置记录有覆盖率信息文件的名字。

-cm_dir:指定生成文件的目录。

以上三个选项编译仿真过程都要加上。下面的选项在编译过程加上。

-cm_log + filename.log:.log文件记录仿真过程中统计覆盖率的信息。用的比较少。

-cm_nocasedef: 在统计case语句的条件覆盖率时,不考虑default条件未达到的情况。

-cm_hier vcs_cov.cfg:通过.cfg文件(名字随便取)选择要查看覆盖率的模块/文件。

ebc9cff815f5e59e7073b02ee2c54084.png
图 1

“+”代表查看,“-”代表不查看。tree代表查看某个模块调用的子模块。

在文件内部,可以使用特殊注释来打开和关闭代码覆盖率的统计:

//VCS coverage on 统计代码覆盖率

.......

//VCS coverage off 不统计代码覆盖率

在上述注释之间的内容,统计覆盖率。其余地方不统计。

3.

修改VCS入门教程(二)中的makefile,新增统计代码覆盖率的内容

.PHONY

三、示例

设计一个选择器

92671fc60f0c64c0120ad7453ee44f0d.png
图 2

在测试激励中,故意使 a = 1'b1 b = 1'b1 c = 1'b0 的情况不出现。使其覆盖率发生遗漏。

2658292aec3c062ced5f305bbbf323ae.png
图 3

设计一个状态机

d14b0bb5b7fc27c86f0cbb3c492958e1.png
图 4

状态机存在 2'd0 -> 2'd1 的跳变,而 2'd1 -> 2'd0 的跳变没有发生过。

使用 make com 编译,make sim 仿真,make cov 查看代码覆盖率。make cov运行之后,dve界面打开的如下

330514723ebcb20d5c9c9dcc1aac1935.png
图 5

单击箭头1处加号,再双击箭头2处的U1,查看设计的代码覆盖率。

24d043cd7838f62264231d7360af6ba2.png
图 6

行覆盖率,第25行未执行过。

2c44a4ccfce8e66628882be8abc4f07c.png
图 7

Toggle coverage:大量节点都没有 0 -> 1 和 1 -> 0 两种跳变

3666ff53a86f13275dad9014219a727a.png
图 8

FSM coverage :2'd1 -> 2'd0 的转换没有发生过。

condition 和 Branch(Path) 的覆盖率可自行查看。

四、结束语

本文主要介绍代码覆盖率的内容,对测试完整性来讲较为重要,通过一个小例子讲述了整个流程,具体使用时还要具体问题具体分析。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值