Design Compiler——综合及debug流程


前言

Design Compiler 是由 Synopsys 公司开发的一款综合工具,用于将 RTL 代码转换成门级网表电路,同时还可以进行时序分析、时序优化、功耗优化、面积优化等功能。Design Compiler 基于综合和优化算法,可以实现快速和准确的综合和优化,同时支持多种逻辑综合约束和技术库。

一、什么是综合?

DC是芯片过程中的一个编译器,对应着芯片设计流程中的synthesis(综合)。综合就是把行为级的RTL代码在工艺、面积、时序等约束下转换成对应的门级网表,这无非就是将RTL代码编译成实际电路的过程。
综合主要包括三个阶段:转换(translation)、优化 (optimization)与映射(mapping)。Translation:将RTL代码转化成GTECH库元件组成的逻辑电路。
Gate Mapping:将GTECH库元件组成的逻辑图转换到目标工艺库上。
Logic Optimization:根据所需时延、功耗、面积等约束条件进行优化。
在这里插入图片描述

二、综合的流程

DC的流程如下图所示,图中还列出了流程各步骤常用的基本命令。
在这里插入图片描述

1. Develop HDL files

准备设计文件,DC的输入文件是HDL文件

2. Specify libraries

指定库文件,包括搜索路径(search_path)、链接库(link library)、目标库(target library) 、符号库(symbol library)、综合库(synthetic library)。

3. Read design

设计的读入过程是将设计文件载入内存,并将其转换为 DC 的中间格式,即GTECH 格式,GTECH 格式由“soft macros” 如 adders, comparators 等组成,这些组件来自 synopsys 的 synthetic lib,每种组件具有多种结构。
读入设计有两种实现方法实现方法:read 和 analyze & elaborate(实际上read 是 analyze 与 elaborate 的打包操作 )。

代码如下(示例):

analyze -format sverilog -vcs "-f flist.f" -define "SYNTHESIS"
elaborate $design
current_design $design
link
set_verification_top
uniquify -force
check_design

4. Define design environment

定义设计环境,定义对象包括工艺参数(温度、电压等)、I/O特性(负载、驱动、扇出)。
  在这里插入图片描述

5. Set design constraints

设置设计约束,包括设计规则约束(DRC,design rule constraints)和设计优化约束(design optimization constraints),DRC由工艺库决定,在设计编译过程中必须要满足,用于使电路能按照功能要求正常工作。设计优化约束由工程师指定,为DC要达到的时序和面积优化目标。DC在不违反设计规则约束的前提下,尽可能满足优化约束。
  在这里插入图片描述

6. Select compile strategy

选择编译策略。对于层次化设计,DC有top_down和bottom_up两种编译策略。
  在top_down策略中,顶层模块和子模块一起编译,所有的环境和约束针对顶层设计,虽然此种策略自动考虑到相关的内部设计,但是此种策略中所有模块需要同时占用内存,硬件资源损耗打,不适合大型设计。
  在bottom_up策略中,子模块单独约束,当子模块成功编译后,会被设置为dont_touch属性,不允许之后的编译过程修改,子模块编译完成后再向上编译父模块,直至顶层模块编译完成。由于该策略不需要所有模块同时占用内存,因此适用于大规模设计。

7. Synthesize and optimize the design

执行综合和优化,可以利用一些选项指导编译和优化过程。

代码如下(示例):

compile_ultra -gate -scan -no_seq_output_inversion -no_autoungroup
compile_ultra -incremental -only_design_rule -no_autoungroup -no_boundary_optimization

8. Analyze and resolve design problems

分析及解决设计中存在的问题。DC在编译过程中会产生一系列报告,如时序、面积、约束、功耗等报告,工程师需要通过这些报告进行分析和解决设计中存在的问题。

9. Save the design database

保存设计数据。DC不会自动保存综合后的设计数据,因此需要手动保存网表、报告等数据文件。
  
DC综合的流程示例如下图,先通过将RTL代码转化为通用的布尔(Boolean)等式,即GTECH(Generic Technology)格式;然后执行compile命令,该命令按照设计的约束对电路进行逻辑综合和优化,使电路能满足设计的目标或约束,并且使用目标工艺库中的逻辑单元映射成门级网表。
在这里插入图片描述

三、综合debug timing问题的流程

如下图所示,如果综合结束后发现了timing问题,需要修改sdc然后再看一下使用新的sdc之后timing结果,直到最后timing没有问题。
在这里插入图片描述
综合debug timing问题的流程如下。

1. 启动DC

代码如下(示例):

dc_shell

2. 读入库文件

读入库文件,因为$design.ddc文件中不包含用到的库信息。

代码如下(示例):

set search_path [list . $search_path \
				${DC_PATH}/libraries/syn]
set synthetic_library [list dw_foundation.sldb standard.sldb]
set target_library [list class_ss.db \
					x_ss.db \
 					y_ss.db]
set link_library [list * ${target_library} \
				 ${synthetic_library}]
set symbol_library [list class.sdb]

3. 读入.ddc文件

$design.ddc文件包含gate-level netlist和constraint.sdc。

代码如下(示例):

read_ddc ./ddc/$design.ddc

4. reset old sdc

代码如下(示例):

reset_path -from [get_cells -hier *]
reset_path -to [get_cells -hier *]
reset_path -th [get_ports *]
remove_case_analysis -all

5. source new sdc

代码如下(示例):

source -e -v ./sdc/new_sdc.tcl

6. report timing result

代码如下(示例):

report_timing -significant_digits 4 -trans -derate -cap -nets -path full_clock_expanded -max_paths 20 -nworst 1 -nosplit -delay max -slack_lesser_than 0.0
#write sdc and netlist
write_sdc -nosplit ./sdc/$design.sdc
write -f verilog -hie -o ./output/$design.v
exec gzip ./output/$design.v

总结

DC的HDL compiler把HDL代码转化成DC自带的GTECH格式,然后DC的library compiler 根据标准设计约束(SDC)文件、IP-DW库、工艺库、图形库、(使用拓扑模式时,还要加入ICC生成的DEF模式,加载物理布局信息)进行时序优化、数据通路优化、功耗优化(DC的power compiler进行)、测试的综合优化(DC的DFT compiler),最后得到优化后的网表。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值