关于function coverage系统函数的问题
时间:10-02
整理:3721RD
点击:
IEEE1800-2012/section 19.9中给出了三个关于coverage的系统任务/函数:
>$set_coverage_db_name(filename)
>$load_coverage_db(filename)
>$get_coverage()
前两个函数从标准中给出的解释可以大致估计是为了计算MULTI-CASE情况下的总的覆盖率的,但是问题来了,没有例子!
我按照自己的猜测,做了下面的测试:
1.在第一个case中使用 $set_coverage_db_name来收集这个case的coverage样本数据;
:我自己在questasim下尝试了下第一个函数,获得了一个文件,但不是明文,并不能阅读。
2.在第二个case中使用$load_coverage_db来传送第一个case中获得的coverage样本数据;
3.最后在第二个case中使用$get_coverage来计算结果,看看是否如期望的那样包含了第一个case的coverage样本数据;
:通过第三个函数来计算,发现并没有如期望的那样包含第一个CASE的样本数据。
有没有同学知道前两个函数的用法?
>$set_coverage_db_name(filename)
>$load_coverage_db(filename)
>$get_coverage()
前两个函数从标准中给出的解释可以大致估计是为了计算MULTI-CASE情况下的总的覆盖率的,但是问题来了,没有例子!
我按照自己的猜测,做了下面的测试:
1.在第一个case中使用 $set_coverage_db_name来收集这个case的coverage样本数据;
:我自己在questasim下尝试了下第一个函数,获得了一个文件,但不是明文,并不能阅读。
- initial begin
- $set_coverage_db_name("./coverage.log");
- end
2.在第二个case中使用$load_coverage_db来传送第一个case中获得的coverage样本数据;
- initial begin
- $load_coverage_db("./coverage.log");
- end
3.最后在第二个case中使用$get_coverage来计算结果,看看是否如期望的那样包含了第一个case的coverage样本数据;
:通过第三个函数来计算,发现并没有如期望的那样包含第一个CASE的样本数据。
有没有同学知道前两个函数的用法?
经过两天的调试,终于解决了这个问题,为了避免大家走同样的弯路,在此分享:基于(questasim10.2c)
1.这两个函数必须在所有的CG=new()出现之后再执行,不能简单的写在TB的顶层;
:UVM 可以写在base_test的 build_phase/connect_phase中;
2.CG中 必须使用 option.per_instance=1;进行例化;
3.修改modelsim.ini;
:解除注释 CvgZWNoCollect = 1,作用是option.weight=0的CP/CROSS不会被$get_coverage计算,UG上说 可以在vsim 中使用-cvgzwnocollect达到同样的效果,但是我使用这个命令会报错,不清楚原因,有知道的同学可以告知,谢谢;
:解除注释 UCDBFileName = vsim.ucdb,作用是系统在仿真完成之后($finish之后)会自动执行coverage save指令 完成 保存当前的coverage信息到vsim.ucdb文件中,同样有命令可以晚上这个工作;(不再需要$set_coverage_db_name函数)
这里的vsim.ucdb只要存在就可以用于后续仿真,只需要在1.中所述的位置 添加 $load_coverage_db函数;