DC综合脚本中文详细解释

本文档详细解释了一个DC(Design Compiler)综合脚本,包括脚本的用途、使用的TCL语言、步骤说明和各个步骤的具体配置。脚本主要用于设置路径、库、变量,并进行设计的综合、约束设置、优化等操作,最终生成网表和相关报告。
摘要由CSDN通过智能技术生成

#script for Design Compiler DC综合编译脚本
#language:TCL 语言说明
#Usage: 使用说明

1)make sure the lib in the current directory 确保设计库在正确的文件夹下

2) if you have the file .synopsys_dc.setup, 用来设置是否定义过dc的启动文件,

set synopsys_dc_setup_file 1, 如果定义过了就设置变量为1

if not, set synopsys_dc_setup_file 0 没有的话设置变量为0,

3) change Step 3 : Variables to what you want 第三个步骤主要是设置一些变量,不同项目里面设置这里基本就可以了

Especially : top module name, clock name, 例如设置一些顶层名字,时钟名字,复位名字,文件名和周期等等的变量

reset name, all files name, and period

4) typing dc_shell-t -f run_72.tcl | tee -i run.log dc综合的启动命令,使用脚本启动,-t表示脚本启动,|是管道符,

#前面一条的输出会成为后面的输入,tee命令将前面命令的标准输出保存到文件.log中,以便以后查看,
#意思是运行完dc_shell -t -f命令后会在终端出现一堆的信息,这些信息被写入.log文件中

#整个脚本分为8个步骤

set synopsys_dc_setup_file 0 #首先定义启动文件变量为0,表示还没有设置过启动文件,需要设置,如果设置为1,下面的if语句就不会执行,表示设置好了
#-----------------------------------------------------

Step 1 : 步骤一:设置一下启动文件,就是一些工艺库和搜索路径

Setting Up path and library:

If you have edited the file .synopsys_dc.setup, then you can skip over this step

#-----------------------------------------------------
if { $synopsys_dc_setup_file == 0} {
set search_path [list /home/chanshi/dc/library/smic /home/chanshi/dc/rfid/source /home/chanshi/dc/script] 设置搜索路径列表
set target_library {typical.db} 设置目标库,也就是工艺库
#set target_library {CSM35OS142_typ.db};

if you want use typical library,change to typical.db

#set link_library [list { } ram_interp_typical_syn.db ram_458_typical_syn.db typical.db]
set link_library [list {
} $target_library] 设置链接库列表,一般和目标库一样,可以连接已经综合的一些单元到设计中
}
#set symbol_library {csm18ic.sdb csm18io.sdb} 设置符号库
#set synthetic_library {dw_foundation.sldb}; 设置综合库,主要是一些可以综合的ip,一般是没有的,除非有特殊要求,才会加这个库

Design Ware

set command_log_file “command.log” 定义命令日志文件

#-----------------------------------------------------

Step 2 :

Compile Swithes

#set verilogout_no_tri true ;

if inout used, tri net will be used

#通过将三态(tri)逻辑声明成线网(wire)来确保网表中不会出现三态逻辑,因为一些布线工具很难读取包含tri、tran源语、assign语句的网表,对于“inout”类型的port,DC产生tri wire 语句和tran 源语,对于tri,还会产生assign语句
set test_default_scan_style multiplexed_flip_flop
#设置扫描链的类型,还可以通过set_scan_configuration -style来设置
set link_force_case case_insensitive
#设置link命令是否区分大小写,默认是check_reference,就是根据产生reference的模块格式来判断是否大小写敏感,如果是vhdl格式就是不敏感,如果是verilog就敏感
define_name_rules VLSI_NET -allowed “a-zA-Z0-9_” -first_restricted “0-9_” -type net -max_length 256 设置命名规则,
define_name_rules VLSI_CELL -allowed “a-zA-Z0-9_” -first_restricted “0-9_” -type cell -max_length 256
define_name_rules VLSI_PORT -allowed “a-zA-Z0-9_” -first_restricted “0-9_” -type port -max_length 256
define_name_rules TAN_RULE -allowed “a-zA-Z0-9_” -first_restricted “0-9_[]” -max_length 256 -map { { {“cell”, “mycell”}, {"*-return", “myreturn”}}};
set hdlin_check_no_latch “true”
#设置如果推断出锁存器,是否报warning,默认是false,即不报。
set hdlin_merge_nested_conditional_statements “true”
#顾名思义,是否把嵌套的if融合,默认值是false,就是对于嵌套的条件语句(if或case语句)中的每一个if和case都推断出一个选择器,这种做法有利于把某些迟到的条件判断信号(late arriving signals)安排到离输出最近的选择器上(进而有利于减小延迟),如果设成true,就会把这些选择器融合成一个大的选择器,这样所有的选择信号到输出的距离都是相同的

