我想在零時刻始終執行阻止。 例如下面的代碼將不會在零時刻執行。始終在零時間阻止執行
always @* begin
//functional code
end
我在最後移動的靈敏度列表中,這樣的代碼將在零時刻執行,
always begin
//funcitonal code
@*;
end
此代碼執行時間爲零,但零時間畢竟不以執行,即使有塊內使用的輸入變化。例如參見下面的代碼和它的輸出:
module AlwaysTimeZeroTest_v();
reg reg_A;
initial begin
$display ("I'm in Initial begin block \tTime=%f, reg_A=%b\n",$stime,reg_A);
#1
reg_A=1'bZ;
#1
reg_A=1'b1;
#1
reg_A=1'b0;
#1
reg_A=1'bZ;
#5 $finish;
end
always @* begin
$display ("I'm in Non-time Zero always block\tTime=%f, reg_A=%b\n",$stime,reg_A);
end
always begin
$display ("I'm in time Zero always block \tTime=%f, reg_A=%b\n",$stime,reg_A);
@*;
end
endmodule
輸出:在時間
**I'm in Initial begin block Time=0.000000, reg_A=x
I'm in time Zero always block Time=0.000000, reg_A=x
I'm in Non-time Zero always block Time=1.000000, reg_A=z
I'm in Non-time Zero always block Time=2.000000, reg_A=1
I'm in Non-time Zero always block Time=3.000000, reg_A=0
I'm in Non-time Zero always block Time=4.000000, reg_A=z**
模擬通過$完成(1)完整的9 NS + 0
任何人都可以解釋爲什麼第二總代碼中的塊在時間零之後根本不執行?
有沒有一種方法可以實現始終阻止,以便它在零時間執行而不使用初始塊? (類似於SV中的always_comb?)
感謝戴夫的解釋。 Verilog中是否有對always_comb的替代方案? – sanforyou
它取決於導致塊不在時間0執行的情況。一個建議可能是確保敏感性列表中的所有內容都被聲明爲導線。 –