功能覆盖率漫谈
来源:互联网 发布:海外学历认证 知乎 编辑:程序博客网 时间:2024/05/15 23:51
以下内容均以使用vcs工具为前提。
(一)跨group交叉覆盖率
vcs支持跨covergroup交叉覆盖率,意味着:
interface cov_if; logic a; logic b; logic c;endinterfaceclass coverage; virtual cov_if cov_port; covergroup cg_a; option.per_instance = 1; cp_a : coverpoint cov_port.a; endgroup covergroup cg_b; option.per_instance = 1; cp_b : coverpoint cov_port.b; cp_c : coverpoint cov_port.c; endgroup covergroup cg_axb; option.per_instance = 1; cx_a_b : cross cg_a.cp_a, cg_b.cp_b; cx_a_c : cross cg_a.cp_a, cg_b.cp_c; endgroup function new (); cg_a = new(); cg_b = new(); cg_axb = new(); endfunction : new function void sample (); cg_a.sample(); cg_b.sample(); endfunction : sampleendclass : coverage
是可以跑起来的,书写上的便利可以让组合更自由。这种写法有几个地方要注意:
1.需要在vcs elaborate时加上-lca(limited customer availability)选项。
2.上述covergroup只能写在class里, 作为全局的covergroup就无法使用该功能。
3.cov_axb只需要new即可,会自动sample,如果同时调用cg_a, cg_b, cov_axb的sample会报warning:Warning-[FCPSHCG] Sampling hierarchical covergroup.Procedural sampling of hierarchical covergroup instances will be ignored.
(二)covergroup option/type_option
很多时候我们只看到书上那么写,别人那么用,却很少关注为什么要这么写。下面从最常见的一些开关开始介绍:
(1) per_instance
默认的时候这个选项是0,是关闭的。instance,指covergroup的instance, 如果这个开关打开,那么每一个instance的覆盖率会被列出,否则只能看到一个综合的结果。这里问题来了,什么时候需要有多个covergroup的instance?答案是需要复用的时候。假如说系统中有两个一模一样的port, 需要对他们都进行覆盖率采样分析,那么完全可以之写一个covergroup, 实例化两次,传入不同的port.还是以上面的例子为例,这一次加入驱动的细节:
module top;coverage cov0;coverage cov1;cov_if cov_port0();cov_if cov_port1();initial begincov0 = new();cov0.cov_port = cov_port0;cov_port0.a <= 1;cov_port0.b <= 0;cov_port0.c <= 0;cov1 = new();cov1.cov_port = cov_port1;cov_port1.a <= 1;cov_port1.b <= 1;cov_port1.c <= 1;#20;$finish;endalways #1 cov_port0.a = ~cov_port0.a;always #2 cov_port0.b = ~cov_port0.b;always #1 cov_port0.c = ~cov_port0.c;always #1 cov0.sample();always #1 cov_port1.a = ~cov_port1.a;always #2 cov_port1.b = ~cov_port1.b;always #1 cov_port1.c = ~cov_port1.c;always #1 cov1.sample();endmodule : top会看到这样的波形:
port0中a和c完全反相,而port1中则完全同相,这个时候cross a,c,两个port都会各有两种情形覆盖不到,而他们的总和,却是四种情况都覆盖到了。如果加了per_instance参数,那么我们看到的报告会包含下面这两个部分:
否则只能看到一个总的部分:
(2) goal
预期的目标,会作为分数计算的依据,具体见LRM的公式。
这里特别注意type_option与option的区别,type_option会影响最后总和的结果,而option影响的是每个intance内的结果。这一点对于weight, comment等其他参数也一样。
(3)name & comment
这里指instance的name
group instance后的名字
comment也有相应的标示
(4)type_option.merge_instances
将所有的instence的hit情形合并到一起,例如inst1 hit了0个,inst2 hit了全部,那么分数就会是100.如果不打开此选项,则计算instence的加权平均分。这个选项vcs不支持。
(5)distribute_first
vcs还是不支持,想要自定义bin的顺序目前看来是不可能了,但是with语法还是可以部分支持的。
- 功能覆盖率漫谈
- 功能覆盖率
- Emma获取功能测试覆盖率
- 使用 EMMA 获得功能测试覆盖率
- 覆盖率
- Android Adb调试功能漫谈
- EMMA对功能测试进行代码覆盖率的统计
- 使用EMMA统计Java代码功能测试覆盖率
- 使用真机进行IOS功能测试代码覆盖率统计
- PHP插件功能实现思路漫谈
- 漫谈
- 漫谈
- Ruby+Watir经验谈: 漫谈针对功能的自动化测试框架
- 漫谈项目开发-不要以实现功能为导向
- 测试覆盖率
- 测试覆盖率
- 计算覆盖率:
- 测试覆盖率
- 易求无价宝,难得有情郎
- error: No curses/termcap library found的解决办法
- 海水尚有涯,相思渺无畔。
- if判断标签用法说明更新
- 也许我不知道明天的自己是怎样的,可是我知道今天的自己是快乐的,这就够了。
- 功能覆盖率漫谈
- Python Socket 通信
- 斜月沉沉藏海雾,碣石潇湘无限路。不知乘月几人归?落月摇情满江树。
- Qt 笔记-1
- 昨夜闲潭梦落花,可怜春半不还家。江水流春去欲尽,江潭落月复西斜。
- 银行家算法
- SGU126 Boxes
- 此时相望不相闻,愿逐月华流照君。鸿雁长飞光不度,鱼龙潜跃水成文。
- 可怜楼上月徘徊,应照离人妆镜台。玉户帘中卷不去,捣衣砧上拂还来。