[看完就懂]DC综合2--DC综合流程概述
1、基本流程概述
首先给三个图,一个图是高层次设计的流程图:
下面是我对这张图的理解:
① 设计之前,准备好库文件、HDL代码、约束生成;然后根据设计思想用 RTL 源码详细地、完整地为设计建立模型、定义设计中寄存器结构和数目、定义设计中的组合电路功能、定义设计中寄存器时钟等等的设计规格和实现。
② 完成 RTL 源码设计之后,应让设计开发与功能仿真并行进行,这样可大幅度降低设计周期:
·在设计开发阶段,我们使用 DC 来实现特定的设计目标(设计规则和优化约束),以及执行默认选项的初步综合.
·如果设计开发结果未能在 10%的偏差范围内满足时序目标,则需要修正 HDL 代码,然后重复设计开发和功能验证的过程.
·在功能仿真中,通过特定的工具来确定设计是否能按如所需的功能工作.
·如果设计未能满足功能要求, 我们必须修改设计代码以及重复设计开发和功能仿真。继续设计开发和功能仿真直至设计功能正确及满足小于 10%偏差的时序目标.
③ 使用 DC 完成设计的综合并满足设计目标.这个过程包括三个步骤,即综合=转化+逻辑优化+映射,首先将 RTL 源代码转化为通用的布尔等式,然后设计的约束对电路进行逻辑综合和优化,使电路能满足设计的目标或者约束,最后使用目标工艺库的逻辑单元映射成门级网表,在将设计综合成门级网表之后,要验证此时的设计是否满足设计目标.如果不能满足设计目标,此时需要产生及分析报告确定问题及解决问题
一个图是DC在设计流程中的位置:
最后一个图是,使用DC进行基本的逻辑综合的流程图与相应的命令:
这个图给出了使用DC进行逻辑综合时的基本步骤,我们根据这个图运行DC,下面是这个图的具体解说:
①准备设计文件,DC 的设计输入文件一般为 HDL 文件。
②指定库文件,需要指定的库文件包括:
链接库(link library) 、目标库(target library) 、符号库(symbol library)、综合库(synthetic library)
Link library & target library
Link library 和 target library 统称为 technology library(即工艺库,习惯称之为综合库),technology library 由半导体制造商提供,包含相关 cell 的信息及设计约束标准,其中:
Target library: 在门级优化及映射的时候提供生成网表的 cell,即DC 用于创建实际电路的库,由晶圆厂提供。
Link library: 提供设计网表中的 cell,可以跟target_library使用同一个库,但是 DC 不用 link library中的 cell 来综合设计。
当 DC 读入设计时,它自动读入由 link library 变量指定的库。当连接设计时,DC 先搜寻其内存中已经有的库,然后在搜寻由 link library 指定的库。
Symbol library
Synthetic library
Createmwlib :主要使用DC的物理综合的时候,需要生成物理库
③读入设计 :
设计的读入过程是将设计文件载入内存,并将其转换为 DC 的中间格式,即GTECH 格式,GTECH 格式由“soft macros” 如 adders, comparators 等组成,这些组件来自synopsys 的 synthetic lib,每种组件具有多种结构。
读入设计有两种实现方法实现方法:read 和 analyze & elaborate(实际上read 是 analyze 与 elaborate 的打包操作 ),下面介绍二者在使用中的区别:
④定义设计环境:
⑤设置设计约束:
⑥选择编译策略:
⑦编译:
⑧分析及解决设计中存在的问题
⑨存储设计数据
2、实战
在这里,我们将实战一下,做一下实验,让大家体验一下流程:
·首先准备好文件:
这个.synopsysdc.setup文件(包含了com、dcsetup)、TOP.con文件是需要我们书写的,这里以及写好了,我们来看一下就好了。
.synopsys_dc.setup的内容:
然后我们移步到commonsetup.tcl和dcsetup.tcl的内容:
common_setup.tcl文件定义了库的名字和名称,上面是逻辑库,下面物理库:5行:定义库的搜索路径,当找不到库时,从这个路径中寻找 8行:定义target library使用的库(注意,只是定义一个变量) 10行:定义图形库变量 15行:定义顶层设计库的变量名称 17行:定义milkyway(参考)库(的位置) 19行:定义工艺库(的位置) 21行:定义寄生参数库(的位置) 23行:定义工艺库和寄生参数库的映射关系库(的位置)
dc_setup.tcl的内容:
dcsetup.tcl文件就是指定库了,而不是单单地定义了,serapp_var是定义DC内部变量,这个命令相比set来说,会检查设置名称拼写是否正确,4~7这是指定搜索路径个各种库的路径和名称
下面的物理库设置中:
·启动DC
这里是流程演示,因此我们使用图形化的方式启动:
·读入设计前的检查
-->检查库是否正确设置:
-->检查逻辑库和物理库的一致性:
check_library
检查可能不会通过,结果不影响综合的话,可以忽略
-->检查寄生参数文件和工艺库文件的一致性:(物理综合的时候需要检查)
checktluplus_files
·读入设计和查看设计
-->读入设计:
read_file -format verilog ./rtl/TOP.v
用法如下所示:
-->设置当前设计
要综合哪个模块,就把哪个模块设置为当前设计;
查看当前设计:current_design
设置当前设计:current_design TOP
-->link设计
Link设计,查看当前要综合的设计是否缺少子模块:
link
返回值是1,说明子模块完整
-->以ddc的格式保存未映射的设计(注意需要先创建unmapped文件夹):
write -hierarchy -f ddc -out unmapped/TOP.ddc
我们可以看看write的用法:
-->查看内存中的设计和库:
·约束设计(也就是上面流程图中的各种set)
我们通过执行约束文件来约束设计:
source TOP.con
因为前面已经把./scripts添加到搜索路径中了,因此可以直接搜索。
·进行综合
·综合后的检查(检查不通过的需要优化,这里只作为一般流程,没有进行优化)
report_constraint -all (查看是否违规)
report_timing (查看时序报告)
·保存综合后的设计(注意先创建mapped这个文件夹)
write -hierarchy -format ddc -output ./mapped/TOP.ddc
总结,大概的流程为:
欢迎点赞,关注,分享~~,本文原发于微信公众号【数字ic小站】