virtual interface paramter記述

引数にinterfaceで思い出したのですが、interfaceにparameter持たせた時に 仮引数の宣言の仕方がさっぱりわからなかった記憶が。

ってなことだったので、試してみました。

interface if_hoge#(parameter BW = 8)();
  logic [BW-1:0] data;
endinterface : if_hoge

class fuga;

  virtual if_hoge#(9) vif;

  function void assign_vi(virtual if_hoge#(9) vi);
    vif = vi;
  endfunction

  task write(int data);
    vif.data = data;
  endtask

  function int read();
    read = vif.data;
  endfunction

endclass : fuga

module testbench ();

  if_hoge#(9) if_test();
  fuga utest = new;

  initial begin
    utest.assign_vi(if_test);

    if_test.data = 'hff;
    #100; $display("if_test.data    = %0d", if_test.data);
    #100; $display("utest.vif.data  = %0d", utest.vif.data);
    #100; $display("utest.read data = %0d", utest.read());

    utest.write('h1ff);
    #100; $display("if_test.data    = %0d", if_test.data);
    #100; $display("utest.vif.data  = %0d", utest.vif.data);
    #100; $display("utest.read data = %0d", utest.read());

    $finish();
  end

endmodule: testbench
  • 実行結果
# if_test.data    = 255
# utest.vif.data  = 255
# utest.read data = 255
# if_test.data    = 511
# utest.vif.data  = 511
# utest.read data = 511

もちろんパラメータ(#(9))を書かなければデフォルト値(8)が入ります。
しかし、これだとパラメータ(BW)を設定する箇所が非常に多いですね。(3箇所)
たぶん、1箇所にまとめることが出来ると思いますのでそこはケース・バイ・ケースで。