sanguisorbaのアイコン画像
sanguisorba 2022年12月17日作成 (2023年02月18日更新) © MIT
セットアップや使用方法 セットアップや使用方法 閲覧数 1862
sanguisorba 2022年12月17日作成 (2023年02月18日更新) © MIT セットアップや使用方法 セットアップや使用方法 閲覧数 1862

Skywater 130nm用LSI開発ツールをUbuntu WSLに入れてみる

本記事は”慶應理工 Advent Calendar 2022” 17日目の記事です。
https://adventar.org/calendars/7773

2020年、Googleの後押しでSkywater社130nmプロセスのPDKが無償利用可能かつオープンソースで公開されました。
しかも条件はありますがefablessというサービスを利用すると無料でチップを作ってくれるらしいです。
しかもPDKで指定されたツールは有料のものではなく、どれも無料かつオープンソースのもので構成されています。

今回は最もハードルが高いであろう各種EDAツールの導入をUbuntu WSL上で全部やります。

全部インストールする場合

入れるもの

インストール用スクリプト+コンフィグデータをGithubに用意いたしました。
iic-osicというレポジトリをUbuntu WSL用にアレンジしたものです。
https://github.com/sanguisorba/iic-osic-wsl
iic-osicというレポジトリでインストールされるツール

  • OpenLane
  • Icarus Verilog (iverilog)
  • Verilator (verilator)
  • GTKWave (gtkwave)
  • Xschem (xschem)
  • ngspice (ngspice; xschemから呼び出される)
  • gaw3 (gaw; xschemから呼び出される)
  • Magic (magic)
  • Netgen (netgen)

に独自で

  • Docker (WSL用にセットアップを行う。OpenLaneで必要)
  • kLayout (klayout)
  • kLayoutの自分用コンフィグデータ

を加えたものです。

動作環境

WSL 2 + Ubuntu 22.04.01 LTS の組み合わせで動く事を確認しています。
それ以外のUbuntu環境(仮想環境や実機など)ではiic-osic-setup.shのDocker周りとxschem-gawのgettextバージョン指定を変える必要があります。

あと全部インストールするので最低でも16GBの空き容量とそれなりに快適な回線も必要です。

インストール方法

まずWSL 2とUbuntuをインストールしてください。これは外部サイトが詳しいです。
Ubuntuのアカウントセットアップ後、以下の3行を実行してください。

git clone https://github.com/sanguisorba/iic-osic-wsl.git
cd iic-osic-wsl
./iic-osic-setup.sh

終わったらWSLを再起動していただければOKです。(wsl --shutdownではなく、ターミナルを閉じてもう一度開くだけで良いです)

WSL2 + Ubuntu 22.04 LTS 以外で使用する場合はDocker周辺を別途セットアップしてください。(Openlaneを使用しない場合は不要)
その後、iic-osic-setup.shを参考に手動でセットアップしてください。以下注意事項です。

  • バージョン指定でpython3.10-venvが要る。執筆段階でpython3.11-venvはだめだった。
  • ngspiceのバージョンは最新版にしないと古いアーカイブはダウンロードできなくなる。
  • ↑klayoutも同様。
  • xschem-gawはgettextのバージョンをpo/Makefile.in.inで指定する必要がある。 Ubuntu WSLの場合は執筆段階で0.20なのでsedで書き換えている。

アナログLSIツールのみインストールする場合

入れるもの

インストール用スクリプト+コンフィグデータをGithubに用意いたしました。
iic-osicがベースですが、殆ど別物です。
https://github.com/sanguisorba/iic-osic-wsl
iic-osicでインストールされるEDAツールのうち、アナログLSIに関連する

  • Xschem (xschem)
  • ngspice (ngspice; xschemから呼び出される)
  • gaw3 (gaw; xschemから呼び出される)
  • Magic (magic)
  • Netgen (netgen)

に独自で

  • kLayout (klayout)
  • kLayoutの自分用コンフィグデータ

を加えたものです。

動作環境

WSL 2 + Ubuntu 22.04.01 LTS の組み合わせで動く事を確認しています。
それ以外のUbuntu環境(仮想環境や実機など)ではxschem-gawのgettextバージョン指定を変える必要があります。

最低でも8GBの空き容量とそれなりに快適な回線も必要です。

インストール方法

まずWSL 2とUbuntuをインストールしてください。これは外部サイトが詳しいです。
Ubuntuのアカウントセットアップ後、以下の3行を実行してください。

