シミュレーション

.zen回路のSPICEシミュレーションをローカルまたはクラウドで実行し、結果、測定値、グラフ、表を得ます。

Embedrは .zen ファイルで記述した回路をngspiceでシミュレーションできます。レイアウトの前にフィルタのカットオフ周波数、LEDの電流、分圧回路の出力、レギュレータのリップルを確かめ、そのチェックをプロジェクトに残して、変更のたびに再実行できます。

仕組み

  1. .zen ファイルで Simulation(name, setup) ブロックを宣言します。setupには電源と、必要な解析、測定、グラフを指定するngspiceの .control セクションを追加します。
  2. エージェントにシミュレーションを依頼します。行には SPICE simulation("Running ngspice simulation")と表示されます。
  3. Embedrはファイルの部品をSPICEネットリストに変換してngspiceを実行し、ngspiceの出力を合否の結果とともに返します。
  4. controlセクションが書き出したグラフと表は、プロジェクト内の .zen ファイルの隣に保存されます。

シミュレーションの記述をエージェントに任せることもできます。

Add a simulation for the RC filter in pcb/bench/rc_filter.zen: AC sweep from 1 Hz to 1 MHz,
measure the -3 dB point, fail if it is outside 1.4–1.8 kHz, and plot the response to output/.
Simulate pcb/bench/led_driver.zen and tell me the LED current at 3.3 V and 5 V.

シミュレーションできるもの

シミュレーションするファイルのすべての部品にSPICEモデルが必要です。

  • 標準の汎用部品(抵抗、コンデンサ、インダクタ、フェライトビーズ、LED、水晶振動子、ネットタイ)は自前のモデルを持っています。
  • シミュレーション用のプロパティ(Sim.Library、Sim.Name、Sim.Device、Sim.Pins)を持つKiCadシンボルはモデルを提供します。
  • それ以外の部品は、プロジェクト内のモデルファイル(例: models/part.lib)を指定します。

モデルのない部品があると、"Components missing a SpiceModel" で実行が止まります。モデルを与えるか、未実装(do-not-populate)にするか、その部品を含まない小さなファイルをシミュレーションしてください。設計の一部分をシミュレーションするには、基板の隣に別のベンチファイルを置くのが一般的です。

シミュレーションされるのは Simulation(...) ブロックを持つファイルだけです。別のファイルを指定しない限り、エージェントはメインの基板ファイルをシミュレーションします。

例

pcb/bench/rc_filter.zen:

Resistor = Module("@stdlib/generics/Resistor.zen")
Capacitor = Module("@stdlib/generics/Capacitor.zen")

VIN = Net()
VOUT = Net()
GND = Ground()

Resistor(name="R1", value="10kohm", P1=VIN, P2=VOUT)
Capacitor(name="C1", value="10nF", P1=VOUT, P2=GND)

Simulation(
    name="rc_lowpass",
    setup=f"""
V1 {VIN} {GND} DC 0 AC 1
.control
  ac dec 100 1 1Meg
  meas ac f3db when vdb({VOUT})=-3
  if f3db < 1400 or f3db > 1800
    echo "FAIL: cutoff $&f3db Hz"
    quit 1
  end
  echo "PASS: cutoff $&f3db Hz"
  set hcopydevtype = svg
  hardcopy output/rc_response.svg vdb({VOUT}) title "RC response"
.endc
""",
)
  • setupのテキスト内ではネットを {...} で参照するため、{VOUT} は実際のネット名になります。
  • 解析: op(動作点)、dc(スイープ)、ac(周波数応答)、tran(過渡)。
  • meas は数値を取り出し、echo はそれを出力に表示します。
  • if の中の quit 1 は、測定を合否のチェックに変えます。実行は失敗として報告されます。
  • hardcopy は、.zen ファイルのフォルダを基準にSVGのグラフを書き出します。出力は output/ のような小さなフォルダにまとめてください。
  • 値はngspiceが理解できる形で書きます。たとえば 2M ではなく 2meg です(SPICEでは M はミリを意味します)。

