a、b、c 的值是多少?
What will be the values of a, b, c?
据我所知,不建议混合使用阻塞和非阻塞。但如果它确实存在,那么a、b、c的值是多少?
module TB;
reg a, b, c;
initial begin
a = 3;
b = 4;
$display ("a = %d, b = %d, c=%d\n", a, b, c);
c <= a + b;
$display ("a = %d, b = %d, c=%d\n", a, b, c);
a <= 10;
b <= 2;
c = a + b;
$display ("a = %d, b = %d, c=%d\n", a, b, c);
end
endmodule
module TB;
reg ***[2:0]*** a, b, c;
initial begin
a = 3;
b = 4;
$display ("a = %d, b = %d, c=%d\n", a, b, c);
c <= a + b;
$display ("a = %d, b = %d, c=%d\n", a, b, c);
a <= 10;
b <= 2;
c = a + b;
$display ("a = %d, b = %d, c=%d\n", a, b, c);
end
endmodule
a=3, b=4 和 c=7
Verilog的Timing Queue分为四个部分:
活动区域 -> 不活动 -> NBA -> 推迟
阻塞分配与 $display() 一起在 ACTIVE 区域中进行评估和分配。非阻塞分配在 ACTIVE 区域进行评估,并在 NON BLOCKING ASSIGNMENT(NBA) 区域进行分配。因此,对 a、b、c 所做的任何更新都不会使用 display 语句打印出来。您可以使用在延迟区域执行的 $monitor。
据我所知,不建议混合使用阻塞和非阻塞。但如果它确实存在,那么a、b、c的值是多少?
module TB;
reg a, b, c;
initial begin
a = 3;
b = 4;
$display ("a = %d, b = %d, c=%d\n", a, b, c);
c <= a + b;
$display ("a = %d, b = %d, c=%d\n", a, b, c);
a <= 10;
b <= 2;
c = a + b;
$display ("a = %d, b = %d, c=%d\n", a, b, c);
end
endmodule
module TB;
reg ***[2:0]*** a, b, c;
initial begin
a = 3;
b = 4;
$display ("a = %d, b = %d, c=%d\n", a, b, c);
c <= a + b;
$display ("a = %d, b = %d, c=%d\n", a, b, c);
a <= 10;
b <= 2;
c = a + b;
$display ("a = %d, b = %d, c=%d\n", a, b, c);
end
endmodule
a=3, b=4 和 c=7
Verilog的Timing Queue分为四个部分: 活动区域 -> 不活动 -> NBA -> 推迟 阻塞分配与 $display() 一起在 ACTIVE 区域中进行评估和分配。非阻塞分配在 ACTIVE 区域进行评估,并在 NON BLOCKING ASSIGNMENT(NBA) 区域进行分配。因此,对 a、b、c 所做的任何更新都不会使用 display 语句打印出来。您可以使用在延迟区域执行的 $monitor。