IC后端物理实现自动化工具 OpenROAD系列(三)ibex-32位2级流水线 RISC-V CPU 的物理实现

我是雪天鱼,一名FPGA爱好者,研究方向是FPGA架构探索。
笔记同步在我的个人网站进行更新,欢迎来访查看。
IC/FPGA 设计学习交流群号: 866169462

文章目录

  • 一、配置文件查看
    • 1.1 PDK 配置
    • 1.2 设计配置
  • 二、运行 RTL-to-GDS Flow
    • 2.1 运行
    • 2.2 结果查看
    • 2.3 查看 PPA
  • 三、总结

这篇博客将介绍如何使用 OpenROAD和 Skywater 130nm hd 工艺实现一个32位2级流水线 RISCV CPU (RV32IMC/EMC)
开发环境是 OpenROAD-flow-scripts(ORFS):
IC后端物理实现自动化工具 OpenROAD系列(三)ibex-32位2级流水线 RISC-V CPU 的物理实现_第1张图片
上图所示是我所使用的版本。

一、配置文件查看

1.1 PDK 配置

打开 OpenROAD-flow-scripts/flow 目录:
IC后端物理实现自动化工具 OpenROAD系列(三)ibex-32位2级流水线 RISC-V CPU 的物理实现_第2张图片

  1. 首先需要配置 platforms,目前我的理解就是指的 PDK:
    IC后端物理实现自动化工具 OpenROAD系列(三)ibex-32位2级流水线 RISC-V CPU 的物理实现_第3张图片
    此次所使用的是 sky130hd:
    IC后端物理实现自动化工具 OpenROAD系列(三)ibex-32位2级流水线 RISC-V CPU 的物理实现_第4张图片
    配置文件是 config.mk:
    IC后端物理实现自动化工具 OpenROAD系列(三)ibex-32位2级流水线 RISC-V CPU 的物理实现_第5张图片
    在此文件中定义了使用 skywater 130 PDK 所需的所有变量。例如 Tech file 、Libs的路径;一些标准单元的路径;布线垂直方向与竖直方向所用的金属层等。

1.2 设计配置

进入 OpenROAD-flow-scripts/flow/designs/sky130hd/ibex 路径:
IC后端物理实现自动化工具 OpenROAD系列(三)ibex-32位2级流水线 RISC-V CPU 的物理实现_第6张图片
打开 config.mk:
IC后端物理实现自动化工具 OpenROAD系列(三)ibex-32位2级流水线 RISC-V CPU 的物理实现_第7张图片
会设置如下所示的变量:

变量名 描述
PLATFORM 用于指定 PDK(Process design kit)
DESIGN_NAME 设计顶层模块名
VERILOG_FILES 设计的Verilog 网表文件路径
SDC_FILE 设计时序约束文件 .sdc 的路径
CORE_UTILIZATION 核利用率百分比
PLACE_DENSITY 所期望的单元放置密度。 它反映了单元在核心区域的分布情况。 1 = 非常密集。 0 = 广泛传播

由此可知 ibex 源码所在路径为 OpenROAD-flow-scripts/flow/designs/src/ibex
IC后端物理实现自动化工具 OpenROAD系列(三)ibex-32位2级流水线 RISC-V CPU 的物理实现_第8张图片
这也就意味着 ORFS 的 RTL-to-GDS Flow的输入,就是设计的RTL代码(Verilog),ORFS自带了开源综合工具 Yosys 去对设计进行综合。
再看一看 sdc 时序约束文件,在 OpenROAD-flow-scripts/flow/designs/sky130hd/ibex/contraint.sdc
IC后端物理实现自动化工具 OpenROAD系列(三)ibex-32位2级流水线 RISC-V CPU 的物理实现_第9张图片
对时钟信号进行设置,周期设置为 17.4 ns,即 57.47 MHZ左右。

二、运行 RTL-to-GDS Flow

2.1 运行

