如何为N位coverpoint生成N个0→1跳变功能覆盖率bins?
实现每一位单独的0→1跳变功能覆盖率统计
针对64位intrpt信号,要为每一位单独设置bin统计其0→1置位动作,这里提供两种精准满足需求的实现方案:
方案1:为每一位创建独立coverpoint
这种方式会为每个中断位生成单独的coverpoint,每个coverpoint只监控对应位的置位动作,统计结果清晰对应每一条中断线:
covergroup xyz; option.per_instance = 1; option.get_inst_coverage = 1; // 遍历每一位,生成专属coverpoint foreach (top.abc.intrpt[i]) begin coverpoint top.abc.intrpt[i] { bins asserted_bit[i] = (0 => 1); // 排除稳态、1→0跳变等不需要统计的情况 bins ignore = default; } end endgroup
- 遍历
intrpt的64个位(0到63),自动为每个位生成独立的coverpoint - 每个
asserted_bit[i]只会在对应位发生0→1跳变时命中,命名自带位索引,方便定位具体中断线 - 用
default定义的ignore bin可以过滤掉我们不关心的状态变化,避免干扰统计结果
方案2:单个coverpoint内定义全部位的专属bin
如果希望把所有位的统计归在同一个coverpoint下,也可以用foreach在单个coverpoint中为每一位定义置位bin:
covergroup xyz; option.per_instance = 1; option.get_inst_coverage = 1; coverpoint top.abc.intrpt { // 为每一位定义0→1置位的专属bin foreach (top.abc.intrpt[i]) begin bins asserted_bit[i] = ( (top.abc.intrpt & ~(1'b1 << i)) => (top.abc.intrpt | (1'b1 << i)) ); end // 排除所有非目标跳变和稳态 bins ignore_all = default; } endgroup
- 每个
asserted_bit[i]捕获的是:只要第i位从0变成1,不管其他位是什么状态,都会命中该bin - 所有位的统计都归在同一个coverpoint下,适合希望在同一组下查看全部位置位情况的场景
两种方案都能实现“每个输入中断线对应独立覆盖率统计”的需求,可根据你对覆盖率报告展示形式的偏好选择。
内容的提问来源于stack exchange,提问作者Shankhadeep
相关产品推荐
相关产品推荐

