|   | 
  | 
 
  | 
 | 
 | 
 
 | 
|   | 
  | 
 
  | 
|   | 
  | 
Looping Statements
 | 
 
 | 
 | 
Looping statements appear inside procedural blocks only; Verilog has four looping statements like any other programming language.  | 
|   | 
  | 
 
  | 
 | 
 | 
 | 
|   | 
  | 
 
  | 
|   | 
  | 
The forever statement
 | 
 
 | 
 | 
The forever loop executes continually, the loop never ends. Normally we use forever statements in initial blocks.  | 
|   | 
  | 
 
  | 
 | 
 | 
syntax : forever < statement >  | 
|   | 
  | 
 
  | 
 | 
 | 
One should be very careful in using a forever statement: if no timing construct is present in the forever statement, simulation could hang. The code below is one such application, where a timing construct is included inside a forever statement.  | 
|   | 
  | 
 
  | 
|   | 
  | 
Example - Free running clock generator
 | 
 
|   | 
  | 
 
  | 
 | 
 | 
  1 module forever_example ();
  2 
  3 reg clk;
  4 
  5 initial begin
  6    #1  clk = 0; 
  7   forever begin
  8      #5  clk =  ! clk; 
  9   end
 10 end 
 11 
 12 initial begin
 13   $monitor ("Time = %d  clk = %b",$time, clk);
 14    #100  $finish;
 15 end
 16 
 17 endmodule
You could download file forever_example.v here
 | 
|   | 
  | 
 
  | 
|   | 
  | 
The repeat statement
 | 
 
 | 
 | 
The repeat loop executes < statement > a fixed < number > of times.  | 
|   | 
  | 
 
  | 
 | 
 | 
syntax : repeat (< number >) < statement >  | 
|   | 
  | 
 
  | 
 | 
 | 
 
 | 
|   | 
  | 
 
  | 
|   | 
  | 
Example- repeat
 | 
 
|   | 
  | 
 
  | 
 | 
 | 
  1 module repeat_example();
  2 reg  [3:0] opcode;
  3 reg  [15:0] data;
  4 reg        temp;
  5 
  6 always @ (opcode or data)
  7 begin
  8   if (opcode == 10) begin
  9     // Perform rotate
 10     repeat (8) begin 
 11        #1  temp = data[15];
 12       data = data << 1;
 13       data[0] = temp;   
 14     end 
 15   end
 16 end
 17 // Simple test code
 18 initial begin
 19    $display (" TEMP  DATA");
 20    $monitor (" %b     %b ",temp, data);
 21     #1  data = 18'hF0;
 22     #1  opcode = 10;
 23     #10  opcode = 0;
 24     #1  $finish;
 25 end
 26 
 27 endmodule
You could download file repeat_example.v here
 | 
|   | 
  | 
 
  | 
|   | 
  | 
The while loop statement
 | 
 
|   | 
  | 
 
  | 
 | 
 | 
The while loop executes as long as an < expression > evaluates as true. This is the same as in any other programming language.  | 
|   | 
  | 
 
  | 
 | 
 | 
syntax : while (< expression >) < statement >  | 
|   | 
  | 
 
  | 
|   | 
  | 
Example- while 
 | 
 
|   | 
  | 
 
  | 
 | 
 | 
  1 module while_example();
  2 
  3 reg [5:0] loc;
  4 reg [7:0] data;
  5 
  6 always @ (data or loc)
  7 begin
  8   loc = 0;
  9   // If Data is 0, then loc is 32 (invalid value)
 10   if (data == 0) begin
 11     loc = 32;
 12   end else begin
 13     while (data[0] == 0) begin
 14       loc = loc + 1;
 15       data = data >> 1;
 16     end
 17   end 
 18   $display ("DATA = %b   LOCATION = %d",data,loc);
 19 end
 20 
 21 initial begin
 22    #1  data = 8'b11;
 23    #1  data = 8'b100;
 24    #1  data = 8'b1000;
 25    #1  data = 8'b1000_0000;
 26    #1  data = 8'b0;
 27    #1  $finish;
 28 end
 29 
 30 endmodule
You could download file while_example.v here
 | 
|   | 
  | 
 
  | 
|   | 
  | 
The for loop statement
 | 
 
 | 
 | 
The for loop is the same as the for loop used in any other programming language.  | 
|   | 
  | 
 
  | 
 | 
 | 
-     Executes an < initial assignment > once at the start of the loop.
 
-     Executes the loop as long as an < expression > evaluates as true.
 
-     Executes a < step assignment > at the end of each pass through the loop.
 
 
 | 
|   | 
  | 
 
  | 
 | 
 | 
syntax : for (< initial assignment >; < expression >, < step assignment >) < statement >  | 
 | 
 | 
Note : verilog does not have ++ operator as in the case of C language.   | 
|   | 
  | 
 
  | 
|   | 
  | 
Example - For
 | 
 
|   | 
  | 
 
  | 
 | 
 | 
  1 module for_example();
  2 
  3 integer i;
  4 reg [7:0] ram [0:255];
  5 
  6 initial begin
  7   for (i = 0; i < 256; i = i + 1) begin
  8      #1  $display(" Address = %g  Data = %h",i,ram[i]);
  9     ram[i] <= 0; // Initialize the RAM with 0
 10      #1  $display(" Address = %g  Data = %h",i,ram[i]);
 11   end
 12    #1  $finish;
 13 end
 14 
 15 endmodule
You could download file for_example.v here
 | 
|   | 
  | 
 
  | 
|   | 
  | 
 
  | 
|   | 
  | 
 
  | 
 | 
 | 
 
 | 
|   | 
  | 
 
  |