OpenLane設計フロー

GuiHubのefabless/OpenLaneで説明されているOpenLaneのフローを簡略化すると左図のようになる。標準的なスタンダードセルの設計フローであり、大まかに見ると、論理合成(黄) -> 配置配線(緑) -> 物理検証(青)を自動的に行っている。各設計工程に関する用語は下表のとおり。

工程内容
RTL Synthesisハードウエア記述言語コードからの論理合成
STA遅延時間に基づく回路の動作・性能解析
DFT誤動作を検出するための回路の追加
Floorplanningチップ上への回路と配線の配置計画
Placement回路を構成する論理ゲートのチップへの配置
CTS全ての回路に同時にクロック信号を届ける供給経路の作成
Global Routing長距離配線の作成
Diode Insertion製造中のトランジスタ破損を防ぐディスチャージ回路の挿入
LEC作成された回路の論理的等価性検証(フォーマル検証)
Detailed Routing全ての配線の作成
RC Rxtraction配線抵抗、配線容量と遅延時間の算出
GDS2 Streamingレイアウトデータの標準フォーマット(GDS II)への変換
Physical VerificationDRC、LVS、アンテナルールなどの検証

新規プロジェクトの作成

  1. Open MPWのページで、新しいプロジェクトを作成するをクリック。
  2. QuickstartのFollow <URL> to create a newrepositoty. で示されているURLをクリック。
    エラーになる場合は、Sign in ボタンをクリックしてGitHubアカウントにログインする。
  3. Create a new repository のページで、Repository nameを入力。
  4. Create repositoryボタンをクリック。
  5. Code ボタンをクリックし、URLをコピー。

  6. Ubuntu のターミナルからRepositoryのクローンを作成。
    cd OpenLane   // 作業ディレクトリに移動(好きな名称でよい)
    git clone コピーしておいたURL
    

    ローカルリポジトリが作成される。後は、Quickstartの説明に従って操作を続ける。以下は、2023.07時点での実行例(ここでは、作業ディレクトリをOpenLane、リポジトリのプロジェクト名をtest01とする)

    [参考] 再度、ローカルリポジトリを作成する場合
    1. GitHubにサインインして、左欄のリポジトリリストから、プロジェクト用のリポジトリをクリック。
    2. Codeボタンをクリックして、URLをコピー。
    3. git clone を実行。

  7. ~/.bashrc をテキストエディタで開いて、下記の内容を追加する(フルカスタム設計環境用に既に設定している場合は不要)。
    export OPENLANE_ROOT=$(pwd)/dependencies/openlane_src
    export PDK_ROOT=$(pwd)/dependencies/pdks
    export PATH=$PATH:~/.local/bin
    export PDK=sky130A
    
  8. Ubuntuのターミナルで以下の作業を実施。
    source ~/.bashrc
    cd ~/OpenLane/test01
    mkdir dependencies
    make setup
    
    実行結果メッセージに、下記のような表示があればOK。
    Successfully installed ***
    Version *** enabled for the sky130 PDK.
    make[1]: ディレクトリ 'OpenLane/test01' から出ます
    
    [参考] click(Pythonコマンドライン引数解析ライブラリ)が無いというエラーが出るようなら、下記のようにインストールしてから、make setup を再度実行する。
    pip install click
    pip list | grep click    // バーションの確認
    
サンプルプロジェクトのシミュレーション

サンプルプロジェクト(カウンタ)で設計フローを流してみる。
  1. RTL(Register Tranfer Level)記述ファイルの確認
    cd ~/作業ディレクトリ(OpenLane)/プロジェクト名(test01)/verilog/rtl
    ls -l
    

  2. RTLシミュレーションの実行
    下記のコマンドにより、RTLシミュレーション(論理合成するの前のシミュレーション)が実行される。
    cd ~/作業ディレクトリ(OpenLane)/プロジェクト名(test01)/
    make verify-user_proj_example-rtl
    
    下記のように結果がUbuntuの端末に表示される。エラーが出た場合は、テストベンチ user_proj_example_tb.v を確認する(サンプルなのでRTL記述やwrapperにはエラーがないはず)。

  3. シミュレーション結果の確認
    シミュレーションが成功したら ~/作業ディレクトリ(OpenLane)/プロジェクト名(test01)/verilog/dv/user_proj_example/ の配下に、シミュレーション結果のダンプファイル(Value Change Dump)が作成される。下記のように、Gtkwave(VCD表示ソフトウエア)で、波形表示することができる。
    gtkwave verilog/dv/user_proj_example/RTL-user_proj_example.vcd
    

    1. モジュール欄(左側上)で、user_proj_exampleを選択。
    2. 信号欄(左側下)で、mprj_io_0[7:0], clock, RSTBをダブルクリック。
    3. 表示信号リスト(左から2列目)で、mprj_io_0[7:0] (8bit表示)をダブルクリックして1bit表示に展開
    4. 横軸を調整して波形を拡大

    波形をよく見ると、300usでCSB = 0(チップセレクト)がかかり、350usあたりからカウンタの出力が始まっているが、00h - 4Eh は出力していない(原因は不明)。
サンプルプロジェクトのコンパイル

  1. RTL(Register Tranfer Level)記述ファイルの確認
    cd OpenLane/プロジェクト名(test01)
    less verilog/rtl/user_proj_example.v
    
    確認したら、qキーで終了。
  2. RTL記述のレイアウトの作成
    make user_proj_example
    
    [SUCCESS]: Flow complete. と表示されれば成功。

  3. user_project_wrapperへの搭載
    make user_project_wrapper
    
    [SUCCESS]: Flow complete. と表示されれば成功。

  4. レイアウトの確認
    作成したuser_proj_example のレイアウトを Klayoutで確認する。
    klayout gds/user_proj_example.gds &
    
    配線が多すぎてベタ塗り状態に見えるので、適当にレイヤーをダブルクリックして(右側欄)、表示をOFFにしてみるか、レイアウトを拡大してみると配線とトランジスタのパターンが見えてくる。レイヤー欄で、太字表示になっているのが、レイアウトに使用されているレイヤー。


© 2013, Akio Kitagawa, Kanazawa Univ.