一、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. 需要安装的依赖库:
                #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
    1. 依赖库安装完后的安装命令:
                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库都是安装在服务器本地文件夹内
    1. 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的源码框架

    1. 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 处理杂项及其他步骤或处理设计上的特殊情况
posted on 2025-04-27 16:01  shuaizhenmian  阅读(86)  评论(0)    收藏  举报