1. OpenROAD环境搭建与首个自动化脚本

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 解析与数据库接口均可用,工具链验证通过。

执行流程

openroad -exit read_lef design.lef read_def design.def 打印状态 OPENROAD_OK exit