cisen / blog

Time waits for no one.
133 stars 20 forks source link

synopsys 相关 #1058

Open cisen opened 3 years ago

cisen commented 3 years ago

design compiler

read_verilog {dcLabCore.v dcLabTop.v iopads.v}
读入设计原文件后,一般设定当前设计,这样约束条件才可有针对性施加:
current_design dcLabCore
设定当前设计后,要完成链接,也就是将设计与库链接起来,用于映射过程中搜寻相应的单元,完成综合。tcl语句: link
检查设计,主要是检查完成转换(translate)的设计: check_design。然后设定输出网表的格式规则,输出未优化的设计:
set verilogout_no_tri true
change_names -rule verilog -hier
write -f ddc -hier –out ../output/dcLabCore.ddc
然后对设计设定时序约束,这是最重要的一项约束,用于设定设计的工作速度的。针对不同的设计部分,有不同的约束方法。这里假设设计为全同步设计,单时钟工作,复杂情况参考design compiler的手册即可。以下语句设定时钟及属性、输入信号的时间裕量:
create_clock –name clk_cal -period 20 [get_ports clk_cal]
#名称clk_cal,对应端口clk_cal,50M工作频率
set_clock_uncertainty -setup 0.2 [get_clocks clk_cal] #时钟的不确定时间
set_clock_latency -source -max 0.3 [get_clocks clk_cal]#时钟输入延时
set_clock_latency -max 0.1 [get_clocks clk_cal]#时钟延时
set_clock_transition -max 0.2 [get_clocks clk_cal]#时钟上升/下降时间
set_dont_touch_network [get_ports "clk* rstn"]
#不对时钟复位信号优化
set_ideal_network [get_ports "clk* rstn"] #延时分析时认为时钟复位无延时
set_input_delay -max 12 -clock clk_cal [get_ports "add* mult*"]#输入信号裕量
set_output_delay -max 12 -clock clk_cal [get_ports "caculo"] #输出时间裕量
完成时序约束后,要对设计的工作环境、设计规则等进行约束,如下约束语句:
set_wire_load_mode top
#设定线载模型的模式
set_wire_load_model -library slow -name umc_wl20 -max
#线载模型,要粗略综合一下估出面积,再设定
以下是设计规则的约束:
set_driving_cell -lib_cell FFEDQHD4X -pin Q [get_ports all_inputs]
#驱动能力的约束
set max_cap [expr [load_of slow/AND2HD4XSPG/A] * 5]
set_load [expr 3 * $max_cap] [all_outputs] #设计负载设定
set_fanout_load 10 [all_outputs] #扇出负载
然后是综合的策略,简单的设计比较容易,这里不展开:
compile -map_effort medium -incremental_mapping
输出综合报告、输出综合网表、综合数据以及标准延时文件:
rc > log/rc.log #时序报告
write -f verilog -hier -out output/dcLabTop.sv #输出网表
write -f ddc -hier -out output/dcLabTop.ddc#综合数据文件
write_sdf -version 2.1 mapped/light_controller.sdf #标准延时文件
cisen commented 3 years ago

haps