シミュレーション
.zen回路のSPICEシミュレーションをローカルまたはクラウドで実行し、結果、測定値、グラフ、表を得ます。
Embedrは .zen ファイルで記述した回路をngspiceでシミュレーションできます。レイアウトの前にフィルタのカットオフ周波数、LEDの電流、分圧回路の出力、レギュレータのリップルを確かめ、そのチェックをプロジェクトに残して、変更のたびに再実行できます。
仕組み
.zenファイルでSimulation(name, setup)ブロックを宣言します。setupには電源と、必要な解析、測定、グラフを指定するngspiceの.controlセクションを追加します。- エージェントにシミュレーションを依頼します。行には SPICE simulation("Running ngspice simulation")と表示されます。
- Embedrはファイルの部品をSPICEネットリストに変換してngspiceを実行し、ngspiceの出力を合否の結果とともに返します。
- 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 ファイルを指定します。 |
