機械学習といった話題とセットで注目を浴びるPython。昨年、新たに電子回路の設計を可能とするライブラリが公開さました。このライブラリ、EDAの新風となるのでしょうか? どの様な展開をみせるのか可能性を考えてみます。
EDAとは、電子機器の製造過程において、設計作業を効率的に行うために使用される、特にソフトウェアの総称です。今回のライブラリはどの様な位置づけなのでしょう。
EDAの中でも回路図設計や電子基板デザインで用いられる製品は3種類に大別できます。
これらには回路図の作成のみ、もしくは基板デザインのみと作業に特化したものもありますが、多くは回路図面からガーバーデータまで一貫して設計作業ができる統合開発環境です。
昨年(2017年7月)リリースされたライブラリはPython向け回路図作成ライブラリ「SchemDraw」、本稿執筆時点(2018年5月)の最新バージョンは「0.3.1a0」です。
このSchemDrawは前述した3種のEDA群と性質が若干異なります。
ごく簡単に説明すると“PC上で動作するプログラムで回路図を記述”するものです。今までも商用のEDAにはマクロといったプログラム言語に近い機能で操作の一部を自動化できるものもありました。
本ライブラリの特筆すべき点は“汎用的な高水準プログラミング言語を用いる”ということです。
SchemDrawを使用して回路図を作成している様子を掲載します。
ここでマクロ言語と汎用的なプログラミング言語の違いを考えてみましょう。
マクロ言語の場合、可能な操作はEDAの持つ機能が上限、あくまでも補助的な役割という位置づけにとどまります。一方のプログラミング言語が対応できる範囲は基本的にコンピュータ上で実行できること全てです。
SchemDrawはプログラミング言語(Python)に機能を拡張するライブラリとして提供されています。特にPythonは学術研究の領域で人気が高く、複雑なテキスト検索や画像の分析、回帰解析、近年では機械学習の研究でも利用されています。「SchemDrawがPython言語を拡張する」ということは、そうしたPythonが得意とする学術研究の実装の一つとして“回路図も描ける”ということになるでしょう。
実際にSchemDrawで作成した回路図を掲載します。
上記は「オペアンプを使った反転増幅回路」です。オペアンプなどのデータシートはRSコンポーネンツから入手しました。
回路図の作成に使用したソースコードは以下のとおりです。
import SchemDraw as schem
import SchemDraw.elements as e
%matplotlib inline
%config InlineBackend.figure_format = "svg"
# 回路図描画開始
d = schem.Drawing()
# オペアンプ NJM2114
op = d.add( e.OPAMP, botlabel = "NJM2114" )
# 非反転入力
d.add( e.LINE, xy = op.in2, d = "left", l = d.unit/6 )
R2 = d.add( e.RES, d = "left", botlabel = "R2 20k" )
d.add( e.LINE, d = "down", l = d.unit/4 )
d.add( e.GND )
# 反転入力
d.add( e.LINE, xy = op.in1, d = "left", l = d.unit/6 )
d.add( e.DOT )
d.push()
R1 = d.add( e.RES, d = "left", toplabel = "R1 20k" )
d.add( e.LINE, d = "left", l = d.unit/6, lftlabel = "$v_{in}$" )
d.pop()
# 負帰還
d.add( e.LINE, d = "up", l = d.unit/2 )
R3 = d.add( e.RES, d = "right", l = d.unit*1, label = "R3 100k")
d.add( e.LINE, d = "down", toy = op.out )
d.add( e.DOT )
d.push()
d.add( e.LINE, d = "left", tox = op.out )
d.pop()
d.add( e.LINE, d = "right", l = d.unit/4, rgtlabel = "$v_{out}$" )
# 回路図データ出力
d.draw()
d.save( "opamp.svg" )
本稿はプログラムの解説記事ではないので詳細な説明は省きますが、わずか40行程度のソースコードで回路図が描けるという雰囲気は伝わるのではないでしょうか。
“ノードとそれにつながるピン”という定義方法で記述するネットリストとの違いは、“電流に沿ってパーツを配置(プログラムを記述)”していくという点です。SchemDrawではプログラム中に部品の形状や電気的な接続方法といった、回路図面を作成するための情報を含む記述方法が採用されています。
このSchemDraw、今後はどの様に発展していくのでしょう。
その特徴を生かして、LTspiceなどのシミュレーション分野への影響が真っ先に考えられます。LTspiceは回路図入力、波形ビューワといった電子回路のシミュレーションを容易にするためのソフトウェアです。こういった処理はPythonの主戦場でしょう。
シミュレーションソフトに限ったことではありませんが、成功するには部品ライブラリの充実が必要となります。現状はデータシートを片手に設計者自身が諸元値を拾い出して入力、もしくは有志が作成し公開するライブラリを使用するというのが実情です。
汎用プログラミング言語の利用は、この点でも一歩リードできるのではないでしょうか。点在する諸元値情報を収集しライブラリ化することがリアルタイムで実現できる可能性が考えられます。
これには半導体メーカーがデバイスの諸元値を共通的なフォーマットにて公開、データベースへアクセするように参照できるといった取り組みが必要となります。加えて半導体メーカーや研究者、先進的なエンジニアが公開するアプリケーションノートもこれに倣った形式で公開すれば、ノウハウとして設計に取り込むことも容易でしょう。
こうした取り組みが上手く進んだ場合、将来の設計作業は図のような流れになると思われます。
既存のEDAが全く不要になるわけではありません。設計者が自ら手を加える必要がある際には、EDAを使用した視覚的な操作が上記フローに割り込むイメージです。
汎用的なプログラミング言語を拡張することで回路図の作成を可能にしたSchemDraw。将来は電子回路の設計作業を一変させる可能性を持っています。とはいえ、まだまだスタートしたばかり。このプロジェクトへ様々な専門分野のエキスパートが参加してくることが予想され今後の動向が楽しみです。