sc_signal 继承于 sc_interface和sc_prim_channel;sc_in、sc_out 和sc_inout 都继承于sc_port,并且模板参数N都为1,表明都必须跟一个sc_inerface进行绑定。其中,sc_out 和sc_inout 提供了write 和read 的API,而sc_in只提供了read的API,这些API中,会访问 与之绑定的sc_interface的read/write 函数,比如与sc_signal绑定时,访问的就是sc_signal的read/write 函数。
从用户的角度来看,我们习惯上initiator write,slave read,如下图,我们可以简单理解为,有sc_out -> sc_signal -> sc_in这样的信号传输方向存在。
template <class T> class sc_signal_in_if : virtual public sc_interface
template <class T> class sc_in : public sc_port<sc_signal_in_if<T>,1>
template <class T> class sc_signal_inout_if : public sc_signal_in_if<T> , public sc_signal_write_if<T>
template <class T> class sc_inout : public sc_port<sc_signal_inout_if<T>,1>
template <class T> class sc_out : public sc_inout<T>
template <class T, sc_writer_policy WRITER_POLICY = SC_ONE_WRITER>
class sc_signal : public sc_signal_inout_if<T>, public sc_prim_channel
class sc_clock : public sc_signal<bool>
typedef sc_in<bool> sc_in_clk
总之,sc_in、sc_out 和sc_inout 都属于sc_port的子类。sc_clock / sc_signal / sc_fifo / sc_mutex / sc_event_queue / sc_semaphore 都属于sc_interface 的子类