SystemCのコンパイルエラー

機能検証

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);
タイトルとURLをコピーしました