にて、出てきた章になります。
「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 '+'
と言った感じでエラーが。。。
うーん。。。ご存知の方は教えていただければ嬉しいです。
- 関連記事
-
- [SystemVerilog] task/function の初期値を与えた引数の記述は自由
- [勉強会] 第15回 SystemVerilog読書会を行いました。
- [SystemVerilog] Operator overloading (bind)
- [SystemVerilog] letを使ってみよう。(短縮的な記述)
- [SystemVerilog] letを使ってみよう。(条件式の記述)