【Mac】アナログ回路シミュレータLTspiceをAnaconda Python環境で動かす

スポンサーリンク

LTspiceはANALOG DEVIDE社から無料で提供されているアナログ回路のシミュレータで、誰でも使うことができます。

普段は仕事で半導体設計ツールベンダが提供する有償のSPICEを使っていますが、家でもSPICEを実行する環境がほしくなり、ネットで情報を集めながら本環境を構築しました。

Macの情報やバッチモードの情報が少なく、まともに使えるようになるまで苦労しました。

同様の環境を構築したいと思っている方のお役に立てるよう本記事にまとめました。

LTspiceはGUIを使って回路を作成して結果をグラフ表示できるツールで、大変便利なのですが、大量にSPICEシミュレーションを流したり、回路特性の調整を自動化しようとするとどうしてもGUIではなく、テキストで操作する環境がほしくなります。

本記事では、LTspiceのバッチモードを利用し、結果ファイルをPythonの配列として取り出すといったテキストベースの実行方法について紹介します。

結果の波形情報を数値列として扱えるため、matplotlibでグラフ表示してJupyter Notebookに記録などができるようになります。

回路とトランジスタモデルは、京都大学大学院情報学研究科 通信情報システム専攻/小野寺研究室様が公開されている講義資料を利用させていただきました。

SPICE (Simulation Program with Integrated Circuit Emphasis) は、カリフォルニア大学バークレー校で開発された電子回路のシミュレータで、LTspiceはSPICEから派生したものの1つです。

本記事の内容を以下の動画に収めていて、手順やできることのイメージができると思いますので合わせて参考にしてください。

【Mac】アナログ回路シミュレータLTspiceをAnaconda Python環境で動かす

動作環境

以下のバージョンを使用してLTspice実行環境を構築しました。

項目バージョン
MacmacOS Catalina 10.15.7
LTspiceXVII
AnacondaAnaconda3-2020.11-MacOSX-x86_64
Python3.8.8
numpy1.19.2
matplotlib3.3.4
jupyter1.0.0
ltspice1.0.1

Anaconda環境構築

Python環境はAnacondaがおすすめなので、以下の記事に従いインストールします。

Pythonバージョンは初期状態の3.8でOKです。

仮想環境名はLTspiceとします。(任意の名称で構いません)

以降のコマンド入力は、作成した仮想環境LTspiceから立ち上げたターミナルでの作業になります。

モジュール追加

Numpy, Matplotlib, Jupyterをインストールします。

conda install numpy matplotlib jupyter

LTspice結果を読み込むPythonライブラリをインストールします。

pip install ltspice

LTspiceのインストール

こちらのサイトからMac用LTspiceをダウンロードしてインストールします。

ダウンロードしたファイルを開くと以下のように表示されるので、LTspiceをApplicationsフォルダにドラッグ&ドロップします。

Drag and drop LTspice

これでインストール完了です。

回路シミュレーションに必要なファイルの準備

コマンドライン実行用Pythonプログラムのダウンロード

GitHubからLTspice実行と結果読み込みのためのPythonプログラムを任意の作業ディレクトリにダウンロードします。

git clone https://github.com/tak6uch1/LTspice

回路サンプルとSPICEモデルのダウンロード

京都大学大学院情報学研究科 通信情報システム専攻/小野寺研究室様が公開されている講義資料にある回路とSPICEモデルをダウンロードします。

以下のディレクトリ構造になるようにそれぞれのファイルを格納します。

nmosfet-iv.asc, pmosfet-iv.ascはダウンロード直後は拡張子が.asc.txtになっていたのでリネームしています。

LTspice/
    SPICE_param_0.5um_for_0529_class.txt
    inv/
        inv_example.asc
    nmos_iv/
        nmosfet-iv.asc
    pmos_iv/
        pmosfet-iv.asc

※上記ディレクトリ構成はGitHubからダウンロードしたrun.pyread_raw.pyなどは省略しています。

