2013年7月12日金曜日

HSPICEで自作関数を定義する

HSPICEでは変数の定義と同様に,自作関数を定義することができる.フォーマットは以下の通り.

.param funcname1(arg1[,arg2...]) = expression1
+ funcname2(arg1[,arg2...]) = expression2


関数名(funcname)は組み込み関数と異なる名前である必要があり,また別の関数内で利用する関数はあらかじめ定義されている必要がある.引数(arg)は必ず1つ以上必要であり,複数定義できる.関数は再定義できるが,オーバーロードではなくオーバーライドになる様だ(明確には述べられていないが).

例えば剰余を求める関数は,以下のようになった(SPICEv3にはあるのになぜHSPICEには無いのだろう??).

.param remain(numer, denom)='numer - (int(numer/denom) * denom)'

10進数を2進数に変換してみる.SPICEのカードの一部を示す.

.param remain(numer, denom)='numer - (int(numer/denom) * denom)'

.param COND_DCC_0 = 'remain(TRIAL, 2)'
.param COND_DCC_1 = 'remain(int(TRIAL/2), 2)'
.param COND_DCC_2 = 'remain(int(TRIAL/4), 2)'
.param COND_DCC_3 = 'remain(int(TRIAL/8), 2)'
.param COND_DCC_4 = 'remain(int(TRIAL/16), 2)'
.param COND_DCC_5 = 'remain(int(TRIAL/32), 2)'
.param COND_DCC_7 = 'remain(int(TRIAL/64), 2)'
.param COND_DCC_6 = 'remain(int(TRIAL/128), 2)'

.tran 10p 10n sweep TRIAL 0 256 1
HSPICEでシミュレーションしたところ,ちゃんと2進数に変換できた!


試していないが,おそらくHSIMでもできる

0 件のコメント:

コメントを投稿