【M1 Mac】OpenLane & SkyWater PDKで無料の半導体設計環境(RTL→GDS)構築

スポンサーリンク

本記事は元の記事の派生で、M1 MacでOpenLane & SkyWater PDKをGUI込みで実現する方法を紹介するのもです。

M1チップ向けのソフトウェア対応はまだまだ未成熟で、標準アプリ(AppStoreから入手可能なもの)以外のカスタム環境を構築しようとすると対応していないものがあり、苦労しますね・・・(2021年10月現在)

本記事では環境構築の部分についてフォーカスして説明しますので、OpenLaneの概要や各工程の内容については、元記事を参照ください。

M1 MacでDocker for MacのコンテナからGUIを使うとQt(GUIエンジン)の一部機能が対応していないようで、フォルダのブラウズ機能がうまく動かない問題がありました。(2021年10月現在)

GUIの部分のみDocker for Macではなく、Limaを使うことで上記問題を回避できました。

Lima: Mac上でLinux仮想環境を構築してネイティブMacとファイル共有するもので、WindowsにおけるWSL2のようなアプリケーションです。

Docker for MacのM1チップ対応が十分に進んだあとは、M1用に最適化された機能が使えるのでDocker for Macを使う方が良いと思います。

それまでの間の暫定的な回避策として本記事をご活用いただきたいです。

OpenLaneに限らず、DockerのM1未対応により困った際も本記事は参考になると思います。

本記事の内容を以下の動画に収めていますので、よろしければご覧ください。

実行環境

項目Mac (M1チップ)
PCmacOS Big Sur 11.6
Python3.9.6
X11XQuartz 2.8.1 (xorg-server 1.20.11)
Lima0.7.1
Docker(on Lima VM)20.10.9, build c2ea9bc

OpenLane環境構築

Dockerをインストールしていない場合は、こちらからインストールします。

wgetをインストールしていない場合は以下のコマンドでインストールします。

HomeBrewをインストールしていない場合はこちらからインストールします。

brew install wget

ターミナルを立ち上げ、OpenLaneのGitHubリポジトリのREADMEに従い、以下のコマンドでpyyamlとclickを追加します。

pip3 install --user pyyaml click

iTerm2のインストール

こちらからiTerm2をインストールします。

iTerm2 Download

iTerm2を使うのはRosetta(Intel CPUのエミュレータ)経由のターミナルとして利用するためで、通常のターミナルをRosetta経由/M1ネイティブを切り替えて使用することでも問題ないと思います。

私はM1ネイティブ用を通常のターミナル、Rosetta経由をiTerm2にして使い分けることにしました。

FinderのアプリケーションフォルダからiTermに対し「情報を見る」→「Rosettaを使用して開く」を設定します。

iTerm2 setting

これでiTerm2はRosetta経由で立ち上がるようになります。

以降の処理のうち、make pdkを実行する際に使用します。

OpenLane環境のダウンロード

任意の作業ディレクトリを作ってcdでそのディレクトリに移動し、gitコマンドでGitHubからOpenLane環境をダウンロードします。

git clone https://github.com/The-OpenROAD-Project/OpenLane.git

OpenLane環境のビルド

OpenLane環境のビルドを行います。

cd OpenLane
make openlane

docker imagesを実行してefabless/openlaneイメージが表示されれば成功です。

次にiTerm(Rosetta経由)を立ち上げ、OpenLaneディレクトリに移動し、make pdkを実行します。

cd OpenLane
make pdk

ここでRosetta経由のターミナルを使用する理由は、make pdk内でダウンロードされるビルド用のシェルスクリプトファイルがARM CPU(M1のCPU)に対応したものが存在せず、Intel CPUと見せかけて実行しないとうまく処理が進まなくなってしまうためです。

これでpdksディレクトリ以下にPDKが展開されます。

iTerm(Rosetta経由)を使うのは上記make pdkだけで、以降では使用しないため、iTermを閉じます

OpenLane環境のテストを行います。

make test

エラー無く流れれば成功です。

GUIを使う方法

Xquartzのインストール

DockerでGUIを表示するための常套手段とも言えるSSHのX11 forwardingを使います。


X11 forwarding for Mac

以下のコマンドでXquartzをインストールします。

HomeBrewをインストールしていない場合はこちらからインストールします。

brew install --cask xquartz

Lima環境構築

Limaの環境構築の際に参考にさせていただいたこちらの記事は、dockerと入力するとLima上のDockerを呼び出すようにする設定をしていますが、dockerと入力した場合はDocker for Mac、lima dockerと入力した場合はLima上のDockerとして使い分けたかったので、同記事の方法を部分的に採用させていただきました。

