一、OpenROAD开源环境搭建
OpenROAD gitHub地址:https://github.com/The-OpenROAD-Project/OpenROAD
1. 打开终端直接输入git命令(确保你的服务器上已经安装git):
git clone --recursive https://github.com/The-OpenROAD-Project/OpenROAD
#这里由于网络问题,可能无法获取到gtest库,需要手动安装,直接重新使用 git clone命令
或直接下载googletest库。
将下载后的googleTest库复制到OprnRoad/third_party/目录下替换gtest库,(记得改名为gtest)
或者将OpenROAD/CMakeLists.txt文件内容中的option(ENABLE_TESTS "Enable OpenROAD tests" OFF)这项给填写OFF关闭
2. 脚本自动安装依赖及编译:
cd OpenROAD
sudo ./etc/DependencyInstaller.sh -all
./etc/Build.sh //默认编译
./etc/Build.sh -cmake='-DCMAKE_BUILD_TYPE=Debug' //编译debug版本
3. 手动安装环境依赖后编译:
-
- 需要安装的依赖库:
#1. tcl 与 tk 库的安装
#2. tckreadLine lib的安装
#3. swig库的安装
#4. spdlog库的安装
#5. qt5库的安装
#6. LENMON库的安装
上述库可以在网上搜索手动安装教程,安装在自己的目录下,本文只安装了tcl tk tclreadline
库在自身的目录下(/home/shuaizhenmian/.local),其他的库服务器上都已安装。
安装在自身目录下的库需要修改自己的环保变量,将库导入,这样编译OpenROAD才能找到安装在本地目录的库
或者时直接如后后以小节所示的一样,使用cmake命令的option -D来添加依赖库的路径,比如:
-DTCL_LIBRARY=/home/shuaizhenmian/.local/lib/libtcl8.6.so
-DTCL_HEADER=/home/shuaizhenmian/.local/include/tcl.h
-
- 依赖库安装完后的安装命令:
mkdir build
cd build
cmake -DCMAKE_BUILD_TYPE=Debug -DTCL_LIBRARY=/home/shuaizhenmian/.local/lib/libtcl8.6.so
-DTCL_HEADER=/home/shuaizhenmian/.local/include/tcl.h
-DTCL_READLINE_LIBRARY=/home/shuaizhenmian/.local/lib/libtclreadline-2.3.8.so
-DTCL_READLINE_H=/home/shuaizhenmian/.local/include/tclreadline.h ..
// tcl库和tclreadLine库都是安装在服务器本地文件夹内
-
- docker容器完成编译
//1. 需要检查是否存在docker
docker --version //如果未安装docker请先安装docker软
//2.docker build
//2.1确保当前目录为OpenRoad目录当层目录下`<details>
docker build -t openroad -f docker/Dockerfile.builder .
//2.2完成镜像构建之后,查看镜像是否构建成功
docker images //看看列表中是否有openroad这个名字的镜像
//2.3进入镜像
docker run -it --network host -e DISPLAY=$DISPLAY -v /tmp/.X11-unix:/tmp/.X11-unix -v $HOME/.Xauthority:/root/.Xauthority openroad:latest
//2.4如需要将将镜像复制到其他服务器上
docker save -o openroad.tar openrad:latest //将openroad:latest压缩为openroad.tar压缩包
//2.5转移容器镜像以及加载到本地
scp -r ./openroad.tar shuai@192.168.1.115:~ //手动拖拽复制都行,我这用的scp传输
docker load -i openroad_image.tar //注意容器镜像路径,别写错
docker images //同上,查看镜像是否存在
#注意:上述如果构建镜像时可能无法拉去构建容器的所需的依赖镜像:openroad/ubuntu22.04-dev:latest,这个可以尝试替换你的下载源,网络上有教程。
#后续docker运行镜像可能会遇到打不开gui的问题。
//2.6为了获得图形界面
xhost +local:root //访问X11权限
//2.7挂载相应Xauthority文件
sudo docker run -it --network host -e DISPLAY=$DISPLAY -v /tmp/.X11-unix:/tmp/.X11-unix -v $HOME/.Xauthority:/root/.Xauthority openroad:latest
//2.8添加qt环境变量
export QT_DEBUG_PLUGINS=1 # 查看插件加载详细信息
export QT_QPA_PLATFORM_PLUGIN_PATH=/usr/lib/x86_64-linux-gnu/qt5/plugins
//2.9执行openroad
./build/src/openroad -gui //看看是否成功,还未成功,请绕道deepseek问它
二、OpenROAD概述
-
OpenROAD是一个开源的半导体数字设计应用程序,OpenROAD主张的无人在环的(NHIL)流程,从RTL-GDSII开始24小时周转,用于快速设计探索和物理设计设现。其执行流程如下请图所示:
-
-
上述流程图中,OpenROAD主要执行的步骤:
-
Floorplanning
-
Floorplan 的初始化,定义chip area 和 utilization
-
IO pin 的palcement (对于没有Pads的设计)
-
Tap cell 和 well tie 的插入
-
PDN-power 电源网络创建
-
-
Global Placement
-
Macro Placement
-
标准cell placement
-
自动布局优化和修复最slew,最大电容,最大扇出违规和长电线
-
-
Detailed Placement
-
合法放置,对其网格,遵守布局的设计规则
-
增加提前时序分析评估
-
-
Clock Tree SynThesis
- 针对高fanout nets 插入buffers 和 resize
-
Optimize steup/hold_timing
-
Global Routing
-
修复天线效应
-
创建 routing guides
-
-
Detailed Routing
- 合法绕线,(满足drc,timing以及功耗的限制)
-
Chip Finishing
-
使用OpenRCX来进行寄生参数提取
-
timing验证
-
物理验证
-
Dummy metal 填充
-
使用Klayout或者Magic来生成GDS文件
-
-
三、OpenROAD的源码框架
-
- OpenROAD项目目录
- OpenROAD主目录下的文件夹:
| 目录名称 | 作用 |
| cmake | 用于项目的编译和构建 |
| debian | 提供打包和发布软件的配置文件,以便在debian和其衍生系统下安装 |
| Docker | 这个文件夹包含用于构建和使用 Docker 镜像的文件。Docker 镜像提供了一个一致的运行环境,可以简化软件的安装和依赖管理。它包含了构建 Docker 镜像的配置文件和脚本,例如 Dockerfile,可以用于创建包含所有依赖的 OpenROAD 环境。使用 Docker,可以在不同系统上快速部署和运行 OpenROAD,而无需担心环境配置问题 |
| docs | 包含项目文档,用户手册,论文等参考文件 |
| etc | 放置编译安装文件,用于openroad环境的构建 |
| include | 项目的头文件 |
| jenkins | 包含Jenkins的配置文件,用于持续集成和自动化构建和测试 |
| src | 源代码文件夹,包含所有工具和应用的实现代码。这里是开发的主要部分 |
| test | 包含测试脚本和测试用例,用于验证工具的正确性和稳定性。测试脚本能够在不同的环境中运行,以确保工具的跨平台兼容性 |
| third-party | 第三方软件库(adc,googletest等) |
| psm | 电压降分析(PDNSim) |
| rcx | 寄生参数提取(OpenRCX) |
| rmp | 重组模块:area和timing的重组优化 |
| rsz | 问调整:预估布局布线后的timing,以及调整utilization |
| sta | OpenSta(时序分析开源软件) |
| stt | grt之后的直角斯坦纳树构建 |
| tap | Tapcell 和 endcap 插入 |
| upf | 该模块包含从统一电源格式(UPF)文件中读取和修改信息的功能 |
| utl | 工具模块:log打印,命令提示,命令说明等功能 |
四、OpenROAD执行流程
-
在OpenROAD的另一个项目OpenROAD-flow-scripts中里面有完整的的Physical flow和多个平台的test case。可以参考其中的流程运行相关用例,其流程步骤见第二小节的OpenROAD流程图。
-
OpenROAD-flow-scripts项目中flow的区域分块表:
| 流程名称 | 作用 |
| SETUP | 初始化流程参数和变量(shell环境变量,执行文件地址,tcl文件目录等) |
| SYNTHSIS | 使用yosys做synthsis的流程 |
| FLOORPLAN | 物理设计部分,布局初始化(linkdesign,initfloorplan,makeTrack等) |
| PLACE | 执行IO placement,Global placement以及Detail placement |
| CTS | 时钟树优化 |
| ROUTING | 执行global routing以及detail routing |
| FINISHING | 使用klayout生成gds,以及执行drc与lvs |
| MISC | 处理杂项及其他步骤或处理设计上的特殊情况 |
浙公网安备 33010602011771号