IC验证覆盖率学习

文章目录

学习历程

最近在公司接触一个项目,目前testcase已经做完了,在跑代码覆盖率的时候发现覆盖率有些低基本在80%左右,TOGGLE在60%左右,正好趁着这个机会好好学习一下覆盖率的一些知识,也分享给大家,有不对的地方希望大家指正出来。

代码覆盖率

代码覆盖率包括行覆盖率(line),翻转覆盖率(toggle),有限状态机覆盖率(FSM),条件覆盖率(condition),分支覆盖率(branch)。个人感觉白皮书上说的路径覆盖率就是分支覆盖率。上面五个属于代码覆盖率是可以由软件直接生成(本人用的是DVE),不需要添加任何额外的HDL代码,工具会自动帮你完成代码覆盖率的统计。
这里总结一下VCS生成代码覆盖率一些常用的命令:

urg -full64 -dir $(PATH)*.vdb -dbname merged.vdb

urg:可产生覆盖率报告,会将目录下生成的所有vdb文件整合成为一个merged.vdb文件

dve -full64 -cov -covdir $(PATH)/merged.vdb

此命令是将整合后的merged.vdb文件用DVE打开以查看详细覆盖率情况

-cm line+cond+branch+tgl+fsm+assert

-cm选项可控制是否产生上述几种coverage,可以不都添加

-cm_dir $(PATH)

vcs编译完毕后,默认会在编译目录,生成simv.vdb文件夹。该文件夹里面,包含了coverage model。可以通过-cm_dir选项,更改默认的coverage model生成的目录。

-cm_name $(PATH)

对于每一个test,生成的coverage数据,默认是在simv.vdb/snps/coverage/db/testdata/test目录下默认coverage数据,是在test目录下,可以通过-cm_name选项,修改默认的test目录。上述代码会生成在PATH路径下。个人认为设置完
-cm_dir后就不需设置-cm_name了。

功能覆盖率

代码覆盖率是由软件自动生成并不需要手动添加代码而功能覆盖率都需要人为添加覆盖组和覆盖点。

覆盖组与覆盖点

覆盖组与类相似一次定义后可进行多次实例化,且必须实例化后才能生效,它含有覆盖点,交叉覆盖点。
一个覆盖组包含一个或多个覆盖点,全都在同一时间采集。覆盖组可以在程序,模块和类里定义。
覆盖组的两个主要部分是采样的数据和数据被采样的时刻。
覆盖率的收集可以直接使用sample函数来完成,如下代码所示

covergroup   fifo_init
	WD_init_finish : coverpoint	Datacode_vif.init_finish;
endgroup
fifo_init cov_inst = new();
cov_inst.sample();          //sample函数收集覆盖率
	

断言覆盖率

个人认为断言覆盖率是一种面向控制的覆盖率,用来检查行为序列是否已经发生,由于这种覆盖率本人接触较少在此就不做过多介绍,后续接触到会更新。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值