クロックとリセット
clock はクロック配線を表す特別な型です。クロックの極性を指定するため以下の3種類があります。
clock: ビルド時の設定で指定される極性を持つクロック型clock_posedge: 正極性のクロック型clock_negedge: 負極性のクロック型
reset はリセット配線を表す特別な型です。リセットの極性と同期・非同期を指定するため以下の5種類があります。
reset: ビルド時の設定で指定される極性と同期性を持つリセット型reset_async_high: 正極性の非同期リセット型reset_async_low: 負極性の非同期リセット型reset_sync_high: 正極性の同期リセット型reset_sync_low: 負極性の同期リセット型
特別な要件がなければ、コードの再利用を高めるため clock と reset の使用を推奨します。
module ModuleA (
i_clk : input '_ clock ,
i_clk_p : input '_ clock_posedge ,
i_clk_n : input '_ clock_negedge ,
i_rst : input '_ reset ,
i_rst_a : input '_ reset_async_high,
i_rst_a_n: input '_ reset_async_low ,
i_rst_s : input '_ reset_sync_high ,
i_rst_s_n: input '_ reset_sync_low ,
) {
var a: logic;
var b: logic;
var c: logic;
always_ff (i_clk, i_rst) {
if_reset {
a = 0;
} else {
a = 1;
}
}
always_ff (i_clk_p, i_rst_a) {
if_reset {
b = 0;
} else {
b = 1;
}
}
always_ff (i_clk_n, i_rst_s_n) {
if_reset {
c = 0;
} else {
c = 1;
}
}
}
デフォルトクロックとリセット
クロックが複数あるものの、 always_ff では単一のクロックしか使われない場合があります。このような場合に default 型修飾子を使ってデフォルトのクロックとリセットを明示することができます。
module ModuleA (
i_clk : input clock,
i_clk_en: input logic,
) {
let clk: '_ default clock = i_clk & i_clk_en;
var a: logic;
always_ff {
a = 0;
}
}