1. OpenROAD环境搭建与首个自动化脚本
任务说明
本案例完成 OpenROAD 工具链的最小可用验证:安装 OpenROAD,编写一个 Tcl 脚本读入一个最小 LEF/DEF 设计,执行后正常退出。脚本能跑通即说明工具链可用。
环境与依赖
- 推荐使用官方 Docker 镜像,避免本地编译依赖问题:
openroad/orfs:latest(或openroad/flow-ubuntu22.04-builder)。 - 本地安装需具备 C++ 编译环境、CMake、Tcl、Boost、Eigen 等依赖,编译耗时较长,本案例以容器方式为主。
- 需要一个最小设计:一个 LEF(工艺/单元抽象)和一个 DEF(布局数据)。下面给出可直接使用的最小示例。
目录结构
openroad_demo/
├── design.lef
├── design.def
└── run.tcl
最小 LEF(design.lef)
VERSION 5.8 ;
UNITS
DATABASE MICRONS 1000 ;
END UNITS
MANUFACTURINGGRID 0.005 ;
SITE core ;
CLASS CORE ;
SIZE 1.0 BY 1.0 ;
END core
MACRO INV_X1
CLASS CORE ;
ORIGIN 0 0 ;
SIZE 1.0 BY 1.0 ;
SITE core ;
PIN A
DIRECTION INPUT ;
PORT
LAYER M1 ;
RECT 0.1 0.1 0.4 0.4 ;
END
END A
PIN Y
DIRECTION OUTPUT ;
PORT
LAYER M1 ;
RECT 0.6 0.6 0.9 0.9 ;
END
END Y
END INV_X1
END LIBRARY
最小 DEF(design.def)
VERSION 5.8 ;
DESIGN top ;
UNITS DISTANCE MICRONS 1000 ;
DIEAREA ( 0 0 ) ( 10 10 ) ;
COMPONENTS 1 ;
- u1 INV_X1
+ PLACED ( 2 2 ) N ;
END COMPONENTS
END DESIGN
核心脚本(run.tcl)
# 读入 LEF 与 DEF,报告设计状态后退出
read_lef design.lef
read_def design.def
# 打印已加载的模块与实例数量,作为工具链可用的证据
set block [ord::get_db_block]
puts "DESIGN_NAME: [ord::get_db_block]"
puts "COMPONENT_COUNT: [llength [$block getInsts]]"
puts "OPENROAD_OK"
exit
运行方式
# 方式一:Docker(推荐)
docker run --rm -v $(pwd):/work -w /work openroad/orfs:latest \
openroad -exit run.tcl
# 方式二:本地已安装 openroad
openroad -exit run.tcl
验证方法与通过条件
- 命令退出码为 0,无 Tcl 报错。
- 终端输出包含
OPENROAD_OK。 COMPONENT_COUNT输出为1,与 DEF 中定义的 1 个实例一致。
满足以上三点即说明 OpenROAD 已正确安装,Tcl 解释器、LEF/DEF 解析与数据库接口均可用,工具链验证通过。