# 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;
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) <+ transition(result & (1 << 0) ? Vdd : Vss, 0, 100n);
V(out) <+ transition(result & (1 << 1) ? Vdd : Vss, 0, 100n);
V(out) <+ transition(result & (1 << 2) ? Vdd : Vss, 0, 100n);
V(out) <+ 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;
data = data >> 1;
end
```

The above code counts the number of ones in an 8 bit number.