如果 Verilog 中的 IF 语句在条件中具有无效值,则仅评估 else 分支。(在模拟中。)
例如下面的模块 SimpleIfStatement2b if a = 1'bx: b=0'b1
我在 Vegilog-2005 标准中搜索这种行为,但找不到它。
这种行为是标准的一部分还是仅在iverilog模拟器的实现中?这也是 VHDL/SystemVerilog/SystemC 的情况吗?描述这个的标准在哪里?
module SimpleIfStatement2b(input a,
output reg b
);
always @(a) begin: assig_process_reg_d
if (a) begin
b <= 1'b0;
end else begin
b <= 1'b1;
end
end
endmodule
module main;
reg a;
wire b;
SimpleIfStatement2b DUT (
.a(a),
.b(b)
);
initial begin
a = 1'bx;
repeat(1) #10;
a = 1'b0;
repeat(1) #10;
a = 1'b1;
repeat(1) #10;
a = 1'b0;
repeat(1) #10;
a = 1'bx;
repeat(1) #10;
a = 1'b1;
repeat(1) #10;
a = 1'bx;
repeat(10) #10;
end
initial begin
repeat(10) #10;
$finish;
end
initial
$monitor("At %t, a=%b, b=%b,", $time, a, b, );
endmodule
标准输出:
$iverilog -o main *.v
$vvp main
At 0, a=x, b=x
At 10, a=0, b=1
At 20, a=1, b=0
At 30, a=0, b=1
At 40, a=x, b=1
At 50, a=1, b=0
At 60, a=x, b=1