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箇所にまとめることが出来ると思いますのでそこはケース・バイ・ケースで。