私はここverilogのように新しいです...このプログラムの=と<=の違いについて質問したいですか?そして、どのようにデータの価値を印刷するのですか?
module always_example();
reg clk,reset,enable,q_in,data;
always @ (posedge clk)
if (reset) begin
data <= 0;
end else if (enable) begin
data <= q_in;
end
// if i put $print("data=%d", data); there is error
endmodule
<=は非ブロッキング割り当てです。コード例のように、シーケンシャルロジックを記述するために使用されます。 IEEE Std 1800-2012のセクション10.4.2「非ブロッキング手順の割り当て」を参照してください。
=割り当てをブロックするためのものです。組み合わせロジックを記述するために使用されます。
関連項目 Verilog合成での非ブロッキング割り当て、強制終了するコーディングスタイル!
$display
の代わりに$print
を使用して、変数の値を出力できます。 IEEE Std 1800-2012のセクション21.2「システムタスクの表示」も参照してください。
=はブロックステートメントです。 always
ブロックでは、コード行は前の行が実行された後にのみ実行されます。したがって、ループ内の組み合わせロジックのように、それらは次々に発生します。
<=は本質的に非ブロッキングです。つまり、always
ブロックでは、すべての行が並行して実行されます。したがって、順次要素の実装につながります。