请教DC综合的问题,了解DC的请进,我是新手,请大家给点建议
综合的经历如下:
因为我是新手,以前没用过DC,所以就从DC的图形界面design_vision入手,施加了一些约束,然后编译。
约束包括:set target_library,set link_library,set symbol_library,read_file -format verilog,current_design,link,reset_design,set_operating_conditions,set auto_wire_load_selection true,set_wire_load_mode enclosed,set_driving_cell,set_load,set_fanout_load,create_clock,set_dont_touch_network,set_clock_latency -source,set_clock_latency,set_clock_uncertainty,set_clock_transition,set_dont_touch,set_drive 0 [list SCLK rst],set_max_capacitance,set_max_fanout,set_max_transition,set_input_transition,set_input_delay,set_output_delay,set_max_area 0,set_structure -boolean true -boolean_effort high,set_fix_multiple_port_nets -all -buffer,check_design,check_timing,uniquify,compile,compile -map_effort high -incremental_mapping。
我编译之后,发现保持时间和建立时间的SLACK都是负的,显然不满足要求。
而且有一个很重要的问题,我是需要根据什么来设置约束的大小。比如说,设置set_input_delay,set_max_capacitance,要设置多大?
怎么选择设置的大小才能使综合出来的电路能在芯片生产出来之后不会出现问题,保证设计的正确性?
有人说,需要查看库文件,查找每个原件的延时信息等参数,这是真的吗?
还有就是,我需要设置哪些参数,我列举的都需要吗?还需要添加别的约束吗?
我用的是中芯国际.18的库。
请大家给我点建议,最好详细点,我第一次用DC,第一次综合。先谢谢大家了。
我也是新手,把我知道的分享下吧,大家共同进步。
set_input_delay,这个一般是前端设计者定的,如果自己设的话,可以设得稍微悲观些。
set_max_capacitance,一般要根据的你器件库的参数来定,问下组里做过的人吧,我没看库,我也不知道。
时序是负的,很正常,所以才需要后端设计去做。一般不要太大就好。
还有一个综合建议,注意选择元件。某些元件,驱动能力太小,或者延迟过大,可以用
don't use 来禁止掉,这个方法比较有效
先谢谢了,但是还有几个问题。
set_input_delay,如果自己设的话,可以设得稍微悲观些,那比如时钟周期为10ns,我设为4ns可行。set_output_delay我也设为4ns。
还有元件也可以自己选择吗?怎么选择?
set_input_delay和set_output_delay主要看你设计的相关引脚是否有很强的时序需求,比如UART的RX和TX时序要求就很低,“多多”的放松影响也不是很大,但是像SDRAM接口等时序要求比较高的引脚,你就得根据SDRAM芯片的时序要求来设置约束了,可以下个SDRAM芯片的数据手册来查查时序信息。至于怎么根据片外芯片的时序要求来设置输入输出延时,你可以在资料区里面查查DC教程,有说的很清楚的PDF文件。
我写的是一个ADC芯片的SPI接口,用用来配置的芯片的。要求是100MHZ。
下面是我的脚本文件,只是顶层(SPI_ADC)的脚本文件,不知道底层的模块用不用设置约束。
#################
#set search_path
set target_library {/project/DAC_Project/library/chartered/arm-lib-frontend/aci/sc-x/synopsys/scx_csm_18ic_ss_1p62v_125c.db}
set link_library {* /project/DAC_Project/library/chartered/arm-lib-frontend/aci/sc-x/synopsys/scx_csm_18ic_ss_1p62v_125c.db}
set symbol_library {/project/DAC_Project/library/chartered/arm-lib-frontend/aci/sc-x/symbols/synopsys/scm18ic.sdb}
#################
read_file -format verilog {/export/home/2011/wangx/wangx_spi_CODE/CODE/SPI_ADC.v}
read_file -format verilog {/export/home/2011/wangx/wangx_spi_CODE/CODE/ADDR_GEN.v /export/home/2011/wangx/wangx_spi_CODE/CODE/DATA_IN.v /export/home/2011/wangx/wangx_spi_CODE/CODE/DATA_OUT.v /export/home/2011/wangx/wangx_spi_CODE/CODE/MAIN_CONTROL.v /export/home/2011/wangx/wangx_spi_CODE/CODE/MEM.v}
#################
current_design SPI_ADC
link
reset_design
#################
#set_operating_conditions -max_library scx_csm_18ic_ss_1p62v_125c -max worst \
#-min_library***-min best
set_operating_conditions -library scx_csm_18ic_ss_1p62v_125c ss_1p62v_125c
#set_wire_load_model -name csm18_wl50
-library #scx_csm_18ic_ss_1p62v_125c
set auto_wire_load_selection true
set_wire_load_mode enclosed
set_driving_cell-lib_cell INVX2-pin Y-library scx_csm_18ic_ss_1p62v_125c [remove_from_collection [all_inputs] [get_ports {SCLK rst}]]
set_load 0.3 [all_outputs]
set_fanout_load 8 [get_ports SDIO]
#################
create_clock -name "clock" -period 10 -waveform { 0 5}{ SCLK}
set_dont_touch_network[ find clock clock ]
set_clock_latency -source 1 [get_clocks clock]
set_clock_latency 1 [get_clocks clock]
set_clock_uncertainty 0.5 [get_clocks clock]
set_clock_transition 0.3 [get_clocks clock]
#################
set_dont_touch [get_nets rst]
set_drive 0 [list SCLK rst]
#set_drive 0 [get_ports SCLK]
#set_drive 0 [get_ports rst]
set_max_capacitance 6 [remove_from_collection [all_inputs] [get_ports {SCLK rst}]]
set_max_fanout 6 [remove_from_collection [all_inputs] [get_ports {SCLK rst}]]
set_max_transition 2 SPI_ADC
#################
set ain_ports [remove_from_collection [all_inputs] [get_ports SCLK]]
set_input_transition 0.3 $ain_ports
set_input_delay -clock clock -max 4 $ain_ports
set_input_delay -clock clock -min 0 $ain_ports
set_output_delay -clock clock -max 4 [all_outputs]
set_output_delay -clock clock -min 1 [all_outputs]
#################
set_max_area 0
#################
#recommend for reduce area
set_structure -boolean true -boolean_effort high
#fix the multiple port nets
set_fix_multiple_port_nets -all -buffer
#################
check_design > check_design.rpt
check_timing > check_timing.rpt
#################
uniquify
compile
compile -map_effort high -incremental_mapping
##################reports
report_timing -delay max -max_paths 1 > timing_setup.rpt
report_timing -delay min -max_paths 1 > timing_hold.rpt
report_constraint -all_violators > con_violators.rpt
report_timing -path full -delay max -max_paths 1 -nworst 1 > timing.rpt
report_area > area.rpt
##################write the database
change_names -rule verilog -h
write -format verilog -hier -output SPI_ADC.sv
write_sdf SPI_ADC.sdf
write_constraints -format sdf -cover_design -output constraints.sdf
write_sdc SPI_ADC.sdc
#################
不知道参数设置有没有问题,要怎么修改?我用的是最坏情况的库,建立和保持时间的SCLAK都为-0.26。
自己顶一下
top-down 流程,设置顶层就可以了。下面工具会自动 由 顶层 推得
很难啊
新手,关注,学习
学习。
我也来长点见识
个人认为,这些参数的设计都要根据你工程的设计规范吧,有了设计规范,适当的加紧百分之十的约束,以便给后端布局布线预留一定的margin
不知道你现在是不是已经是大神了?求分享经验
BUCUO!
xuexi
xuexi
谢谢小编
看你的问题,你是有两个方面的迷茫:
1.有哪些约束值需要设置?怎么设置?
其实综合约束中需要设置大小的值就那么几个。
1.create_clock的时钟周期;
2.fanout大小,一般按照32定义吧,这个定义多少,区别很小;
3.set_max_transition按照库中的最大值设置,或者设置小一点,过约一点保险;
4.set_input_transition/set_drive/set_driving_cell都是同样的东西,你就直接找库中驱动一般的buf当做driving_cell设置就可以(使用set_driving_cell命令)
5.set_load也使用这个buf的cap设置
6.set_input/output_delay:分两种情况:a.有明确的对接时序要求(比如接口协议手册,或者对端器件手册),那么按照要求来约束;b.模块级别的接口约束,可以约束周期的70%(大于50%即可,主要是为了过约,让工具尽量优化自己模块的接口逻辑)
2.正确设置约束之后,slack为负,怎么办?
约束设置正确,那么我们就分析slack为负的原因:
1.是否是端口时序:如果是,看看接口过约70%是否过于激烈。如果violation真的很大,就看看对端的路径走了多少,是否可以放松约束。
2.reg2reg的路径:a.判断路径是否真实,是否可以设置multicycle,false等;
b.判断时钟周期设置是否正确,是否自己周期设置错误;
c.如果路径真实,时钟正确,请看看详细路径,哪个地方的delay异常,是不是transition没有解,或者cap太大;
d。分析这种异常是因为脚本 设置原因还是工具优化原因(violation较大路径阻碍工具优化其他地方)。
e。如果路径delay没有异常地方,就是因为路径级数太多,cell delay叠加导致path delay太大。那么可以告诉设计人员修改代码。
f.如果代码不能修改。那么请使用svt,lvt,或者ulvt速度快的cell综合。
g。如果设计要求功耗,不能使用这些高速cell。那么请降频吧
perfect answer
学习了
谢谢分享
thanks
input delay/output delay 一般设内部逻辑30%,外面留70%给外面逻辑和走线,算是比较紧的,这个如果设了不过要迭代try一下。
请问一下scx_csm_18ic_ss_1p62v_125c这是个什么工艺?
thank you for the answer, learnt a lot
非常支持