スポンサーサイト

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

SystemVerilog:parameter typeでデータ型を可変する

SystemVerilogにて、C++言語のtemplateのような記述が
出来るようになっているようです。

サンプルコード


 1|
 2|module sum #(parameter type DTYPE = int) (
 3|    input  DTYPE a, b,
 4|    output DTYPE result);
 5|  DTYPE temp;
 6|  always_comb begin
 7|    temp = a + b;
 8|  end
 9|  assign result = temp;
10|endmodule
11|
12|module tb;
13|
14|  integer   int_i=0,int_j=0,int_k;
15|  shortreal rel_i=0,rel_j=0,rel_k;
16|  reg[3:0]  reg_i=0,reg_j=0,reg_k;
17|
18|  sum                      int_hoge(int_i,int_j,int_k);
19|  sum #(.DTYPE(shortreal)) rel_hoge(rel_i,rel_j,rel_k);
20|  sum #(.DTYPE(reg[3:0]))  reg_hoge(reg_i,reg_j,reg_k);
21|
22|  initial begin
23|    int_i = 2;   int_j = -5;
24|    rel_i = 1.0; rel_j = 2.5;
25|    reg_i = 10;  reg_j = 8;
26|    #10;
27|    $display("--- int_i = %3d, int_j = %3d, int_k = %3d", int_i,int_j,int_k);
28|    $display("--- rel_i = %3f, rel_j = %3f, rel_k = %3f", rel_i,rel_j,rel_k);
29|    $display("--- reg_i = %3d, reg_j = %3d, reg_k = %3d", reg_i,reg_j,reg_k);
30|    $finish;
31|  end
32|
33|endmodule

実行結果


# --- int_i =   2, int_j =  -5, int_k =  -3
# --- rel_i = 1.000000, rel_j = 2.500000, rel_k = 3.500000
# --- reg_i = 10, reg_j = 8, reg_k = 2
最後の reg[3:0]はわざとオーバーフローされるようにしたのですが、
確かに宣言したデータ型のようになってます。
これはなかなか使えるかも!
関連記事

コメントの投稿

非公開コメント

プロフィール

Kocha

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

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