実行後のプロジェクトは次のようになります。

pcb/
  bench/
    rc_filter.zen
    output/
      rc_response.svg

得られるもの

  • 合否。 ファイルについて "Simulation passed" または "Simulation failed"。ngspiceがエラーを報告するか、quit 1 のチェックが発動すると失敗になります。
  • ngspiceの出力。 すべての echo と測定値。エージェントがそれを読んで伝えます。
  • ファイル。 controlセクションが作成または変更したグラフ(SVGまたはPNG)と表(CSVまたはTXT)。"Outputs written by the control block" の下に一覧表示されます。ファイルツリーから開けます。
  • エージェント向けのグラフ。 デスクトップでは、エージェントは最大6つのグラフを画像として確認するため、数値だけでなく曲線についてもコメントできます。

シミュレーションに合格しても、それはモデル化された範囲の回路(理想的な電源、寄生成分なし、レイアウトの影響なし)についてだけです。レイアウトや製造のチェックではありません。

ローカルのngspiceかクラウドか

デスクトップでは、Settings → Local tools → Where tools run → SPICE simulation に2つの選択肢があります。

  • Local when available(既定): このコンピュータにngspiceがインストールされていれば使い、なければクラウドを使います。
  • Always cloud: 常にクラウドでシミュレーションします。

ローカルでシミュレーションするにはngspiceをインストールします。

システム インストール
macOS brew install ngspice
Linux sudo apt install ngspice
Windows ngspice.sourceforge.io からngspiceをダウンロードし、環境変数 NGSPICE に ngspice.exe を設定します

Embedrは PATH 上か、一般的なインストール先(/opt/homebrew/bin、/usr/local/bin、/usr/bin、C:\Program Files\ngspice\bin、C:\Spice64\bin)からngspiceを探します。

クラウドでのシミュレーションにはサインインが必要です。pcb/ のソースが、pcb/ 以下のSPICEモデルファイル(.lib、.sub、.cir、.mod、.spice、.inc、.txt)とともに送信され、グラフと表はローカルで実行した場合と同じ場所に戻ってきます。

ブラウザでは

ブラウザ版Embedrでは、シミュレーションは常にクラウドで実行されます。グラフは結果とともに表示され、プロジェクトに保存されます。エージェントはグラフではなくngspiceの出力から数値を読むため、判断してほしいものについては meas と echo の行を出すよう依頼してください。

プランモード

プランモードでは、エージェントはシミュレーションを実行しません。シミュレーションするにはエージェントモードに戻してください。

トラブルシューティング

メッセージ 対処
"… has no Simulation() setup; add one with a SPICE stimulus and .control block." そのファイルに Simulation(...) ブロックを追加するか、ブロックを持つファイルを指定します。
"Components missing a SpiceModel" 部品にモデルを与えるか、未実装にするか、その部品を含まないベンチファイルをシミュレーションします。
"The SPICE simulation failed; see the ngspice output." 出力を読みます。自分のチェックによる FAIL の行か、不明なネットや不正な値などのngspiceのエラーがあります。
"The SPICE simulation timed out …" ngspiceは5秒で停止されます。過渡解析を短くし(例: tran 10n 10u)、スイープの点数を減らし、ループを避けてください。
"ngspice is not installed (…) and the simulation worker needs a signed-in session." ngspiceをインストールするか、サインインしてクラウドでシミュレーションします。
"Simulations are set to run in the cloud (Settings → Local tools), and the simulation worker needs a signed-in session." サインインするか、SPICE simulationを Local when available に切り替えます。
"SPICE simulation is unavailable in this run" この実行ではクラウドのシミュレータに接続できませんでした。後でもう一度試すか、ngspiceをインストールしたデスクトップアプリで実行してください。
"An initialized project pcb workspace is required." 先にエージェントにPCBワークスペースの初期化を依頼します。回路図とPCBを参照してください。
"filePath must be an existing .zen file inside the project pcb workspace." pcb/ 以下の .zen ファイルを指定します。