はじめに
always@*とalways_combは一見同じ動作をしそうですが、小さな違いがあります。
両者の違いについてまとめました。
always@*とalways_combの違い
always@*はマルチドライブできる。always_combはマルチドライブできない
// Syntaxエラー
always_comb begin
a = din;
end
always_comb begin
a = din;
end
// コンパイルOK
always @* begin
b = din;
end
always @* begin
b = din;
end
alwaysは0sで動作しない。always_combは0sで動作する。
下記のようなコードがあります。dinが変化したときにalways文が動作しそうですが、always_combでは0sでも動作します。
module top();
logic a, b;
bit din;
initial begin
#1;
din = 1;
end
always_comb begin
$display("always_comb %d", din);
end
always @* begin
$display("always %d", din);
end
endmodule
// 出力
// always_comb 0
// always_comb 1
// always 1
まとめ
always@*とalways_combの違いについてまとめました。
コメント