Repeatループ
CoddyのVerilogジャーニー「基礎」セクションの一部 — レッスン 60/90。
repeatループは、コードブロックを決められた回数実行します。forループとは異なり、ループカウンタ変数を使用しません。
repeat ループは、指定された回数だけ実行されます。実行する反復回数を決定する定数または式を渡します。
構文:
repeat (number) begin
// 繰り返すコード
end簡単な例
repeat (5) begin
$display("Hello");
end出力:
Hello
Hello
Hello
Hello
Helloメッセージは正確に5回表示されます。
式を使用した繰り返し
integer count = 3;
repeat (count) begin
$display("Looping");
end出力:
Looping
Looping
LoopingRepeat と For ループ
| For ループ | Repeat ループ | |
|---|---|---|
| カウンタ変数 | あり(明示的) | なし |
| いつ使うか | インデックス値が必要なとき | 単に繰り返しが必要なとき |
| 例 | for (i=0; i<5; i=i+1) | repeat (5) |
複数のクロックサイクルの生成
initial begin
clk = 0;
repeat (20) begin
#5 clk = ~clk;
end
endこれにより、20個のクロックエッジ(10個の完全なサイクル)が生成されます。
重要なルール
| ルール | 説明 |
|---|---|
| 数値は非負である必要があります | 負の回数繰り返すことはできません |
| 定数または式を使用できます | repeat (10) または repeat (count) |
| ループ変数は利用できません | 反復回数を追跡することはできません |
複数のステートメントには begin/end を使用してください | 2行以上の場合は必須です |
チャレンジ
やること:
不足している repeat ループを追加して、"Verilog" を4回表示してください。
チートシート
repeat ループは、ループカウンタ変数を使わずに、コードブロックを固定回数実行します。
repeat (number) begin
// 繰り返すコード
end定数または変数式を使用できます:
integer count = 3;
repeat (count) begin
$display("Looping");
end一般的なユースケース — クロックサイクルの生成:
repeat (20) begin
#5 clk = ~clk;
endRepeat vs For Loop: 反復のみが必要な場合(インデックスが不要な場合)は repeat を使用し、イテレーションカウンタの値が必要な場合は for を使用します。
自分で試してみよう
module repeat_challenge;
initial begin
$display("Printing 4 times:");
// TODO: repeatループを追加
// 4回繰り返す
// 内部で "Verilog" を表示する
$finish;
end
endmoduleこのレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。