SPICEの小瓶(34) Behavioral Voltageモデル、rand、max試す。

Joseph Halfmoon

前回は、実デバイスをシミュレーションするためのマクロモデルでしたが、今回は再びBehavioralなモデルに戻ります。何と言っても一端「踏み込んでしまった」Arbitrary Behavioral Voltage Sourceの中には、めくるめく?新たな世界が広がっており。ただし現物回路とは別物の世界だけれども。

※「SPICEの小瓶」投稿順インデックスはこちら

※ Analog Devices, Inc. LTspice XVII(x64) (17.0.36.0)を使用させていただいて動作確認しております。

BVシンボル

前々回以前は、Behavioralなモデルを記述するのに以下のような手順で行ってました。

    1. Behavioralなモデルをテキストでサブサーキットとして記述
    2. 上記のサブサーキットを参照するシンボルを定義

実際に回路図を描くときに参照するのは2の方なので、1のビヘイビア記述は隠蔽されておったというわけです。しかし、チョイチョイとBehavioralなモデルの動作を確認するにはいかにもメンドイです。

そんなときのために、LTspiceには、Arbitrary Behavioral Voltage Sourceそのものをアカラサマに呼び出すためのシンボル bv が用意されとります。こんな感じ。

selectBV

なんだか普通の電圧源みたいですが。

rand、sin、maxを実験してみる

今回はBV用の各種関数の中で気になっていた3種類の関数をまとめて実験してみます。

    1. rand(x)、0と1の間の乱数を生成するもの
    2. sin(x)、正弦波を生成するもの
    3. max(x, y)、xとyを比べて大きい方を出力するもの

randは複数ある乱数系?の関数の中で一番プリミティブに思える関数です。乱数を求めるのは良いのですが、引数にとるxに対してはどう考えたらよいのでしょうか?

sin(x)はそのものズバリですが、やはり引数にとるxに対してはどう考えたらよいのでしょうか?

max(x, y)は、分かりやすいっちゃ、分かりやすいですが、実際に使ってみないとね。

ということで(どういうことだ?)作成したLTspice回路図が以下に。

BV_max_RAND

ここで、引数にとれるものを列挙しておきたいと思います。

    • どこかのノードの電圧、 V(ノード名)
    • ノード間の電位差、V(ノード名1, ノード名2)
    • 回路要素のどこかの電流値、例 Ib(Q1)、トランジスタQ1のベース電流
    • time
    • pi (円周率)
    • 関数と演算子

timeはシミュレーション時刻そのものなので、上記のように .tran 0.1 と書いてあれば、0から0.1までシミュレーションステップに応じて更新されるので0から0.1までの値をとる筈。

rand()は、引数が整数値になるタイミングで1個乱数を振り出してくれるみたいです。timeを100倍しているので、0から10.0までの値をとるので、ちょうど整数値を通るところで1個乱数を求めてくれてるみたいです。知らんけど。

一方 sin(x)は、0から2πまでのx値とその倍数に対して出力値が決まるので、2*pi*100*timeとすれば、1秒間に100回転(100Hz)することになります。.tran 0.1なのでシミュレーション期間に限れば10周期。

それぞれBVモデルの出力がX、Yというノード名になっているので、max(V(X), V(Y))のところは、rand()とsin()のうち大きい方を出力するハズ。

まず、rand()赤、とsin()青をみてみるとこんな感じ。InputSignals

上記2ノードのmax()黄緑は以下のとおり。maxnode

なんか妙に人為的な波形だけれども、これがBVってやつかい?妙に納得。

SPICEの小瓶(33) SPICE Macro ModelでOP177Gシミュレーション へ戻る

SPICEの小瓶(35) 理想ダイオードでビヘイビアなピーク検出 へ進む