DC脚本及解释.doc_第1页
DC脚本及解释.doc_第2页
DC脚本及解释.doc_第3页
DC脚本及解释.doc_第4页
DC脚本及解释.doc_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

#script for Design Compiler# Language : TCL# Usage :# 1) make sure the lib in the current directory# 2) if you.#script for Design Compiler# Language : TCL# Usage :# 1) make sure the lib in the current directory# 2) if you have the file .synopsys_dc.setup,# set synopsys_dc_setup_file 1,# if not, set synopsys_dc_setup_file 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#=set synopsys_dc_setup_file 0#-# 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/scriptset 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.dbset link_library list * $target_library#set symbol_library csm18ic.sdb csm18io.sdb#set synthetic_library dw_foundation.sldb;# Design Wareset 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 256define_name_rules VLSI_CELL -allowed a-zA-Z0-9_ -first_restricted 0-9_ -type cell -max_length 256define_name_rules VLSI_PORT -allowed a-zA-Z0-9_ -first_restricted 0-9_ -type port -max_length 256define_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 namesource files.tcl;# All RTL source_files (verilog)set clock_name clk;# Name of clockset reset_name reset;# Name of resetset clk_period 70.0#设置时钟周期,注意带小数点,这样计算出的值都带小数点,不然小于1的数都显示为0# Desired Clock Period = 1000/Frequenceset clk_uncertainty_setup expr $clk_period/200;#设置时钟不确定性,这里只设置了相对于建立时间的不确定性,就是时钟上升沿有可能提前 clk_uncertainty_setup(时钟偏差和时钟抖动之和)到来,dc要提前clk_uncertainty_setup检查建立时间是否满足# Uncertainty of clockset 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;#设置输入延迟,设置一个外部输入(组合逻辑combo1)用了多少时间(即从时钟上升沿到输入数据到来经历的延迟),dc计算还有多少时间留给内部组合逻辑combo2_input,例如时钟周期为10ns,input_delay是4ns,则还有(6-tsu)留给内部组合逻辑combo2_input# Input Delay of all input ports except clockset output_delay expr $clk_period/4;#设置输出延迟,设置一个外部输出(组合逻辑combo3)用了多少时间(即外部组合逻辑的延迟),dc计算有多少时间留给内部组合逻辑combo2_output,例如时钟周期为10ns,output_delay为4ns,则还有(6-Tclk2Q)留给内部组合逻辑combo2_output# Output Delay of all output portsset area_desired 0;#设置面积的期望值,用于set_max_areaset wire_load_model smic18_wl20;#为了精确地计算设置线载模型(DC支持三种模式:以此来决定如何选择用于跨层次边界的网线的线载模型),用于计算时序路径的延迟,用于set_wire_load_model# Model of the intra netset output_load typical/NAND2BX1/AN ;#为了精确地计算输出电路的时间,需要设置端口负载(输出或输入的外部电容负载),就是为所有输出端口指定一个负载,综合时dc就会认为这里有一个这样的负载(并不是说综合时在这里强制添加一个电容),dc综合时就会选择满足这个负载的器件,例如假设已经知道某输出端口要驱动的是一个反相器,那么把输出负载设置成这个反相器的输入负载即可,当然可以设置成很大,这样dc就会用驱动能力很大的器件,来满足所有单元被驱动。这个指令的作用是在布图前综合过程中设置模块输出端口的容性负载和往连线上反标注布图后提取的电容信息,这里选取某一器件的某一引脚的负载作为output load,也就是dc认为所有输出端口要达到能驱动这个引脚# model of the output_loadset synthesis_reports /home/chanshi/dc/report;#指定综合报告的输出目录#name of report directorysh mkdir $synthesis_reports;set timing_report $synthesis_reports/$active_design_timing.rptset timing_max20_report $synthesis_reports/$active_design_timing_max20.rptset area_report $synthesis_reports/$active_design_area.rptset references_report $synthesis_reports/$active_design_references.rptset cell_report $synthesis_reports/$active_design_cell.rptset constraint_report $synthesis_reports/$active_design_constraint.rptset power_report $synthesis_reports/$active_design_power.rptset check_syntax_report $synthesis_reports/$active_design_check_design.rptset synthesis_netlist /home/chanshi/dc/result;#指定网表和sdf/sdc/db文件输出目录,本dc不支持生成db文件#name of outfile directorysh mkdir $synthesis_netlist;#创建目录set out_netlist $synthesis_netlist/$active_design.v;set out_db $synthesis_netlist/$active_design.db;set out_sdf $synthesis_netlist/$active_design.sdf;set out_sdc $synthesis_netlist/$active_design.sdc;#-# Step 4 :# Read design to DC Memory#-foreach active_files $files read_verilog $active_files#foreach语句,$files是一个文件列表,把列表里的每一个文件轮流赋值给active_files,然后对active_files执行read_verilog函数,就相当于轮流对每一个文件执行read_verilog函数#exitcurrent_design $active_design#设置当前设计link#把当前设计中实例化引用的单元链接到当前设计(即读取link_library指定的库到当前设计)uniquify#为每一个例化单元起一个单独的名字(是对于某个模块多次引用的情况)#check_design $check_syntax_report#if check_design = 0 # echo Check Design Error!;# exit;# #-# Step 5 :# Constraint#-#-Net load-set_wire_load_model -name $wire_load_model#设置线载模型set_wire_load_mode top#设置线载模式(top:所有层次中所有连线将继承和顶层模块同样的线载模型,因为顶层电路规模最大,所以连线延迟最大,线载模型最悲观;enclosed:选择连线所在的子模块的线载模型,子模块电路规模较顶层要小,连线延迟较短;segmented:不常用,用于跨层次边界的连线)#-clock-create_clock -name $clock_name -period expr $clk_period get_ports $clock_name#设置时钟set_clock_uncertainty -setup $clk_uncertainty_setup get_clocks $clock_name#设置时钟不确定性set_clock_latency $clk_latency get_clocks $clock_name#设置时钟延迟set_dont_touch_network get_clocks $clock_name#在优化过程中对时钟网络不进行改变和替换,原因:由于时钟端口的负载很大,DC 会使用 Buffer 来增加其驱动能力。但一般设计者都使用布局布线工具来完成此项工作,所以有必要指示 DC 不要对时钟网络进行修改,可以选中上图中“Dont touch network”进行设置。set_dont_touch_network get_ports $reset_name#在优化过程中对复位信号不进行改变和替换set_ideal_network get_ports $reset_name#对reset设置成理想线网,因为reset的fanout太大,一般布图前都设置成理想线网,具体原因有待研究#-drive-#set_driving_cell -lib_cell xr02d2 -pin A1 -library CSM35OS142_typ all_inputsset_driving_cell -lib_cell NAND2BX1 -pin Y all_inputs#为所有输入端口(除去时钟和复位)设置驱动模型,从而指定了驱动强度和转换时间set_drive 0 get_ports $clock_name#将时钟驱动能力设为无穷大,即将其阻抗设为 0set_drive 0 get_ports $reset_name#同上#-input/output delay-set allin_except_CLK remove_from_collection all_inputs get_ports clkset_input_delay expr $input_delay -clock $clock_name $allin_except_CLK#设置输入延时set_output_delay expr $output_delay -clock $clock_name all_outputs#设置输出延时#-Output load-set_load load_of $output_load all_outputs#设置所有输出端口的负载#- Area -#set_max_area $area_desired#- insert buffer replace assign -set_fix_multiple_port_nets -all -buffer_constants#如果一个线网连接着多个端口,则在网表中会出现assign语句,这是一种错误,为避免这种错误,要消除多端口连线,可以通过插入buffer来消除(具体见专用集成电路设计实用教程p146)#-# Step 6 :# Compile# Also can use compile_ultra#-compile -map_effort medium -boundary_optimization#compile

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论