[SystemVerilog] Operator overloading (bind)

第13回 SystemvVerilog読書会


にて、出てきた章になります。
「11.11 Operator overloading」


IEEE1800-2012より引用

overload_declaration ::=
bind overload_operator function data_type function_identifier ( overload_proto_formals ) ;
overload_operator ::=+|++|–|– –|*|**|/|%|==|!=|<|<=|>|>=|=
overload_proto_formals ::= data_type {, data_type}

bind を使って演算子のオーバーロードが可能なようです。
用途としては、自分で定義した型を演算する際に動作決めることが出来ます。
ということで試しに書いてみたのですが、どうもうまくいきませんでした・・・

  • コード
  •  1|module testbench ();
     2|
     3|  typedef struct {
     4|    bit flag;
     5|    int data;
     6|  } t_data;
     7|
     8|  int    a;
     9|  t_data b, c;
    10|
    11|  function t_data ovadd(int in1, t_data in2);
    12|    t_data tmp;
    13|    tmp.data = in1 - in2.data;
    14|    return tmp;
    15|  endfunction
    16|
    17|  bind + function t_data ovadd(int, t_data);
    18|
    19|  initial begin
    20|    #100;
    21|    a = 10; b.data = 2;
    22|    c = a + b;
    23|    $display("a = %0d, b = %0d, c = %0d", a, b.data, c.data);
    24|    $finish(2);
    25|  end
    26|
    27|endmodule: testbench
  • 結果
  • ** Error: sample.sv|17| near "+": syntax error, unexpected '+'
    

と言った感じでエラーが。。。
うーん。。。ご存知の方は教えていただければ嬉しいです。

関連記事

コメントの投稿

非公開コメント

プロフィール

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
アクセス人数