インスタンス
inst
キーワードはモジュールやインターフェースのインスタンス化を表します。インスタンスの名前は inst
の後に、インスタンスの型は :
の後に書きます。#()
でパラメータオーバーライドを、()
でポート接続を表します。
module ModuleA #(
param paramA: u32 = 1,
) {
let a: logic<10> = 1;
let b: logic<10> = 1;
inst instB: ModuleB #(
paramA , // 名前によるパラメータ代入
paramB: 10,
) (
a , // 名前によるポート接続
bb: b,
);
}
module ModuleB #(
param paramA: u32 = 1,
param paramB: u32 = 1,
) (
a : input logic<10>,
bb: input logic<10>,
) {}
bind
宣言もサポートされており、SystemVerilogのbind宣言に変換されます。SystemVerilogと異なり、ターゲットスコープとしてインスタンスを指定することはできず、モジュールかインターフェースのみ指定することができます。
interface InterfaceA {
var a: logic;
modport mp {
a: input,
}
}
module ModuleA (
i_clk: input clock,
i_rst: input reset,
) {
inst a_if: InterfaceA;
}
module ModuleB (
i_clk: input clock ,
i_rst: input reset ,
a_if : modport InterfaceA::mp,
) {}
module ModuleC {
bind ModuleA <- u0: ModuleB (
i_clk ,
i_rst ,
a_if ,
);
}
bind ModuleA <- u1: ModuleB (
i_clk: i_clk,
i_rst: i_rst,
a_if : a_if ,
);