OpenRoad のサンプル回路からレイアウトを生成する
前回構築したオープンソース EDA の実行環境 OpenRoad-flow-scripts にはサンプルデザインが多く含まれています。このうちの一つを使って、実際にレイアウト生成フローを試します。
$ cd OpenROAD-flow-scripts
$ source setup-env.sh (実行済もしくは初期設定済なら不要です)
$ ls
Dockerfile LICENSE_BUILD_RUN_SCRIPTS README.md build_openroad.log
build_openroad.sh docker flow jenkins setup_env.sh tools
flow/ というディレクトリの中に設計の入力となる RTL やレイアウトを生成するためのスクリプトがあります。
$ cd flow
$ ls
Makefile Makefile.py designs platforms scripts test tutorials util
OpenROAD を利用した回路合成では、論理合成ツール yosys, 配置配線ツール openroad, DRC/LVS 用レイアウトツール KLayout を利用します。この一連の実行を Makefile で制御しています。Makefile を確認すると、はじめに DESIGN_CONFIG を設定する行が並んでいますが、デザイン固有の設定を記述したファイルを指定してます。各 config.mk ファイルをのぞいてみると、
- DESIGN_MAME : 回路の名前
- PLATFORM : 利用するテクノロジー
- VERILOG_FILES : 入力になる RTL
- SDC_FILE : タイミング制約
などが設定されているのがわかります。自分の回路を合成したい場合は、ディレクトリ毎設計をコピーしてこのファイルを編集すればよいことがわかります。
では早速、designs/ ディレクトリの下にある nangate45 テクノロジ利用の gcd 回路を合成してみます。
$ make DESIGN_CONFIG=./designs/nangate45/gcd/config.mk
"Writing out GDS/OAS ..." という表示がでていれば最終ファイルである GDS-II ファイルが生成されています。
合成結果を確認してみます。
実行レポートは reports/nangate45/gcd の下にあります。
$ ls -lr reports/nangate45/gcd/base
で生成された順番にレポートファイルを確認できると思います。例えば、論理合成 yosys の結果は、synth_stat.txt にあり
=== gcd ===
Number of wires: 387
Number of wire bits: 433
...
Number of cells: 362
AND2_X1 7
AND3_X1 1
...
362セルで合成されているのが分かります。
レイアウトも生成したので、配置、配線の結果も確認します。GUI の表示も Makefile のターゲットで制御できるようになっており、
- gui_floorploan : フロアプラン(配置配線前)を表示
- gui_place : 配置結果を表示
- gui_cts : クロックツリー込みの配置結果を表示
- gui_route : 配線後のレイアウトを表示
- gui_final : テープアウト用レイアウトの表示
を指定できます。たとえば、
$ make gui_route DESIGN_CONFIG=./designs/nangate45/gcd/config.mk
と実行すると OpenROAD の UI が起動しレイアウトが確認できます。
designs/ ディレクトリには他にも多くのデザインがあるので RTL が最終的にどのようなレイアウトになるのか自分で確かめてみると面白いと思います!
Discussion