ためになるホームページ お問い合わせ




TOP > Verilog > repeatとforever文
repeat文
指定した回数文実行する。repeatの式を評価した値の数分実行される。繰り返しの数が決まっている時に便利。
(書式) repeat(式)

forever文
指定した処理を無限に実行させる事ができる。例えば、クロックの生成に使用する事もできる。iniatial文やalways文の中で利用できる。

repeatとforever文の例
module testbench;

reg CLK;
reg RST;
reg [31:0] MEM[0:9];
reg [31:0] INDATA;
wire [3:0] XDATA;
parameter STEP = 10;
parameter MAX_CNT = 100;
integer i;

initial begin
  forever begin
  #(STEP * 0.5) CLK = ~CLK;
  end
end
initial begin
  $dumpfile("wave.vcd");
  $dumpvars(0, testbench);
  $readmemh("data.hex", MEM);
  #0 CLK = 1;
  #0 RST = 0;
  #10 RST = 1;
end

test test(
    .CLK(CLK),
    .INDATA(INDATA),
    .RST(RST),
    .XDATA(XDATA)
    );

initial begin
  repeat(MAX_CNT) begin
    #STEP;
  end
  for (i = 0; i < 10; i = i + 1) begin
    #1 INDATA <= MEM[i];
  end
end

always @(posedge CLK)
  if (XDATA == 4'ha) begin
    $finish;
  end


endmodule



module test(CLK, RST, INDATA, XDATA);
input CLK;
input RST;
input [31:0] INDATA;
output [3:0] XDATA;
reg [3:0] XDATA;

always @(posedge CLK) begin
  if (~RST) XDATA <= 4'h0;
  else      XDATA <= INDATA[3:0];
end


endmodule

//以下はdata.hexの内容
0_0_0_0_0_0_0_1
0_0_0_0_0_0_0_2
0_0_0_0_0_0_0_3
0_0_0_0_0_0_0_4
0_0_0_0_0_0_0_5
0_0_0_0_0_0_0_6
0_0_0_0_0_0_0_7
0_0_0_0_0_0_0_8
0_0_0_0_0_0_0_9
0_0_0_0_0_0_0_a






Copyright 2007 ためになるホームページ All Rights Reserved.