2. 环境搭建与工具链安装:Docker环境配置、OpenROAD-flow-scripts编译、依赖库安装与验证
说实话,环境搭建这一步,劝退了很多人。
我见过不少工程师,拿到OpenROAD的第一反应就是——直接在本地硬装。结果呢?依赖冲突、版本不对、编译报错,折腾一整天还没跑起来。我个人习惯,能用Docker就用Docker。不是偷懒,是省心。
2.1 Docker环境配置
Docker的好处,说白了就是「一次配置,到处运行」。你想想看,团队里有人用Ubuntu 20.04,有人用22.04,还有人用CentOS。如果没有容器化,光是解决glibc版本问题就能让你崩溃。
第一步:安装Docker
我建议直接用官方脚本,干净利落:
# 安装Docker(Ubuntu/Debian)
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
# 把当前用户加入docker组(避免每次sudo)
sudo usermod -aG docker $USER
# 退出重新登录,验证安装
docker --version
嗯,这里要注意:加入docker组后一定要重新登录,否则会报权限错误。我曾经在这上面浪费了10分钟,后来发现只是没logout。
第二步:拉取OpenROAD官方镜像
OpenROAD团队维护了多个Docker镜像,我个人推荐用openroad/flow-ubuntu22.04,兼容性最好:
docker pull openroad/flow-ubuntu22.04:latest
如果你网络不好,可以用国内镜像源加速:
# 配置Docker镜像加速器(以阿里云为例)
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://你的加速地址.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
docker images 查看镜像列表。如果看到 openroad/flow-ubuntu22.04,说明成功了。
2.2 OpenROAD-flow-scripts编译
镜像拉好了,接下来就是编译OpenROAD-flow-scripts(简称ORFS)。这是整个流程的核心,它把OpenROAD、Yosys、KLayout等工具整合在一起。
第一步:克隆代码仓库
git clone --recursive https://github.com/The-OpenROAD-Project/OpenROAD-flow-scripts.git
cd OpenROAD-flow-scripts
注意--recursive参数,它会同时拉取所有子模块。我遇到过有人漏了这个参数,结果编译到一半报错说找不到某个库,回头一看,子模块是空的。
第二步:启动Docker容器并编译
# 启动容器,挂载当前目录
docker run -it --rm \
-v $(pwd):/OpenROAD-flow-scripts \
openroad/flow-ubuntu22.04:latest \
/bin/bash
# 进入容器后,开始编译
cd /OpenROAD-flow-scripts
./build_openroad.sh --local
编译过程大概需要30-60分钟,取决于你的机器性能。这时候你可以去喝杯咖啡,或者看看文档。
cmake: command not found,说明容器内缺少依赖。可以用 apt-get update && apt-get install -y cmake 安装。不过官方镜像一般已经预装了,很少遇到这个问题。
第三步:验证编译结果
编译完成后,检查关键工具是否可用:
# 检查OpenROAD
./tools/OpenROAD/build/src/openroad -version
# 检查Yosys
./tools/Yosys/build/yosys -version
# 检查KLayout
./tools/KLayout/build/klayout -version
如果都能正常输出版本号,恭喜你,编译成功了。
2.3 依赖库安装与验证
工具链编译好了,但跑一个完整的芯片流程还需要PDK和标准单元库。这里我以SkyWater 130nm PDK为例,这是OpenROAD官方推荐的入门库。
第一步:安装PDK
# 在容器内执行
cd /OpenROAD-flow-scripts
# 设置PDK路径
export PDK_ROOT=/OpenROAD-flow-scripts/pdk
# 安装SkyWater PDK
./build_openroad.sh --install-pdk sky130
这个过程会下载大约500MB的数据,包括工艺文件、标准单元库、IO库等。耐心等待就好。
第二步:验证PDK完整性
PDK安装完成后,检查关键文件是否存在:
# 检查库文件
ls -la $PDK_ROOT/sky130A/libs.ref/sky130_fd_sc_hd/lib/
# 检查LEF文件
ls -la $PDK_ROOT/sky130A/libs.ref/sky130_fd_sc_hd/lef/
# 检查时序库
ls -la $PDK_ROOT/sky130A/libs.ref/sky130_fd_sc_hd/timing/
你应该能看到类似这样的输出:
-rw-r--r-- 1 root root 123456 sky130_fd_sc_hd__ff_100C_1v65.lib
-rw-r--r-- 1 root root 123456 sky130_fd_sc_hd__ff_n40C_1v95.lib
-rw-r--r-- 1 root root 123456 sky130_fd_sc_hd__ss_100C_1v60.lib
-rw-r--r-- 1 root root 123456 sky130_fd_sc_hd__tt_025C_1v80.lib
这四个时序库分别对应不同的工艺角(Process Corner),是后续STA分析的基础。
md5sum 校验一下:md5sum $PDK_ROOT/sky130A/libs.ref/sky130_fd_sc_hd/lib/*.lib,对比官方提供的MD5值。
2.4 完整验证:跑一个测试用例
环境搭好了,工具链编译了,PDK也装了。但怎么知道一切真的能用?我建议跑一个最简单的测试用例——反相器链。
# 进入测试目录
cd /OpenROAD-flow-scripts/flow
# 运行反相器链测试
make DESIGN_CONFIG=./designs/sky130hd/inv_chain/config.mk
如果一切正常,你会看到类似这样的输出:
[INFO] Floorplan: 0.00s
[INFO] Place: 0.12s
[INFO] CTS: 0.05s
[INFO] Route: 0.34s
[INFO] STA: 0.08s
[INFO] Total runtime: 0.59s
[INFO] Design area: 12.34 um^2
[INFO] Worst slack: 0.45 ns
看到Total runtime和Worst slack了吗?这说明你的环境已经完整可用了。