DC综合入门篇——脚本操作

本文详细介绍了使用SynopsysDesignCompiler(DC)进行逻辑综合的TCL脚本操作步骤,包括指定库文件、读取设计文件、定义设计环境、设置约束、综合与优化、生成报告以及保存设计数据库,通过实例演示了整个流程。
摘要由CSDN通过智能技术生成


参考文献
[1]【DC】使用DC进行逻辑综合的基本步骤
[2]Synopsys逻辑综合及DesignCompiler的使用
[3]DC综合——学习笔记
[4]博客园——IC_learner

前言

  数字IC前端常用的综合工具是Synopsys的DC(Design Compiler)。虽然大多数情况下是使用脚本进行操作,但是干巴巴的脚本命令对于初学者来说无疑是天书,因此我觉得有必要对DC的图形化操作有一定的了解,这也能增加工程师对脚本命令的理解。在上篇文章《DC综合入门篇——图形化操作》中已经简要介绍了DC图形化界面的使用,本篇文章将介绍如何利用tcl脚本对RTL代码进行综合。(本文中的命令遵从tcl脚本语言语法)

DC的操作步骤

  下图给出了DC进行逻辑综合时的基本步骤。这是上篇文章中的图,具体介绍可见《DC综合入门篇——图形化操作》
在这里插入图片描述

实战

  下面将通过DC的TCL脚本体验一下综合的流程。

1. 准备工作

  在设计目录下新建6个文件夹分别为netlist(保存网表文件)、report(保存报告文件)、rtl(保存RTL代码)、sdc(保存约束文件)、sim(保存仿真环境)、tb(保存测试文件)。并将编写的rtl代码全部放入rtl文件夹。
  当然这些文件可以根据自己的喜欢新建和命名。

2. 打开DC

  在设计目录下打开终端,输入dc或者dc_shell即可打开DC命令行。可以使用exit命令来退出DC。

dc
# 或者dc_shell

在这里插入图片描述

3.Specify libraries——指定库文件

  指定库文件使用下列脚本进行操作,只指定Search_path、Link_library、Target_library。下列地址忽略,需要根据自己的库文件进行调整。

#-------------------Specify Libraries------------------
set search_path  { . /LM}
set link_library { */LM/tcbn45gsbwpwc.db }
set target_library { /LM/tcbn45gsbwpwc.db }

  注意:在 link_library 的设置中必须包含" * “,” * “表示 DC 在引用实例化模块 或者单元电路时首先搜索已经调进DC memory的模块和单元电路,如果在link library 中不包含” * ",DC 就不会使用 DC memory 中已有的模块,因此,会出现无法匹配的模块或单元电路的警告信息(unresolved design reference)。

4.Read design——读取设计文件

  DC读入设计文件有两种方式,一是read指令,二是 analyze 和 elaborate 的组合
在这里插入图片描述

图源文献[1]
  如果读入单个文件可以使用指令。

read_verilog alu.v

  如果需要读入多个文件可以使用指定。