LTspice実行(GUI使用)

アプリケーションフォルダにあるLTspiceを起動すると以下のように表示されます。

Starting LTspice

NMOSのDC解析

Open An Existing Schematicから、さきほどダウンロードしたnmosfet-iv.ascを開くと以下のように表示されます。

画面下の方に.dcとあるのがDC(静的)解析を表しており、V1, V2の振り幅の最小値、最大値、ステップを表しています。

上の方にある.includeのファイルをダウンロードしたSPICEモデルにしたいので、右クリックしてファイル名を../SPICE_param_0.5um_for_0529_class.txtに書き換えます。

変更したらメニューのFile→Saveから保存しておきます。

Change include file path

これで1つ上のディレクトリにあるSPICEモデルファイルを使ってシミュレーションを実行してくれます。

左上にある人が走る絵がついているボタンを押すとシミュレーションが実行されます。

Run simulateion

正常に実行できたら新たにウィンドウが立ち上がりますので、黒い画面上で右クリック→Add Tracesを押し、波形表示するアイテムを選択します。

I(V2)を選択してOKを押します。

Select plot item

これで以下のようにNMOSのIV特性を表示できれば成功です。

NMOS IV curve

PMOSのDC解析

画面上部のメニューFile→Openからpmosfet-iv.ascを開き、.includeするSPICEモデルファイルを書き換えた状態が以下です。

これをこのまま実行すると以下の波形が表示されました。

Original PMOS IV curve

想定していた波形と違っていたので、回路を以下のように書き換えてみました。(オリジナルの方はマイナスの電位を与えているので同じかとも思いましたが、こちらの方が普通と思ったため)

Modified PMOS circuit

回路修正は画面上で右クリックからEdit→Move, DeleteやDraft→Wires, Componentなどを使って行います。

これだと以下のように通常のIVカーブが表示されました。

PMOS IV curve after circuit modification

インバータの過渡解析

次は過渡解析です。

画面上部のメニューFile→Openからinv_example.ascを開き、.lib(前出の.includeと同等)のSPICEモデルファイルを書き換え、さらにMOSの名前をSPICEモデルに合わせてCMOSP05, CMOSN05に書き換えます。

.tranの箇所はステップ時間、終了時間を指定して過渡解析をすることを表しています。

V1のPWLの部分は他の文字と重なっていてわかりづらいですが、時刻と電圧値の連続表記になっており、ここではインバータの入力として一度Riseしてその後Fallする波形を使うことを表しています。

.measureは何らかの測定を表現するもので、ここではN003ネット(インバータの入力)がRiseする際に2.5Vとなる時刻から、N004ネットがFallする際に2.5Vとなる時刻までをdelayという名前を付けて計測します。

実行してV(N003)とV(N004)を表示すると以下のような波形になります。

電圧値を表示する場合は、黒い波形の画面が立ち上がった状態で回路ウィンドウのネットをクリックすることでも波形表示できます。

Inverter waveform

緑の入力波形に対し、出力は少しなめらかな波形になって入力と反転していて、インバータとして正しく動いていることがわかります。

inv_example.logをFile→Openから開くと以下のようにdelayを測定した結果を見ることができます。

delay=1.09034e-10 FROM 2.025e-09 TO 2.13403e-09

実行時にエラーが発生した場合などもこのログファイルを見ることで、内容を確認できます。

LTspice実行(Pythonから)

SPICEネットリスト生成

LTspiceをGUIから実行するには.ascファイルを使用しましたが、バッチ実行するには.cirを作っておく必要があります。

.ascを開いているLTspiceの画面上で右クリックして、View→SPICE Netlistを押します。

Open Netlist

以下のようにSPICEネットリストが開いたら、メニューのFile→Save Asから.cirとして保存します。

SPICE Netlist

この作業を3つの.ascに対し同様に実施し、nmosfet-iv.cir, pmosfet-iv.cir, inv_example.cirを作成しておきます。

Terminalから実行

