SystemCで廃止/廃止予定の機能を調べてみた
SystemC Advent Calendar2012 の 23日目(になるかも?)の記事です。
よろしくおねがいします。
SystemCのバージョンアップに伴って削除された機能や推奨されない機能
がどのくらい過去にあったか調べてました。古いコードを見た際に参考にするメモです。
(リリースノートから抜粋しています。すべて網羅できてないと思います・・・)
現在accelleraにはSystemC 1.0.2まで古いコードが置かれています。
今回は2.x系(2.0から2.3)まで追ってみました。
2.0(2002-02-08) -> 2.0.1(2002-04-11)
- 値
sc_logic sc_logic_dat1; //2.3でもコンパイル可 sc_logic_dat1 = sc_logic_0; //2.0以降 SC_LOGIC_0 に変更 sc_logic_dat1 = sc_logic_1; //2.0以降 SC_LOGIC_1 に変更 sc_logic_dat1 = sc_logic_Z; //2.0以降 SC_LOGIC_Z に変更 sc_logic_dat1 = sc_logic_X; //2.0以降 SC_LOGIC_X に変更
- 型変換
//2.0まで(2.3でコンパイルエラー) cout << "sc_lvjdat8(signed) = " << sc_lv_dat8.to_signed() << end; cout << "sc_lv_dat8(unsigned) = " << sc_lv_dat8.to_unsigned() << endl; //2.0以降 cout << "sc_lv_dat8(signed) = " << sc_lv_dat8.to_int() << endl; cout << "sc_lv_dat8(unsigned) = " << sc_lv_dat8.to_uint() << endl;
- データタイプ
sc_bit bit_dat1 = 0; //2.0で廃止 bool bit_dat1 = 0; //2.0以降はbool型を使う
- 演算
//2.3でコンパイルエラー sc_logic_dat1 = !sc_logic_dat1: //2.0ではsc_logicの!演算子が削除された sc_logic_dat1 = ~sc_logic_dat1: //反転時は~演算子を使う
- ビット幅取得
//2.3でコンパイルエラー cout << "sc_lv_dat8 width = " << sclv_dat8. bitwidth() << endl; //2.0削除 cout << "sc_lv_dat8 width = " << sc_lv_dat8. length() << endl; //2.0から
- sensitive
//2.3でコンパイルエラー sensitive_pos << clk; //2.0廃止 sensitive_neg << clk; //2.0廃止 sensitive << clk.pos(); //2.0以降 sensitive << clk.neg(); //2.0以降
- その他
2.0.1のリリースノートにはSC_CTHREADは推奨されないと書かれています。
(当時のSystemC入門書とかを読むと、推奨しないとなっている事があります。)
当時はSC_THREADとSC_METHODで置き換えれるようにするつもりだったようです。
もちろんSystemC2.3では使えますし、高位合成ツールとかで使われているのを見ると
当分廃止はされないと思います。
ちなみにこの記事を書こうと思った理由はこのSC_CTHREADっていつ無くなるって
話だったかな?と思ったのがきっかけです。
2.0.1(2002-04-11) -> 2.1(2005-09-20)
- データ型
sc_string string_dat; //2.1で廃止(2.3でコンパイルエラー) sc_string_old string_dat; // sc_string_oldかstringで代替 string string_dat; sc_pvector<unsigned int> vector_dat //vector型で置き換えれるように std::vector<unsigned int > vector_dat; //なっていますが2.3でも使えます。
- その他
sc_cycle() 2.3でコンパイルエラー
sc_create_isdb_file() ISDBフォーマット削除。(2.3でエラー)
ISDB形式ってどの波形ビューワで見れたのでしょうか?
2.1(2005-09-20) -> 2.2(2007-03-14) -> 2.2(2007-03-14)
2.2は2つ公開されていますのでまとめています。
watching(reset,delayed() == false); //2.2で削除(2.3でコンパイルエラー) reset_signal_is(reset,false); //2.1で追加 wait_until( valid.deferred() == true ); //2.2で削除(2.3でコンパイルエラー) //deferred()も削除 do { wait(); } while ( !(valid == true) );//こっちに置き換える
- その他
end_module() 削除予定?
2.2(2007-03-14) -> 2.3(2012-03-14)
機能追加はあるけどリリースノートを読む限り削除はなさそう・・・
今回は廃止された機能について調べてました。
これを修正すれば古いコードのコンパイルはできそうです。
しかし、バージョンによってシミュレーション結果が変わるという話を
聞いた事がありますので。そこは気をつける必要があります。