さて、
システムを分割して設計する時には、分割されたモジュールの
接続方法、あるいは接続の方式が重要です。
これらを予め
決めて、
それらをはっきり宣言しておく必要があります。
SystemC のポ一トは、
モジュールが外界と接続し通信する手段として、
そのような目的に使えるように用意されているものです。
クラスで言えば sc_port になります。その sc_port の
DoxyGen 情報は次のところにあります:
http://www.iro.umontreal.ca/~chareslu/systemc-2.0.1/classsc__port.html
また sc_port の継承関係図は次の通りです。

最初の例に示したように
既に用意されているポートのクラスとして sc_in, sc_out などが
あります。これらは、構造記述とも言い signal (信号線)を使った
接続を表現するために用意されているものです。
これらの sc_in, sc_out ばかりでなく、
ユーザが新たにポートのクラスを作ることも出来ます。
いづれにしても、
ポートを宣言する時には、それに対応するインタフェースを指定する必要
があります。
ポート用のクラス sc_port の定義は、次のような
次のようなテンプレートクラスになっています。
template<class IF, int N=1>
class sc_port : ...
{
public:
IF* operator ->();
...
}
ここに示したものは
http://www.iro.umontreal.ca/~chareslu/systemc-2.0.1/sc__port_8h-source.html
に書かかれているのですが、そこでは、
実際には、もう少しこみ入った記述になっています。
この < > の中がテンプレートクラスの引数です。
sc_port はこのような定義になっていますが、これを
継承してつくったポートを使う時には、
インタフェース(IF)と、数(N)を指定します。
上で定義されている
->()
という演算子はとても重要です。
例えば、次のようにして p という名前のポートを作ったとします。
sc_port<sc_signal_inout_if<int> > p;
すると、このsc_signal_inout_if というインタフェースには
- read(), write()というメンバ関数が宣言されている
- 演算子->はポートがつながれているインタフェースへのポインタを返す
- チャネル(sc_signal)にはread(), write()の実装が定義されている
ために、p->read() や p->write() と書くと、
ポート p につながれたチャネルの read() インタフェース や
write() インタフェースが呼ばれ、
読書きをすることが出来ます。