ロジック・ハードウエアあるいはソフトウエアの世界ではステートマシンを記述することはよくあるじゃないかと思います。ところが、アナログな回路シミュレーターであるLTspiceにもステートマシン記述機能が隠れてました。その「記述言語」をContraption Programming Languageと唱えるようです。初耳だぜ。
※「SPICEの小瓶」投稿順インデックスはこちら
※ Analog Devices, Inc. LTspice を使用させていただいて動作確認しております。今回使用のバージョンは以下です。
XVII(x64) (17.0.37.0)
Contraption Programming Language
LTspice XVII のHelp、以下の項目を参照すれば、LTspice XVII には「任意の」ステートマシンを記述する機能があることが分かります。
.MACHINE — Arbitrary State Machine
その説明文の中で、そのプログラミング言語を Contraption Programming Language ととなえるのだ、と高らかに宣言されております。SPICE素人老人は今の今までその存在を知らんかったデス。
「言語」とは言ってますが、以下の5つばかりのSPICEコマンドを使って「アナログ入出力可能な状態機械」を記述するものです。
-
- .mach[ine]
- .state
- .rule
- .output
- .endmach[ine]
.machと .endmachの間に .state、.rule、.output の3つのコマンドを使ってステートマシンを記述するので、実質のコマンドは3つだけです。.stateで状態機械のステート名とステートの値、.ruleでステート遷移とその条件、.outputで出力を定義という感じです。素直な感じよ。
Helpファイルには実例が2つほど書かれていたのですが、フルテキストな記述でイマイチLTspiceの回路図エディタ的には「映えない」です。そういうことで、2番目のExample、divide by 2 example を回路図+Contraption Programming Languageで書き直してみましたぞ。こんな感じ。
LTspice内部の「言語」なので、必要に応じてノードの電圧をV(ノード名)みたいな形で参照できるようになってます。出力ノードにはテキトーに抵抗やらコンデンサやらつけて所望の特性になるように塩梅してね、という感じです。知らんけど。
上記のContraption Programming Language記述だと、どんなステートマシン(状態機械)なんだか、お惚け老人の弱った頭脳には把握しずらい、ということで拙い状態遷移図など描いてみましたぞ。こんな感じでよかですか?
cとお名前が降られているノードはリセット(クリア)信号なので、どの状態にいてもS0aに戻ります。「通常の」状態遷移は太線のところね。
確かにステートマシンしているみたい。ああ、これ使えば以前こさえたビヘイビアなモデルなどもっと簡単に書けたかも知れんな。今さら遅いか。