# 设置verilog文件所在的目录rtl
set design_path "rtl"
set verilog_files [glob -nocomplain -type f $design_path/*.v]
foreach file $verilog_files {
    read_file -format verilog $file
}

  当读取完所有要综合的模块之后,需要使用link命令将读取到 DC 存储区的模块或者实例连接起来。同时由于DC默认将最后读入的一个模块作为顶层模块。因此在Link之前还需要利用current_design指令指定顶层模块。

# 设置顶层模块的名字
set top_name alu
current_design  $top_name              
link
uniquify

  注意:对于被多次实例化的同一子设计,由于其例化后的工作环境各不相同,因此,需要用 uniquify 命令为每个实例在内存中创建一份副本,以便区分开每个实例。DC可以根据不同的应用环境进行合适的优化。源自文献[1]。

5.Define design environment——定义设计环境

  在流程图中,有以下定义design environment的指令。
在这里插入图片描述

  举例说明,可以使用以下命令设置负载电容。[all_output]指的是所有输出port。

#-------------------Operating environment--------------
# 所有输出port的输出负载电容设置为10pf
set_load 0.01 [all_output]

6.Set design constraints

  DC中的约束有很多种,在流程图中,有以下设置约束的指令。下面以常用的时钟约束和面积约束为例说明。
在这里插入图片描述

时钟约束

  指令create_clock对clk端口进行时钟约束,周期period为10ns(100MHz),waveform设置占空比。

create_clock -name clk -period 10 -waveform { 0 5  } [get_ports clk]

  如果对组合逻辑电路进行时钟约束,使用下列命令会生成虚拟时钟,用于时序分析。

create_clock -name clk  -period 10  -waveform {0 5}

  注意:由于时钟信号是驱动大负载的。在综合的时候综合工具会对负载进行估 计,从而在该网络上加上一些有足够驱动能力的 buffer 或者反相器,以使得电路的上升时间和下降时间能够满足要求。而前端工具无法知道连线的走向和长度,在估计时钟网络的负载时不准确,而且 floorplan 的结果将会 影响连线的长度,从而影响连线的负载,因此,前端工具不对大负载的网络进行处理,而把这个工作留到后端。所以在综合的时候需要告诉综合工具不对时钟网络进行处理。源自文献[1]。

#为了防止在时钟路径上插入Buffer而恶化时序,所以对时钟网络设置Dont_touch_network属性,即综合的时候不对Clk信号行优化
set dont_touch_network [get_clocks clk]
面积约束

  set_max_area指令设置Max area 的值为0,表明让DC 向电路面积为 0 的方向来优化电路。当然,面积为0是达不到的。

set_max_area 0

  另外其他约束可根据自己的需求进行设置。

7. Synthesize and optimize the design——综合设计

  使用compile或者compile_ultra进行综合。compie_ultra命令包括许多高级的综合优化算法,可以使关键路径的分析和优化在最短时间内完成。但是需要额外的licence。
在这里插入图片描述

# 保持默认优化条件进行编译
compile
# 或者compile_ultra

8. Analyze and resolve design problems——查看报告并分析

  利用以下命令保持面积、功耗、时序、约束违例和summary报告在report文件夹中。

#-------------------Generate Reports-------------------
report_area  > ./report/area_report.txt
report_power > ./report/power_report.txt
report_timing > ./report/timing_report.txt
# all_violators指的是所有没有达到要求的约束
report_constraint -all_violators > ./report/violators.txt   
report_qor > ./report/qor_report.txt  

9. Save the design database

  利用以下命令保存所需文件。

  • ddc文件:保留综合结果的ddc文件,可以直接load这个文件,查看综合结果;
  • sdc(Synopsys design constraints.)文件:保留了本次设计时序约束信息;
  • sdf(Standard Delay Format)文件:标准延时格式,用于静态分析和后仿;
  • netlist.v文件:综合后吐出的门级网表。
#-------------------Save Output File-------------------
write_sdc ./sdc/top.sdc
write_sdf -version 2.1 ./sdc/top.sdf 
write -f verilog -hier -output ./netlist/netlist.v 
write_file -f ddc -hierarchy -output ./sdc/top.ddc

实例

1. 脚本

  在设计目录下新建一个run.tcl脚本文件,在tcl文件中写入所需要的命令。如下为举例。

#输出时间和清除原本的设计
sh date 
remove_design -designs  
#------------------------Define------------------------
set top_name top
#-------------------Specify Libraries------------------
set search_path {./LM}
set link_library { */LM/tcbn45gsbwpwc.db }
set target_library { /LM/tcbn45gsbwpwc.db }
#----------------------Read Designs--------------------
set design_path "rtl"
set verilog_files [glob -nocomplain -type f $design_path/*.v]
foreach file $verilog_files {
    read_file -format verilog $file
}
current_design  $top_name
# Reset all constraints
reset_design               
link
uniquify
#-------------------Operating environment--------------
set_load 0.01 [all_output]
#--------------------Design Constrains-----------------
create_clock -name clk -period 10 -waveform { 0 5  } [get_ports clk]
set_max_area 0
#---------------------Run Compile----------------------
compile 
#-------------------Generate Reports-------------------
report_area  > ./report/area_report.txt
report_power > ./report/power_report.txt
report_timing > ./report/timing_report.txt
report_constraint -all_violators > ./report/violators.txt   
report_qor > ./report/qor_report.txt  
#-------------------Save Output File-------------------
write_sdc ./sdc/top.sdc
write_sdf -version 2.1 ./sdc/top.sdf 
write -f verilog -hier -output ./netlist/netlist.v 
write_file -f ddc -hierarchy -output ./sdc/top.ddc

2. 运行

  在目录下打开终端运行以下命令即可。运行的日志保存在run.log中方便查看和Debug。

dc_shell -f run.tcl > run.log
# 或者 source -e -v run.tcl > run.log
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值