条件覆盖与分支覆盖有啥区别

 我们首先来看一下这几些测试覆盖的定义:
定义一、 语句覆盖:它要求被测程序的每一可执行语句在测试中尽可能都检验过;

定义二、分支覆盖:要求程序中所有判定的分支尽可能得到检验;

定义三、条件覆盖:当判定式中含有多个条件时,要求每个条件的取值均得到检验;

从这些定义我们可以很容易理解到语句覆盖是把程序中的所有的语句都给覆盖到;分支覆盖是把程序中每个分支都给覆盖到;条件覆盖是把判断条件中所有的条件都给覆盖到。
下面我们通过一个简单的例子来描述一下
0:
1:if ((a<150)||(b<200)){
2:        for (i=a;i<100;i++)
7:}

分支覆盖:
1)在0处设置a=120,b 任意
将执行1,2,5
2)在0处设置a=200,b=400
将执行1,5,6,7
这里所有的分支都走到,也就是说要达到分支覆盖率100%,要设计2组测试用例
a        b
120        任意
200        400

语句覆盖:
1)在0处设置a=40,b 任意
将执行1,2,3,4,5
2)在0处设置a=200,b=400
将执行1,5,6,7
这里所有的语句都走到了,也就是说要达到语句覆盖率100%,要设计2组测试用例
a        b
40        任意
200        400
而在分支覆盖中语句3,4没有走到

条件覆盖:
由于第一个条件是if ((a<150)||(b<200)) 所以需要设计测试用例
a        b        备注
40        50        全都满足
160        150        a 不满足,b满足
40        250        a满足,b不满足
150        250        a,b都不满足
条件覆盖只要求把所有的条件都覆盖就可以了。

 

http://www.51qa.net/Item/305.aspx

<think>嗯,用户问的是在Do文件中跑覆盖率的语句是什么。首先,我得确定用户使用的仿真工具是什么,因为不同的EDA工具可能有不同的命令。常见的工具有VCS、ModelSim、Cadence的Xcelium,还有Synopsys的Verilator之类的。 首先,用户可能是在用VCS,因为VCS在业界用得比较多,覆盖率的命令也比较常见。VCS里通常是用urg来生成覆盖率报告,或者在仿真时加上覆盖率的编译选项。比如编译的时候加上-cm line+cond+fsm+tgl,然后在仿真的时候加上-cm_dir指定目录。 如果是ModelSim的话,可能需要先设置覆盖率选项,比如vsim -coverage,然后运行测试,最后用vcover生成报告。而Xcelium的话,可能用imc来合并覆盖率数据。 不过用户提到的是Do文件,Do文件通常是ModelSim或者Questasim的脚本,所以可能跟ModelSim相关。但有时候用户也可能用Do文件泛指脚本,所以得考虑其他工具的可能性。 接下来,我需要回忆一下常见的覆盖率流程。覆盖率一般包括编译时启用覆盖率选项,仿真时收集数据,然后生成报告。比如在VCS中,编译阶段加-cm,仿真加-cm_name,然后用urg处理数据。而在ModelSim中,启动仿真时启用覆盖率,运行完后保存数据,再生成报告。 用户可能需要的是具体的命令行语句,放在Do文件里。比如在ModelSim的Do文件中,可能有这样的步骤: 1. 编译设计时开启覆盖率:vlog -coveropt 3 source.v 2. 启动仿真并启用覆盖率:vsim -coverage testbench 3. 运行仿真:run -all 4. 保存覆盖率数据:coverage save coverage.ucdb 5. 生成报告:vcover report -html coverage.ucdb 或者如果是VCS的话,可能在Do文件里有: vcs -cm line+cond+fsm+tgl source.v testbench.v simv -cm line+cond+fsm+tgl -cm_dir ./coverage_data urg -dir coverage_data.vdb -report coverage_report 但用户可能是在使用哪种工具呢?可能需要给出不同工具的示例,或者提醒用户需要根据工具调整命令。 另外,用户可能对覆盖率的类型不太清楚,比如代码覆盖率包括行、条件、状态机、翻转等。所以语句里的参数可能会有不同的选项,需要说明。 还需要注意,是否要生成HTML报告,或者合并多个测试用例的覆盖率数据。比如urg可以生成详细的报告,而vcover可能有不同的参数。 总结下来,应该分步骤说明,先确认工具,然后给出对应的编译、仿真、生成报告的命令,并提醒用户根据实际情况调整参数。</think>在仿真验证中,运行覆盖率的典型流程可分为以下步骤。注意具体语句需根据使用的仿真工具(如VCS/ModelSim/Xcelium等)调整: --- ### 一、VCS工具链示例 ```tcl # 编译阶段:启用覆盖率选项 vcs -full64 -sverilog -debug_all -cm line+cond+fsm+tgl+branch \ -cm_dir ./coverage.vdb \ design.sv testbench.sv # 仿真阶段:收集覆盖率数据 ./simv -cm line+cond+fsm+tgl+branch # 生成报告:使用urg解析覆盖率数据库 urg -full64 -format both -dir ./coverage.vdb -report coverage_report ``` --- ### 二、ModelSim/QuestaSim示例 ```tcl # 启动仿真时启用覆盖率 vsim -coverage -voptargs="+cover=bcesft" testbench # 运行仿真并保存数据 run -all coverage save coverage.ucdb # 生成HTML报告 vcover report -html -htmldir html_report -detail coverage.ucdb ``` --- ### 三、通用注意事项 1. **覆盖率类型** 通过参数指定:`line`(行覆盖)、`cond`(条件覆盖)、`fsm`(状态机覆盖)、`tgl`(翻转覆盖)、`branch`(分支覆盖) 2. **报告解读** 生成HTML报告后,打开`index.html`文件可交互式查看未覆盖的代码段 3. **合并多次运行** 多次测试后,使用工具命令(如`urg -dir run1.vdb run2.vdb`)合并覆盖率数据 建议根据实际EDA工具文档调整参数。需要更具体的实现细节可补充说明您使用的工具链。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值