转载:http://blog.sina.cn/dpool/blog/s/blog_7853c3910102yn77.html



VCS仿真可以分成两步法或三步法, 对Mix language, 必须用三步法。我呢,因为运用都是简单的非mix language,所以经常用一步法,因为这样省劲,但是对于跑regression最好还是两步法。VCS对应的waveform工具有DVE和Verdi, DVE因为是原生的,所以VCS对DVE非常友好。但DVE已经过时了,其对uvm等新feature支持的不好。Verdi是Debussy公司的产品,现在已被Synopsys收购并着力发展,说以Verdi是未来的潮流。所以此文的dump fsdb波形和查看coverage都用verdi. 具体来说VCS两步是:

1. 编译verilog文件成为一个可执行的二进制文件命令为:vcs source_files

2. 运行该可执行文件:./simv

当然,类似于NC,也有一步运行方式,那就是加-R,表示编译后立即执行。

VCS使用使用实例

我的此例子涉及task和$value$plusargs等verilog语法,这里(https://blog.csdn.net/limanjihe/article/details/52325930)可以复习下。此例子的vcs命令是:

vcs --sverilog -R -fsdb -ucli -do run_vcs.tcl -cm line+tgl+branch+assert -cm_name test1 +test_name=test1 tb_top.v
vcs -sverilog -R -fsdb -ucli -do run_vcs.tcl -cm line+tgl+branch+assert -cm_name test2 +test_name=test2 tb_top.v
verdi -cov -covdir simv.vdb/ &

简单解释一下这里的选项:

-sverilog是说支持sv语法;

-R表示编译后立即执行;

-fsdb表示dump fsdb文件

-ucli -do run_vcs.tcl表示要执行这个仿真tcl控制;

-cm line+tgl+branch+assert表示 coverage覆盖line/toggle/branch/assert ;

-cm_name test1表示生成coverage的一个test的目录名称test1(仿真后会生成simv.vdb/snps/coverage/db/testdata/test1);

+test_name 表示要传递给TB一个test_name 参数。

例子的verilog代码文件top_tb.v :

module tb_top();
reg clk, rst, load;
wire [3:0] out;
always #5 clk=~clk; reg [255:0] test_name;
initial
begin
clk=1'b0; rst=1'b0; load=0;
#30;
$value$plusargs('test_name=%s',test_name);
if(test_name=='test1')
test1;
else if(test_name=='test2')
test2;
#70;
$finish;
end task test1;
rst=1'b1;
#10 load=0;
endtask task test2;
rst=1'b1; load=1;
#10 load=0;
endtask counter u_counter(.reset(rst),
.clk(clk),
.load(load),
.load_value(4'h8),
.q(out));
endmodule module counter(reset,clk,load,load_value,q);
input reset,clk;
input load;
input [3:0] load_value;
output[3:0] q;
reg[3:0]q;
reg[3:0]count; always@(posedge clk)
if(!reset)
q<=4'h0;
else if(load)
q<= load_value;
else if(q==4'b1111)
q<=4'b0;
else
q<=q+1;
endmodule

run_vcs.tcl:

config timebase 1ns

scope tb_top

run 1ns

call \$fsdbDumpfile('counter.fsdb');

call \$fsdbDumpvars(0,tb_top);

call \$fsdbDumpSVA;

# Run to completion

run

quit

这个例子运行后,产生simv.vdb/snps/coverage/db/testdata/test1 和simv.vdb/snps/coverage/db/testdata/test2两个 test的coverage文件,用verdi打开是这样的界面:

VCS仿真和多个test用urg工具生成coverage文件,verdi查看VCS中的覆盖率分析

VCS在仿真过程中,也可以收集Coverage Metric。其中覆盖率类型有:

1. Code Coverage:包括line,condition, branch, toggle和FSM coverage。
2. Functional Coverage:包括covergroup,assert 。

Coverage Database的产生:包含所有的有关coverage的信息,默认放在simv.vdb文件夹下。db中的默认路径是:

snps/coverage/db/testdata/line.verilog.data.xml                    
fsm/cond/tgl/branch等xml信息。

在编译命令中:

vcs [cover_options] [compile_options] source.v

[cover_options]可以是:

-cm line+cond+tgl+fsm+branch+assert

-cm_dir在compile options中改变simv.vdb文件夹的位置。

-cm_name指定testname。主要改变testname在db中的命名。

在仿真过程中:

simv [cover_options] [run_options]

[cover_options]可以是:-cm line+cond+tgl+fsm+branch+assert

[run_options]指定runtime options。

Coverage Reports的产生:

使用工具URG(Unified Report Generator)产生html格式文件。

urg -dir dir1 [urg_option] -dbname merge

使用DVE的GUI界面。

dve -cov -dir

使用verdi的gui界面。

verdi -cov -covdir

   verdi -cov -h,打印coverage mode下的帮助信息

其他的vcs编译和仿真中的option:

  -cm_hier,在编过程中,指定收集coverage的scope。(格式可以包含正则表达式,语句可以+tree -tree -moduletree等)

  -cm_assert_hier,在编译过程中,只是指定不收集coverage的assert hier。其中hier的表示,+/- module,+/- tree,+/-assert

  -cm_count,在gui和urg report中,显示次数,比如toggle的次数。

  -cm_glitch period,不收集一定范围的glitch的coverage。simulation option

  -cm_start/stop,指定coverage收集的时间,simulation option coverage group相关的option;

  -covg_disable_cg,关闭所有的coverage group的收集urg生成report中的option:

  -dir,指定需要拿到的db的hier,

  -dbname,指定输出的merge db的hier

  -elfile,指定exclusive的file,这样更好计算coverage。

  -elfilelist 忽略中每一个.el文件。(Specifies a file containing a list of exclude files)

  -noreport,不输出最终的report,只是merge db

  -format text/both,指定report的输出格式

  -matric [line,cond,fsm,tgl,branch,assert]执行计算的coverage类型

  -parallel,并行merge

  -full64,以64bit的程序进行merge

  -plan,-userdata,-userdatafile,-hvp_no_score_missing,指定hvp相关的生成信息。

实际工程中urg除了生成coverage报告,还经常要把几个仿真产生的vdb文件merge到一起,三个目的:

1. 实现比较高的coverage
2. 让verdi load coverage速度大大提高(我们几百个test下来,merge后load只要几分钟,而不merge需要半个到一个小时)
3. 不同level testbench跑出来的结果需要merge到一起(前公司用过把block的merge到system level)
这个merge+生成coverage命令大体是这样的
urg -full64 -metric line+tgl+cond+fsm+assert+branch -warn none -dbname .vdb -dir simv.vdb -elfile
注意:其中-dir之后的第一个vdb会被认为是base data,如果产生其他vdb的RTL与base不同,将不能被Merge进来
verdi查看coverage命令:**verdi -cov -covdir .vdb &**

如下是某个工程中使用的生成coverage并merge若干vdb文件到vcs_sim_exe_total.vdb的命令:

urg -full64 -parallel -show ratios -show tests -dir /proj/vcs_sim_exe_merge.vdb /proj/vcs_sim_exe _bak.vdb -hier /proj/dut_hier -elfilelist /proj/elfilelist.el -plan /proj/vplan/DUT.hvp -dbname /proj/vcs_sim_exe_total.vdb -report /proj/rpt/4332 -log /proj/gen_cov_dut.log

这里特别说明下这个选项: -hier /proj/dut_hier

-hier表示只针对dut_hier中定义的(URG has an option, -hier, that accepts a subset of the controls that can be used in the compile-time -cm_hier file.)spec说不太常用。

参考文献:

https://www.baidu.com/link?url=DCf5uEsmPEps3u-422ETdJSLGaD6mlBwI6smTGOq7AkUtxUSVq1X4UGqDvym6-NK55EcCVAsDEPjqRUTsh4G4a&wd=&eqid=995ddaf40000e04a000000055e65da74

https://blog.csdn.net/wonder_coole/article/details/79618696

https://www.cnblogs.com/-9-8/p/4478833.html

https://blog.csdn.net/kevindas/article/details/81462217

https://blog.csdn.net/gsjthxy/article/details/88429983

coverage report的更多相关文章

  1. AngularJS unit test report / coverage report

    参考来源: http://www.cnblogs.com/vipyoumay/p/5331787.html 这篇是学习基于Angularjs的nodejs平台的单元测试报告和覆盖率报告.用到的都是现有 ...

  2. Python 代码覆盖率统计工具 coverage.py

    coverage.py是一个用来统计python程序代码覆盖率的工具.它使用起来非常简单,并且支持最终生成界面友好的html报告.在最新版本中,还提供了分支覆盖的功能. 官方网站: http://ne ...

  3. [Webpack 2] Ensure all source files are included in test coverage reports with Webpack

    If you’re only instrumenting the files in your project that are under test then your code coverage r ...

  4. Jenkins integration for AngularJS code coverage

    Install Jenkins plugins 'Cobertura' and 'HTML Publisher' 1. add Post-build Actions "Publish HTM ...

  5. jenkins综合cobertura,来电显示cobertura的report

    我的项目是使用maven作为构建工具.左右maven如何整合jenkins请参阅: http://blog.csdn.net/yaominhua/article/details/40684355 本文 ...

  6. CI集成phpunit Error: No code coverage driver is available 的解决

    CI集成phpunit时,运行报No code coverage driver is available的错误,如下图: yanglingdeMacBook-Pro:tests yangling$ p ...

  7. 使用Coverage进行代码覆盖率的测试

    软件测试实验报告 一.实验目的: 使用软件测试代码覆盖率. 二.实验工具: Windows10.Python3.6.3.Coverage. 三.实验内容: 1.编写准备测试的代码main.py和测试代 ...

  8. SV coverage

    covergroup是对coverage model的一种包装,每个covergroup可以包含: 1) sync event来触发采样, 2) 很多coverpoint, 3) cross cove ...

  9. python 代码覆盖率 coverage用法

    先装coverage: D:\test_python\e8_test>pip install coverageCollecting coverage  Downloading https://f ...

