Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

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 はエラーになります。