2012-04-24 71 views
0

我是新来的systemC编程我正在写一个D触发器,但我找不到一种方法来编写主程序并输入信号(din,clock而在我的情况DOUT):写一个D触发器的主程序

这是我的代码:

#include "systemc.h" 

SC_MODULE(d_ff) { // on déclare le module à l'aide de la macro SC_MODULE. 

    sc_in<bool> din; // signal d'entrée 
    sc_in<bool> clock;// définition de l'horlogue 
    sc_out<bool> dout;// signal de sortie 

    void doit() { // La fonction qui assure le traitement de la bascule D 
    dout = din; // Affectation de la valeur du port d'entrée dans le port de sortie 

    cout << dout; 
    }; 

    SC_CTOR(d_ff) { //le constructeur du module d_ff 
    SC_METHOD(doit); //On enregistre la fonction doit comme un processus 
    sensitive_pos << clock; } 


    int sc_main (int argc , char *argv[]) { 
    d_ff obj(); 
     din<=true; 
    clock<=false; 
    obj.doit(); 
    return 0; 
     }}; 
+2

又是什么做的不对?错误讯息?行为不正确?到目前为止,您尝试调试什么? – 2012-04-25 12:42:47

+0

我想测试程序,但你不知道如何,因为这是我第一次,我没有得到任何错误,但我没有得到任何运行后,你能给我一个主要的程序,帮助我测试它像显示dout或其他任何事先谢谢你 – 2012-04-25 12:46:17

回答

1

您必须安装VCD观众看到在波形的形式模拟结果。 我想这就是你想要的 我使用这个http://www.iss-us.com/wavevcd/index.htm,但也有其他的。

接下来,您必须对代码进行一些更改。这些变化将产生VCD文件:

我做了这个一个:

// File dff.h 
#include <iostream> 
#include <systemc.h> 

SC_MODULE (dff) { 
    sc_in <bool> clk; 
    sc_in <bool> din; 
    sc_out <bool> dout; 

    void dff_method(); 

    SC_CTOR (dff) { 
     SC_METHOD (dff_method); 
      sensitive_pos << clk; 
    } 
}; 

// File dff.cpp 
#include "dff.h" 

void dff:: dff_method(){ 
    dout=din; 
} 


// File: main.cpp 
#include <systemc.h> 
#include "dff.h" 

int sc_main(int argc, char* argv[]) 
{ 
    sc_signal<bool> din, dout; 
    sc_clock clk("clk",10,SC_NS,0.5); 

    dff dff1("dff"); 

    dff1.din(din); 
    dff1.dout(dout); 
    dff1.clk(clk); 

    // WAVE 
    sc_trace_file *fp;     // VCD file 
    fp=sc_create_vcd_trace_file("wave"); 
    fp->set_time_unit(100, SC_PS);  // resolution (trace) ps 
    sc_trace(fp,clk,"clk");    // signals 
    sc_trace(fp,din,"din"); 
    sc_trace(fp,dout,"dout"); 

    //Inicialization 
    din=0; 

    //START 
    sc_start(31, SC_NS);    
    din=1; 
    cout << "Din=1" << endl; 
    cout << "Tempo: " << sc_time_stamp() << endl; 

    sc_start(31, SC_NS); 
    din=0; 
    cout << "Din=0" << endl; 
    cout << "Tempo: " << sc_time_stamp() << endl; 

    sc_start(31, SC_NS); 

    sc_close_vcd_trace_file(fp);  // fecho(fp) 

    char myLine[100]; 
    cin.getline(myLine, 100); 

    return 0; 
} 

我希望这将有助于