随机推荐

  1. OO_Unit2总结

    OO_Unit2总结 (1) 多线程协同控制设计策略 总体信号通讯策略 本单元作业,我采用的是生产者-消费者模式加类观察者模式. 通过分析指导书给出的需求,我将最终我要实现的程序简化为了"输 ...

  2. 【NCRE】三级网络技术 选择题易错点记录(1)

    部分易错点 连接到一个集线器的多个节点不能同时发送数据帧 嵌入式安装插座用来连接双绞线 异步串行端口 PPP 同步串行端口 PPP/HPLC 对于频繁改变位置并使用DHCP获取IP地址的DNS客户端, ...

  3. 前端框架之争丨除了Vue、Angular和React还有谁与之争锋

    转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具.解决方案和服务,赋能开发者. 原文参考:https://www.sitepoint.com/most-popular-frontend-f ...

  4. JAVAEE_04_Tomcat服务器

    Tomcat服务器 * 常用的服务器 - WebLogic服务器 WebLogic是美国bea公司出品的一个application server.BEA WebLogic是用于开发.集成.部署和管理大 ...

  5. Linux下安装Anaconda 并进行用户共享

    下载镜像 wget https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/ Anaconda3-5.3.1-Linux-x86_64.sh 安装 ...

  6. AI数学基础之:P、NP、NPC问题

    目录 简介 P问题 NP问题 NP问题的例子 有些NP问题很难解决 NPC问题 NP-hard P和NP问题 简介 我们在做组合优化的时候需要去解决各种问题,根据问题的复杂度不同可以分为P.NP.NP ...

  7. python正则表达式基本语法

    一.最常用的匹配语法 re.match 从头开始匹配 re.search 匹配包含 re.findall 把所有匹配到的字符放到以列表中的元素返回 re.split  以匹配到的字符当做列表分隔符 r ...

  8. shellcode 开发

    0x00 设置堆栈 栈顶指针按位与之后,将栈桢以16字节的大小对齐: push rbp ;store rbp original state mov rbp, rsp ;set stack base p ...

  9. 关于Oracle 数据库使用dba_tables或者all_tables或者user_tables统计数据时,与直接查询表统计时数据不一致的记录

    1. 今天写代码发现这个问题,这里记录一下, 不一致的原因是因为  dba_tables .all_tables.user_tables 不是实时的反应表的数据的,所以需要在查询统计之前对表进行手动分 ...

  10. 【SpringBoot】Springboot2.x整合SpringSecurity

    一.Spring Security是什么?有什么作用(核心作用)?以及如何阅读本篇文章 1.是什么 Spring Security是Spring家族的一个强大的安全框架,与Springboot整合的比 ...