読者です 読者をやめる 読者になる 読者になる

日曜技術者のメモ

趣味でやった事のメモ書きです。

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)

機能追加はあるけどリリースノートを読む限り削除はなさそう・・・


今回は廃止された機能について調べてました。
これを修正すれば古いコードのコンパイルはできそうです。
しかし、バージョンによってシミュレーション結果が変わるという話を
聞いた事がありますので。そこは気をつける必要があります。