見出し画像

XSCHEM の使い方 その1:シミュレーションの流れ

この記事のサンプルファイル:skywater-130nm-examples/tutorial/xschem_1/

1.この記事の前提・目的

この記事の内容は IIC-OSIC-TOOLS 環境がセットアップされていることを前提にしています.まずは 「Skywater 130 nm設計環境の準備 (IIC-OSIC-TOOLS)」に従って IIC-OSIC-TOOLS をインストールしてください.

この記事では SPICE を使い慣れていない人を対象に,回路図の作成からシミュレーション,結果の確認までの流れを説明します.

2.XSCHEM とは


XSCHEM はオープンソースの回路図エディタです.作者のプレゼンテーションを見ると,発音は「エックススキーム」の模様.https://xschem.sourceforge.io/stefan/index.html  によれば最初のバージョンは1998年で現在のバージョンは 3.0.0.最新版は github で入手できます.回路図エディタなのでシミュレーションエンジンは外部プログラムを使います.デフォルトでは ngspiceXyce も使えます.

フリーの回路図エディタ/シミュレータとしては LTspice が有名ですが,LTspice はフリーですがオープンではないので,EDAツールもオープンソースにしたい場合は不適です.LTspice すごく使いやすいことには間違いないんですが.

3.XSCHEM によるシミュレーションの流れ

3.1 起動

起動は IIC-OSIC-TOOLS で起動したターミナルで xschem コマンドを実行します.

$ xschem

下のような画面で起動します.バックグランドプロセスとして起動すると操作を受けつけません.Ctrl-Z から bg でバックグラウンドプロセスにしたも同じ.XSCHEM は起動すると,ウィンドウのGUIとターミナルからコマンドを受け付けるCUI の両方から操作することができます.CUI がコマンドを受け付けられない状態では GUI でも操作ができない? IIC-OSIC-TOOLSのターミナルはタブに対応しているので,シェルを使いたい場合はターミナルの File → Open Tab で新しいタブを開いて使いましょう.

起動画面にはいろいろ情報がありますが,左側に並んでいるサンプルへのリンクはボタンを選択してキーボード "e" でサンプルが開きます.サンプルからこの画面に戻りたいときは Ctrl-e です."TT_MODELS" と書いてあるのがモデルパラメータ読み込みの設定です.コピーして使いましょう.

xschem起動直後の画面

なおこのトップ画面を開きたい場合は /foss/pdk/sky130A/libs.tech/xschem/sky130_tests/top.sch です.

3.2 表示関係

画面表示関係の操作はよくあるパターンなのであまり違和感なく使えます.f と z の挙動が Virtuoso ライクなので Virtuoso に染まっている人も安心.(ただし z の挙動は微妙に違います.Virtuoso では z を押してからクリックで2点を指定という手順ですが,SCHEM では z を押した時点のマウスカーソルの位置が1点目になります.)

  • ESC : 再描画

  • f : zoom full

  • z : マウスで指定した範囲を拡大

  • Shift-Z : Zoom-in

  • Ctrl-Z : Zoom-out

  • マウスホイール:Zoom-in/out

  • Shift-マウスホイール:水平スクロール

  • Ctrl-マウスホイール :垂直スクロール

  • e : 階層を下がる (選択したシンボル等の中身を表示)

  • Ctrl-E : 階層を上がる

3.3 回路図作成の基本

回路図の描き方は素子を置いて,端子を配線でつなぐというおなじみの方法です.xschem を起動すると上の方にいろいろアイコンが並んでいますが,"Insert Symbol" と "Insert Wire" を使います.

xschem の Insert Symbol と Insert Wire

どうでもいいですが LTspice でもシンボルのアイコンは ANDゲート.シンボルと言えば ANDゲートなんですかね.よく使うし NAND でもよさそうなものなのに.

LTspice のメニューアイコン

"Insert Symbol" ボタンを押すとシンボルを選択する画面が開きます.ショートカットキー "I" で開いてくれたら Cadence使いとしてはうれしんですが残念ながら "I" ではなく Shift-I です.

Insert Symbol - シンボル選択ウィンドウ

一番上の xschem_library が XSCHEM の標準ライブラリです.RLC・電源・グラウンドなどの基本素子などが含まれています.Cadence で言うところの analogLib です.素子はたくさんありますが,基本的なのは以下でしょうか.

  • res : 抵抗

  • ind : インダクタンス

  • cap : キャパシタンス

  • vsource : 電圧源

  • isource : 電流源

  • vsource_pwl : PWL信号源 (電圧)

  • isource_pwl : PWL信号源 (電流)

  • vdd : 電源

  • gnd : グラウンド

  • cccs : 電流制御電流源

  • ccvs : 電流制御電圧源

  • vccs : 電圧制御電流源

  • vcvs : 電圧制御電圧源

  • ammeter : 電流計

  • code : 制御文 (中身非表示)

  • code_shown : 制御分 (中身表示)

  • lab_pin : ピン

3.4 素子の配置

とりあえず簡単な回路を作るために電源 (vsource),抵抗 (res) x2,グラウンド (gnd) を置いてみましょう.

素子を置いたところ

素子を回転させるのは Alt-R,左右反転は Alt-F です.横向きになっている抵抗は Alt-R で回転させたもの.メニューでは Edit - Rotate selected object,Edit - Flip selected object です.配置が気にいらないときは素子を選択してから "M" (Move objects) で動かしましょう."M" で移動モードに入ってから "H" / "V" を押すと,移動方向は水平/垂直に制限されます.

3.5 配線

