Menu
Coddy logo textTech

Initial Block

CoddyのVerilogジャーニー「基礎」セクションの一部。レッスン 47/90。

Verilogには2つの手続きブロックがあります。initial(1回実行)とalways(継続的に実行)です。ここではinitialブロックについて説明します。

Initialブロックとは?

initialブロックは、simulationの開始時(time 0)に1回だけ実行されます。完了すると、再び実行されることはありません。

主にテストベンチで次の目的に使用されます:

  • 初期値の設定
  • テスト信号の生成
  • メッセージの表示
  • シミュレーションの開始

構文

initial begin
  // ステートメントは一度だけ、順番に実行される
end

基本例

initial begin
  $display("Simulation started");
  $display("This runs once");
  $finish;
end

出力:

Simulation started
This runs once

テスト信号に Initial ブロックを使用する

initial begin
  a = 0;
  #10 a = 1;
  #10 a = 0;
  #10 $finish;
end

これにより、a は時刻 0、10、20 で変化します。

initial と always の比較

 initialalways
Runsonce連続的に(永遠に)
用途テストベンチ、初期化ハードウェア(フリップフロップ、カウンター)
合成可能?いいえ(シミュレーションのみ)はい(センシティビティリスト付き)

重要な注意事項

  • initialブロックは合成できません
  • initialテストベンチでのみ使用してください
  • テストベンチにフリーランニングクロック(例: always #5 clk = ~clk;)が含まれている場合、$finishを呼び出さない限りsimulationは永遠にrunsします。initialブロックだけの場合、イベントが残っていなければシミュレータは自動的に停止しますが、それでも$finishを追加するのは良い習慣です
challenge icon

チャレンジ

不足しているinitialブロックをAddします。このブロックはaを0に設定し、その後10 time units経過したらaを1に設定します。

実行すること:

  1. initial beginendをAddします
  2. a = 0を設定します
  3. #10をWaitします
  4. a = 1を設定します
  5. simulationのendに$finishをAddします

自分で試してみよう

module test;
  reg a;
  
  // TODO: ここにinitialブロックを追加
  // a = 0 を設定
  // #10 待つ
  // a = 1 を設定
  // シミュレーションを終了するために $finish; を追加
  
endmodule
quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

基礎のすべてのレッスン

自分で練習してみよう: Verilogオンラインコンパイラ