Applistar

5. 5. 1 sc_interface

  5. 5. 1 sc_interface  

5. 5. 1 sc_interface

SystemC の場合、 インタフェースは直接・間接に sc_interface を継承して作ります。

例えば、CPU1 で見たように、次のように書きます。

#include <systemc.h>

class mem_if : virtual public sc_interface
{
public:
  virtual void writeDirect(int&, int *) = 0;
  virtual void readDirect(int&, int *) = 0;
};

これは mem_if というインタフェースのクラスを定義している例です。 この定義によると、mem_if という インタフェースを使うなら

  • writeDirectとreadDirectという二つの関数を用意して下さい、
  • それらの関数の引数の型はこれこれですよ

という ような意味になります。

sc_interface についての、 DoxyGen で生成した情報は次のところにあります。 http://www.iro.umontreal.ca/~chareslu/systemc-2.0.1/classsc__interface.html

sc_interface の継承関係の図は次のようになっていますが、 横に長いので、左右二つに分けて示します。

しかしこれを見ると primitive channel と sc_clock のインタフェース が sc_interface を継承して いるということが示されているだけです。 sc_interface で大切なことは、次のメンバ関数です。

5. 5. 1. 1 register_port()

sc_interface は抽象基底クラスです。この中に register_port() というメンバ関数があって、 これはポートをつなぐ時に呼ばれます。 この関数の引数は、

1. ポートオブジェクトの参照と 2. ポートが期待するインタフェースの型名(type name)

です。

  5. 5. 1 sc_interface