类sc_port<IF,N>是所有端口的基类,它是一个模板类。IF是接口类型,N是所连接的同一类型的通道数目,也就是接口数,它的缺省值是1。sc_port<IF,N>是sc_port_b<IF>的子类,而sc_port_b<IF>是sc_port_base的子类,它们都是Syst内核中的重要类,本书在这里不做详细讨论。
下面是sc_port<IF,N>的准代码,列出了它的几个重要成员函数。
- template <class IF, int N = 1>
- class sc_port
- : publ sc_port_b<IF>
- {
- public:
- // 缺省构造函数
- sc_port();
- void operator () ( IF& interface );
- void operator () ( sc_port_b<IF>& port );
- IF* operator -> ();
- const IF* operator -> () const;
- int size() const;
- IF* operator [] ( int index );
- const IF* operator [] ( int index ) const;
- ...
- protected:
- vector<IF*> m_interface_vec;
- IF* m_interface;
- ...
- };
重载操作符operator () ( IF& interface )用于将端口与接口捆绑起来,实现端口与通道的接口的互通,这是端口的最基本操作。操作符operator () ( sc_port_b<IF>& port )用于将端口与父模块的端口捆绑起来,使端口支持分层的模块化设计。IF* operator -> ()和const IF* operator -> () const实现接口方法的调用。利用size()可以查询当前端口所连接的同一类型的接口数(也可以认为是所连接的通道数)。当多个接口连接到同一个端口上时,可以利用operator [] ( int index )来调用不同的接口的方法。比如在3.4.2节的例子中,当有多个RAM连接到同一个ram_port上时,可以利用ram_port[n]-> read(address, data),(0<=n<ram_port.size())来调用第n个接口的方法read(address, data)。