2013-06-24 32 views
0

我寫用於模擬和邏輯一個簡單的系統C程序驅動銷。靈敏度列表包含a,b作爲其成員。我想在主程序的這些行中驅動0,1,並根據敏感列表的定義,我和模塊應該運行並給我新的值。SystemC的靈敏度列表行爲/從主程序

#include<systemc.h> 

SC_MODULE(digital_logic) 
{ 
    sc_in<sc_logic> a,b; 
    sc_out<sc_logic> c; 

    SC_CTOR(digital_logic) 
    { 
    SC_METHOD (process); 
    sensitive << a << b; 
    } 

    void process() 
    { 
    cout << "PRINT FROM MODULE\n"; 
    c = a.read() & b.read(); 
    cout << a.read() << b.read() << c << endl; 
    } 

}; 

int sc_main(int argc , char* argv[]) 
{ 
    sc_signal<sc_logic> a_in ,b_in , c_out , c_out2; 
    a_in = SC_LOGIC_1 , b_in = SC_LOGIC_1; 

    digital_logic digital_and1("digital_and1"); 
    digital_and1 (a_in , b_in , c_out); 

    sc_start(200,SC_NS); 
    cout << "PRINT FROM SC_MAIN\n"; 

    a_in = SC_LOGIC_1; 
    cout << c_out << endl; 
    b_in = SC_LOGIC_0; 
    cout << c_out << endl; 
    b_in = SC_LOGIC_1; 
    cout << c_out << endl; 

    return 0; 
} 

我預計,因爲靈敏度列表上的信號改變了輸出也會改變,但這是o/p。如何更改主程序中的信號,以便在不編寫單獨的測試臺的情況下模擬和門。

OUTPUT 
PRINT FROM MODULE 
11X 
PRINT FROM SC_MAIN 
1 
1 
1 

回答

1

您必須將sc_start()放置在您想要繼續模擬的點之間。就像下面

a_in = SC_LOGIC_1; 
b_in = SC_LOGIC_0; 
sc_start(1,SC_NS);  // Add this 
cout << c_out << endl; 
b_in = SC_LOGIC_1; 
sc_start(1,SC_NS);  // Add this 
cout << c_out << endl; 

在你的原代碼,你只是順序新的值賦給a_inb_in。它改變了a_inb_in的當前值,但它不會影響c_out當前值,因爲你的程序沒有進入的SystemC仿真內核模擬變化。所以c_out的下一個值將不會受到你的a_inb_in敏感列表被改變。