我是***雪天鱼***,一名FPGA爱好者,研究方向是FPGA架构探索。
关注公众号,拉你进“IC设计交流群
”。
这篇博客将介绍如何使用 OpenROAD和 Skywater 130nm hd 工艺实现一个32位2级流水线 RISCV CPU (RV32IMC/EMC)
开发环境是
OpenROAD-flow-scripts(ORFS)
:
上图所示是我所使用的版本。
一、配置文件查看
1.1 PDK 配置
打开 OpenROAD-flow-scripts/flow
目录:
- 首先需要配置
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 版图文件。
各阶段所使用的工具为:
- Synthesis - Yosys.
- Floorplanning - Initialize Floorplan.
- Global Placement - RePlAce.
- Clock Tree Synthesis - TrintonCTS 2.0.
- Detailed Placement - OpenDP.
- Global Route - Fast Route.
- Antenna Rule Checker - Antenna Rule Checker.
- Timing Optimization using Resizer - Gate Resizer.
- Detail Routing - TritonRoute.
- 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
打开图形化界面:
- 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 设计的后端流程进行深入学习。
最后祝大家虎年大吉!新年快乐!