Poll

Do you like the discussion forum ?

A for loop in SystemVerilog repeats a given set of statements multiple times until the given expression is not satisfied. Like all other procedural blocks, the for loop requires multiple statements within it to be enclosed by begin and end keywords.

Syntax

For loop controls execution of its statements using a three step approach:

  1. Initialize the variables that affect how many times the loop is run
  2. Before executing the loop, check to see if the condition is true
  3. The modifier is executed at the end of each iteration, and jumps to step 2.

 
  for ( [initialization]; <condition>; [modifier])
    // Single statement
 
  for ( [initialization]; <condition>; [modifier]) begin
    // Multiple statements
  end
 

Example #1 - Array Iteration

In this example, we will iterate through a string array and print out its contents. The array array is initialized with 5 different names of fruits.

The for loop initialization declares a local variable called i that represents index of any element in the array. The conditional expression checks that i is less than size of the array. The modifier increments the value of i so that every iteration of the for loop operates on a different index.

 
module tb;
  string array [5] = '{"apple", "orange", "pear", "blueberry", "lemon"};
 
  initial begin
    for (int i = 0; i < $size(array); i++)
      $display ("array[%0d] = %s", i, array[i]);
  end
endmodule
 
Simulation Log
ncsim> run
array[0] = apple
array[1] = orange
array[2] = pear
array[3] = blueberry
array[4] = lemon
ncsim: *W,RNQUIE: Simulation is complete.

Example #2 - Multiple Initializations

There can be multiple initializations done in the first part of a for loop. In the code shown below, variables i and j are both initialized as soon as the for loop is entered. To keep the example interesting, the index of each string pointed to by j is replaced by 0.

 
module tb;
  string array [5] = '{"apple", "orange", "pear", "blueberry", "lemon"};
 
  initial begin
      for (int i = 0, j = 2; i < $size(array); i++) begin
      array[i][j] = "0";
        $display ("array[%0d] = %s, %0dth index replaced by 0", i, array[i], j);
    end
  end
endmodule
 
Simulation Log
 
ncsim> run
array[0] = ap<span class="code-hl-yellow">0</span>le, 2th index replaced by 0
array[1] = or0nge, 2th index replaced by 0
array[2] = pe0r, 2th index replaced by 0
array[3] = bl0eberry, 2th index replaced by 0
array[4] = le0on, 2th index replaced by 0
ncsim: *W,RNQUIE: Simulation is complete.
 

Example #3 - Adding multiple modifiers

In the code shown below, j is decremented after each iteration of the for loop along with incrementing i.

 
module tb;
  string array [5] = '{"apple", "orange", "pear", "blueberry", "lemon"};
 
  initial begin
      for (int i = 0, j = array[i].len() - 1; i <  $size(array); i++, j--) begin
      array[i][j] = "0";
        $display ("array[%0d] = %s, %0dth index replaced by 0", i, array[i], j);
    end
  end
endmodule
 
Simulation Log
ncsim> run
array[0] = appl0, 4th index replaced by 0
array[1] = ora0ge, 3th index replaced by 0
array[2] = pe0r, 2th index replaced by 0
array[3] = b0ueberry, 1th index replaced by 0
array[4] = 0emon, 0th index replaced by 0
ncsim: *W,RNQUIE: Simulation is complete.

You may also like:

You consent to our cookies if you continue to use our website. To know more about cookies, see our privacy policy. I accept cookies from this site.

Agree