CASL87とは
(開発の動機)
■村岡如竹
(開発の動機)
■村岡如竹
CASL87 の構想は、自分が 27〜28 歳のころ、ニクラウス・ヴィルツの Pascal と出会ったことを契機に始まった。
Pascal の文法は驚くほど簡潔で、構造は明晰であり、「プログラムは人間が読むための文章である」というヴィルツの哲学は、当時の自分に深い衝撃を与えた。
その思想は、単なる言語設計の技術論ではなく、科学をどのように記述すべきかという根源的な問いに対する答えでもあった。
複雑さを排し、構造を明確にし、人間が理解できる形でモデルを表現する──この Pascal の精神は、自分がその後の人生で追い求める「透明で再現可能な工学記述」の原点となった。
しかし、現実の工学は単一領域では完結しない。アナログ回路、ディジタル回路、制御工学、機械系モデルは互いに影響し合い、既存の SPICE 系言語や数値解析ツールではそれらを統一的に扱うことができなかった。そこで自分は、Pascal の美学と構造を基盤にしつつ、より広い物理世界を記述できる独自言語──CASL87──を構想した。
CASL87 は、ヴィルツの思想を継承しながら、工学の複数領域を一つの記述体系に統合する試みであり、その設計と発展は、今日まで45年近く続く自分のライフワークとなっている。
本稿では、その誕生の背景、思想的基盤、そして CASL87 が目指す「科学の透明な記述」という理念について述べる。
■はじめに
1980年代の初頭、インテルのi8086プロセッサーの数値演算用コプロセッサーとして、i8087が発表された。この頃のPCのOSはCP/M-86やMSーDOS等が主流であった。PCのハードウェア・リソースも今日に比べれば、小規模で貧弱であった。
こんな小規模なPCでありながら、当時、大型コンピューターやミニコンで動作していた電子回路の周波数特性の解析用シミュレータであるカルフォルニア大学バークレイ校版の「SPICE」が、PC用にダウンサイジングされて高額なアプリケーション・ソフトとして出回っていた時代でもあった(大型コンピュータ、ミニコン向けのSPICEの初リリースは1973年)。
当時、日本の企業や大学もこの「SPICE」に追従し、商社を通じてライセンスを一般人ではとても払えない高額で購入していたものだ(HSPICEでは、年間300~800万円でサブスクリプション)。そのため、各企業や研究所では、使いたいと申し出た部署には、高額な分担金を組織内で使用料として割り付けていたものだ。今日でもこの「SPICE」系が独占状態といってもよい。
さて、こんな話でこのページの出だしとなることをお許し願いたい。
当時、筆者はフィードバック制御理論に基づく電子回路の設計を業務としており、何とか、自前でシミュレータを開発できないものかと毎日帰宅後に思い悩みながらプログラムの構造を考えていたものだった。(アフター・ファイブ・プログラマー)
基本はラプラス平面座標での大規模な複素マトリクスの数値計算(正確さや高速化のために、LU分解や逆行列及びそのためのPivot法を駆使するなど)のアルゴリズムを実現することだが、問題となったのはユーザー・インターフェイスであり、分かり易さやメインテナンス性を満足する記述形式をどうしようかと毎晩、思い悩んでいた。
当時、ユーザー・インターフェイスとしてのエディターは回路図を描く方式も考慮したが、使い方を覚えなくていいテキスト形式を基本にしたいと思っていた。その方がユーザーが普段使い慣れている個々のテキスト・エディターを使えるからだ。
最初は「SPICE」のようなテキスト表記のネットリスト的記述をイメージしたが、そんな折、PCの上でPascalが流行りだした。ニクラウス・ヴィルツ教授(Niklaus Wirth)のPascalがC言語よりも早い時期にPCにインプリメントされたのだ。Pascalは今日の構造化言語の走りでもある。
当時、その美しい表記方法と厳格さに感銘した。1980年代中頃、筆者はPascalのような表現で回路のノード表記ができないものかと、さっそくコンパイラの作成にとりかかった。当時、開発に使用したのはフィリップ・カーン(Philippe Kahn )の創設したBorland社のPascalだった(商標名:Turbo Pascal 英語版は日本でも1983年に発売)。今日のWindowsの「Visual Studio」や「.NET Framework」も同じBorland社の統合開発環境であるDelphi(Pascal)とその相棒である VCL(Visual Component Library)の構造が基礎になっているのも感慨深い(開発者が同一人物)。
こうして完成させたコンパイラ(1984年2月)に上述の数値演算用コプロセッサーの名前を付けて「CASL87」(Circuit Analysis Simulation Language 87)と命名した。当時、Windowsは存在しないのでMS-DOSのシェル画面で操作するものだったが、メモリの限界で、100ノードまでしか扱えなかった。(今日の64ビットCPUのWindows版のCASL87では、約3万ノードまで扱える。)
完成したこの「CASL87」を仕事の上で活用したが、自宅で取り組んだツールであり、社内で発表して、発明の権利を会社に取られたくないと思い、秘密裏に仕事に活かしていたものだった。(今思えば、カリフォルニア大の中村教授と徳島の日亜化学との悲劇のようにならずに済んだと思えば、正解だった思う。)
■従来の回路図入力型のシミュレーターは使いづらかった
Windowsの時代になってからは、筆者も、もっぱら外部のシミュレータを使用していた。回路図入力タイプのSIMetrix/(SIMPLIS)を特に使用していたが、このシミュレータの無償版では140ノード程度までしか展開できない制限があった。SIMetrix/(SIMPLIS)の有償版は価格がかなり高い(¥40万以上)。LTSpiceの方は無償であり、ノード数は無制限ではあるが、次の章で述べるように回路図の部品定数の入力時のインターフェイスのもたつきがSIMetrix/(SIMPLIS)以上に足を引っ張る。周波数特性を求める場合は、抵抗器の公差や許容パワーなどは必要ないのだ。
とにかく、基板作成用のCADでの回路図入力とは別に、シミュレーション用に新たな回路図を描くということは、これらのシミュレーターの使い勝手に慣れなくてはならず、新たな設計案件で少し間をおいてしまうと、再度の使い始めで悪戦苦闘してしまう。
これらのシミュレータは過度応答解析を重点にしているようだが、制御理論用としては、電子回路はもちろん、ミサイルのサイド・スラスター制御や水中翼船のエルロン制御などの力学も含めた制御上の安定性をオープンループのゲインと位相評価によって求めたいだけなのだ。
つまり、アナログ屋にとってのメインストリートは線形の周波数特性解析なのだ。それもかなりの数のノードが必要になる。単に小及び中規模な回路の過度応答解析を求めたい場合はSIMetrixやLTSpiceを使えばよい。筆者もそうしている。
■回路図入力型は、なぜ、使いづらいか
回路図入力型のシミュレーターは直接、回路図エディターで書き込めるので、初心者にも判りやすい作業になる。部品の定数をエディティング・ウィンドウでの数値の書き込みで設定できる。
しかし、これは、右に示すように、SIMetrix/(SIMPLIS)の例では各部品毎に一回づつエディティング・ウィンドウを起動して行うため、部品数が多いほど辛い作業となり、ストレスがたまる。LTSpiceの場合に至っては、右に示したSIMetrix/(SIMPLIS)のエディティング・ウィンドウにさらに、誤差や許容パワーの項目(抵抗器の場合)まで加わってしまう。
つまり、SIMetrix/(SIMPLIS)及びLTSpice共々、これら回路図入力型のシミュレーターは部品の定数の書き込みに対して個々の部品毎に煩わしい作業が伴い、新しい案件がくる度に億劫になってしまう。
むしろ、「SPICE」の直接のテキスト表記の方が使い慣れたテキスト・エディターでの作業のため、速い記述ができるかも知れない。
ところが、「SPICE」の記述では、次の段で説明するが、「部品中心」のネットリスト型表記のため、コンピューターには読みやすいが、人間には判り辛い表記であり、これもまた、億劫な記述作業になってしまう。
「CASL87」では、この点もきっかけとなって、「ノード中心」の記述で、ノード間の表記に複数の部品がぶら下がるという記述になっている。また、見た目も美しい記述方式として考案した。
ユーザーが普段使い慣れたテキスト・エディターのみで全てを記述でき、コピー&ペーストで回路の拡張や流用ができ、回路図入力型の部品毎にエディティング・ウィンドウを起動する煩わしさはない。
自前で開発していたという自負もあるが、昔の「CASL87」のテキスト型入力の利便性が忘れ難く、今回、Windowsに対応した新しい「CASL87」を開発した。実メモリーが4GバイトのPCで、29,999ノード(Ver.2.00、無制限に近いかな?)まで扱えるようにした。もちろん素子数は無制限である。
さらに、「CASL87」の計算結果を複数、表示できるグラフ・プロッターのアプリケーション「GR87」も用意した。
■ソースコードの文法のレベルアップ
「SPICE」系シミュレーターは、ネットリスト的な記述言語であり、カリフォルニア大学バークレイ校や関連する商社と契約した企業が回路図エディタを用意し、「SPICE」の記述に変換して実行するものである。「CASL87」の場合でも、「SPICE」と同様に回路図エディターを付け足して用意することも(それが使い易いかどうかは別にして)容易ではあるが、「CASL87」のソースコードの記述構造(Syntax)が回路図内のノード(接点)中心、および、回路ブロックが階層構造の表現であれば、鉛筆書きの回路図であっても、かまわない筈である。
下に示す従来のSPICE系シミュレーターとCASL87シミュレーターのそれぞれの関係図から判るように、回路図と親和性の高い「CASL87」のソースコードの記述構造ならば、回路図エディターを用意しなくても、容易に回路構造を記述できる。つまり、回路屋(特にアナログ回路屋)としての立場から、ソースコードをレベルアップできるものと確信して、ソースコードの文法を工夫した。
■CASL87の表記法
下の図に示す簡単な回路を基に従来の「SPICE」と「CASL87」の表記法の違いについて説明していこう。
「SPICE」の表記では、以下のようになる。部品中心のネットリスト表記である。現在でも「SPICE」系の回路図入力型のシミュレータも回路図エディターからこの表記を自動作成しているのが現状だ。
当時、なんとダサい表記だと思った(当時のカルフォルニア大学バークレイ校の開発者グループには失礼の言、お詫びします)。まるで、機械語か暗号文だ。現在(2023年)も変わっていない。この例は2個の部品であるが、さらに複数の部品を羅列されたのでは、人間にとってはたまったものではない。もっとも「SPICE」は最初は「FORTRAN言語」で開発され、そのあと「C言語」でリメイクされているが、後の近代的なソフトウェア工学の概念などない時代で出発して、様々な上乗せ技術やライブラリーが今日まで覆いかぶさっているので今更、変更できないのは仕方ないことかもしれない。
40年以上前とはいえ、その当時、筆者はもっとエレガントな表記が欲しいと思い、「CASL87」では次のような表記法にした(ノードに0(ゼロ)を許さないためにSPICEとは異なるノード番号で示してある)。「SPICE」とは異なり、回路図と親和性のあるノード中心の記述が基本である。
冗長度はあるが、この表記の方が読み易いし、メインテナンス性に優れているのは一目瞭然であろう。
重要なことであるが、プログラムなどの記述は、コンピューターにとって読みやすくすることよりも、人間にとって読みやすくすることが、設計活動にとっての保守(メインテナンス)の要である。
つまり、プログラムなどの記述は、完成後の改良や補修作業では、作成した本人や他人が見るものであり、できるだけ判りやすい構造と表記にすべきである。
■回路のブロック化と階層構造 (回路図は手描きで充分!!)
一つの回路をブロックとし、内部のノード番号をローカル化する。それによって、ブロック間でのノード番号の干渉を防げる。その回路ブロックを他の回路ブロックと並列化、或いは内部に階層的に組み込むことができる(入れ子構造)。それぞれの回路ブロックのノードの接続はLink文で表記する。ブロックの階層(入れ子構造)も深さは512層まで許容している。回路ブロックの名称も子ブロックの中に同名が存在してもかまわない。最表層や子ブロックの同一層で同名の回路ブロックがなければよい。つまり、同じ回路ブロック内でのLink文で、回路ブロック名のノードが矛盾なく接続できればよいのだ。
さて、ここで重要なことは、回路の仕様を示すために、SPICEのような機械的なネットリスト的表現ではなく、「コンピューターにお手紙を書く様な、美しい文体で書く」ということである。
以下の図はノッチ・フィルター回路の例である。
上図の回路図は清書して表示したが、鉛筆などによる手書きで充分であり、ブロック内部で重複しなければ、ノード番号を順不同で自由に付けられる。(ただし、Ver.2.00から、32ビット版:1~6999、64ビット版:1~29,999の範囲。)
筆者は回路図や基板設計にはKiCadを、シミュレータにはSIMetrix/(SIMPLIS)を愛用しているが、未だに回路図入力はもたついてしまう。テキスト入力で、且つ、メンテナンス性に優れた表記であれば、シミュレーターはテキスト型ファイルをインターフェイスとすることにご賛同の諸氏も多いのではないかと思う。
以下は上図の回路のテキスト表記されたソース・ファイル(サフィックス=".CAS")である。各回路ブロックは階層的に表現され、その回路ブロックを他の回路用にコピペ(Copy & Paste)で転用できる特徴がある。ブロック内部のノード番号はローカルであり、外部とは隔離されているので、他の回路のソース・ファイルにそのままコピペすればよい。
「CASL87」を起動し、下の画面のように、エクスプローラー内の選択したソースファイルを「CASL87」ウィンドウの”FIle Input”ボックスにドラッグ&ドロップする。”Excute”ボタンをクリックすると、計算が実行され、計算結果のファイル(サフィックス = ".CAL")が作成される。下の図ではエクスプローラ内の選択された複数のソース・ファイル群を一挙にドラッグ&ドロップしている例を示している。
作成完了した選択した計算結果のファイル(サフィックス = ".CAL")をグラフ・プロッターの「GR87」にドラッグ&ドロップする。
次に”Execute”ボタンをクリックするとゲインと位相の周波数特性が別ウィンドウで表示される。
下の図では、エクスプローラ内の選択された複数の計算結果のファイル群を一挙に「GR87」にドラッグ&ドロップして表示した例を示している。
前述のノッチ・フィルター用のソース・ファイル上で、Circuit HighSideFilter内のRhi1とRhi2及び、Circuit LowSideFilter内のRlo1とRlo2の値を変えた場合をそれぞれ複数のソース・ファイルに分けて記述して、「CASL87」で計算し、グラフ・プロッターの「GR87」で出力させた特性を以下に示す。
異なる周波数特性の回路のプロットの識別は色分けにより行っているが、それらのリストは別の子ウィンドウとして表示する方式にした。
■他社との性能比較
CASL87(&GR87)はフィードバック制御上の安定性追求やフィルター特性を求めることが目的であり、周波数特性に特化したものである(アナログ屋にとっては周波数特性がメイン・ストリート)。その部分を他社のSPICE系のシミュレーターとしてLTspice(米国)やSIMetrix(英国)と比較したのが下の表である。
この表は、105ノードある等価回路をテスト回路(クリック)として使用した結果である。
この表の中で、「計算限界」とは、各シミュレーターが扱える計算上の数値限界である。CASL87の扱う数値は32ビット版で1E-310~1E+300(デシベル換算-6200dB~+6000dB)であり、64ビット版で5E-324~1.7E+308(デシベル換算-6466dB~+6160dB)である。これに対し、LTspiceやSIMetrixでは、-3200dB~+3000dBなので、扱える数値範囲は、1E-160~1E+160程度である。もっとも、この数値限界の差については、ユーザーの側の必要範囲にも大きく差があるので、ここではコメントは避けておこう。
「計算時間」に関しては、SIMetrixがダントツで速い。SIMetrixはもともと、バークレイ版SPICEの欠点だった収束性の悪さを改善する目的で開発されたため、スピードが速いのは納得できる。
尚、SIMetrixはノード数の限界が約140ノードであるので、これ以上の大きなノード数の回路は扱えない。LTspiceの扱えるノード数は一応無制限、CASL87は64ビット版で約30000(正確には29,999)ノードである。(32ビット版では6,999ノード)
「計算限界でのグラフ処理」は、下の各シミュレーターのグラフ表示を見ていただければ判ると思うが、LTspiceやSIMetrixでは限界を超えると、破綻してグラフ上の下限までラインを描いてしまっている。CASL87の場合は、限界値を超えるとそれ以上は計算を中断するが、計算結果ファイルを出力し、GR87はそのまま中断の直前までを表示してくれる。
■シェアウェア版の公開(Windows10/11対応)
「CASL87」及びそのグラフ・プロッターの「GR87」をシェアウェアとして公開した。GR87はフリーだが、CASL87のフリー版は使用回数5回までは無料で、それ以降は価格¥5,060(税込み)でライセンス・キーを購入すれば制限回数なしで使用できる。
ダウンロードなどの詳細は以下のURLのHPをご参照のこと。
https://sites.google.com/a/lyde-global.com/casl87
(株)ベクターでのダウンロードおよび販売
https://www.vector.co.jp/soft/winnt/business/se520454.html?ds
<記: 村岡如竹>
■お問い合わせ
e-mail: muraoka@lyde-global.com