次に配線で端子をつなぎます.アイコンの Insert Wire ですが,いちいちアイコンをクリックするのは面倒なのでショートカット "W" を使いましょう.
なお,アイコンの Insert Wire をクリックした場合はエディタ上で始点をクリック→終点をクリック,という手順で線が引けますが,ショートカットの場合は "W" を押した瞬間にマウスカーソルがある点が自動的に始点になります.LTspice などとちょっと挙動が違うので最初は戸惑うかもしれませんが,慣れるとこれはこれで便利です.

配線をつないだところ

3.6 素子値の設定

とりあえず回路図にはなりましたが,まだ各素子の値がデフォルト値になっています.素子のプロパティを開いて電源の電圧値,抵抗の抵抗値を設定します.メニューの Properties - Edit,もしくはショートカット "Q" です."Q" でプロパティが開くのは Cadenceに染まった人にはうれしい.

素子プロパティの編集ウィンドウ

「value=1k」となっているところを適当に編集しましょう.ここでは 100 Ω にすることにします.抵抗は2つとも 100 Ωにして,電源は 1 V にしておきます.

素子値を変更した後

素子の横についている数字が変わっていることを確認してください.

3.7 ピンの追加

値を観測するために,ピンを追加します.ピンは xschem_library の lab_pin です.とりあえず置きましょう.R1 と R2 の間のノードにつなげたいので,Alt-R で左右反転させるといいです.

ピンを置いたところ

分かりやすく名前 (lab=xxx のところ) を "out" に変更して,配線でつなぎましょう.

ピン名を変更して目的のノードに接続

3.8 シミュレーションカードの追加

これで回路図は完成ですが,これだけだとこの回路図の何を解析すればいいのか分かりません.どういうシミュレーションをするかの指示を追加します.シミュレータへの指示を出すにはシンボル "code_shown" を使います.

code_shown を追加

プロパティを開いて "blabla" になっているところを ".dc V1 0 5 0.1" に変えます.dc の前にピリオドが入っているのを見落さないようにしましょう.SPICE では伝統的にシミュレータへの指示はピリオドで始まります.また,この文には空白が入っていますので,全体をダブルクォーテーションで囲んでください.(下図参照)

DC解析用のプロパティ

DC解析が何なのかの詳細は後で述べるとして,この文は「電源 V1 の電圧を 0 V から 5 V まで 0.1 V刻みで解析せよ」という意味です.これで何を解析するかも指示したので,回路図の作成は完了です.

これで完成

3.9 シミュレーションの実行

ようやくシミュレーションの実行です.まずウィンドウ右上の Netlist ボタンを押して SPICEネットリスト (SPICEの入力ファイル) を生成します.XSCHEM は回路図エディタで,シミュレーションを実行するのは ngspice なので,ngspice に渡すためのネットリストを作る必要があるのです.LTspice のように統合されたツールに比べると一手間かかります (クリック1回だけですが).

Netlist / Simulate ボタン

Netlist ボタンは押しても特に何も起きません.(実際には /headless/.xschem/simulations/ の下に ***.spice という名前で以下のようなネットリストが生成されています.)

** sch_path: /foss/designs/xschem/sample.sch
**.subckt sample
V1 net1 GND 1
R1 out net1 100 m=1
R2 out GND 100 m=1
**** begin user architecture code

.dc V1 0 5 0.1

**** end user architecture code
**.ends
.GLOBAL GND
.end

次に Simulate ボタンを押しましょう.これで ngspiceが起動して,下のようなウィンドウが開きます.このサンプルの回路は簡単なので解析は即座に終わります.

ngspice ウィンドウ

エラーなどが出ていないか確認してください.

3.10 結果の表示

結果をグラフで表示するには ngspice のウィンドウで "plot out" を実行します.plot がコマンド,out は2.7 で設定したピンの名前です.

解析結果のプロット

テキストでデータが欲しい場合は print コマンドを使います."print out" を実行すると,下のようにテキストで出力されます.

print による結果の表示

ファイルに保存したい場合は wrdataコマンドを使います.

ngspice 1 -> wrdata filename.txt v(out)

で ~/.xschem/simulations/filename.txt  に結果が保存されます.なお,~/.xschem ディレクトリは一時ファイルでターミナルを閉じると丸ごと消えます.必要なデータはコピーするのを忘れないようにしましょう.

また,write コマンドでも保存できますが,こちらはデータだけでなくいろいろな情報を含んだファイルです.そのままだとバイナリファイルl (raw) が生成されますが,"set filetype=ascii" で ASCII text でも出力できます.writeコマンドの書式は "write ファイル名 出力"です.test.txt  に out (の電圧) を出力を保存するには "write test.txt out" です.こちらも保存場所は~/.xschem/simulations/ の下です.

writeコマンド

ただ,下のようなフォーマットでそのまま Excel に入れたりできる形式ではないので使い勝手はあまりよくありません.データ処理には wrdata を使う方がいいでしょう.

Title: ** sch_path: /foss/designs/xschem/sample.sch
Date: Sun Jul 17 13:20:48 2022
Plotname: DC transfer characteristic
Flags: real
No. Variables: 2
No. Points: 51
Variables:
0 v(v-sweep) voltage
1 v(out) voltage
Values:
0 0.000000000000000e+00
0.000000000000000e+00

1 1.000000000000000e-01
5.000000000000000e-02

2 2.000000000000000e-01
1.000000000000000e-01

3 3.000000000000000e-01
1.500000000000000e-01


この記事が気に入ったらサポートをしてみませんか?