如何用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级覆盖率数据,操作方式如下:
- 生成覆盖率数据库:仿真时添加覆盖率收集选项(如
-coverage all,具体选项依工具版本调整),确保生成.ucd格式的覆盖率数据库文件。 - 图形化查看bin覆盖率:打开SimVision后加载该数据库,进入
Coverage视图,展开目标covergroup和coverpoint,即可看到每个bin的覆盖状态、命中次数和覆盖率百分比。 - 日志文件输出bin覆盖率:通过SimVision的Tcl命令生成包含bin细节的报告,示例命令如下:
执行后生成的coverage report -covfile your_coverage_db.ucd -detail bins -output bin_coverage_log.txtbin_coverage_log.txt文件会包含所有bin的覆盖率数据,可从中筛选目标bin的信息。
内容的提问来源于stack exchange,提问作者user20923807
相关产品推荐
相关产品推荐

