⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 doubleio_main.cpp

📁 systemc点阵逐点扫描
💻 CPP
字号:
#include "systemc.h"

SC_MODULE(doubleio)
{sc_inout<sc_logic>SM,S;
sc_out<sc_logic>IN_SM,IN_S;
sc_in<bool> DIRECT;


void prc_doubleio();

SC_CTOR(doubleio)
{SC_METHOD(prc_doubleio);
sensitive<<DIRECT<<IN_SM<<IN_S;
}
};
void doubleio::prc_doubleio()
{
if(DIRECT)
{
S=IN_SM;
if(IN_S==sc_logic_Z)
{}
else
{cout<<"断开总线,输出先置为高阻态"<<endl;

if(IN_SM.read()!=IN_S.read())                              
 
S=sc_logic_X;////虽然没断开,且输入和输出不同,输出变为不定态 

else
{}
                                                     
}
cout<<"At time"<<sc_time_stamp()<<"::";
cout<<"DIRECT="<<DIRECT<<",in:S="<<IN_S<<",in:SM="<<IN_SM;
cout<<",out:S="<<S<<",out:SM="<<SM<<endl;

}
else
{

SM=IN_S;
if(IN_SM==sc_logic_Z)
{}
else
{cout<<"断开总线,输出先置为高阻态"<<endl;

if(IN_SM.read()!=IN_S.read())  
SM=sc_logic_X;            
                                    //总线没断开,且输入和输出不同,输出变为不定态 
else
{}                                             
}

cout<<"At time"<<sc_time_stamp()<<"::";
cout<<"DIRECT="<<DIRECT<<",in:S="<<IN_S<<",in:SM="<<IN_SM;
cout<<",out:S="<<S<<",out:SM="<<SM<<endl;

}


}

SC_MODULE(driver)
{sc_out<sc_logic>SM,S;
sc_out<sc_logic> IN_SM,IN_S;
sc_out<bool> DIRECT;
void prc_driver();
SC_CTOR(driver)
{SC_THREAD(prc_driver);

}
};

void driver::prc_driver()
{
while(1)
{DIRECT=false;
S=sc_logic_1;
SM=sc_logic_Z;
IN_S=sc_logic_1;
IN_SM=sc_logic_Z;
wait(50,SC_NS);
DIRECT=true;
S=sc_logic_Z;
SM=sc_logic_0;
IN_SM=sc_logic_0;
IN_S=sc_logic_Z;
wait(50,SC_NS);
DIRECT=false;
S=sc_logic_1;
SM=sc_logic_0;
IN_S=sc_logic_1;
IN_SM=sc_logic_0;
wait(50,SC_NS);
DIRECT=true;
S=sc_logic_1;
SM=sc_logic_0;
IN_S=sc_logic_1;
IN_SM=sc_logic_0;
wait(50,SC_NS);
}
}




sc_main(int,char**)
{sc_signal<bool> DIRECT;
sc_signal<sc_logic > IN_SM,IN_S;
sc_signal<sc_logic > SM,S;



doubleio f1("doubleio");
f1.DIRECT(DIRECT);
f1.IN_SM(IN_SM);
f1.IN_S(IN_S);
f1.SM(SM);
f1.S(S);

driver d1("driver");
d1.DIRECT(DIRECT);
d1.IN_SM(IN_SM);
d1.IN_S(IN_S);
d1.SM(SM);
d1.S(S);

sc_trace_file *tf = sc_create_vcd_trace_file("io");
sc_trace(tf,d1.DIRECT, "DIRECT");
sc_trace(tf,d1.S, "S");
sc_trace(tf,d1.SM, "SM");
sc_trace(tf,d1.IN_SM, "IN_SM");
sc_trace(tf,d1.IN_S, "IN_S");
sc_start(2000,SC_NS);
sc_close_vcd_trace_file(tf);
return 0;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -