2017-03-21 8 views
-1

私はsystemCを初めて使っています愚かに見えるかもしれませんが、助けていただければ幸いです。主な機能には以下のコードSystemC:ポートへのread()とwrite()は動作しません

  1. で :ライト()aabb 10及び20
  2. もよく、また、私はそれがメソッドを入力すべきだと思うべきaa.read()bb.read()を用いて読み取ったときに値0を示すdo_add()加算器モジュールではaおよびbおよびaに敏感であり、aaおよびbb信号にバインドされていますが、方法はdo_add()ではありません。どのように動作し、コードにエラーがありますか?コードをコンパイルするための

  1. g++ -I. -I$SYSTEMC_HOME/include -L. -L$SYSTEMC_HOME/lib-linux64 -Wl,-rpath=$SYSTEMC_HOME/lib-linux64 -o out adder.cpp -lsystemc -lm
  2. ./out

#include "systemc.h" 

#define WIDTH 32 

SC_MODULE(adder) { 
    sc_in<sc_uint<WIDTH> > a, b; 
    sc_out<sc_uint<WIDTH> > sum; 

    void do_add() { 
     // cout<<"hello"<<endl; 
     // cout<<a.read()<<b.read()<<"\n"; 
     sum.write(a.read() + b.read()); 
     // cout<<sum.read()<<endl; 
    } 

    SC_CTOR(adder) { 
     SC_METHOD(do_add); 
     sensitive << a << b; 
    } 
}; 

int sc_main(int argc, char* argv[]) { 
    sc_signal<sc_uint<WIDTH> >aa,bb; 

    adder add("Adder"); 
    add.a(aa); 
    add.b(bb); 

    aa.write(10); 
    bb.write(20); 

    cout<<aa.read()<<bb.read()<<"\n"; 
} 

答えて

1

多くのものがあります。 ここに。まず、シミュレータ(sc_start)を起動することは決してありません。たとえ実行したとしても、処理するイベントがないためすぐに終了します。そして最後に、これらの問題を修正したとしても、systemcがハードウェアをシミュレートし、同じデルタサイクルでポートを読み込んだときと同じ結果が得られます。ポートに書き込まれた値は元の値になります。ハードウェアはゼロ時間で信号の値をどのように変更できますか?

私が与えることができる最も良いアドバイスは、あなたがsystemcをダウンロードしたディレクトリを見ることです。あなたはpdfドキュメントのディレクトリがあります。私のsystemcでは、それは 'docs'と呼ばれるディレクトリにあります(誰がそれをインストールしたか、どこにインストールしたかによってあなたとは異なるかもしれません)。そこを見ると、「ユーザーガイド」と他のpdfドキュメントがあります。これらはsystemcがどのように動作するかを説明し、自分の必要に応じて試して修正できる例を示します。また、 'examples'フォルダ内のsystemcソースにはいくつかのexmaplesがあります。これらを使って周りを遊んでみると、気分を味わったり、コードをカットアンドペーストしたり、必要なものを得るために修正することができます。

+0

ユーザーガイドは非常に助けてくれてありがとう – programmer

関連する問題