01. 関数の実行結果を得る

functionは返り値を定義できるので便利ですが、時間を消費する処理が書けません。taskは返り値を定義できませんので不便ですが、時間を消費する処理を書くのに必要です。では、時間を消費する処理を書きたくて、しかも返り値も欲しい場合はどうすればいいでしょう?それは、以下のようにすることで解決します。

task test_task (int a, output int b); #10 b = a + 10;endtask

ポイントは、output int b、と書いているところです。"output" を書かないと、ただの入力用引数として捉えられますが、outputと書くことで呼び出し元に結果を返すことができるようになります。これを応用すれば、複数の値を呼び出し元に返すことも容易に記述できます。

--- test.sv ---module test; task test_task (int a, output int b); #10 b = a*10; endtask initial begin int c; test_task(10,c); $display("[%0d] c=%0d",$time,c); endendmodule

--- 実行結果 ---

# [10] c=100