Simetrix入門ーALB機能の使い方
Ver.1.000a 2009.05.23

更新履歴
2009.05.17 Ver.1.000 新規作成



【ALBの概要】

ALB機能は、ロジック記述言語です。

デジタルICのモデルもALBで書かれています。記述はこのフォルダーにあります。

図1

これらの拡張子が.ldfのファイルです。

ここの138.ldfを例に説明すると


=====引用開始====
// Logic Definition for 74XX138  ← コメント

PORT Address    in[0:2] ;  ← 端子の宣言 Adressが名前 in[0:2]は入力3bit
PORT E1_Inv     in[3] ;   ← 端子の宣言 74138のG2Aに相当
PORT E2_Inv     in[4] ;   ← 端子の宣言 74138のG2Bに相当
PORT E3         in[5] ;   ← 端子の宣言 74138のG1に相当

PORT Out        out[0:7] ;  ← 端子の宣言 74138のY0-7に相当 出力

Out = (!E1_Inv && !E2_Inv && E3) ? ~(1<<Address) : 255 ; // Decode[Address&7]←機能
====引用終了====
日本語のコメントは私がつけました。

まず、端子を宣言します。番号はin/outは0から連番です。

outのところは
(!E1_Inv && !E2_Inv && E3) ?の?はIF構文です。
IF A THEN B ELSE C → A ? B : C ;
となります。ですから、
A=(!E1_Inv && !E2_Inv && E3)
B=~(1<<Address) → Out[0:7]にAdress分1をシフトして反転する。つまり、デコードしているのです。
C=255 →Out=255なのでY0-Y7全てHということです。

いじょうで、大体の記述の感覚がわかったと思います。

また、
これは、カウンタの例です。SimulatorReference.pdfから引用しています。
=====引用開始====
PORT (DELAY = 10n) CountOut out[0:7] ;     ←端子の宣言 DELAY = 10nは遅延を宣言しています。
PORT Reset in[1] ;
EDGE (DELAY=5n, WIDTH=8, CLOCK=in[0]) Count ; ←EDGEはCLOCKのエッジでCountが変化することを宣言しています。
また、WIDTH=8はCountが8bitであることも表しています。
Count := !Reset ? 0 ;              ←ResetがLならCount=0
Count = Count==199 ? 0 : Count + 1 ;      ←Count=199なら0そうでなければCount=Count+1つまりカウントアップ。
ここでは0から199までのカウンタですね。
CountOut = count ;←端子に出力

====引用終了====
日本語のコメントは私がつけました。

さらに、RAMとROMの例は、ここのram.ldfとsinelookup.ldfが参考になるでしょう。

図2

SIMtrixはアナログデジタル混在のシミュレータなので、アナログデジタル混在のとき便利です。
しかし、規模が大きくなるため、評価版の制限に引っかかってしまいます。
そこで、デジタル部分をALBにすれば、幾分助かるのです。


【ALBの回路図での運用】


さて、ALBファイルを書いたら回路図で呼び出すにはこのようにします。ここでは、2つのサイン波の乗算器を作ってみます。


図2−1

これは、ExamplesのSineLookUpですが、F11キーをおすと下のほうのコマンドラインが見えます。
.model SineLookup d_logic_block file=sinelookup.ldf
この行の
.model(モデルの定義をはじめる) SineLookup(モデル名) d_logic_block(ALBファイルを示す) file=sinelookup.ldf(ALBファイルの指定)
となっています。

そこで、この行をコピーすれば、SineLookUpの機能は持ってこれます。

また、乗算器は、

図2−2

より、mult.ldfを手直しして作りましょう。


図2−3
ここのmulti.ldfをメモ帳で開きます。


図2−4

このように変更してmulti8x8.ldfとして保存します。

図2−5
multiをこのように書き換えます。なお、Simetrix5.0ではALBファイルは1つまでですのでこれは2つ以上使っていますので出来ません。

さて、シンボルエディタでMulti8x8を作ります。ここでは、ページ埋め込みシンボルを作ります。


図2−6

入力をINAとINBに分けました。また、ALBの場合、入力端子は[と]でくくり、出力端子も[と]でくくります。

また、プロパティは、

図2−7
とします。

また、保存は、

図2−8

このように、Current schematic fileにチェックを入れます。
OKを押して、回路図に戻りQを押してマウスを動かすと作ったシンボルが付いてきます。

さて、

図2−9

回路図を完成させます。

Runすると、

図2−10

評価版としては回路規模が大きすぎるといわれました。




【ICモデルの作り方】

ここでは、VHCシリーズの追加の基本について書きます。

まず、この前,説明したように,機能はLDFファイルに記述されています。そこでは,delay timeはUSER[0]という風にかかれています。
その値はssi.libとかmsi.libに書かれています。


ssi.libを開くとこうなっています。


図3

ここで,時間が規定されています。また、
family="HC"は、電圧の伝達フォーマットを決めています。

さて、ここにVHC04をHC04Dを真似て追加します。



図4 ssi.libからの引用


こういう風に追加します。



図5 VHC ファミリーの追加
次に,familyを登録します。
同じフォルダのbridges.lbを開いて、HCのHC_dac(出力のレベル宣言)とHC_adc(入力のレベル宣言)を参考にして、VHC_dac,VHC_adcを作ります。


VHC_dacは、デジタルからアナログの閾値などの設定つまり出力特性、VHC_adcはアナログの閾値などからデジタルへの変換つまり入力特性です。


図6 HCシリーズの入力出力特性の記述部分

また、遅延時間の設定は、161.ldfを見てみると、


図7 161.ldfの機能記述の一部

ここのUSERという変数は、ICファミリーによって違うので、MSI.lbには,このように書かれています。


図8 MSI.libのHC161のICシリーズの違いの記述部分

file=161は161.ldfをさしているのでしょう。
user=[11n,7,...]は、先ほどのUSER[0]とか言う配列です。
familyはDC特性です。前回に説明した,VHC_dacとVHC_adcをさします。



以上を参考にすれば、たとえば、モデルライブラリに含まれてないVHCシリーズのICを記述できます。


つづく