工業製造
産業用モノのインターネット | 工業材料 | 機器のメンテナンスと修理 | 産業プログラミング |
home  MfgRobots >> 工業製造 >  >> Industrial programming >> Verilog

Verilog initialブロック:目的、構文、非合成可能な用途

一連のVerilog文は通常、シミュレーションで順次実行されます。これらの文は 手続き ブロック内に配置されます。Verilogには主に2種類の 手続き ブロックがあります:initial と always

構文

initial [single statement]
initial begin [multiple statements] end

initialブロックの用途

initial ブロックは合成可能ではないため、デジタル要素を持つハードウェア回路図に変換できません。したがって、initialブロックはシミュレーションでの使用以外に大きな目的はありません。これらのブロックは主に、変数の初期化と設計ポートへの特定値の駆動に使用されます。

initialブロックはいつ開始し、いつ終了する?

initial ブロックはシミュレーション開始時、時間0単位でスタートします。このブロックはシミュレーション全体で1回だけ実行されます。ブロック内のすべての文が実行されると、initial ブロックの実行は終了します。

上図の module behave には内部信号 a と b があります。initial ブロックには文が1つしかないため、begin と end で囲む必要はありません。この文は、initialブロックが時間0単位で開始するとき、値 2'b10 を a に代入します。

遅延要素がある場合どうなる?

以下のコードには、信号 b に値を代入する追加の文があります。しかし、これは前の文の実行から10時間単位後にのみ起こります。つまり、a が最初に与えられた値で代入され、その後10時間単位後に b が0に代入されます。

1つのモジュールにいくつのinitialブロックを定義できる?

1つのモジュール内に定義できる initial ブロックの数に制限はありません。

以下のコードには 3つ の initial ブロックがあり、すべて同じ時間に開始し並列に実行されます。しかし、各initialブロック内の文と遅延によって、ブロックの完了時間は異なります。

この例では、最初のブロックは遅延20単位、2番目は合計50単位(10+40)、最後は60単位の遅延があります。したがって、少なくとも1つのinitialブロックが60時間単位まで実行中であるため、シミュレーションは60時間単位で完了します。

$finish は、シミュレータに現在のシミュレーションを終了させるVerilogシステムタスクです。

最後のブロックの遅延が30時間単位だった場合(以下)、シミュレーションは30時間単位で終了し、その時点でアクティブな他の initial ブロックもすべて強制終了されます。

initial begin #30 $finish; end
シミュレーション例のスライドショーはこちら!

Verilog

  1. Verilogマスター:デジタル回路設計のための完全チュートリアル
  2. Verilog連結マスター:実践ガイド
  3. Verilogエッセンシャル:簡潔な概要
  4. Verilog代入文の理解:種類、構文、ベストプラクティス
  5. Verilogブロッキング代入とノンブロッキング代入:違いを徹底解説
  6. Verilog関数のマスター:効率的なRTL設計のために
  7. Verilogタスクの理解:関数との違い、構文、使用法
  8. Verilogクロックジェネレータ:設計と実装ガイド
  9. Verilog数学関数のマスター:効率的なハードウェア設計のために
  10. Verilog $timeformatのマスター:精度と表示制御
  11. 任意のスコープでのVerilog timescale理解と表示