スポンサーサイト

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

[SystemC] 固定小数点型において、動的に整数幅を変えたい。

How to change the word length of "sc_fix" dynamically? Any examples?


高位合成を考えると、どうしてもデータ幅(bit幅)を考えないといけません。
予め bit幅が決まりきっている場合だと問題ないかもしれませんが、
見積もる必要がある場合だと bit幅を変えながらシミュレーションを行い確認する必要があります。


もしかしたら、スレッドを立てた人はそういったことをやりたいのかもしれません。


さて、その中で、sc_context_switch が出てきます。
詳細は LRMの 7.2.3章、7.11章とのことです。


sc_context_switch

固定小数点型 ⇔ 浮動小数点型に切り替えられます。
「SC_OFF」- flotingですね。


sc_fxtype_params

defaultのパラメータを変更出来るみたい。
ココら辺って闇の領域ですよね・・・
せっかくなので、記述してみました。

 1|#include <systemc.h>
 2|
 3|int sc_mainint argc, char* argv[] ) {
 4|
 5|  sc_fxtype_params fxt(32,16);
 6|  sc_fxtype_context fcxt(fxt);
 7|  sc_fix A,B,res; // wl = 32, iwl = 16
 8|
 9|  A = 10.0;
10|  B = 0.1;
11|  res = A * B; // res = .999908447265625
12|
13|  cout << "A = "   ; A.print();   cout << ", ";
14|  cout << "B = "   ; B.print();   cout << ", ";
15|  cout << "res = " ; res.print(); cout << endl;
16|
17|  sc_fxtype_params fxt2(16,8);
18|  sc_fxtype_context fcxt2(fxt2);
19|  sc_fix C,D; // wl = 16, iwl = 8
20|  C = 10.0;
21|  D = 0.1;
22|  res = C * D; // res = .9765625
23|
24|  cout << "C = "   ; C.print();   cout << ", ";
25|  cout << "D = "   ; D.print();   cout << ", ";
26|  cout << "res = " ; res.print(); cout << endl;
27|
28|  return 0;
29|}
  • 実行結果
  • A = 10, B = .0999908447265625, res = .999908447265625
    C = 10, D = .09765625, res = .9765625
    

といった感じで、bit幅を色々と変えれるみたいです。
うーん。。。闇っぽい。


最初にあった bit幅を選定するですが、GDB使ってやることもできます。
見積もる変数の数が多くなるとなかなか厳しいですが。


楽しいSystemC!ハマって学ぼう!ですね。

スポンサーサイト
プロフィール

Kocha

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

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