引数の方向と型
関数(function)、タスク(task)の引数には、方向(direction)を付ける必要があります。
方向としては、次の4つがあります。
1)、input
2)、output
3)、inout
4)、ref
1)は入力、2)は出力、3)は入出力です。これらは、Verilog HDLからあります。
4)のrefは、SystemVerilogで導入されました。このrefをリファレンスと呼びます。
refは、C言語のポインタのようなものです。正確には、C++言語のリファレンスと同じです。
function、taskで方向を指定しない場合は、デフォルト値としてinputが使われます。
また、1つ前の引数でしていした方向および型を次の引数では省略することができます。
このとき、省略した引数の方向および型は1つ前の引数のモノを引き継ぎます。
つまり、
function void sample_f( (a, b, output logic [15:0] x, y );
は、aとbの方向はinputになり、xとyの方向はoutputになります。
上記のように型を指定しないと、デフォルト値としてlogicを型とします。
上の関数(sample_f)の宣言を省略しないで記述すると
function void sample_f( ( input logic a, input logic b, output logic [15:0] x, output logic[15:0] y );
になります。