モジュール

モジュールはソースコードの最上位コンポーネントの1つです。モジュールはオーバーライド可能なパラメータ、接続ポート、内部ロジックを持ちます。

オーバーライド可能なパラメータは #() 内で宣言できます。それぞれのパラメータ宣言は param キーワードで始まり、識別子、:、パラメータの型、デフォルト値で構成されます。

接続ポートは () 内で宣言できます。それぞれのポート宣言は識別子、:、ポートの方向、ポートの型で構成されます。利用可能なポート方向は以下の通りです。

  • input:入力ポート
  • output:出力ポート
  • inout:双方向ポート
  • modport:インターフェースのmodport
  • interface: ジェネリックインターフェース
module ModuleA #(
    param ParamA: u32 = 0,
    param ParamB: u32 = 0,
) (
    a: input  logic,
    b: input  logic,
    c: input  logic,
    x: output logic,
) {
    always_comb {
        if c {
            x = a;
        } else {
            x = b;
        }
    }
}

ジェネリックインターフェース

ジェネリックインターフェースは特別なポート方向指定です。interface が指定されたとき、そのポートには任意のインターフェースを接続可能です。interface::ModPort のように modport を付けることもできます。この場合、ModPort を持つインターフェースだけが接続できます。

module ModuleA (
    bus_if  : interface,
    slave_if: interface::slave,
) {}