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
開発を行う上で重要なリンク
-
Skywater SKY130 PDK's documentation
https://skywater-pdk.readthedocs.io
Skywater 130nmの公式ドキュメントです。各種デザインルールはここに書いてあります。 -
ngspice manual
https://ngspice.sourceforge.io/docs/ngspice-manual.pdf
ngspiceのマニュアルです。シミュレーションの設定で使用します。
ツールの使い方が書かれた参考リンク
-
SkyWater 130 nm フルカスタム設計への道
https://note.com/akira_tsuchiya/m/m7877b0dd1dbe
xschem, klayoutを使用したアナログ回路設計について書かれています。 -
OpenLane & SkyWater PDKで無料の半導体設計環境
https://take6shin-tech-diary.com/openlane-skywater/
Openlaneを使用したデジタル設計フローについて書かれています。
本当は各種ツールの使い方まで書きたかったのですが、忙しくて間に合いませんでした。
おまけ: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_pr
のnfet_01v8.sym
とpfet_01v8.sym
を使ってインバータを製作します。とりあえずシンボルを選択して配置してみましょう。
そしたら素子をクリックしてQキーを押します。するとEdit Propertiesの画面が開きます。
トランジスタの長さLと幅Wはここで記述します。とりあえずL=0.18, W=2にしてOKとします。これをPとN両方で適用します。
次に配線をします。配線は始点にカーソルを合わせてWキーを押すとできます。曲がる際は曲がる角でWキーを押し、終点でクリックをすると終わります。
移動は素子をクリック、またはドラッグで範囲指定した後にMキーを押すとできます。移動する場所にカーソルを持って行きクリックすればOKです。
次にピンを配置します。Shift+IでChoose Symbol画面を開き、/usr/local/share/xschem/xschem_library/devices
を開きます。
前のフォルダに戻る際はファイル一覧で..
をクリックするか、左下のUpをクリックします。Homeを押して初期フォルダに戻る事でも選択可能です。
pinは入力のipin
, 出力のopin
、入出力のiopin
の3つを主に使います。面倒であれば全部iopin
でも問題ありませんが、今回はipin
とopin
1つを配置します。
電源ピンはvdd
とgnd
を配置します。vdd
はipin
,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
さんが
2022/12/17
に
編集
をしました。
(メッセージ: 初版)
-
sanguisorba
さんが
2022/12/18
に
編集
をしました。
(メッセージ: アナログLSI用ツールのオプションを追加)
-
sanguisorba
さんが
2022/12/22
に
編集
をしました。
(メッセージ: リンク追加)
-
sanguisorba
さんが
2023/02/18
に
編集
をしました。
(メッセージ: 一部改訂)
ログインしてコメントを投稿する