目录
从 RTL 到 GDS
内容简介
本文的这一部分将基于 OpenLANE 探究从芯片设计从 RTL 到 GDS 的整个过程。OpenLANE 是一个开源 EDA 工具链,可以看看我的另一篇文对它的介绍:
https://blog.youkuaiyun.com/T2777/article/details/118958181
下图是OpenLANE的flow全流程图示,来自于 Paper :
过程分析
RTL 设计
RTL是用硬件描述语言(Verilog 或VHDL)描述设计电路希望达到的功能,这里以开源设计biriscv:biriscv源地址 为例,简单看一下它的代码组织结构:
biriscv实现的是一个32位RISC-V ISA 的处理器核, 它的代码放在以下五个目录下:
- core目录:包含了核心功能模块,取指,执行,存储管理,运算等模块;
- dcache目录:包含了数据cache功能模块;
- icache目录:包含了指令cache功能模块;
- tcm目录:包含了tcm功能模块;
- top目录:包含了top level的功能模块。
定义在以上文件代码实现了biriscv的全部功能,可以用下图来表示:
逻辑综合Logic Synthesis与STA
OpenLANE使用开源工具Yosys + abc将RTL级描述合成为门级网表,并使用OpenSTA对生成的网表进行静态时序分析,静态时序分析是根据时序模型判断设计是否违反限定的时序限制,逻辑综合的过程会根据所施加的时序和面积约束进行相应的优化,在OpenLANE中提供了可选的综合探索阶段,在OpenROAD中还提供了基于强化学习技术实现的时序驱动逻辑优化的自主设计空间探索。
DFT可测试性设计
这是OpenLANE一个比较特别的地方,通过一个可选的开源的可测试性设计工具链Fault,可以用来修改网表,插入扫描链和IO端口,可以在完成制造后进行扫描和测试设计。
布图规划Floorplanning
开始进入到物理设计阶段后,很多工具都是使用的OpenROAD的组件,floorplan阶段进行IO pin(random),Macro的摆放,以及Physical cell的插入,确定芯片面积,电力输送网络PDN等工作,这部分工作分别由init_fp,ioplacer,pdn,tapcell等组件完成,下图是OpenLANE所用测试设计在floorplan阶段生成的中间文件(/results/floorplan目录下):
布局Placement
这一阶段完成单元器件具体位置的确定,自动摆放std cell,进行global placement,IO摆放(non-random),Resizing,detailed placement,并对设计进行优化,global placement确定不同cell的摆放位置,detailed placement 将组件放到合法的位置,这些工作分别由RePlace,Resizer,OpenPhySyn,OpenDP完成,下图是OpenLANE所用测试设计在placement阶段生成的中间文件(/results/placement目录下):
时钟树综合CTS与布局优化
时钟树综合是减小时钟偏移的有效途径,这部分主要使用TritonCTS组件,基于GH-Tree范式,使用一种动态规划算法找到一个时钟树拓扑且和给定的延迟和时钟漂移保持一致。接着可以使用OpenPhySyn对布局进行优化,插入二极管,以及再次使用yosys做逻辑等价检查(LEC)保证新的网表和最开始综合得到的网表是一致的。
布线Routing
按照一定的规则对经过布局后的各器件进行连线,以及布线后的优化,可以使用FastRoute或者CU-GR进行global routing,为detailed routing产生guide,使用TritonRoute进行detailed routing,完成所有net的绕线,还会使用SPEF-Extractor提取SPEF,SPEF用于延迟计算并确保芯片的信号完整性,从而最终确定其运行速度,在这一阶段还会再次进行静态时序分析。
下图是OpenLANE所用测试设计在routing阶段生成的中间文件(/results/routing目录下):
验证与输出GDS
最后使用Magic和Klayout由上一步得到的def文件输出GDSII格式文件,并使用Magic进行设计规则检查DRC,使用Netgen进行电路布局验证LVS,使用CVC进行电路有效性检查CVC。
下图是OpenLANE所用测试设计得到的最终文件(/results/magic目录下):
总结
本文简单介绍了芯片设计从 RTL 到 GDS 的全过程,基于开源工具 OpenLANE 的过程输出文件,使得整个过程更加清晰。