📄 doubleio_main.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 + -