提问人:Leharika Naidu 提问时间:11/17/2023 最后编辑:toolicLeharika Naidu 更新时间:11/17/2023 访问量:39
解释为什么当 #10 开始 A = 1'b0 时,fork-join 的行为会有所不同;B = 1'b1;结束,到 #10;开始 A = 1'b0;B = 1'b1;结束 [复制]
Explain why fork-join behaves differently when #10 begin A = 1'b0; B = 1'b1;end, and to #10; begin A = 1'b0; B = 1'b1; end [duplicate]
问:
请注意第二种情况延迟后的分号。#10
我以为我明白了,但在这些输出之后,我认为我没有。有人可以解释为什么分号会导致差异吗?当延迟后有分号时,代码如何流入?fork-join
fork-join
在第一种情况下,代码为:
module waveform_fork_join();
reg A,B,C,D,E,F,en;
initial
fork
en = 1'b0; A = 1'b1; B = 1'b0; C = 1'b0; D = 1'b0; E = 1'b1; F = 1'b1;
#10 begin
A = 1'b0; B = 1'b1; C = 1'b1;
end
#20 begin
A = 1'b1; B = 1'b0; D = 1'b1; E = 1'b0;
end
#30 begin
B = 1'b1; E = 1'b1; F = 1'b0;
end
#40 begin
en = 1'b1; B = 1'b0; D = 1'b0; F = 1'b1;
end
#50 begin
B = 1'b1;
end
#60 begin
B = 1'b0; D = 1'b1;
end
#70 B = 1;
#80 $finish;
join
endmodule
在第二种情况下,代码为:
module waveform_fork_join1();
reg A,B,C,D,E,F,en;
initial
fork
en = 1'b0; A = 1'b1; B = 1'b0; C = 1'b0; D = 1'b0; E = 1'b1; F = 1'b1;
#10; begin
A = 1'b0; B = 1'b1; C = 1'b1;
end
#20; begin
A = 1'b1; B = 1'b0; D = 1'b1; E = 1'b0;
end
#30; begin
B = 1'b1; E = 1'b1; F = 1'b0;
end
#40; begin
en = 1'b1; B = 1'b0; D = 1'b0; F = 1'b1;
end
#50; begin
B = 1'b1;
end
#60; begin
B = 1'b0; D = 1'b1;
end
#70; B = 1;
#80 $finish;
join
endmodule
输出:延迟后带分号的代码输出
答:
0赞
toolic
11/17/2023
#1
在 中,在时间 10 时,模块执行,切换信号。waveform_fork_join
begin/end
在 中,在时间 10 时,没有任何反应,因为分号创建了一个 null 语句。在同一行开始的块是一个完全独立的语句,在时间 0 执行。waveform_fork_join1
begin/end
#10;
您编写代码的方式非常令人困惑。首先,对于这样一个简单的例子来证明行为的差异,不需要那么多变量。请考虑以下编写代码的替代方法:
module waveform_fork_join();
reg A,B;
initial
fork
A = 1'b1;
B = 1'b0;
#10 begin
A = 1'b0;
B = 1'b1;
end
#20 begin
A = 1'b1;
B = 1'b0;
end
#30 begin
B = 1'b1;
end
join
endmodule
module waveform_fork_join1();
reg A,B;
initial
fork
A = 1'b1;
B = 1'b0;
#10;
begin
A = 1'b0;
B = 1'b1;
end
#20;
begin
A = 1'b1;
B = 1'b0;
end
#30;
begin
B = 1'b1;
end
join
endmodule
也许这样可以更清楚地表明,这 3 个延迟语句与代码无关。在第一种情况下,5 件事在时间 0 开始执行。在第 2 种情况下,8 件事在时间 0 开始执行。begin/end
评论