スポンサーサイト

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

[SystemVerilog] 接続記述をもっとエクストリーム的に書こう

Verilog HDL, SystemVerilogでの信号線接続記述についてです。
こんなことが出来たとは。。。


接続記述(一般的?)

一例としてですが、通常以下のような記述かと思います。
該当する部分は 11行、12行目です。

  • サンプルコード
  •  1|module hoge #(parameter width = 8)(
     2|  input logic[width-1:0] in
     3|);
     4|  always @(in) $display("width[%0d]:in = %0d", width, in);
     5|endmodule
     6|
     7|module testbench ();
     8|
     9|  logic[11:0] a = 'd0;
    10|
    11|  hoge#(4) hoge_4(.in(a[3:0]));
    12|  hoge#(8) hoge_8(.in(a[7:0]));
    13|
    14|  initial begin
    15|    #10; a = {8'h01, 4'hf};
    16|    #100;
    17|    $finish(2);
    18|  end
    19|
    20|endmodule: testbench
  • 実行結果
  • # width[8]:in = 0
    # width[4]:in = 0
    # width[4]:in = 15
    # width[8]:in = 31
    


functionを使う

functionで接続出来た!!!

 1|module testbench ();
 2|
 3|  function logic[3:0] f_4bit(logic[11:0] val);
 4|    return val[3:0];
 5|  endfunction
 6|
 7|  function logic[7:0] f_8bit(logic[11:0] val);
 8|    return val[7:0];
 9|  endfunction
10|
11|  logic[11:0] a = 'd0;
12|
13|  hoge#(4) hoge_4(.in(f_4bit(a)));
14|  hoge#(8) hoge_8(.in(f_8bit(a)));
15|
16|  initial begin
17|    #10; a = {8'h01, 4'hf};
18|    #100;
19|    $finish(2);
20|  end
21|
22|endmodule: testbench

class functionを使う

これでパラメータが使えますね!

 1|class c_tmp #(int unsigned WIDTH = 8);
 2|
 3|  static function logic[WIDTH-1:0] f_bit(ref[11:0] val);
 4|    return val[WIDTH-1:0];
 5|  endfunction
 6|
 7|endclass
 8|
 9|module testbench ();
10|
11|  logic[11:0] a = 'd0;
12|
13|  hoge#(4) hoge_4(.in(c_tmp#(4)::f_bit(a)));
14|  hoge#(8) hoge_8(.in(c_tmp#(8)::f_bit(a)));
15|
16|  initial begin
17|    #10; a = {8'h01, 4'hf};
18|    #100;
19|    $finish(2);
20|  end
21|
22|endmodule: testbench

さて、簡単な記述でしたが functionを複雑にすれば何でも出来そうですね。
そう! 演算後のデータでも、複雑なbit切り出しでも!


そして、今夜は SystemVerilog読書会です!!!
ぜひ、参加してみてください!

関連記事

コメントの投稿

非公開コメント

No title

やや、これは目から鱗ですね。
もしかして、taskを経由させると遅延も表現できるかも?
試してみます(>_<)

Re: No title

ともすけさん>
コメントありがとうございます。
私自身も出来ると知って驚きました(笑)
もちろん検証用な記述としてですが、信号を接続(代入)する際に
ちょっと一苦労が必要な場合があり、こんな記述使ってます。
プロフィール

Kocha

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

カレンダー
08 | 2017/09 | 10
- - - - - 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ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。