在verilog或systemVerilog中出现三态时我们需要使用wire语句声明类型,
而在systemC中我们则是需要另外的一些类型:
sc_signal_rv sc_signal_resolved
sc_out_rv sc_out_resolved
sc_inout_rv sc_inout_resolved
其中resolved为一位类型,rv为多位类型。这在建立总线模型时十分有用,
下面就给出一个使用systemC三态建模的示例:
#include "base.h" #ifndef TRISTATE #define TRISTATE SC_MODULE(tristate_driver){ sc_in<bool> ready , dina , dinb ; sc_out<sc_logic> selectx ; void prc_selectx(); SC_CTOR(tristate_driver){ SC_METHOD(prc_selectx); sensitive<<dina<<dinb; } }; #endif
####################################################################################
#include "tristate.h" void tristate_driver::prc_selectx(){ if(ready) selectx = SC_LOGIC_Z ; else selectx = sc_logic(dina.read()&dinb.read()); }
最后的仿真结果: