推荐答案
测试一下
题目
### 分析代码覆盖率时,verilog语句if(a \|\| (b && c))有哪几种条件需要覆盖?
参考答案与知识点
参考答案
对于 Verilog 语句 `if(a || (b && c))`,条件覆盖要求每个原子条件的所有可能取值(真和假)至少被覆盖一次。该表达式包含三个原子条件:`a`、`b`、`c`。因此需要覆盖的六种情况是:`a=0`、`a=1`、`b=0`、`b=1`、`c=0`、`c=1`。注意,条件覆盖不关心整个表达式的结果(那是分支覆盖),也不要求覆盖所有组合(那是 MC/DC 覆盖)。典型的测试用例可以是:{(a=1, b=0, c=0), (a=0, b=1, c=1)},前者覆盖了 a=1、b=0、c=0,后者覆盖了 a=0、b=1、c=1。但若单独使用前者,则 b 和 c 均未取到 1,不满足条件覆盖。易错点:误将 `(b && c)` 视为一个条件,从而只覆盖两个条件;或混淆条件覆盖与分支覆盖(分支覆盖只要求整个表达式真/假各一次)。
涉及知识点
- 条件覆盖的原子条件定义
- Verilog 逻辑运算符优先级
- 条件覆盖与分支覆盖的区别
- 条件覆盖的最小测试用例设计