yosysとopenroad
yosysは論理合成環境,openroadは配置配線ツールとなっている.
これらの環境構築とサンプルの実行を最近はやりのClaudeにお願いしてみた.
1.環境構築
1-1.PCのスペック
今回は、WindowsノートPC上でWSLを用いてUbuntu環境を構築し,そこにインストールした.
以下は今回考慮すべき箇所のみ記載しており,Ubuntuに割り当てているCPU数は必要に応じて拡張してほしい.
- WindowsノートPCのスペック
- 実装RAM:16.0GB
- プロセッサ:Intel(R) Core(TM) 5 210H (2.20 GHz)
- WSL上のUbuntu
- OS:Ubuntu24.04
- メモリー:12GB
Ubunutuに割り当てるメモリーはデフォルトより大きくするか後述するビルドで並列数を調整しないと失敗する.
12GBにしておけば問題はないが,4~8GBとかにしているとビルドで落ちることがある.
以下に割り当てメモリー容量を増やす方法を記載.
-
C:\Users\ユーザー名\.wslconfigを開く. - 以下を修正
[wsl2]
memory=12GB
swap=8GB
processors=4
- WSLで再読み込み
wsl --shutdown # 起動していない場合は不要
wsl
1-2.yosysとopenroadのインストール
以降,Ubunutuでの作業となる.
1-2-1.GitHubからcloneする
git clone --recursive https://github.com/The-OpenROAD-Project/OpenROAD-flow-scripts
1-2-2.safe.directory設定
git config --global --add safe.directory '*'
1-2-3.依存パッケージインストール
sudo ./etc/DependencyInstaller.sh -all 2>&1 | tee dep.log
1-2-4.ビルド(4)
./build_openroad.sh --local --threads 2 2>&1 | tee build.log
1-2-5.ビルド完了確認
ls tools/install/OpenROAD/bin/openroad
ls tools/install/yosys/bin/yosys
ファイルが存在していればビルド成功.
これでビルド完了し,インストールできた.
1-3.サンプルの実行
次にサンプルとしてフローを一通り流せるものを実行する.
cd /home/ユーザー名/OpenROAD-flow-scripts/flow
make DESIGN_CONFIG=./designs/nangate45/gcd/config.mk
これで一通りフローを実行できる.
2.各ステップの成果物
各ステップでの成果物は以下に出力される.
ls /home/ユーザー名/OpenROAD-flow-scripts/flow/results/nangate45/gcd/base/
2-1.主要ファイル
| ファイル名 | 概要 |
|---|---|
| 1_2_yosys.v | 合成済みネットリスト |
| 2_floorplan.odb | フロアプラン |
| 3_5_place_dp.odb | 配置後レイアウト |
| 4_1_cts.odb | CTS後レイアウト |
| 5_2_route.odb | ルーティング後レイアウト |
| 6_final.gds | 最終GDSII |
2-2.成果物概要
| 工程 | ファイル | 概要 |
|---|---|---|
| 論理合成(Yosys) | 1_1_yosys_canonicalize.rtlil | RTL正規化後の中間表現 |
| 1_2_yosys.v | 合成済みネットリスト | |
| 1_2_yosys.sdc | 合成後SDC | |
| 1_synth.odb | OpenROAD DB形式 | |
| フロアプラン | 2_1_floorplan.odb | フロアプラン後 |
| 2_2_floorplan_macro.odb | マクロ配置後 | |
| 2_3_floorplan_tapcell.odb | タップセル挿入後 | |
| 2_4_floorplan_pdn.odb | PDN生成後 | |
| 配置 | 3_1~3_6_place_*.odb | 各配置ステップ後 |
| CTS | 4_1_cts.odb | CTS後 |
| 4_before_rsz_lec.v | リサイズ前ネットリスト | |
| 4_after_rsz_lec.v | リサイズ後ネットリスト | |
| ルーティング | 5_1_grt.odb | グローバルルーティング後 |
| 5_2_route.odb | 詳細ルーティング後 | |
| 5_3_fillcell.odb | フィルセル挿入後 | |
| 最終成果物 | 6_final.gds | 最終GDSIIファイル※テープアウトに使う |
| 6_final.def | 最終DEFファイル | |
| 6_final.v | 最終ネットリスト | |
| 6_final.spef | 寄生素子情報 | |
| 6_final.sdc | 最終SDC |
2-3.各ステップの実行
変数で以下を設定しておく.
CFG=./designs/nangate45/gcd/config.mk
2-3-1.RTL正規化
make DESIGN_CONFIG=$CFG do-yosys-canonicalize
2-3-2.論理合成
make DESIGN_CONFIG=$CFG do-1_synth
2-3-3.フロアプラン
make DESIGN_CONFIG=$CFG do-2_1_floorplan
2-3-4.マクロ配置
make DESIGN_CONFIG=$CFG do-2_2_floorplan_macro
2-3-5.タップセル挿入
make DESIGN_CONFIG=$CFG do-2_3_floorplan_tapcell
2-3-6.PDN生成
make DESIGN_CONFIG=$CFG do-2_4_floorplan_pdn
2-3-7.配置(IO仮配置)
make DESIGN_CONFIG=$CFG do-3_1_place_gp_skip_io
2-3-8.IO配置
make DESIGN_CONFIG=$CFG do-3_2_place_iop
2-3-9.グローバル配置
make DESIGN_CONFIG=$CFG do-3_3_place_gp
2-3-10.リサイズ・バッファ挿入
make DESIGN_CONFIG=$CFG do-3_4_place_resized
2-3-11.詳細配置
make DESIGN_CONFIG=$CFG do-3_5_place_dp
2-3-12.タイミング修復
make DESIGN_CONFIG=$CFG do-3_6_place_repair_timing
2-3-13.CTS
make DESIGN_CONFIG=$CFG do-4_1_cts
2-3-14.グローバルルーティング
make DESIGN_CONFIG=$CFG do-5_1_grt
2-3-15.詳細ルーティング
make DESIGN_CONFIG=$CFG do-5_2_route
2-3-16.フィルセル挿入
make DESIGN_CONFIG=$CFG do-5_3_fillcell
2-3-17.GDS生成
make DESIGN_CONFIG=$CFG do-6_1_fill
2-3-18.report タイミングレポート
make DESIGN_CONFIG=$CFG do-6_report
2-4.ログの確認
2-4-1.合成結果(セル数・面積)
cat ./reports/nangate45/gcd/base/synth_stat.txt
16. Printing statistics.
=== gcd ===
+----------------------------Count including submodules.
| +-------------------Area including submodules.
| | +----------Local count, excluding submodules.
| | | +-Local area, excluding submodules.
| | | |
546 - 546 - wires
592 - 592 - wire bits
42 - 42 - public wires
88 - 88 - public wire bits
8 - 8 - ports
54 - 54 - port bits
- - - - memories
- - - - memory bits
- - - - processes
521 663.138 521 663.138 cells
4 4.256 4 4.256 AND2_X1
1 1.33 1 1.33 AND2_X2
1 1.596 1 1.596 AND4_X1
5 5.32 5 5.32 AOI21_X1
2 3.724 2 3.724 AOI21_X2
1 3.458 1 3.458 AOI21_X4
5 3.99 5 3.99 BUF_X1
3 3.192 3 3.192 BUF_X2
2 3.724 2 3.724 BUF_X4
5 17.29 5 17.29 BUF_X8
2 1.596 2 1.596 CLKBUF_X1
35 158.27 35 158.27 DFF_X1
72 38.304 72 38.304 INV_X1
12 9.576 12 9.576 INV_X2
3 3.99 3 3.99 INV_X4
164 130.872 164 130.872 NAND2_X1
28 37.24 28 37.24 NAND2_X2
8 19.152 8 19.152 NAND2_X4
19 20.216 19 20.216 NAND3_X1
9 16.758 9 16.758 NAND3_X2
1 3.458 1 3.458 NAND3_X4
28 37.24 28 37.24 NAND4_X1
28 22.344 28 22.344 NOR2_X1
11 14.63 11 14.63 NOR2_X2
7 16.758 7 16.758 NOR2_X4
4 5.32 4 5.32 NOR4_X1
38 40.432 38 40.432 OAI21_X1
9 16.758 9 16.758 OAI21_X2
3 3.192 3 3.192 OR2_X1
7 11.172 7 11.172 XNOR2_X1
2 3.192 2 3.192 XOR2_X1
2 4.788 2 4.788 XOR2_X2
Chip area for module '\gcd': 663.138000
of which used for sequential elements: 158.270000 (23.87%)
2-4-2.配線混雑レポート
cat logs/nangate45/gcd/base/5_1_grt.log | grep -i "congestion\|overflow"
2-4-3.IRドロップ
cat logs/nangate45/gcd/base/6_report.log | grep -i "ir\|power"
2-4-4.タイミングレポート
cat logs/nangate45/gcd/base/6_report.log
2-5.OpenROAD GUIで各ステップのレイアウトを確認
OpenROAD GUIでOBDを読み込み段階的なレイアウトを確認できる.
OBDはOpenROAD独自のデータベース形式が使用するチップ設計データベースのバイナリファイルで拡張子が.odbとなる.OpenROAD以外ではOA/ORCAD形式などがある.
中に含まれるデータは以下となる.
- 回路のネットリスト(セル・ネット・ピン)
- フロアプラン情報(チップサイズ・電源レール)
- セルの配置座標
- クロックツリー情報
- 配線情報(ルーティング)
- タイミング制約
2-5-1.OpenROAD GUIの起動
openroad -gui
2-5-2.TclコンソールでODB(OpenDataBase)を読み込み
OpenROAD GUIが起動できたらTCL commandsに以下コマンドを入力しEnterを押すことでODBを読み込める.
なお,1回で読み込めるOBDファイルは1つだけで次段階のOBDを読み込む.
2-5-2-1.フロアプラン直後
TCL commandsに以下コマンドを入力.
フロアプラン完了時点のスナップショット2_4_floorplan_pdn.odbを読み込める.
read_db results/nangate45/gcd/base/2_4_floorplan_pdn.odb
2-5-2-2.配置後
詳細配置完了時点3_5_place_dp.odbを読み込める.
read_db results/nangate45/gcd/base/3_5_place_dp.odb
2-5-2-3.CTS後
クロックツリー合成完了時点4_1_cts.odbを読み込める.
read_db results/nangate45/gcd/base/4_1_cts.odb
2-5-2-4.ルーティング後
ルーティング完了時点5_2_route.odbを読み込める.
read_db results/nangate45/gcd/base/5_2_route.odb




