Verilog 初期ブロック
Verilog ステートメントのセットは、通常、シミュレーションで順番に実行されます。これらのステートメントはプロシージャル内に配置されます ブロック。 手続き型には主に2つのタイプがあります Verilog のブロック - 初期 そして常に
構文
initial
[single statement]
initial begin
[multiple statements]
end
最初のブロックは何に使用されますか?
initial
ブロックは合成できないため、デジタル要素を含むハードウェア回路図に変換できません。したがって、初期ブロックは、シミュレーションで使用する以外にはあまり役に立ちません。これらのブロックは、主に変数を初期化し、特定の値で設計ポートを駆動するために使用されます。
初期ブロックの開始と終了はいつですか?
initial
ブロックは、時間 0 単位でのシミュレーションの開始時に開始されます。このブロックは、シミュレーション全体で 1 回だけ実行されます。 initial
の実行 ブロック内のすべてのステートメントが実行されると、ブロックは終了します。
上記の画像には module
があります これには、a と b という 2 つの内部信号があります。 initial
ブロックにはステートメントが 1 つしかないため、ステートメントを begin
内に配置する必要はありません。 と end
.このステートメントは、最初のブロックが時間 0 単位で開始されたときに、値 2'b10 を a に割り当てます。
遅延要素がある場合はどうなりますか?
以下に示すコードには、信号 b に何らかの値を割り当てる追加のステートメントがあります。ただし、これは前のステートメントの実行から 10 時間単位後にのみ発生します。これは、最初に a に指定された値が割り当てられ、次に 10 単位時間後に b に 0 が割り当てられることを意味します。
モジュールで許可される初期ブロックの数は?
initial
の数に制限はありません モジュール内で定義できるブロック。
以下に示すコードには 3 があります initial
ブロックはすべて同時に開始され、並行して実行されます。ただし、各初期ブロック内のステートメントと遅延に応じて、ブロックの終了にかかる時間は異なる場合があります。
この例では、最初のブロックには 20 単位の遅延があり、2 番目のブロックには合計 50 単位 (10 + 40) の遅延があり、最後のブロックには 60 単位の遅延があります。したがって、少なくとも 1 つの初期ブロックがまだ 60 時間単位まで実行されているため、シミュレーションが完了するまでに 60 時間単位かかります。
$finish
現在のシミュレーションを終了するようにシミュレータに指示する Verilog システム タスクです。
以下に示すように、最後のブロックに 30 時間単位の遅延がある場合、シミュレーションは 30 時間単位で終了し、他のすべての initial
を殺します。 その時点でアクティブなブロック。
initial begin
#30 $finish;
end
以下に示すフラッシュの例をチェックして、initial
ブロックはシミュレーションで実行されます。
シミュレーション例のスライドショーはここをクリック!
Verilog