Menu
Coddy logo textTech

initial ブロック

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

Verilogには2つのプロシージャルブロックがあります。initial(1回だけ実行)とalways(継続的に実行)です。それでは、initialブロックについて説明します。

initialブロックとは何ですか?

initialブロックは、シミュレーションの開始時(時刻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
実行1回のみ継続的(永続的)
用途テストベンチ、初期化ハードウェア(フリップフロップ、カウンタ)
論理合成可能か?不可(シミュレーションのみ)可能(センシティビティ・リストが必要)

重要な注意事項

  • initial ブロックは論理合成可能ではありません — ハードウェアに変換することはできません
  • initialテストベンチ内でのみ使用してください
  • $finish がないと、シミュレーションは永久に実行されます(停止させるためのクロックがないため)
challenge icon

チャレンジ

a を 0 に設定し、10 時間単位後に a を 1 に設定する、欠落している initial ブロックを追加してください。

手順:

  1. initial beginend を追加する
  2. a = 0 を設定する
  3. #10 待機する
  4. a = 1 を設定する
  5. シミュレーションを終了するために $finish を追加する

チートシート

initialブロックは、シミュレーション時刻0に1回だけ実行されます。テストベンチでのみ使用されます(論理合成不可)。

initial begin
  a = 0;       // 時刻0で設定
  #10 a = 1;   // 時刻10で設定
  #10 a = 0;   // 時刻20で設定
  $finish;     // シミュレーション終了
end

$finishがないと、シミュレーションは永久に実行されます。

initialalways
実行1回継続的
用途テストベンチハードウェア
論理合成可能か?いいえはい

自分で試してみよう

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

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

基礎のすべてのレッスン