クロックとリセット

clock はクロック配線を表す特別な型です。クロックの極性を指定するため以下の3種類があります。

  • clock: ビルド時の設定で指定される極性を持つクロック型
  • clock_posedge: 正極性のクロック型
  • clock_negedge: 負極性のクロック型

reset はリセット配線を表す特別な型です。リセットの極性と同期・非同期を指定するため以下の5種類があります。

  • reset: ビルド時の設定で指定される極性と同期性を持つリセット型
  • reset_async_high: 正極性の非同期リセット型
  • reset_async_low: 負極性の非同期リセット型
  • reset_sync_high: 正極性の同期リセット型
  • reset_sync_low: 負極性の同期リセット型

特別な要件がなければ、コードの再利用を高めるため clockreset の使用を推奨します。

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;
        }
    }
}