OpenROAD(Open Rapid Object-Oriented Design)项目旨在构建一个完整的、可重复的、开源的数字芯片后端设计流程(RTL-to-GDS)。它对教育、研究和初创芯片公司都极具吸引力,为数字芯片设计提供了强大的工具链,而无需昂贵的商业 EDA 工具。
本文将带你快速完成 OpenROAD 环境的配置、源码编译、并运行一个简单设计,从零开始掌握 OpenROAD 的基本使用方法。
环境配置
OpenROAD 项目提供了一个官方安装脚本 DependencyInstaller.sh,可以帮助你自动安装构建和运行所需的依赖组件,推荐使用 -all
选项,这会安装所有支持的依赖组件,包括编译工具链、第三方库、以及部分必要的开源 EDA 模块(如 Boost、TCL、SWIG、Python 等)。
cd OpenRoad
sudo ./etc/DependencyInstaller.sh -all
这个脚本会根据你的操作系统类型自动判断需要安装哪些依赖包,并通过系统包管理器(如 apt 或 yum)拉取相应内容,同时也会下载并构建部分从源码安装的组件。
注意:该命令可能需要一定时间,具体取决于网络状况与构建速度。确保你具备管理员权限(sudo)并连接互联网。
执行完成后,你的系统将拥有一个适用于 OpenROAD 的完整开发环境,大多数用户可以直接进入编译阶段而无需手动安装其他工具。
如果需要调试OpenROAD代码,还需要手动安装gdb:
sudo apt-get install gdb
完成依赖安装后,可以通过以下方式验证系统是否具备了构建 OpenROAD 所需的关键工具和库:
- 检查核心工具是否存在
which cmake
which g++
which python3
which swig
- 检查Boost和TCL是否支持
dpkg -l | grep libboost
dpkg -l | grep tcl
- 重新运行安装脚本查看是否跳过
sudo ./etc/DependencyInstaller.sh -all
再次运行脚本不会重复安装已存在组件,而是跳过它们,你将看到提示如 “already installed”,表示依赖已安装成功。
编译与调试
OpenROAD 提供了一个官方封装的构建脚本 etc/Build.sh
,它能够简化编译过程,并自动处理编译器选择、多线程构建、GUI 控制、日志输出等常见配置选项。
启动构建脚本
从项目根目录执行以下命令,即可使用默认配置启动编译流程:
./etc/Build.sh
默认行为如下:
- 构建目录为
build/
- 使用当前系统默认的 GCC 编译器
- 编译所有模块(含 GUI)
- 自动检测线程数(如 Linux 上使用 nproc)
参数说明
参数 | 说明 |
---|---|
-dir=DIR | 指定构建输出目录(默认是 build ) |
-threads=N | 使用 N 个线程并行编译(默认是 CPU 核心数) |
-compiler=gcc/clang | 指定使用的编译器 |
-no-warnings | 忽略警告(否则默认将警告视为错误) |
-no-gui | 禁用 GUI(仅构建命令行工具) |
-clean | 在编译前删除构建目录,强制全量重新编译 |
-keep-log | 保留编译日志,默认写入 build/openroad_build.log |
-coverage | 启用代码覆盖率收集(用于开发测试) |
-gpu | 启用 GPU 加速(实验性功能) |
编译成功验证
OpenROAD编译可执行文件默认存放位置为./build/src/openroad
,可以执行这个可执行文件来启动OpenROAD。
cd OpenRoad
./build/src/openroad
启动成功后可以进入如下界面,使用exit
命令可以退出openroad:
编译调试环境
在开发或调试OpenROAD时,我们通常需要启用调试符号,并关闭优化,以便在调试器(如 gdb)中查看源代码、变量值与堆栈信息。OpenROAD 提供了对调试构建的良好支持。
可以使用etc/Build.sh
脚本中的-cmake
参数,向 CMake 显式传入调试配置项:
./etc/Build.sh -clean -no-gui -cmake='-DCMAKE_BUILD_TYPE=Debug' -keep-log -threads=4
说明:
-DCMAKE_BUILD_TYPE=Debug
:设置构建类型为 Debug(包含调试符号,不进行优化)-no-gui
:可选,避免编译图形界面以缩短编译时间-clean
:每次编译前清理旧构建,避免缓存干扰-keep-log
:保留编译日志,方便定位编译错误-threads
:编译所使用的线程数,内存较小时可以手动将这个参数调小一点
如果你使用的是 clang 编译器,也可以添加-compiler=clang
来切换工具链。如果你希望检查测试覆盖率,可以加上 -coverage
选项,这将额外为编译器加上 -fprofile-arcs 和 -ftest-coverage 等标志,生成覆盖率报告所需的中间数据。此外,-coverage
选项在 etc/Build.sh
脚本中默认就会将构建类型设置为 Debug,添加这个选项时可以不用手动向 CMake 显式传入调试配置项。
使用VSCode调试
VSCode 提供了轻量、高效的调试体验,搭配调试版 OpenROAD 可实现源码级调试。
1. 编译可执行文件
./etc/Build.sh -no-gui -clean -keep-log -cmake='-DCMAKE_BUILD_TYPE=Debug'
确保你已经使用 etc/Build.sh 脚本编译了带调试信息的OpenROAD,根目录下存在调试用的build/src/
目录,其中包含可执行文件openroad
。
2. 安装必要插件
在 VSCode 中安装以下插件:
- C/C++(提供调试、符号跳转等功能)
- CMake Tools(可选,用于集成 CMake 项目管理)
3. 安装gdb
检查是否存在gdb,如果不存在需要使用sudo apt-get install gdb
手动安装
which gdb
4. 创建调试配置文件
在项目根目录下新建.vscode
文件夹,并创建launch.json
文件:
{
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "(gdb) Launch",
"type": "cppdbg",
"request": "launch",
"program": "${workspaceFolder}/build/src/openroad",
"args": ["gcd_nangate45.tcl"],
"stopAtEntry": false,
"cwd": "${workspaceFolder}/test",
"environment": [],
"externalConsole": false,
"MIMode": "gdb",
"setupCommands": [
{
"description": "Enable pretty-printing for gdb",
"text": "-enable-pretty-printing",
"ignoreFailures": true
},
{
"description": "Set Disassembly Flavor to Intel",
"text": "-gdb-set disassembly-flavor intel",
"ignoreFailures": true
}
]
}
]
}
说明:
- program:调试用的 OpenROAD 可执行文件路径
- args:想测试的 Tcl 脚本文件,例如:[“gcd_nangate45.tcl”]
- cwd:设置调试的目录
完成上面的配置就可以调试OpenROAD项目了。