Looping Statements
While Statements
A while statement evaluates an expression and repeatedly executes the subsequent statement if the expression evaluates to true. For example:
ones = 0;
while (data) begin
ones = ones + data[0];
data = data >> 1;
end
This code counts the number of bits that are 1 in a number.
For Statements
The for statement is used to iterate through a range of values. For example:
for (i=0; i<4; i=i+1)
$strobe("V(out[%d] = %rV", i, V(out[i]));
This is equivalent to:
i = 0;
while (i < 4) begin
$strobe("V(out[%d] = %rV", i, V(out[i]));
i = i + 1;
end
Thus, ‘i = 0’ is acting as the initializer, ‘i < 64’ the conditional that indicates the loop should continue, and ‘i = i + 1’ the incrementer.
If the index variable used is a genvar, then the loop can be unrolled in advance, which can help avoid certain restrictions on contributions and analog operators and filters. For example:
genvar i;
for (i=0; i<4; i=i+1)
V(out[i]) <+ transition(result & (1 << i) ? Vdd : Vss, 0, 100n);
This is equivalent to:
V(out[0]) <+ transition(result & (1 << 0) ? Vdd : Vss, 0, 100n);
V(out[1]) <+ transition(result & (1 << 1) ? Vdd : Vss, 0, 100n);
V(out[2]) <+ transition(result & (1 << 2) ? Vdd : Vss, 0, 100n);
V(out[3]) <+ transition(result & (1 << 3) ? Vdd : Vss, 0, 100n);
Repeat Statements
A repeat statement evaluates an expression and then executes the subsequent statement that many times. For example:
ones = 0;
repeat (8) begin
ones = ones + data[0];
data = data >> 1;
end
The above code counts the number of ones in an 8 bit number.