git clone https://github.com/sanguisorba/iic-osic-wsl.git
cd iic-osic-wsl
./analog-setup.sh

終わったらWSLを再起動していただければOKです。(wsl --shutdownではなく、ターミナルを閉じてもう一度開くだけで良いです)

WSL2 + Ubuntu 22.04 LTS 以外で使用する場合はanalog-setup.shを参考に手動でセットアップしてください。以下注意事項です。

  • バージョン指定でpython3.10-venvが要る。執筆段階でpython3.11-venvはだめだった。
  • klayoutのバージョンは最新版にしないと古いアーカイブはダウンロードできなくなる。
  • ngspiceはiic-osicと異なりgitレポジトリからオプション付コンパイルを行っているため、バージョン指定不要。
  • xschem-gawはgettextのバージョンをpo/Makefile.in.inで指定する必要がある。 Ubuntu WSLの場合は執筆段階で0.20なのでsedで書き換えている。

各種ツール起動方法

xschem

回路図エディタ
netlist生成、ngspiceシミュレータ、gawプロッタをGUIから起動できます。
プロッタが起動しない場合は、~/src/xschem-gaw/po/Makefile.in.in のGETTEXT_MACRO_VERSIONを確認後、
READMEに沿ってmake , install してください。

$ xschem

手動でSkywater 130nmのPDKをコンパイルする事も可能ですが、Skywater 130nmの場合65GBくらい容量を食います。
https://github.com/RTimothyEdwards/open_pdks

klayout

レイアウトエディタ
本家iic-osicには無いのですが、個人的に使いたいので入れています。
私が普段使っているコンフィグも入れています。
不要な場合はklayoutを起動する前に~/.klayoutを削除してください。

$ klayout

magic

レイアウトエディタ
あまり使わないのでよくわかりません。

$ magic

Openlane

デジタル設計フロー。
使ったことないのでわかりませんが、再起動後、make testが通る事まで確認してます。

$ cd ~/OpenLane
$ sudo service docker start ←サービスは自動で起動しないので手動で起動してください
$ make test
(ログが流れるが、最後に Basic test passed と出ればOK)
$ klayout ~/OpenLane/designs/spm/runs/openlane_test/results/final/gds/spm.gds

開発を行う上で重要なリンク

ツールの使い方が書かれた参考リンク

本当は各種ツールの使い方まで書きたかったのですが、忙しくて間に合いませんでした。

おまけ:xschemの使い方

書きかけです。

主な操作方法

Esc - 選択解除
Shift + I - シンボルの配置
Q - プロパティ編集
W - 配線
F - 画面いっぱいにズーム ズームはマウスカーソルで行う
C - コピー
M - 移動
Ctrl + S - 上書き保存
Ctrl + Shift + S - 名前を付けて保存

起動方法

$ xschem

と打つとtop.schが表示されます。

キャプションを入力できます

top.schの右のタブの+をクリックすると新しい回路図を作成できます。
まず、Shift+Iキーを押してChoose Symbol画面を開きます
キャプションを入力できます

それぞれ以下のものが入っています。

  • /usr/local/share/xschem/xschem_library/devices - シミュレーションに必要なpinや電源シンボルなど
  • /home/user - 保存した回路図・シンボルを参照する際に便利
  • /home/user/pdk/sky130A/libs.tech/xschem/sky130_fd_pr - トランジスタ、抵抗、キャパシタ
  • /home/user/pdk/sky130A/libs.tech/xschem/sky130_stdcells - デジタル設計で使用するスタンダードセル(製作済のNANDやインバータなど)
  • /home/user/pdk/sky130A/libs.tech/xschem/stdcells - 同上
  • /home/user/pdk/sky130A/libs.tech/xschem/sky130_tests - 製作例、examples

今回は/home/user/pdk/sky130A/libs.tech/xschem/sky130_fd_prnfet_01v8.sympfet_01v8.symを使ってインバータを製作します。とりあえずシンボルを選択して配置してみましょう。

配置をしてみた
そしたら素子をクリックしてQキーを押します。するとEdit Propertiesの画面が開きます。

トランジスタの長さLと幅Wはここで記述します。とりあえずL=0.18, W=2にしてOKとします。これをPとN両方で適用します。
キャプションを入力できます

PのWはもっと大きくてもいい

次に配線をします。配線は始点にカーソルを合わせてWキーを押すとできます。曲がる際は曲がる角でWキーを押し、終点でクリックをすると終わります。