Anacondaで作成した仮想環境LTspiceのTerminalからnmos_iv, pmos_iv, invそれぞれのディレクトリで以下を実行します。

python run.py
python read_raw.py

run.pyはLTspiceを実行し、ログファイルの文字コードを変換してLOGというファイルに保存します。

このLOGはcatviなどのテキストエディタで見ることができます。

nmosfet-iv.cirの実行結果は以下です。

VIカーブを表示する場合は電流を正に取るのが通常のため、表示の際に電流値にマイナスをかけています。

以下が波形ファイルnmosfet-iv.rawを読み込むためのread_raw.pyの中身です。(PMOSの方も同様)

import ltspice
import matplotlib.pyplot as plt
import numpy as np
import os

file_path = 'nmosfet-iv.raw'
l = ltspice.Ltspice(file_path)
l.parse()

for i in range(l.case_count): # Iteration in simulation cases 
    V0 = l.get_data('V(N001)', i)
    I0 = l.get_data('I(V2)', i)
    plt.plot(V0, -I0)

plt.show()

pmosfet-iv.cirの実行結果は以下で、同様に電流の値を正にしています。

PMOS VI curve

inv_example.cirの実行結果は以下です。

以下が波形ファイルinv_example.rawを読み込むためのread_raw.pyの中身です。

import ltspice
import matplotlib.pyplot as plt
import numpy as np
import os

file_path = 'inv_example.raw'
l = ltspice.Ltspice(file_path)
l.parse()

time = l.get_time()
V0 = l.get_data('V(N003)')
V1 = l.get_data('V(N004)')

plt.plot(time, V0)
plt.plot(time, V1)
plt.show()

これでコマンドラインから実行できることが確認できました。

SPICEネットリスト.cirを手書きすれば、.asc無しでも実行できるはずです。

大量にシミュレーションを実行したり、一部を書き換えながら実行する際にテキストベースの実行環境が役立つと思います。

波形データをPythonの配列として取得できるため、波形の時間微分を取るなども可能になり、解析の幅が広がります。

Jupyter Notebookから実行

matplotlibでグラフ表示した履歴をコマンドと一緒に記録するにはJupyter Notebookを使うと便利です。

Anacondaの仮想環境LTspiceのTerminalから以下のコマンドでJupyter Notebookを立ち上げます。

jupyter notebook

Anaconda NavigatorからOpen with Jupyter Notebookとしても良いです。

LTspiceディレクトリから上記を実行するとブラウザに以下のように表示されます。

新規→Python 3と押します。

Jupyter Notebook

Untitledとなっている名称をLTspiceなどに変更します。

Rename notebook

Python3コマンド入力欄に以下のように入力し、nmos_iv, pmos_iv, inv以下でそれぞれrun.pyread_raw.pyを実行します。

cd nmos_iv
%run -i run.py
%run -i read_raw.py

Jupyter Notebookでコマンドを実行するにはShift+Returnを押す必要があります。

これにより以下のようにコマンドとグラフをノートに記録するように見ることができます。

Jupyter notebook 1
Jupyter notebook 2

保存ボタンを押すことで、履歴を保存できます。

書籍紹介

LTspiceをこれから使いはじめる方におすすめの本は以下で、LTspiceの基礎を丁寧に説明してくれています。

電子回路シミュレータ LTspice XVIIリファレンスブック (TOOL活用シリーズ)

ノードの初期値を与えるなど、一歩進んだ高度な設定方法やエラーの対策などについては以下の本が良いでしょう。

回路シミュレータLTspiceで学ぶ電子回路(第3版)

まとめ

Mac版LTspiceをインストールして、かんたんな回路サンプルのDC解析、過渡解析のシミュレーションを実行することができました。

GUIで実行する方法は他のサイトでもよく見かけますが、テキストベースでコマンドラインから実行する方法については情報が少なく苦労したので、どなたか同様の環境構築をしようとしている方のお役に立てるのではないかと思います。

参考文献

タイトルとURLをコピーしました