Applistar

5. 7. 3 単純チャネル(primitive channel)

TOP > 5 SystemC入門 > 5. 7 チャネル > 5. 7. 3 単純チャネル(primitive channel)
  5. 7. 3 単純チャネル(primitive channel)  

5. 7. 3 単純チャネル(primitive channel)

単純チャネル(primitive channel) は 内部にプロセスを持たないチャネルです。SystemC ではあらかじめ、いくつかの単純チャネルが用意されていますが、 自分で新たに定義することも出来ます。

5. 7. 3. 1 関数 request_update() と update()

単純チャネルは sc_prim_channel を継承して作ります。その sc_prim_channel には、 request_update()/update() という二つの関数が定義されていて、 これらはシミュレーションで重要な役割を果します。

シミュレーションの仕組みを考える時には、 デルタサイクルという考え方が出て来ます。これは、 計算機のプログラムは 「時系列で動くもので、ある時点では、たった一つの動作しかしていない」 という機能を持っています。 このしくみを使って、 「並行動作をする世界をシミュレーションする」時の常套手段です。 「値の評価」と「値の更新」を別々に行なう、とも言えます。良くある例えが、 二つの変数の値の交換(入替え)です。

通常のプログラミング言語では、二つの値を入替えるには、 もう一つ別の仮の変数の手助けが必要です。

swap (a, b) {
 int t;
 t = a;
 a = b;
 b = t;
}

しかし SystemC では、その必要がありません。

5. 7. 3. 2 sc_prim_channel

sc_prim_channel というクラスは、 単純チャネル()を作る時に継承されるものです。 これは 抽象基底クラス()の形をしています。 下の図を見ると、次のような単純チャネルが用意されていることが分ります。

sc_fifo
sc_mutex
sc_semaphore
sc_signal
sc_buffer
sc_signal_resolved
sc_signal_rv

http://www.iro.umontreal.ca/~lablasso/DocSystemC2.0.1/classsc__prim__channel.html

5. 7. 3. 3 sc_signal

sc_signal は sc_signal_inout_if インタフェースを実装するチャネルの一つです。 この型の変数を使うと、 信号線のように考えて記述することが出来ます。 VHDL の signal とも良く似ています。

sc_signal 型の信号は一つのプロセスからだけ書く(代入する)ことが出来ます。

sc_signal のDoxyGen 形式は次のところにあります

http://www.iro.umontreal.ca/~lablasso/DocSystemC2.0.1/classsc__signal.html

5. 7. 3. 4 sc_signal_resolved

class sc_signal_resolved : public sc_signal<sc_logic>

前項の sc_signal<sc_logic> は、一つのプロセスからしか書くことが出来ません。 sc_signal_resolved は、それを複数のプロセスから書けるようにしたチャネルです。 これは、インタフェース sc_signal_inout_if を実装するものの一つです。

DoxyGen の形式は次のところにあります。

http://www.iro.umontreal.ca/~lablasso/DocSystemC2.0.1/classsc__signal__resolved.html

ここで出て来た sc_logic は信号の型のためのクラスで、次のような値をとることが出来ます。

     
sc_logic_value_t Log_0 Log_1 Log_Z LogX
bool false true n/a n/a
int 0 1 n/a n/a
char '0' '1' 'Z' 'X'

参照:

http://www.iro.umontreal.ca/~lablasso/DocSystemC2.0.1/classsc__dt_1_1sc__logic.html

5. 7. 3. 5 sc_signal_rv

前項の sc_signal_resolved は幅のないチャネルですが、 sc_signal_rv はそれに幅のついたチャネルです。

template <int W>
class sc_signal_rv : public sc_signal<sc_lv<W> >
{
...

同様にして、ここで参照されている sc_lv は sc_logic に幅のついた型のクラスです。

  5. 7. 3 単純チャネル(primitive channel)  
TOP > 5 SystemC入門 > 5. 7 チャネル > 5. 7. 3 単純チャネル(primitive channel)