移動は素子をクリック、またはドラッグで範囲指定した後にMキーを押すとできます。移動する場所にカーソルを持って行きクリックすればOKです。
キャプションを入力できます

次にピンを配置します。Shift+IでChoose Symbol画面を開き、/usr/local/share/xschem/xschem_library/devicesを開きます。
前のフォルダに戻る際はファイル一覧で..をクリックするか、左下のUpをクリックします。Homeを押して初期フォルダに戻る事でも選択可能です。
pinは入力のipin, 出力のopin、入出力のiopinの3つを主に使います。面倒であれば全部iopinでも問題ありませんが、今回はipinopin1つを配置します。
電源ピンはvddgndを配置します。vddipin,iopinでも代用できますが、gndはシミュレーションの際に特別な扱いをされるので必ずグラウンドはgndで配置します。

配線するとこんな感じ。
キャプションを入力できます

ピンの名前はピンを選択してQキーでEdit Properties画面を開き、lab=以降を編集することで指定できます。
キャプションを入力できます

次にシミュレーション用の電源を配置します。電源シンボルを配置する方法もありますが、今回はスクリプトで直接指定します。
まずShift+IキーでChoose Symbol画面を開き、code_shown.symを配置します。

キャプションを入力できます

配置されたblablaを選択してQキーを押してEdit Properties画面を開きます。今回は以下のように書きます。
キャプションを入力できます

name=ngspice
only_toplevel=false
value="va a 0 pulse(0 1.8 5n 1p 1p 5n 10n) dc 0
vvdd VDD 0 dc 1.8
.control
save all
tran 1p 30n
write "test_inv.raw"
.endc"

書式

va a 0 pulse(0 1.8 5n 1p 1p 5n 10n) dc 0
vvdd VDD 0 dc 1.8
[電源の名前] [正極側のピン] [負極側のピン] [電源 (DCなら dc [電圧] みたいな感じで記述する) ]
グラウンドはネットリストではGNDではなく数字の0で記述されます。
パルスや正弦波などの書式についてはngspiceのマニュアルをご参照ください。

.control
save all
tran 1p 30n
write "test_inv.raw"
.endc

このブロックはシミュレータへのパラメータを指定しています。gawで読み込むためにデータを全部.rawを書くことと、トランジェント解析を行うという記述がされています。その他の解析 (AC解析など)はngspiceのマニュアルをご参照ください。

最後にシミュレーション用のモデルを配置します。top.schに戻り、TT_MODELSという表記のランチャーをクリックで選択します。選択した状態でCキーを押すとコピーできるので、これを自分の回路図の適当なところに配置します。
キャプションを入力できます

最終的にこんな回路図ができあがりました。
キャプションを入力できます

折角なので回路図を保存してみましょう。Escキーを押して何も選択していない状態にし、Ctrl+Shift+Sキーを押すと保存先を尋ねられます。スクリプトで書いたtest_inv.rawと同じファイル名が望ましいので、ファイル名をtest_inv.schとして保存します。
キャプションを入力できます

そしたらシミュレーションしてみましょう。
まず右上のNetlistを押し(何もアクションがなければ正常に出力されてます。何か出てきた時はエラーが起きているのでスクリプトを見直してください)、Simulateを押してシミュレーションを実行します。binary raw fileというメッセージで終了すれば正常にシミュレーションができているのでexitと打って終わってください。

キャプションを入力できます

そしたらWavesをクリックしてgawを起動します。.rawと.schが同じファイル名であれば自動的に波形を選択する画面が出てきます。
対象の波形をプロットエリア (Panel)へドラッグで移動させると波形が表示されます。
キャプションを入力できます
キャプションを入力できます

ちなみに簡易的なプロッタであればngspiceでも表示できます。シミュレーション実行後、

plot v(a) v(x)

と打つことで表示できます。
キャプションを入力できます

他にもシンボルを作成して回路図の階層化をしたりコーナーシミュレーションを行うことも可能ですが、とりあえずこんなもので。

sanguisorbaのアイコン画像
マイコンを使わない低レベルな電子工作とかPCBパターン製作など
  • sanguisorba さんが 2022/12/17 に 編集 をしました。 (メッセージ: 初版)
  • sanguisorba さんが 2022/12/18 に 編集 をしました。 (メッセージ: アナログLSI用ツールのオプションを追加)
  • sanguisorba さんが 2022/12/22 に 編集 をしました。 (メッセージ: リンク追加)
  • sanguisorba さんが 2023/02/18 に 編集 をしました。 (メッセージ: 一部改訂)
ログインしてコメントを投稿する