SystemC 2.0.1で作成していたプロジェクトをSystemC 2.3.1でコンパイルしようとすると、いろいろとエラーが出てしまいました。新しいバージョンでサポートされなくなった記述や、引数が変わったメソッドがあるようで、若干のコード修正が必要でした。具体的には、次の修正を行いました。
コンパイルエラーとコードの修正
1. SC_CTHREADのリセット信号
SC_CTHREADのリセット信号の指定で次のようなエラーが発生しました。
error: no member named 'delayed' in 'sc_core::sc_in<bool>' watching(rst_x.delayed() == false); ~~~~~ ^
リセット信号の指定方法が変わったようなので、async_reset_signal_isに書き換えました。
SC_CTHREAD(reciever, clk_sys.pos()); // watching(rst_x.delayed() == false); async_reset_signal_is(rst_x,false);
2. sc_start
シミュレーション時間を指定するsc_startで次のようなエラーが発生しました。
error: no matching function for call to 'sc_start' sc_start(50); ^~~~~~~~
タイムスケールを指定する必要があるようなので、次のように修正しました。
// sc_start(50); sc_start(50,SC_NS);
3. クロック指定
これはコンパイル時ではなく実行時ですが、次のような内容が表示されました。
Info: (I804) /IEEE_Std_1666/deprecated: sc_clock(const char*, double, double, double, bool) is deprecated use a form that includes sc_time or sc_time_unit
sc_clockの記述が古いようなので、次のように修正しました。
//sc_clock clk_sys("clk_sys",10,0.5); sc_clock clk_sys("clk_sys",10,SC_NS);
4. sc_startのマイナス値
これもコンパイル時ではなく実行時ですが、意図した通りにシミュレーションが実行されませんでした。具体的には、全くシミュレーション時間が進みませんでした。以前のSystemCでは、sc_startを引数-1で呼ぶことで無制限(最大値)の時間でシミュレーションが行えたのですが、新しいバージョンでは全くシミュレーション時間が進まないようです。-1の部分を1000といった十分大きい値に修正すると、意図した通りにシミュレーション時間が進むようになりました。
// sc_start(-1,SC_NS); sc_start(1000,SC_NS);