できれは元記事と同じくdocker-composeを使いたかったのですが、うまく行かなかったので、すべてdockerコマンドで実行するようにしています。

各種Dockerコマンドはrun_〜に記載して、できるだけ簡単に実行できるようにしてあります。

Limaをインストールします。

brew install lima

M1用のパッチを適用します。

brew tap knazarov/qemu-virgl
brew install qemu-virgl
brew unlink qemu
brew link qemu-virgl

GitHubからOpenLane環境のビルドに必要なファイルをダウンロードします。

cd ..
git clone https://github.com/tak6uch1/OpenLane_GUI

ダウンロードしたOpenLane_GUIからM1用のファイルをコピーします。

cd OpenLane_GUI
cp -r *M1 default.yaml ../OpenLane

default.yamlはhttps://raw.githubusercontent.com/chibiegg/lima-config/master/docker.yamlに対し、ホームディレクトリの書き込み権限を追加したものになります。

設定ファイルdefault.yamlを指定してLima VM(Virtual Machine)を構築します。

cd ../OpenLane
limactl start default.yaml

上記設定によりLima環境にDockerがインストールされます。

コマンドの頭にlimaをつけてdockerコマンドがエラー無く実行できることを確認しておきます。

lima docker ps

Lima上のDockerイメージビルド

gui_M1/Dockerfileは以下(抜粋)のようになっており、passwordの部分はお好みの内容に変更してください。

ARG PASS=password

Lima上のDockerでは、ディスク共有したディレクトリはコンテナ内でrootオーナーになり、ユーザーログインだと書き込みができなかったので、rootログインするようにしました。

efabless/openlaneイメージにopenssh-serverを追加してsshdサーバを立ち上げるようになっています。

vim(viの高機能版)を立ち上げることも多いでしょうから、合わせてインストールし、viにエイリアス(別名をつける、viと入力するとvimが起動)しています。

また、klayoutをレイヤーマップ指定で立ち上げるコマンドは長いので、kl <GDS-file>で実行できるようにするためのエイリアスも定義しています。

さらにmagicでDEF/LEFを開くコマンドも長いため、mdef <DEF-file>で実行できるようにfunction定義しています。

上記はDockerコンテナにパスワードを使ったSSHログインをするための記述例になります。

DockerコンテナのSSHログイン用ポート22番をネイティブマシンの49944番(別のポートでも構いません。下に紹介するrun_ssh.M1の中身と同じ番号にしておく必要があります。)に割り当てています。

GUIを使うためのSSHDサーバーを起動するDockerコンテナのビルドを行います。

./run_build.M1

Lima VMを停止します。

limactl stop

Lima上のDockerコンテナ起動

Lima VMとLima上のDockerコンテナを起動します。

./run_server.M1

これでSSHDサーバが起動し、SSHログイン可能な状態になります。

SSHログインします。

./run_ssh.M1

パスワードを聞かれるので、上記gui_M1/Dockerfileで設定したパスワードを入力してログインします。

うまくログインできない場合は、~/.ssh/known_hostsを削除してから実行してみてください。

コンテナにログインできたらflow.tclを実行できます。

cd /openLANE_flow
./flow.tcl -design spm

KLayoutでGDSを表示

KLayoutでレイアウト結果のGDSを表示します。

kl designs/spm/runs/〜/results/magic/spm.gds

klはOpenLaneで用意されたコマンドではなくklayout -l /openLANE_flow/pdks/sky130A/libs.tech/klayout/sky130A.lypの省略形として.bash_profileに定義したエイリアスです。

下の用に表示されれば成功です。

Klayout Top

KLaoutでDEF/LEFを表示

以下のコマンドでKLayoutを立ち上げ、File→Import→DEF/LEFからDEFファイルを開きます。

klayout

designs/spm/runs/〜/results/routing/17-spm.defなどを開いてみると良いでしょう。

2回目のklayout起動時でないとTechnology Setup設定ができないのは、元記事と同様です。

MagicでDEF/LEFを表示

以下のコマンドでMagicを使用してDEF/LEFを開きます。

mdef designs/spm/runs/〜/results/routing/17-spm.def

mdefはMagicでDEFを指定するだけで同じディレクトリにあるLEFも読み込んで開くための自作の便利コマンドです。

以上でM1 MacでGUIが正しく表示できたのではないかと思います。

終了する場合、まずLima VMから抜けます。

exit

以下のコマンドでLima VMを停止します。

./stop_server.M1

初回以降の起動方法

次回以降の起動方法も初回と同様です。

./run_server.M1
./run_ssh.M1
cd /openLANE_flow

終了する場合は以下のコマンドを実行します。

./stop_server.M1

元記事に戻る

参考文献

タイトルとURLをコピーしました