Forever Loop
CoddyのVerilogジャーニー「基礎」セクションの一部。レッスン 61/90。
forever ループはコードのブロックを継続的に、forever 繰り返します。自動的に停止することはありません。
forever ループは、end なしで繰り返し実行されます。テストベンチでクロックやその他の連続信号を生成するのに便利です。
構文:
forever begin
// 永遠に繰り返すコード
end簡単な例
forever begin
$display("This prints forever");
endこれは無限に出力し続け、シミュレーションをクラッシュさせます。必ず遅延または停止条件を追加してください。
クロックの生成(一般的な用途)
foreverの最も一般的な用途は、クロックを生成することです:
initial begin
clk = 0;
forever begin
#5 clk = ~clk; // 5時間単位ごとにトグルする
end
endこれにより、シミュレーション全体にわたって動作するクロックが作成されます。
disable を使った forever
disable 文を使って forever ループを停止できます。
initial begin : clock_gen // ここに名前を追加
clk = 0;
forever begin
#5 clk = ~clk;
end
endinitial begin
#100;
disable clock_gen; // これで動作する
endForever とその他の Loop
| Loop | 停止する? | 使用するタイミング |
|---|---|---|
for | はい(固定回数の反復後) | repeats の回数が既知の場合 |
while | はい(条件が false のとき) | 停止条件が不明な場合 |
repeat | はい(固定回数の反復後) | repeats の回数が既知の場合 |
forever | いいえ(決して停止しない) | 連続的な信号(クロック) |
重要なルール
| ルール | 説明 |
|---|---|
| 遅延を含める必要がある | #10 または @(posedge clk) |
| 遅延がないと、シミュレーションが停止する | 時間の進行がない無限ループ |
disable と併用して停止する | そうしないとシミュレーションが決して終了しない |
| テストベンチで使用するのが最適 | 合成できない |
チャレンジ
行うこと:
10 time units ごとに切り替わるクロックを生成するため、不足している forever loop を追加します。
自分で試してみよう
module forever_challenge;
reg clk;
initial begin
clk = 0;
// TODO: 10時間単位ごとにclkをトグルするforeverループを追加
end
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オンラインコンパイラ