2017-03-21 57 views
-1

我是新來的systemC它可能看起來很愚蠢,但我會感謝幫助。 在下面的代碼SystemC:讀取()和寫入()到端口不工作

  1. 在主要功能:寫(),以aabb示出了值0使用aa.read()bb.read()這應該是10和20
  2. 同時,我認爲它應該進入方法閱讀時do_add()在加法器模塊中,因爲它對abbab敏感,所以它們被綁定到aabb信號,但它不會調用方法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

相關問題