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。