在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 6311|回复: 13

[原创] 数组的功能覆盖率的采样

[复制链接]
发表于 2021-7-10 14:21:29 来自手机 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
现在我用monitor采集到了一个transaction,它里面有个数组addr_arr,我想对数组里面的每个地址进行功能覆盖率的采样,要怎么操作呢?
发表于 2021-7-10 20:35:49 | 显示全部楼层
bins addr_all[NUM_BIN] = {[0:max-1]};
发表于 2021-7-11 15:47:18 | 显示全部楼层
本帖最后由 hh199203 于 2021-7-11 15:51 编辑

Addr: coverpoint addr_arr{        bins addr[] = {[0:max-1]};
}
上面的写法是不合理的,因为数组不支持作为功能覆盖率的功能点

我用的最笨的方法:
Addr_0: coverpoint addr_arr[0]{
    bins addr_0[] = {[0:max-1]};
}
Addr_1: coverpoint addr_arr[1]{
    bins addr_1[] = {[0:max-1]};
}
...
Addr_N: coverpoint addr_arr[N]{
    bins addr_N[] = {[0:max-1]};
}



发表于 2021-12-1 19:01:45 来自手机 | 显示全部楼层
想问一下,如果有约束只能是偶数,而且范围较大,怎么去写仓啊?
发表于 2021-12-2 14:32:38 | 显示全部楼层


lsadds 发表于 2021-12-1 19:01
想问一下,如果有约束只能是偶数,而且范围较大,怎么去写仓啊?


coverpoint直接采变量的每个比特?如果是偶数那低位[0]就不用看了吧
发表于 2021-12-2 14:59:05 | 显示全部楼层
本帖最后由 lsadds 于 2021-12-2 16:08 编辑


becky9411 发表于 2021-12-2 14:32
coverpoint直接采变量的每个比特?如果是偶数那低位[0]就不用看了吧


是的,低bit位不用关心。那应该是剩下的每个bit位用通配符,给建个仓,这样应该可以吧。
发表于 2021-12-2 17:40:04 | 显示全部楼层
这个问题要具体的情况具体的看。
首先这个地址数组,size是不是固定的,其次是你需要收集数组中每个成员的覆盖率,还是只需要总的覆盖率率。举个例子来说,假设addr的范围是0~255,你需要收集数组中每个成员都需要覆盖0~255,还是说所有的addr合起来覆盖0~255就行?
1.假设只需要所有的addr出现的值能覆盖0~255即可,那么就很简单,建个仓bins addr_all[NUM_BIN] = {[0:max-1]}; 采样的时候,foreach遍历数组元素进行采样即可;
2.如果要每个数组元素都收集0:max,那你建的仓数目要和数组的size相同,一一对应为每个数组成员单独去收集;
3.如果数组的size不是固定的,是动态的,收集的方式和2类似,只不过你要考虑一下和仓的对应关系,这个要根据你实际的业务场景来识别了。
发表于 2021-12-3 10:40:14 | 显示全部楼层


飞翔的马甲 发表于 2021-12-2 17:40
这个问题要具体的情况具体的看。
首先这个地址数组,size是不是固定的,其次是你需要收集数组中每个成员的 ...


请问这个foreach如何去循环遍历啊,我在SV书上没有看到类似的用法。建的这个仓怎么去收集这个数组啊,具体写法我不太清楚。
发表于 2021-12-3 10:48:26 | 显示全部楼层
本帖最后由 飞翔的马甲 于 2021-12-3 10:51 编辑


lsadds 发表于 2021-12-3 10:40
请问这个foreach如何去循环遍历啊,我在SV书上没有看到类似的用法。建的这个仓怎么去收集这个数组啊,具 ...


foreach是在采样的地方进行的,不是在cov里面,比如foreach(addr【i】) fcov.addr_cg.sample(addr【i】); 这是将addr数组所有的元素都收集到一个covergroup里面去;比如foreach(addr【i】)  fcov【i】.addr_cg.sample(addr【i】); 这是为每个元素单独建一个功能覆盖率,单独去收集。
发表于 2021-12-3 11:00:00 | 显示全部楼层


飞翔的马甲 发表于 2021-12-3 10:48
foreach是在采样的地方进行的,不是在cov里面,比如foreach(addr【i】) fcov.addr_cg.sample(addr【i】);  ...


谢谢前辈,我懂了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /2 下一条

小黑屋| 手机版| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-9-23 05:28 , Processed in 0.022266 second(s), 6 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表