インターフェース

インターフェースはソースコードの最上位コンポーネントの1つです。インターフェースはオーバーライド可能なパラメータ、インターフェース定義を持ちます。

オーバーライド可能なパラメータについてはモジュールと同じです。

インターフェース定義では modport を宣言することができます。modport はモジュールのポート宣言で、ポートを束ねて接続するために使うことができます。

interface InterfaceA #(
    param ParamA: u32 = 0,
    param ParamB: u32 = 0,
) {
    var a: logic;
    var b: logic;

    modport master {
        a: output,
        b: input ,
    }

    modport slave {
        b: input ,
        a: output,
    }
}

modportのデフォルトメンバー

modportの全てのメンバーを指定する代わりに、以下のようにデフォルトメンバーを指定することができます。

  • ..input: インターフェース内の全ての変数を input として追加
  • ..output: インターフェース内の全ての変数を output として追加
  • ..converse(modport_name): modport_name と同じ変数を、方向を逆にして追加

デフォルトメンバーの指定は通常の明示的なメンバーと一緒に使うこともできます。

interface InterfaceA {
    var a: logic;
    var b: logic;
    var c: logic;

    modport master {
        a: output,
        b: input ,
        c: input ,
    }

    modport slave {
        ..converse(master)
    }

    modport monitor {
        ..input
    }

    modport driver {
        b: input,
        ..output
    }
}