ループ

for文

for(初期化; 終了条件; 処理終了ごとに実行される処理) 処理

for文は、終了条件を満たすまで処理を繰り返すか、処理を展開します。

parameter WIDTH = 8;
parameter INIT = 8'b0;
parameter DEPTH = 16;

// for文内で使用する変数の宣言
integer i;


reg [WIDTH - 1: 0] queue [DEPTH - 1: 0];

always @(posedge clock) begin
 
if(reset) begin
    for(i = 0; i < DEPTH; i = i + 1) begin // i++, ++iとは記述できない
      queue[i] <= INIT;
    end
    // これは以下と等価な回路を生成することが期待される。
    // queue[0] <= INIT;
   
// queue[1] <= INIT;
    // queue[2] <= INIT;
    // ...
   
// queue[9] <= INIT
;

 
end else begin
    for(i = 1; i < DEPTH; i = i + 1) begin
      queue[i - 1] <= queue[i];
    end
   
// これは以下と等価な回路を生成することが期待される。

   
// queue[0] <= queue[1];
    // queue[1] <= queue[2];
   
// queue[2] <= queue[3];
   
// ...
   
// queue[8] <= queue[9];
...

forever文

forever 処理

処理を永遠に続けます。テストベンチを作成する際に用いられます。

module TestCounter();
reg clock;

initial begin
forever begin
   // シミュレーションのためのクロックを生成

 clock = 0;
#20 clock = 1;
end
end
...

repeat文

処理を指定した回数だけ繰り返します。

repeat(回数) 処理

while文

while(終了条件) 処理
または
while(終了条件) begin 処理 end

応用実験受講者へ

開発環境によってはfor文を展開できないことがあるため、for文を用いる際は必ずシミュレーションをすること。Xilinx ISE 9.2iでは多分大丈夫でしょうが...。