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

我是***雪天鱼***,一名FPGA爱好者,研究方向是FPGA架构探索。

file

关注公众号,拉你进“IC设计交流群”。


这篇博客将介绍如何使用 OpenROAD和 Skywater 130nm hd 工艺实现一个32位2级流水线 RISCV CPU (RV32IMC/EMC)
开发环境是 OpenROAD-flow-scripts(ORFS):
在这里插入图片描述
上图所示是我所使用的版本。

一、配置文件查看

1.1 PDK 配置

打开 OpenROAD-flow-scripts/flow 目录:
在这里插入图片描述

  1. 首先需要配置 platforms,目前我的理解就是指的 PDK:
    在这里插入图片描述
    此次所使用的是 sky130hd:
    在这里插入图片描述
    配置文件是 config.mk:
    在这里插入图片描述
    在此文件中定义了使用 skywater 130 PDK 所需的所有变量。例如 Tech file 、Libs的路径;一些标准单元的路径;布线垂直方向与竖直方向所用的金属层等。

1.2 设计配置

进入 OpenROAD-flow-scripts/flow/designs/sky130hd/ibex 路径:
在这里插入图片描述
打开 config.mk:
在这里插入图片描述
会设置如下所示的变量:

变量名描述
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
在这里插入图片描述
这也就意味着 ORFS 的 RTL-to-GDS Flow的输入,就是设计的RTL代码(Verilog),ORFS自带了开源综合工具 Yosys 去对设计进行综合。
再看一看 sdc 时序约束文件,在 OpenROAD-flow-scripts/flow/designs/sky130hd/ibex/contraint.sdc
在这里插入图片描述
对时钟信号进行设置,周期设置为 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,进入对应的目录,执行脚本。
在这里插入图片描述

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

在这里插入图片描述
我一开始执行报错了,经过检查发现是 由于 ubuntu shell 默认使用的是 dash,而非 bash所导致的。
解决方法:
打开 OpenROAD-flow-scripts/flow/Makefile
原来:
在这里插入图片描述
将102行修改为下图所示即可:
在这里插入图片描述
重新执行:

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

我计时了一下,在我的机器(i7-8750H,16GB)上的运行时间为近27分钟。(是时候换台配置好点的笔记本了,否则科研举步维艰啊,太难了)
在这里插入图片描述

2.2 结果查看

在这里插入图片描述
生成了四个文件夹。
其中运行结果都保存在 OpenROAD-flow-scripts/flow/results/sky130hd/ibex/base 文件夹下:
在这里插入图片描述
从综合后的.v文件到最终的 GDS文件都有。

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

此路径下保存了DRC报告,设计的一些统计数据,综合检查报告等。
在这里插入图片描述

2.3 查看 PPA

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

make gui_final

打开图形化界面:
在这里插入图片描述

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

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

report_worst_slack
report_tns
report_wns

在这里插入图片描述
3. Power

report_power

在这里插入图片描述

三、总结

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

  • 4
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

雪天鱼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值