DC学习综合的流程
Posted huanm
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了DC学习综合的流程相关的知识,希望对你有一定的参考价值。
一:逻辑综合的概述
synthesis = translation + logic optimization + gate mapping
1:Translation
主要把描述RTL级的HDL语言,在约束下转换成DC内部的同意用门级描述的电路,以GTECH或者没有映射的ddc形式展现
2:logic optimization
逻辑优化,就是把统一用门级描述的电路进行优化,例如把路径调整一下,门改一下。
3:Gate mapping
门级映射;DC用别的厂商的工艺库把电路给映射出来,得到一个ddc文件;包括映射的门电路信息与网表,.v格式的网表,延时信息(sdf),工作约束(sdc)。(.ddc不能用文本编辑器打开)。.ddc这个包含的网表文件是实际意义的网表文件,而.v这个形式的网表问价是用来做后仿真的文件。
延时信息的得出:线负载模型、拓扑结构模型(现在)。
二:DC启动方式
1:dc_shell
DC以命令行的格式启动
2:design_vision
DC图形界面启动
3:Batch_mode
批处理模式。前面两种方式只是把DC启动起来,没有真正的工作。需要通过source命令把脚本写进去以后,DC读取才真正工作;这种批处理模式是,在启动的同时,告诉DC执行哪些脚本
例如:$dc_shell -topo -f run.tcl | tee -i run.log
意思是:使用拓扑模式启动DC,启动的同时执行run.tcl脚本文件,并且把启动过程中显示在终端的信息记录到run.log中。| tee -i就是写进信息的管道命令,讲dc_shell -topo -f run.tcl 执行后显示的信息(输出结果),流入到run.log文件中。这样子是为了在DC启动失败的时候,通过查看启动信息,进而排除错误
三:基本流程概述
1:高层次设计流程图
①在设计之前,准备好库,verilog代码,约束条件
② 完成 RTL 源码设计之后,应让设计开发与功能仿真并行进行:
·在设计开发阶段,我们使用DC来实现特定的设计目标,以及执行默认选项的初步综合
·如果设计开发结果未能在10%的偏差范围内满足时序目标,则需要修正HDL代码,然后重复设计开发和功能验证的过程。
③ 使用 DC 完成设计的综合并满足设计目标.这个过程包括三个步骤,即综合=翻译+逻辑优化+映射,首先将 RTL 源代码转化为通用的布尔等式,然后设计的约束对电路进行逻辑综合和优化,使电路能满足设计的目标或者约束,最后使用目标工艺库的逻辑单元映射成门级网表,在将设计综合成门级网表之后,要验证此时的设计是否满足设计目标。如果不能满足设计目标,此时需要产生及分析报告确定问题及解决问题。
④当设计满足功能、时序以及其他的设计目标的时候,需要执行物理层设计最后分析物理层设计的性能,也就是使用DC的拓扑模式,加入floorplan的物理信息后进行综合分析设计的性能。如果结果未能满足设计目标,应返回第三步.如果满足设计目标,则本部分设计周期完成.
2:流程图与相应的命令
①准备设计文件,DC 的设计输入文件一般为 HDL 文件。
②指定库文件,需要指定的库文件包括:
链接库(link library) 、目标库(target library) 、符号库(symbol library)、综合库(synthetic library)
工艺库文件的配置放在三个地方,A:软件安装目录$SYNOPSYS/admin/setup。B:~user,用户安装目录。C:DC startup directory前两个目录是早已配置好,最好不要动的;第三个目录放在工作目录下的隐藏目录:.synopsys_dc.setup,通过ls -al才能看到此文件。
一般有两种文件,后缀名为lib(人看,可转化为db文件)和db(工具读)
例如:set target_library 22nm.db
set_app_var target_library 22nm.db #对于DC内部原变量,最好使用第二种方法,set_app_var会检查变量拼写是否为内部变量,若拼写错误,则出现error。
下面是库的解释,具体的解释在后面有说,这里先进行简单地概述一下:
Link library 和 target library 统称为 technology library(即工艺库,习惯称之为综合库),technology library 由半导体制造商提供,包含相关 cell 的信息及设计约束标准,其中:
Target library: 在门级优化及映射的时候提供生成网表的 cell,即DC 用于创建实际电路的库。
Link library:设置里面不仅有Target library,还有其他东西,例如IP核。“*65n_wc.db”,*指DC在内存里开辟一片区域给自己用,别的操作不可使用。
symbol library:Symbol library 提供 Design Vision GUI 中设计实现的图形符号,如果你使用脚本模式而不使用 GUI,此库可不指定 Symbol library。
③读入设计:
设计的读入过程是将设计文件载入内存,并将其转换为 DC 的中间格式,即GTECH 格式,GTECH 格式由“soft macros” 如 adders, comparators 等组成,这些组件来自 synopsys 的 synthetic lib,每种组件具有多种结构。读入设计有两种实现方法实现方法:read 和 analyze & elaborate(实际上read 是 analyze 与 elaborate 的打包操作 ),下面介绍二者在使用中的区
别:
从中可以看到,analyze & elaborate 可以自由指定设计库,并生成 GTECH中间文件前生成.syn 文件存储于 work 目录下,便于下次 elaborate 节省时间,我们一般选择 analyze & elaborate 的方法读入设计。
④定义设计环境:
定义对象包括工艺参数(温度、电压等),I/O 端口属性(负载、驱动、扇出), 统计 wire-load 模型,设计环境将影响设计综合及优化结果。
⑤设置设计约束:
设计约束包括设计规则约束和优化约束,设计规则约束(design rule constraint)由工艺库决定,在设计编译过程中必须满足,用于使电路能按功能要求正常工作。设计优化约束定义了 DC 要达到的时序和面积优化目标,该约束由用户指定,DC 在不违反设计规则约束的前提下,遵循此约束综合设计。
⑥选择编译策略:
对于层次化设计,DC 中有两种编译策略供选择,分别为 top down 和 bottom up。在 top down 策略中,顶层设计和子设计在一起编译,所有的环境和约束设置针对顶层设计,虽然此种策略自动考虑到相关的内部设计,但是此种策略不适合与大型设计,因为 top down 编译策略中,所以设计必须同时驻内存,硬件资源耗费大。在 bottom up 策略中,子设计单独约束,当子设计成功编译后,被设置为 dont_touch 属性,防止在之后的编译过程中被修改,所有同层子设计编译完成后,再编译之上的父设计,直至顶层设计编译完成。Bottom up 策略允许大规模设计,因为该策略不需要所有设计同时驻入内存。
⑦编译:
用 Compile 命令执行综合与优化过程,还可以利用一些选项指导编译和优化过程。
⑧分析及解决设计中存在的问题
DC可以产生一些报告以反应设计的综合和优化结果,如:时序、面积、约束等报告,这些报告有助于分析和解决设计中存在的问题以改善综合结果,我们还可以利用 check_design 命令检验综合的设计的一致性。
⑨存储设计数据
DC不会自动存储综合后的设计结果,因而需要在离开 DC 时手动存储设计数据。比如存储网表、延时信息等数据文件,ddc文件。
四:例子(练习lab1)
1:准备好rtl代码(放在rtl文件夹里),约束文件(scripts里),库文件(.synopsys_dc.setup) .
$ ls -al #可以看到.synopsys_dc.setup文件,gvim打开该文件(截取部分如下图)
12-19行,alias命令是对后面的变量起简称;
33-34行,source命令,在当前命令下引用该文件;
打开common_setup.tcl文件,如下图
common_setup.tcl文件定义了库的名字和名称,上面是逻辑库,下面物理库:
5行:定义库的搜索路径,当找不到库时,从这个路径中寻找
8行:定义target library使用的库(注意,只是定义一个变量)
10行:定义图形库变量
15行:定义顶层设计库的变量名称
17行:定义milkyway(参考)库(的位置)
19行:定义工艺库(的位置)
21行:定义寄生参数库(的位置)
23行:定义工艺库和寄生参数库的映射关系库(的位置)
打开dc_setup.tcl文件,如下图
dc_setup.tcl文件就是指定库了,而不是单单地定义了,ser_app_var是定义DC内部变量,4~7这是指定搜索路径个各种库的路径和名称
4行:search_path搜索路径
下面的物理库设置中:
13行:指定milkyway(参考)库的名称
14行:指定当前设计的库的名称
16行:创建milkyway库,格式如图上面,需要工艺库、参考、当前设计库
19行:打开当前的设计库
20行:加载寄生参数(库)
2:启动dc
3:读代码前的检查
*检查库是否正确设置
,printvar link_library,printvar search_path
*检查逻辑库和物理库的一致性(检查可能不会通过,结果不影响综合的话,可以忽略)
check_library
*检查寄生参数文件和工艺库文件的一致性:(物理综合的时候需要检查)
check_tlu_plus_files
通过的话会有三个passed
4:读入代码和查看设计
*读入代码:
输出:
*读入代码后,查看顶层设计;也可通过 current_design top.v设置顶层设计
*link设计:查看当前综合的设计是否缺少子模块,返回值为1,说明子模块完整。
*检查当前设计的连接性层次性(设计是否有问题)check_design
check_design 返回值为1则正确,但warning有时也要解决。
*以ddc的格式保存未映射的设计(注意需要先创建unmapped文件夹,但每次改变verilog时,都要重新刷新此句):
Write -hierarchy -f ddc -out unmapped/TOP.ddc
*查看内存中的设计与库
5:插入约束设计,在scripts文件里
可在此处加上check_timing
6:进行综合
compile_ultra
7: 综合后的检查(检查不通过的需要优化,这里只作为一般流程,没有进行优化)
report_constraint -all (查看是否违规)
report_timing (查看时序报告),report_timing -delay_type max ;#查看最差路径
report_area (查看面积情况)
8: 保存综合后的设计(注意先创建mapped这个文件夹)
以上是关于DC学习综合的流程的主要内容,如果未能解决你的问题,请参考以下文章