Interfaceを使ってVerilog記述のRTLと接続

Verilogで書いたRTLとSystemVerilogで書いたテスト用モデルをInterfaceを使って繋ぎたい場合は、RTLのインスタンス呼び出し時のポートリストに『インターフェイス名.信号名』と書くことで上手くいった。記述量はあんまり減っていないような気がするけど・・・

Verilogで書いたRTL

module master_rtl(cs, rw, ad, wdt, rdt);
  output cs;
  output rw;
  output [31:0] ad;
  output [31:0] wdt;
  input  [31:0] rdt;endmodule

・SystemVerilogで書いたシミュレーションモデル

module slave_model(interface slave_if);endmodule

・Interfaceの定義

interface bus_if;
  logic cs;
  logic rw;
  logic [31:0] ad;
  logic [31:0] wdt;
  logic [31:0] rdt;

  // slave_modelに接続するポートの向きを宣言
  modport slave(input cs, rw, ad, wdt,
                output rdt);
  /*
  modport master(output cs, rw, ad, wdt,
                 input rdt);
  */
endinterface

・テストベンチのトップ

module bench_top;
  bus_if bus;
  master_rtl master( .cs(bus.cs),
                     .rw(bus.rw),
                     .ad(bus.ad),
                     .wdt(bus.wdt),
                     .rdt(bus.rdt));
  slave_model slave( .slave_if(bus.slave) );
endmodule

ちなみに、Interfaceの定義内でRTL用のmodportを宣言し、RTLのインスタンス呼び出しで『.cs(bus.master.cs)』のように記述するとエラーになった。RTL内とInterface内の両方でポートの向きを宣言しているとダメみたい。