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

如何用SimVision工具及SystemVerilog代码获取coverpoint特定bin的覆盖率?

获取SystemVerilog Coverpoint单个Bin的覆盖率及SimVision使用方法

代码实现:获取单个Bin的覆盖率

SystemVerilog提供了get_bin_coverage()方法,可直接获取coverpoint中单个bin的覆盖率,无需拆分coverpoint。修改后的代码示例如下:

covergroup cov_a @(posedge clk);
    c1: coverpoint signal {
        bins a = {1};
        bins b = {0};
    }
    c2: coverpoint b {
        bins c = {1};
        bins d = {0};
    }
    option.per_instance = 1;
endgroup : cov_a 

cov_a cov_a_inst = new();

final begin 
    $display("Coverage for c1: %0.2f%%", cov_a_inst.c1.get_inst_coverage());
    $display("Coverage for c2: %0.2f%%", cov_a_inst.c2.get_inst_coverage());
    // 输出单个bin的覆盖率
    $display("Coverage for bin a in c1: %0.2f%%", cov_a_inst.c1.get_bin_coverage(cov_a_inst.c1.a));
    $display("Coverage for bin b in c1: %0.2f%%", cov_a_inst.c1.get_bin_coverage(cov_a_inst.c1.b));
    $display("Coverage for bin c in c2: %0.2f%%", cov_a_inst.c2.get_bin_coverage(cov_a_inst.c2.c));
    $display("Coverage for bin d in c2: %0.2f%%", cov_a_inst.c2.get_bin_coverage(cov_a_inst.c2.d));
end
  • get_bin_coverage()返回指定bin的覆盖率百分比(范围0-100),用%0.2f格式可保留两位小数,显示更精准的覆盖率。
  • 通过cov_a_inst.c1.a直接引用目标bin,层级写法符合SystemVerilog对象引用规则。

SimVision工具中查看/输出单个Bin的覆盖率

SimVision支持显示和导出bin级覆盖率数据,操作方式如下:

  1. 生成覆盖率数据库:仿真时添加覆盖率收集选项(如-coverage all,具体选项依工具版本调整),确保生成.ucd格式的覆盖率数据库文件。
  2. 图形化查看bin覆盖率:打开SimVision后加载该数据库,进入Coverage视图,展开目标covergroup和coverpoint,即可看到每个bin的覆盖状态、命中次数和覆盖率百分比。
  3. 日志文件输出bin覆盖率:通过SimVision的Tcl命令生成包含bin细节的报告,示例命令如下:
    coverage report -covfile your_coverage_db.ucd -detail bins -output bin_coverage_log.txt
    
    执行后生成的bin_coverage_log.txt文件会包含所有bin的覆盖率数据,可从中筛选目标bin的信息。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 17:20:42