[SystemVerilog] virtual interface paramter記述

きっかけは SystemVerilog読書会 でのことです。

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

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

 1 interface if_hoge#(parameter BW = 8)();
 2   logic [BW-1:0] data;
 3 endinterface : if_hoge
 4 
 5 class fuga;
 6 
 7   virtual if_hoge#(9) vif;
 8 
 9   function void assign_vi(virtual if_hoge#(9) vi);
10     vif = vi;
11   endfunction
12 
13   task write(int data);
14     vif.data = data;
15   endtask
16 
17   function int read();
18     read = vif.data;
19   endfunction
20 
21 endclass : fuga
22 
23 module testbench ();
24 
25   if_hoge#(9) if_test();
26   fuga utest = new;
27 
28   initial begin
29     utest.assign_vi(if_test);
30 
31     if_test.data = 'hff;
32     #100; $display("if_test.data    = %0d", if_test.data);
33     #100; $display("utest.vif.data  = %0d", utest.vif.data);
34     #100; $display("utest.read data = %0d", utest.read());
35 
36     utest.write('h1ff);
37     #100; $display("if_test.data    = %0d", if_test.data);
38     #100; $display("utest.vif.data  = %0d", utest.vif.data);
39     #100; $display("utest.read data = %0d", utest.read());
40 
41     $finish();
42   end
43 
44 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箇所にまとめることが出来ると思いますのでそこはケース・バイ・ケースで。


さて、このような感じでその場で思ったことなどを発言していただくも良し!
ROMになるのも良し!っといった感じで、SystemVerilog読書会を毎週土曜日に開催しています。
もちろん本日もやります!!!是非、ご参加ください♪

  • 日時:2013/5/4(土) 22:30~
  • 内容:8. Classes(part II) - 8.16 Casting
関連記事

コメントの投稿

非公開コメント

プロフィール

Kocha

Author:Kocha
なんでもチャレンジ!(^o^)/
E-mail
github:Kocha
イベントカレンダー

カレンダー
09 | 2017/10 | 11
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31 - - - -
カテゴリ
OVP (4)
最新記事
最新コメント
アーカイブ
リンク
Twitter
アクセス人数