之間的行爲差異我剛剛發現,當涉及function
時,總是@(*)無法按預期工作。always_comb和always @(*)
請參閱下面的簡單示例代碼。
http://www.edaplayground.com/x/J7M
module test;
reg a, b, c;
function reg my_func();
if (b==0) begin
$display("DEBUG 0 @%0t", $time);
return a;
end
else if (b==1) begin
$display("DEBUG 1 @%0t", $time);
return ~a;
end
else begin
$display("DEBUG 2 @%0t", $time);
return 0;
end
endfunction
always @(*) begin
//always_comb begin
c = my_func();
end
initial begin
a = 0; #10;
a = 1; #10;
a=0;
end
endmodule
嘗試在模擬always @(*)
和always_comb
之間切換。如果我使用always @(*)
,則不會顯示任何內容。但是,如果使用always_comb
,它會顯示預期的結果如下:
DEBUG 2 @0
DEBUG 2 @0
DEBUG 2 @10
DEBUG 2 @20
上面的代碼只是簡單的組合邏輯。 爲什麼always @(*)
和always_comb
顯示不同的結果?這只是模擬問題嗎?進一步的實驗我注意到它可能與在always塊內使用function
有關。
IEEE Std 1800-2012,第9.2.2.2節組合邏輯always_comb過程 – toolic