for
for 文は繰り返しを表します。in キーワードの前にループ変数を、後に範囲を書きます。
break を使ってループを中断することもできます。
module ModuleA {
var a: logic<10>;
always_comb {
for i in 0..10 {
a = i;
if i == 5 {
break;
}
}
}
}
in キーワードの後に rev キーワードを指定することで、ループを降順にすることができます。
module ModuleA {
var a: logic<10>;
always_comb {
for i in rev 0..10 {
a = i;
if i == 5 {
break;
}
}
}
}
ループ変数は繰り返しごとに 1 ずつ進みます。範囲の後に step キーワード、代入演算子、式を続けることでこれを変更できます。ループ変数は繰り返しごとにその演算子で更新されるため、step += 2 なら 2 ずつ増え、step *= 2 なら 2 倍になります。
module ModuleA {
var a: logic<10>;
var b: logic<10>;
always_comb {
for i in 0..10 step += 2 {
a = i;
}
for i in 1..10 step *= 2 {
b = i;
}
}
}
step は rev と組み合わせることもできますが、その場合は += のみ使えます。このときループ変数は指定した量ずつ減っていきます。
module ModuleA {
var a: logic<10>;
always_comb {
for i in rev 0..10 step += 3 {
a = i;
}
}
}
昇順のループでの step += 0 や step -= 1、rev と組み合わせた step *= 2 のように、範囲の終端に到達できない step はエラーになります。