レジスタ
レジスタ変数とは always_ff
で代入される変数です。合成フェーズでフリップフロップにマップされます。
always_ff
は必須のクロック変数、オプションのリセット変数、{}
ブロックをとります。クロックとリセットは ()
に書きます。指定されたクロックとリセットは clock
/ reset
型を持ち、そのビット幅は1ビットでなければなりません。
if_reset
は always_ff
に書ける特別なキーワードで、そのレジスタ変数のリセット条件を示します。if_reset
を使う場合は always_ff
のリセット変数は必須です。これを使うことで、リセットの極性と同期性を隠ぺいすることができます。実際の極性と同期性は Veryl.toml
の [build]
セクションで設定できます。
モジュール内にクロックとリセットが1つしかない場合、クロックとリセットの指定は省略できます。
module ModuleA (
i_clk: input clock,
i_rst: input reset,
) {
var a: logic<10>;
var b: logic<10>;
var c: logic<10>;
always_ff (i_clk) {
a = 1;
}
always_ff (i_clk, i_rst) {
if_reset {
b = 0;
} else {
b = 1;
}
}
always_ff {
if_reset {
c = 0;
} else {
c = 1;
}
}
}