モジュールは本質的にC++関数のようなものだと理解しています。ただし、これらの関数を呼び出すmain()セクションのようなものは見つかりませんでした。main()セクションがないとどのように機能しますか?
3 に答える
HDL で同等の main() を見つけようとする (または概念的に強制しようとする) ことは、HDL を学習する上で間違った方法です。進歩を妨げることになります。合成可能な記述の場合、逐次的思考 (1 つの命令が次々と実行される) から「並列」思考 (すべてが常に実行されている) に飛躍する必要があります。コードを上から下ではなく左から右に見てみると、main() の概念があまり意味がないことに気付くかもしれません。
HDL では、関数を「呼び出す」のではなく、モジュールをインスタンス化し、それらのポートをネットに接続します。繰り返しになりますが、プロセスに対する精神的な見方を変える必要があります。
一度手に入れると、すべてがはるかにスムーズになります...
Verilogの通常の使用は、回路のモデリング/記述であることに注意してください。電源を入れると、すべての回路が動作を開始するため、各部分を安定して使用可能な動作状態にするために、リセットロジックを作成する必要があります。通常、リセットラインを含め、それに応じて初期化を行います。
Veriloginitial
のブロックはmain()
C のようなものです。これらは、時間 0 から実行するようにスケジュールされたステートメントのリストです。Verilog には、initial
同時に実行される複数のブロックを含めることができます。
always
ブロックはmain()
、空の機密リストがあるかのように機能します。
always begin // no sensitivity list
s = 4;
#10; // delay statements, or sim will infinite loop
s = 8;
#10;
end