幼女でもできる自作PC (3) OpenLANEとその使い方

前回の記事

ourfool.hatenablog.comでは、製造可能なチップを設計するための各種データからなる、SkyWaterオープンソースPDKについて書いた。

続いて実際に設計するチップの仕様について話を進めようかと思っていたが、今回は予定を変更して、このオープンソースPDK向けに整備されている各種設計ツールについてまずは書いていくことにする。SkyWaterオープンソースPDKのリポジトリ

[TODO #14] - Example of using the PDK to create a RISC-V SoC design using the OpenROAD ASIC tool flow.

とある通り、現在のところOpenROADというツールが主要なデジタル設計環境として想定されている。

OpenROADはDARPAの研究プロジェクトの一環として開発されてきたオープンソースなツール群から成るデジタル統合開発環境で、昨年あたりから設計技術関係の会議で盛んに宣伝されてきたものである。公式サイトとプロジェクトのリポジトリは下記にある。

theopenroadproject.orggithub.com

OpenROADの目標は「no-human-in-loop (NHIL) design, with 24-hour turnaround time and eventual zero loss of power-performance-area (PPA)」とある通り、超短期での自動チップ設計の達成である。オープンソースが云々、という理由ならそれでわかりやすいが、ここで示されているのはちょっとおかしな目標である。というのも、そもそも電子回路設計ツールは一般にEDAツールと呼ばれるように「デザインオートメーション」を名に冠し、それを当たり前に目指しているわけではなかったか。HDLから論理合成・配置配線、といったシンプルな設計フローの理解からすれば、ユーザはデジタル回路をHDLで一意に記述し、あとはツールがよしなに諸々処理して、はい、完成、のはずではないか。しからば既存の設計ツールって一体ナニモンだよという話になってくる。

このあたりの説明はOpenROADの発表スライド冒頭に詳しい(以降は、“Toward an Open-Source Digital Flow: First Learnings from the OpenROAD Project“, Proc. ACM/IEEE Design Automation Conference

https://vlsicad.ucsd.edu/Publications/Conferences/371/c371.pptx より

)。

f:id:ourfool:20200730002544j:plain

モダンな配置配線ツールには10000以上のコマンドやオプションが存在し、それらを適宜組み合わせて実行しチップを作っていく。こうしたコマンドの組み合わせをスクリプト化することは出来るが、それは再利用性を高めるだけで「デザインオートメーション」につながっているかどうかと言えば微妙である。たとえば似たところで言うと、FPGA用ツールの利用者であれば、クソ長.tclファイルやその中に記述された詳細不明コマンドの数々はお馴染みであろう。先端プロセスに向けたデザイン最適化を指向した結果として既存の設計フローはこのような超絶難解仕様になっており、局所解に陥っている、というのが主張である。

f:id:ourfool:20200730003712j:plain

そこで、従来の設計クオリティ指向ではなく、利用の容易性にフォーカスした設計ツールを構築しよう、という思想が、このOpenROADの背景にある。そうした指針はツールがオープンである/ないとは直接関わりが無いけれども、オープン化から想起される「アジャイル」とか「幼女でもできる」といったキーワードとの親和性は見て取れるだろう。

さて、こうして作られたOpenROADといくつかのツールをまとめ、SkyWaterオープンソースPDKを利用したチップデザイン向けに整備されたものが、OpenLANEである。

github.comf:id:ourfool:20200730005151p:plain

上図からわかるように、OpenLANEは多種多様なツールから成っている。ここで各々の役割は、

という感じである。混沌としてきたが、このあたり全部入りでDockerイメージ化されているのでユーザが困ることはない。

実際のOpenLANEの使い方については上のリポジトリにおおよそ掲載されているが、改めて詳細にここでまとめてみる。まず、事前にローカルマシンにインストールが必要なのは、

  • Docker: ドッカー
  • Magic: オープンなチップレイアウト閲覧・編集ツール

である。また、最終的なレイアウトのGDSII形式ファイルを閲覧するために、Magicとは別にオープンなレイアウト閲覧・編集ツールを導入しておくと良い。ここでは、KLayoutというツールを導入する。

www.klayout.deDockerについては他に譲るとして、以降ではMagicとKLayoutの導入について書いていく。なお、ここでは、Ubuntu 18.04、あるいは16.04環境を想定している。

まず、Magicについては下記のホームページやGithubリポジトリを参考に、

opencircuitdesign.comgithub.comたとえば、下記のようなコマンドでインストールする。

$ sudo apt install tcsh
$ sudo apt install csh
$ git clone https://github.com/RTimothyEdwards/magic.git
$ cd magic
$ sudo ./configure
$ sudo make
$ sudo make install

また、KLayoutについては

www.klayout.deからインストーラをダウンロードすれば良い。ここでRuby周りで怒られる場合はその環境構築が別途必要になる。

DockerとMagic、KLayoutの導入が終わればあとはやるだけである。まず、下記のようなフォルダ構造になるように、

openlane_working_dir
├── pdks
$ mkdir openlane_working_dir
$ cd openlane_working_dir
$ mkdir pdks

とする。

次に、openlane_working_dirの直下で、OpenLANEのリポジトリをクローンしてくる。

$ git clone https://github.com/efabless/openlane --branch rc1
$ cd openlane/docker_build
$ make merge
$ cd ../..

続いて、pdks内にSkyWaterオープンソースPDKを導入する。

$ cd pdks
$ git clone https://github.com/google/skywater-pdk.git
$ cd skywater-pdk
$ git checkout 4e5e318e0cc578090e1ae7d6f2cb1ec99f363120
$ git submodule update --init libraries/sky130_fd_sc_hd/latest
$ make sky130_fd_sc_hd 
$ cd ..
$ git clone https://github.com/efabless/open_pdks.git
$ cd open_pdks
$ git checkout c2fec9fe64146000236dd807165b80b6a8b82b89
$ make
$ make install-local
$ cd ../..

最後に、openlane_working_dirの直下で、Dockerコンテナを起動する。

$ sudo docker run -itv $(pwd)/openlane:/openLANE_flow -v $(pwd)/pdks/open_pdks/sky130/pdks:/openLANE_flow/pdks -u $(id -u $USER):$(id -g $USER) openlane:rc1

ここまで来れば準備完了である。起動したコンテナ内で、

$ ./flow.tcl -design spm

とするとOpenLANEが起動し、サンプルであるspm(Serial-Parallel Adder)という回路のレイアウトが数分程度で自動生成される。

生成されたレイアウトは、ローカルマシン内のopenlane_working_dir/openlane/designs/spm/runs/${日時}/results/magic/spm.gdsである。 これをKlayoutで閲覧すると、きちんとそれらしいレイアウトが生成されていることがわかる。

$ klayout spm.gds

f:id:ourfool:20200730013925j:plain

 

次回は、OpenLANE以外の設計ツールについて見ていく予定である。この辺りの構成は今後プロジェクト側で色々と変更もありそうだが、粛々とまとめていく。