You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用with而非iff时SystemVerilog功能覆盖率不显示的问题排查

SystemVerilog功能覆盖率问题:with与iff语句的误用

测试代码

module tb;
  logic [1:0] a,b;
  logic sel;
  
  covergroup c;
    option.per_instance = 1;
    coverpoint a{
      wildcard bins a_={2'b??} with (sel);
    }
    coverpoint b{
      wildcard bins b_={2'b??} iff (!sel);
    }
  endgroup
    
    c ci;
    
    initial begin
      ci=new();
      repeat(10) begin
        a=$random;
        b=$random;
        sel=$random;
        $display("%d %d %d",a,b,sel);
        ci.sample();
        #1;
      end
    end
    
endmodule

问题描述

我编写了上述SystemVerilog测试代码,对coverpoint a的wildcard bins使用with语句(条件为sel)时功能覆盖率无法显示;替换为iff后覆盖率统计正常,请问操作错误在哪里?

问题分析与解答

你核心的错误是混淆了with和iff语句的作用场景:

  • with语句:是用于bin级别的值过滤,它的条件只能基于当前coverpoint的变量(这里是a),不能直接引用外部信号(比如sel)。你写的with (sel),工具会认为这个条件是基于a的属性,但sel和a无关,导致这个条件永远不成立,所以a_这个bin永远不会被命中,覆盖率自然无法统计。
  • iff语句:是用于coverpoint级别的采样控制,它可以引用外部信号,决定整个coverpoint是否在当前采样时刻被触发。当iff (sel)作用于coverpoint a时,只有sel为真的时刻,a的采样值才会被计入覆盖率统计,这正好符合你想要的逻辑。

简单来说,如果你需要根据外部信号控制是否对某个coverpoint进行采样,就要用iff;如果只是想从coverpoint的变量值里筛选一部分计入某个bin,才用with。

内容的提问来源于stack exchange,提问作者Ankit Kaushik

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 14:12:10