スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

SystemVerilog: ref 引数

SystemVerilogより、task/functionやポートに「ref」が追加されてます。
要は「参照」とか、ポインタ引数ってことです。

○サンプルコード
 1|module testbench;
 2|
 3|  logic[1:0] indt;
 4|  logic[2:0] outdt;
 5|
 6|  task automatic hoge(ref logic[1:0] in, output logic[2:0] out);
 7|    forever begin
 8|      if(in != 0) break;
 9|      else begin
10|        $display("--- wating @ time:%4t ps ---", $time);
11|        #10;
12|      end
13|    end
14|    out = in << 1;
15|  endtask
16|
17|  initial begin
18|    #10;  indt = 0; hoge(indt, outdt);
19|    $display("--- indt = %d, outdt = %d @ time:%4t ps ---", indt, outdt, $time);
20|    $finish(1);
21|  end
22|
23|  initial begin
24|    #100; indt = 2;
25|  end
26|
27|endmodule:testbench

○実行結果
# vsim -L work -do {run -all; quit} -c testbench 
# Loading sv_std.std
# Loading work.testbench
# run -all
# --- wating @ time: 10 ps ---
# --- wating @ time: 20 ps ---
# --- wating @ time: 30 ps ---
# --- wating @ time: 40 ps ---
# --- wating @ time: 50 ps ---
# --- wating @ time: 60 ps ---
# --- wating @ time: 70 ps ---
# --- wating @ time: 80 ps ---
# --- wating @ time: 90 ps ---
# --- indt = 2, outdt = 4 @ time: 100 ps ---
# ** Note: $finish : sample.sv(20)

というような感じで、引数:in = indtが同じということです。
試しに「ref」記述を外すと、foreverループ(無限ループ)になりますので、
一度試すとわかりやすいかもしれませんね。
関連記事

コメントの投稿

非公開コメント

プロフィール

Kocha

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

カレンダー
05 | 2017/06 | 07
- - - - 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 -
カテゴリ
OVP (4)
最新記事
最新コメント
アーカイブ
リンク
Twitter
アクセス人数
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。