ループ

# このページは,学生実験用資料として筑波大学リコンフィギュラブルコンピューティングシステム研究室のwebページで公開されていたものを,許可を得て転載したものです.


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文を用いる際は必ずシミュレーションすること。

戻る