ORFS 使用 tcl 脚本实现完全自动化的 RTL-to-GDS Flow,输入为设计的 Verilog 网表文件(未综合),输出为GDS 版图文件。
各阶段所使用的工具为:

  1. Synthesis - Yosys.
  2. Floorplanning - Initialize Floorplan.
  3. Global Placement - RePlAce.
  4. Clock Tree Synthesis - TrintonCTS 2.0.
  5. Detailed Placement - OpenDP.
  6. Global Route - Fast Route.
  7. Antenna Rule Checker - Antenna Rule Checker.
  8. Timing Optimization using Resizer - Gate Resizer.
  9. Detail Routing - TritonRoute.
  10. Layout Generation - KLayout (Requires v0.27.1).

现在运行 flow,进入对应的目录,执行脚本。
IC后端物理实现自动化工具 OpenROAD系列(三)ibex-32位2级流水线 RISC-V CPU 的物理实现_第10张图片

cd OpenROAD-flow-scripts/flow
make DESIGN_CONFIG=./designs/sky130hd/ibex/config.mk

IC后端物理实现自动化工具 OpenROAD系列(三)ibex-32位2级流水线 RISC-V CPU 的物理实现_第11张图片
我一开始执行报错了,经过检查发现是 由于 ubuntu shell 默认使用的是 dash,而非 bash所导致的。
解决方法:
打开 OpenROAD-flow-scripts/flow/Makefile
原来:
在这里插入图片描述
将102行修改为下图所示即可:
在这里插入图片描述
重新执行:

make DESIGN_CONFIG=./designs/sky130hd/ibex/config.mk

我计时了一下,在我的机器(i7-8750H,16GB)上的运行时间为近27分钟。(是时候换台配置好点的笔记本了,否则科研举步维艰啊,太难了)
IC后端物理实现自动化工具 OpenROAD系列(三)ibex-32位2级流水线 RISC-V CPU 的物理实现_第12张图片

2.2 结果查看

IC后端物理实现自动化工具 OpenROAD系列(三)ibex-32位2级流水线 RISC-V CPU 的物理实现_第13张图片
生成了四个文件夹。
其中运行结果都保存在 OpenROAD-flow-scripts/flow/results/sky130hd/ibex/base 文件夹下:
IC后端物理实现自动化工具 OpenROAD系列(三)ibex-32位2级流水线 RISC-V CPU 的物理实现_第14张图片
从综合后的.v文件到最终的 GDS文件都有。

OpenROAD-flow-scripts/flow/reports/sky130hd/ibex/base

此路径下保存了DRC报告,设计的一些统计数据,综合检查报告等。
IC后端物理实现自动化工具 OpenROAD系列(三)ibex-32位2级流水线 RISC-V CPU 的物理实现_第15张图片

2.3 查看 PPA

/home/jccao/Fudan_FPGA/OpenROAD-flow-scripts/flow 路径下:
先将 Makefile 第 80行默认设计配置给注释:
在这里插入图片描述
再将第 54 行给取消注释:
在这里插入图片描述
完成后,在该目录打开终端,输入下述命令:

make gui_final

打开图形化界面:
IC后端物理实现自动化工具 OpenROAD系列(三)ibex-32位2级流水线 RISC-V CPU 的物理实现_第16张图片

  1. Area
    查看面积的话,就在TCL commands窗口输入下述命令即可:
report_design_area

在这里插入图片描述
2. Timing
同样在 TCL commands窗口依次输入下述命令:

report_worst_slack
report_tns
report_wns

IC后端物理实现自动化工具 OpenROAD系列(三)ibex-32位2级流水线 RISC-V CPU 的物理实现_第17张图片
3. Power

report_power

IC后端物理实现自动化工具 OpenROAD系列(三)ibex-32位2级流水线 RISC-V CPU 的物理实现_第18张图片

三、总结

至此从RTL to GDS Flow 就完成了,看起来是输入一条命令的事情,实际上需要做的工作有很多,每个阶段也都可以进行一些优化,可以通过此开源工具来对 IC 设计的后端流程进行深入学习。
最后祝大家虎年大吉!新年快乐!

你可能感兴趣的:(FPGA芯片设计,自动化,risc-v,OpenROAD,芯片设计,物理实现)