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_main( int 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!ハマって学ぼう!ですね。
- 関連記事
-
- [SystemC][Virtual Platform] CircuitSutraが SystemC Model Libraryをリリース
- [SystemC] HLS Tutorial 2013
- [SystemC] 固定小数点型において、動的に整数幅を変えたい。
- [SystemC] clangでインストール
- [SystemC] SCML2.1.3リリース