Python向け回路図作成ライブラリの可能性を考える
[履歴] (2018/05/29 21:08:17)

概要

機械学習といった話題とセットで注目を浴びるPython。昨年、新たに電子回路の設計を可能とするライブラリが公開さました。このライブラリ、EDAの新風となるのでしょうか? どの様な展開をみせるのか可能性を考えてみます。

EDA(Electronic Design Automation)とは

EDAとは、電子機器の製造過程において、設計作業を効率的に行うために使用される、特にソフトウェアの総称です。今回のライブラリはどの様な位置づけなのでしょう。

EDAの中でも回路図設計や電子基板デザインで用いられる製品は3種類に大別できます。

  • 図研やAltiumといった老舗EDAメーカの製品
  • RSコンポーネンツやP板.comなどのeコマース企業が提供する無償CAD
  • KiCadなどのオープンソースで展開するもの

これらには回路図の作成のみ、もしくは基板デザインのみと作業に特化したものもありますが、多くは回路図面からガーバーデータまで一貫して設計作業ができる統合開発環境です。

昨年(2017年7月)リリースされたライブラリはPython向け回路図作成ライブラリ「SchemDraw」、本稿執筆時点(2018年5月)の最新バージョンは「0.3.1a0」です。

SchemDrawとは

このSchemDrawは前述した3種のEDA群と性質が若干異なります。

ごく簡単に説明すると“PC上で動作するプログラムで回路図を記述”するものです。今までも商用のEDAにはマクロといったプログラム言語に近い機能で操作の一部を自動化できるものもありました。

本ライブラリの特筆すべき点は“汎用的な高水準プログラミング言語を用いる”ということです。

SchemDrawを使用して回路図を作成している様子を掲載します。

プログラムによる回路図作成

プログラミング言語の利点

ここでマクロ言語と汎用的なプログラミング言語の違いを考えてみましょう。

マクロ言語の場合、可能な操作はEDAの持つ機能が上限、あくまでも補助的な役割という位置づけにとどまります。一方のプログラミング言語が対応できる範囲は基本的にコンピュータ上で実行できること全てです。

SchemDrawはプログラミング言語(Python)に機能を拡張するライブラリとして提供されています。特にPythonは学術研究の領域で人気が高く、複雑なテキスト検索や画像の分析、回帰解析、近年では機械学習の研究でも利用されています。「SchemDrawがPython言語を拡張する」ということは、そうしたPythonが得意とする学術研究の実装の一つとして“回路図も描ける”ということになるでしょう。

SchemDrawによる回路図作成

実際に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の今後は?

このSchemDraw、今後はどの様に発展していくのでしょう。

その特徴を生かして、LTspiceなどのシミュレーション分野への影響が真っ先に考えられます。LTspiceは回路図入力、波形ビューワといった電子回路のシミュレーションを容易にするためのソフトウェアです。こういった処理はPythonの主戦場でしょう。

シミュレーションソフトに限ったことではありませんが、成功するには部品ライブラリの充実が必要となります。現状はデータシートを片手に設計者自身が諸元値を拾い出して入力、もしくは有志が作成し公開するライブラリを使用するというのが実情です。

汎用プログラミング言語の利用は、この点でも一歩リードできるのではないでしょうか。点在する諸元値情報を収集しライブラリ化することがリアルタイムで実現できる可能性が考えられます。

これには半導体メーカーがデバイスの諸元値を共通的なフォーマットにて公開、データベースへアクセするように参照できるといった取り組みが必要となります。加えて半導体メーカーや研究者、先進的なエンジニアが公開するアプリケーションノートもこれに倣った形式で公開すれば、ノウハウとして設計に取り込むことも容易でしょう。

将来期待される設計作業のフロー

こうした取り組みが上手く進んだ場合、将来の設計作業は図のような流れになると思われます。

  1. プログラムスタート
  2. 半導体メーカーのデータベースからデバイスの諸元値、外形情報を取得
  3. アプリケーションノートから参考となる回路情報を取得
  4. 設計者が持つノウハウを組み合わせる
  5. シュミレーションやその他必要な解析を行い回路を微調整
  6. 回路図面やBOM、ガーバーデータの生成

既存のEDAが全く不要になるわけではありません。設計者が自ら手を加える必要がある際には、EDAを使用した視覚的な操作が上記フローに割り込むイメージです。

まとめ

汎用的なプログラミング言語を拡張することで回路図の作成を可能にしたSchemDraw。将来は電子回路の設計作業を一変させる可能性を持っています。とはいえ、まだまだスタートしたばかり。このプロジェクトへ様々な専門分野のエキスパートが参加してくることが予想され今後の動向が楽しみです。

関連ページ