gpt4 book ai didi

verilog - #delay 如何用于 Verilog 非阻塞语句?

转载 作者:行者123 更新时间:2023-12-04 16:09:01 25 4
gpt4 key购买 nike

在第二个 $display 语句中,AB 会打印什么?

module blocking;

reg[0:7] A, B;

initial begin
A = 3;
#1 A = A + 1;
B = A + 1;
$display("Blocking: A= %d B= %d", A, B ); // A = 4, B = 5
A = 3;
#1 A <= A + 1;
B <= A + 1;
#1 $display("Non-blocking: A= %d B= %d", A, B ); // A = ?, B = ?
end
endmodule

Verilog 中的事件调度如何处理延迟和非阻塞语句?

最佳答案

在第 2 个 $display 中,由于您已将显示放在另一个时隙中(使用 #1),A 的更新值& B 将被打印出来。

module blocking;
reg[0:7] A, B;

initial begin
A = 3;
#1 A = A + 1;
B = A + 1;
$display("Blocking: A = %0d B = %0d", A, B ); // A = 4, B = 5
A = 3;
#1 A <= A + 1;
B <= A + 1;
#1 $display("Non-blocking: A = %0d B = %0d", A, B ); // A = ?, B = ?
end
endmodule

输出:

Blocking: A = 4 B = 5
Non-blocking: A = 4 B = 4

但是如果你把 $display 放在同一个时间段(没有 #1),那么 A 的未更新值>B 将被打印出来。

module blocking;
reg[0:7] A, B;

initial begin
A = 3;
#1 A = A + 1;
B = A + 1;
$display("Blocking: A = %0d B = %0d", A, B ); // A = 4, B = 5
A = 3;
#1 A <= A + 1;
B <= A + 1;
$display("Non-blocking: A = %0d B = %0d", A, B ); // A = ?, B = ?
end
endmodule

输出:

Blocking: A = 4 B = 5
Non-blocking: A = 3 B = 5

原因是 Verilog 中的事件调度。

$display 被安排在事件区域,它在NBA(非阻塞分配)区域之前,因此它将具有同一时隙内非阻塞分配信号的原始值。

关于verilog - #delay 如何用于 Verilog 非阻塞语句?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46327851/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com