...

を使ったシステム設計

by user

on
Category: Documents
22

views

Report

Comments

Transcript

を使ったシステム設計
を使った
システム設計
デバイスの記事
システムの記事
を使ったシステム設計
第8回
プリミティブ・チャネルを使った記述
長谷川裕恭,小川丈博
今回は,モジュール間を接続する通信手段を定義するプリミ
● インターフェース・メソッドを実装したものがチャネル
ティブ・チャネルのうち,sc_signal,sc_buffer,sc_
連載第5回(本誌2003年12月号,pp.126-135)の最後に紹
fifo の詳細な記述例を紹介する.sc_signal チャネルと
介したインターフェース接続の概念図を図1に示します.前
sc_buffer チャネルは,HDL のノンブロッキング代入と同
回紹介した純粋仮想関数と派生クラスを使って実現したの
じ機能を実現するしくみを搭載している.一方,sc_fifo
が,このインターフェースです.
チャネルは内部にFIFOバッファを搭載している. (編集部)
インターフェースは sc_interface を継承します.
sc_interface は特に何もしませんが,このクラスを継
前回(本誌2004年3月号,pp.107-114)と前々回(本誌2004
承しないと port 接続でエラーが発生します.自分で作成
年2月号,pp.132-138)は,SystemCを理解するために必要
したインターフェース・メソッドは,アロー演算子 -> で
となるC++の基本的な考えかた,およびその構文について
接続します.-> は,sc_port クラスで多重定義されてい
解説しました.今回は,まずインターフェースと
て,インターフェース・メソッドを参照できるようにくふ
チャネルの考えかたについて説明し,その後,プリミティ
うされています.sc_signal,sc_buffer は,ドット
ブ・チャネルである sc_signal , sc_buffer , sc_
(A_Signal.write(A))接続できますが,これは特別な
fifo の具体的な記述例を紹介します.
しくみがあらかじめ組み込まれているためです.
チャネル(モジュール)
モジュール
ポート
プロセス
SC_MODULE( SMaster ) {
sc_port<my_if> Din;
....
};
void SMaster::MProcess() {
....
Din->write(Data);
}
インターフェース
class my_if :
virtual public sc_interface {
public:
virtual bool write
(sc_uint<32> Din) = 0;
};
IMC(interface method call)
図1
class MyChannel :
public my_if,sc_module {
public:
bool write( sc_uint<32> Din) {
....
sc_signal,sc_eventへの代入
}
}
ポートとインターフェース
インターフェース接続の概念図.I/Oは,ポートとインターフェースに分かれる.インターフェースは,C++ のクラス継承と純粋仮想関数を利用している.仮想
関数 write の実態は,チャネルの中で定義されている.この例では,SC_MODULE 内で write 関数が呼ばれると,チャネルの中身に直接アクセスしにいく.
Design Wave Magazine 2004 May 139
Design Wave Magazine (p.139
;
;
;
)
インターフェース(テンプレート) my_if.h
ヘッダ・ファイル
#include <systemc.h>
クラス・テンプレート宣言
template <class T>
class my_if : virtual public sc_interface{
public:
virtual bool write(T Din) = 0;
};
SC_MODULE(SMaster)
{
sc_in_clk
clk;
sc_port<my_if<int> > my_port;
...
}
my_ifの型を指定
intをTに変更
チャネル(テンプレート)
my_channel.h
#include <systemc.h>
#include "my_if.h"
my_module.h
#include <systemc.h>
#include "my_channel.h"
システム
my_ifの型を指定
main.cpp
#include <systemc.h>
#include "my_module.h"
template <class T>
class my_channel : public my_if<T> {
public:
virtual bool write(T Din)
{
int sc_main(int argc, char* argv[])
{
my_channelの型を指定
sc_clock clk;
my_channel<int> my_ch;
...
intをTに変更
図2
図3
テンプレートのインターフェースへの応用
テンプレートの使用
int が指定されているので,T は int に置き換わる.sc_signal,sc_
in,sc_out はこのテンプレートを活用し,どのデータ型にも対応したイ
インターフェース接続にテンプレートを使用している.テンプレートは,使
用する変数のデータ型を限定せず,インターフェースを宣言するときに決め
ることができる.template <class T> とすると,宣言時に T が指定
した型に置き換わる.
ンターフェースを実現している.
図 2 にインターフェースとチャネルの記述を示します.
インターフェース・メソッドを実装したモジュールは
チャネルと呼ばれます.チャネルには,インターフェー
template <class T> とすると,宣言時に Tが指定した
ス・メソッドのほかに,sc_module で記述できるすべて
タイプに置き換わります.図3が my_channel を使用した
のものを記述できます.チャネルの中にプロセスを持った
例になります.ここでは int が指定されているので,T は
ものを階層チャネルと呼びます.階層チャネルでは,モ
int に置き換わります. sc_signal , sc_in,sc_
ジュールとチャネルの区別はありません.階層チャネルは,
out は,このテンプレートを活用し,どのデータ型にも対
通常のモジュールにインターフェース・メソッドを付加し
応したインターフェースを実現しています.
たものと考えてください.sc_signal,sc_buffer を使
sc_signal,sc_buffer は,プリミティブ・チャネル
った接続と比較すると,チャネルとインターフェースには
と呼ばれています.プリミティブ・チャネルは,プロセス
次のようなメリットがあります.
を持たないチャネルで,主にモジュール間を接続する通信
¡ハンドシェーク接続が一つの関数のように扱える
手段のみを定義します.これに対して,内部にプロセスを
¡信号スケジューリングが行われないので,シミュレー
持つチャネルが階層チャネルです.
ション速度が速い
● あらかじめ組み込まれているプリミティブ・チャネル
¡インターフェース部分を置き換えることで簡単に詳細化
できる
プリミティブ・チャネルは,SystemCのライブラリにあ
インターフェース部分の詳細化は「アダプタ」と呼ばれて
らかじめ組み込まれており,ハードウェアの並行動作を実
います.こちらについては,次回に解説します.
現するための評価・更新のしくみを搭載しています.
SystemC v.2.0.1で実装されているプリミティブ・チャネル
● テンプレートをインターフェースに応用する
には, sc_signal , sc_buffer のほかに sc_fifo ,
インターフェース接続にテンプレートを使用してみます.
sc_mutex,sc_semaphre があります.
テンプレートは,使用する変数のデータ型を限定せず,イ
sc_signal,sc_buffer チャネルは,HDLのノンブ
ンターフェースを宣言するときに決めることができます.
ロッキング代入と同じ機能を実現するしくみを搭載してい
140 Design Wave Magazine 2004 May
Design Wave Magazine (p.140
;
;
;
)
Fly UP