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 の比較
initial | always | |
|---|---|---|
| Runs | once | 連続的に(永遠に) |
| 用途 | テストベンチ、初期化 | ハードウェア(フリップフロップ、カウンター) |
| 合成可能? | いいえ(シミュレーションのみ) | はい(センシティビティリスト付き) |
重要な注意事項
initialブロックは合成できませんinitialはテストベンチでのみ使用してください- テストベンチにフリーランニングクロック(例:
always #5 clk = ~clk;)が含まれている場合、$finishを呼び出さない限りsimulationは永遠にrunsします。initialブロックだけの場合、イベントが残っていなければシミュレータは自動的に停止しますが、それでも$finishを追加するのは良い習慣です
チャレンジ
不足しているinitialブロックをAddします。このブロックはaを0に設定し、その後10 time units経過したらaを1に設定します。
実行すること:
initial beginとendをAddしますa = 0を設定します#10をWaitしますa = 1を設定します- simulationのendに$finishをAddします
自分で試してみよう
module test;
reg a;
// TODO: ここにinitialブロックを追加
// a = 0 を設定
// #10 待つ
// a = 1 を設定
// シミュレーションを終了するために $finish; を追加
endmoduleこのレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
基礎のすべてのレッスン
4Operators Part 1
Arithmetic OperatorsModulo OperatorComparison OperatorsRecap - Simple MathBitwise Operators7Assign And Gates
Continuous AssignmentAssign With OperatorsBuilt In Gate PrimitivesAND OR NOT GatesXOR XNOR GatesRecap - Logic Gate Circuit10Decision Making
If StatementIf - ElseRecap - Simple ComparatorCase StatementCasex And CasezRecap - ALU Design5Operators Part 2
Logical OperatorsReduction OperatorsShift OperatorsConcatenation OperatorConditional OperatorRecap - Operator Challenge3Number System
Binary RepresentationSized NumbersUnsized NumbersNegative NumbersSpecial Values X And ZRecap - Number Formats6Modules
Module StructureInput And Output PortsInout PortsModule InstantiationPort Mapping By NamePort Mapping By OrderRecap - Build A Module9Procedural Blocks
Always BlockInitial BlockSensitivity ListBlocking AssignmentNon Blocking AssignmentRecap - Always vs Initial15Traffic Light Controller
Defining The StatesState Machine Logic自分で練習してみよう: Verilogオンラインコンパイラ