#-----------------------------------------------------

Step 3 :步骤三主要定义一些变量,以便后面的命令调用

Define Variables

#-----------------------------------------------------
set active_design “whole_modules”; 定义顶层名

Top module name

source files.tcl; 执行files.tcl文件

All RTL source_files (verilog)

set clock_name “clk”; 定义时钟名

Name of clock

set reset_name “reset”;定义复位名

Name of reset

set clk_period 70.0 定义时钟周期
#定义时钟周期,注意带小数点,这样计算出的值都带小数点,不然小于1的数都显示为0

Desired Clock Period = 1000/Frequence

set clk_uncertainty_setup [expr $clk_period/200]; 定义时钟抖动
#定义时钟不确定性,这里只定义了相对于建立时间的不确定性,就是时钟上升沿有可能提前 clk_uncertainty_setup(时钟偏差和时钟抖动之和)到来,dc要提前clk_uncertainty_setup检查建立时间是否满足

Uncertainty of clock

set clk_latency [expr $clk_period/10]; 定义时钟延时
#定义时钟延迟,是时钟信号从其实际时钟原点到设计中时钟定义点的传输时间

Network Latency of clock

#考虑reg1+combo1--------combo2_input+reg2+combo2_output-----------combo3+reg3的模型来解释input_delay和output_delay,中间的combo2_input+reg2+combo2_output是要综合的模块
set input_delay [expr $clk_period/4]; 定义外部输入延迟,可以假定外部是一个D触发器和一个组合逻辑组成,那么输入延迟就包括触发器的延时加组合逻辑的延时
#定义一个外部输入(组合逻辑combo1)用了多少时间(即从时钟上升沿到输入数据到来经历的延迟),dc计算还有多少时间留给内部组合逻辑combo2_input,例如时钟周期为10ns,input_delay是4ns,则还有(6-tsu)留给内部组合逻辑combo2_input

Input Delay of all input ports except clock

set output_delay [expr $clk_period/4];定义外部输出延迟,
#定义一个外部输出(组合逻辑combo3)用了多少时间(即外部组合逻辑的延迟),dc计算有多少时间留给内部组合逻辑combo2_output,例如时钟周期为10ns,output_delay为4ns,则还有(6-Tclk2Q)留给内部组合逻辑combo2_output

Output Delay of all output ports

set area_desired 0;
#定义面积的期望值,用于set_max_area
set wire_load_model “smic18_wl20”;
#为了精确地计算设置线载模型(DC支持三种模式:

以此来决定如何选择用于跨层次边界的网线的线载模型),用于计算时序路径的延迟,用于set_wire_load_model

Model of the intra net

set output_load “typical/NAND2BX1/AN” ;
#为了精确地计算输出电路的时间,需要设置端口负载(输出或输入的外部电容负载),就是为所有输出端口指定一个负载,综合时dc就会认为这里有一个这样的负载(并不是说综合时在这里强制添加一个电容),dc综合时就会选择满足这个负载的器件,例如假设已经知道某输出端口要驱动的是一个反相器,那么把输出负载设置成这个反相器的输入负载即可,当然可以设置成很大,这样dc就会用驱动能力很大的器件,来满足所有单元被驱动。这个指令的作用是在布图前综合过程中设置模块输出端口的容性负载和往连线上反标注布图后提取的电容信息,这里选取某一器件的某一引脚的负载作为output load,也就是dc认为所有输出端口要达到能驱动这个引脚

model of the output_load

set synthesis_reports {/home/chanshi/dc/report};
#指定综合报告的输出目录
#name of report directory
sh mkdir s y n t h e s i s r e p o r t s ; s e t t i m i n g r e p o r t " synthesis_reports; set timing_report " synthesisreports;settimingreport"synthesis_reports/ a c t i v

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值