2011年9月アーカイブ

<SystemC-AMS>

| | コメント(0)
先日、十数年ぶりに披露宴に参加して来ました。
新郎新婦とは7,8年の付き合いで歳は一回り半ぐらい離れています(^^;
新郎は、数ヶ月前から色々準備をしていたようで終わった後に飲んだ時に「終わってから虚脱感に襲われて何もする気にならない。」と言っていました。
この話を聞いて誰かのためにという思いから一生懸命やり遂げたからこそ言える言葉だなぁと思いました(^^)。お幸せに!!

20110906_1_nagasawa.jpg

 

D-CLUEでは当たり前のように意識している、for youがみんなに感動を呼ぶんだなぁと実感もしました。
しかし、「燃え尽きた!」なんてセリフは我々の仕事では言えませんね。
社長が常に言っている「未だ来て山麓。。。」という言葉があるので「まだまだ」という気持ちでいるからです。

 

前回までSystemCについて書いてきましたが、実はSystemCにAMS(Analog Mixed Signal)と言う機能(クラスライブラリ)が2008年から出ているのに今年気が付いて色々試したりしていますので、SystemCの延長で紹介したいと思います。
SystemC-AMSはまだ出て3年という短い歴史なので資料が少なく、ハードウエアエンジニアが理解するにはC++の知識がある程度ないと厳しいと感じました(^^;;
SystemC-AMSには、SystemCと同じように表現レベルが3種類あります。
TDF、LSF、ELNです。抽象度は左ほど高いレベルになっています。
正式な名称はTDF:Timed Data Flow、LSF:Linear Signal Flow、ELN:Electrical Linear Networkとなっています。
今回紹介するのは、ELNと言う一番抽象度が低いものにしたいと思います。
「SystemCなら抽象度が高い方が先だろう!」と言う声が聞こえてきそうですが、私はアナロンガー(どっぷりアナログエンジニア)ではありませんので、数式などの表現よりもRCの構成イメージの方で説明させて下さい。
まず、簡単なLPF(Low Pass Filter)で以下のようなモデルで話を進めたいと思います。
図のように抵抗Rと容量Cを構成するとLow Pass Filterになります。


 

20110906_2_nagasawa.png

 

これをSystemC-AMSのELNレベルで記述すると次のようになります。

20110906_3_nagasawa.png

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

0行目にSystemC-AMSクラスライブラリのヘッダをincludeしています。
これは、内部でSystemCのクラスライブラリもincludeしているようなので、
9行目に書いてある通りsystemc.hはinclude宣言を省略しています。
13行目は、ELNレベルのモジュール宣言です。これは通常のSystemCのモジュール宣言と同じです。LSFレベルなどは、SCA_TDF_MODULE宣言をします。
15,16行目は、ELNレベルの入出力を示すsca_terminalの宣言です。
ELNレベルの特徴は、入力と出力の区別がありません。
19行目は、GNDの宣言です。
22,23行目は、抵抗と容量のインスタンス宣言用変数の確保をしています。
実際の接続は後になります。
26~28行目は、今回は未使用なので別の機会に調べてから紹介します。
30行目は、コンストラクタ宣言になります。
31~37行目は、実際の抵抗と容量のインスタンス宣言になります。
抵抗は1KΩ、容量は1uFで、時定数RCは1msになります。

次にテストベンチに当たる記述を紹介します。

20110906_4_nagasawa.png

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

6行目は、前述と同じです。
7行目は、前述のファイルをincludeしています。
9行目は、SystemC-AMSのトップ関数になります。
12行目は、GNDを定義しています。
14,15行目は、ELNレベルの信号(ネット)を宣言しています。
19行目は、テストベンチで信号を与える為の信号で、ELNのsca_nodeには直接信号を代入出来ないからです。


27~30行目は、rc_elnモジュールのインスタンス宣言になります。
32~37行目は、トレースファイルの指定とトレース信号の指定になります。
39行目は、信号sigに"0"を代入します。
41行目は、1ms時間を進めます。
同様に43行目は、信号sigに"1"を代入します。
45行目は、10ms進めます。
48行目は、トレースファイルをクローズします。

以上でファイルの準備が出来て、コンパイル&実行するとVCDファイルが出来て、その波形を確認すると下の図のようになります。

20110906_5_nagasawa.png

  

時定数が1msなので1msから2msの間に0.0から6.3弱に変化しているのが分かると思います。

以上がSystemC-AMSの簡単な例です。
これを利用すると色々とシステム検証が拡がると思います。また、おもしろい例があれば紹介していきたいと思います(^^)

以上です。