文章目录
- 前言
- 一、什么是综合?
- 二、综合的流程
- 1. Develop HDL files
- 2. Specify libraries
- 3. Read design
- 4. Define design environment
- 5. Set design constraints
- 6. Select compile strategy
- 7. Synthesize and optimize the design
- 8. Analyze and resolve design problems
- 9. Save the design database
- 三、综合debug timing问题的流程
- 1. 启动DC
- 2. 读入库文件
- 3. 读入.ddc文件
- 4. reset old sdc
- 5. source new sdc
- 6. report timing result
- 总结
前言
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),最后得到优化后的网表。