always @ (posedge clk) begin
if( A > B) begin //Line 1
Result = A - B; //Line 2
end else begin //Line 3
Result = A + B; //Line 4
end
end
always @ (posedge clk) begin //always block
if( A > B) begin // if block
Result = A - B;
end else begin // else block
Result = A + B;
end
end
Branch/Decision coverage:分支覆盖率评估HDL代码中的条件,例如if-else,case语句和三元运算符(?:)语句,并检测是否同时包含真假情况。在上面的示例中,只有一个分支(if A> B),分支覆盖率会检查是否真假两个分支都被触发了。
Conditional Coverage and Expression coverage:条件覆盖率会检查HDL中的所有布尔表达式,并计算该表达式为真或假的次数。表达式覆盖率检查语句的右侧,统计所有可能组成的真值表的覆盖程度。以下是包含3个布尔变量的表达式,它们决定了Result变量为true或false
Result = (A && B) || (C)
针对A,B和C的所有可能情况,如下创建真值表。条件覆盖率可以衡量此真值表的所有行是否都被覆盖。
仿真器会基于testcase提取代码覆盖率,而功能覆盖率则是用户定义的指标。低代码覆盖率表明并非设计代码的所有部分都经过了测试。高功能覆盖率表明,用户从测试计划中捕获的所有功能都得到了测试。如果覆盖率指标显示低代码覆盖率和高功能覆盖率,原因可能是:
是的,可以在类内部定义覆盖组。这对于基于测试平台结构(例如事务,序列,检查器,监视器等)实现功能覆盖率非常有用。
bit[3:0] var_a;
covergroup test_cg @(posedge clk);
cp_a : coverpoint var_a {
bins low_bins[] = {[0:3]};
bins med_bins = {[4:12]};
}
endgroup
coverpoint my_variable {
bins trans_bin[] = ( a,b,c => x, y);
}
正确答案将在下一期公布,或者到下面的文章获取答案