关于 set_dont_touch_network 的疑问
时间:10-02
整理:3721RD
点击:
我的 .v 文件是 一个时钟驱动1024个触发器,一个rst_n对1024个触发器进行复位;sdc文件很简单,如下示:
#*************************************************************
# create Clock
#**************************************************************
create_clock -name {clk_800M} -period 1.2500 -waveform { 0.000 0.6250 } [get_ports {clk_800M}]
set_clock_uncertainty 0.850 [get_clocks {clk_800M}]
#**************************************************************
# input pins
#**************************************************************
set_input_delay 0.500 -clock {clk_800M} [get_ports {clk_800M}]
#**************************************************************
# output pins
#**************************************************************
set_output_delay 0.5 -clock {clk_800M} [get_ports {clk_800M}]
#**************************************************************
# fanout/load
#**************************************************************
set_max_fanout 4 [all_inputs]
set_load [expr 32 * $uload] [all_outputs]
#**************************************************************
# ideal network
#**************************************************************
#set_dont_touch_network [all_clocks]
#set_dont_touch_network [get_ports {rst_n}]
想问下,我没有对时钟 clk_800M和rst_n进行 set_dont-touch_network的设置,即是说会对 clk_800M和rst_n这两条 high-fanout net进行优化,但是结果只对 rst_n进行了优化,没有对时钟进行优化:
Warning: Design 'test' contains 1 high-fanout nets. A fanout number of 1000 will be used for delay calculations involving these nets. (TIM-134)
Net 'clk_800M': 1024 load(s), 1 driver(s)
1
这是为什么呢?
#*************************************************************
# create Clock
#**************************************************************
create_clock -name {clk_800M} -period 1.2500 -waveform { 0.000 0.6250 } [get_ports {clk_800M}]
set_clock_uncertainty 0.850 [get_clocks {clk_800M}]
#**************************************************************
# input pins
#**************************************************************
set_input_delay 0.500 -clock {clk_800M} [get_ports {clk_800M}]
#**************************************************************
# output pins
#**************************************************************
set_output_delay 0.5 -clock {clk_800M} [get_ports {clk_800M}]
#**************************************************************
# fanout/load
#**************************************************************
set_max_fanout 4 [all_inputs]
set_load [expr 32 * $uload] [all_outputs]
#**************************************************************
# ideal network
#**************************************************************
#set_dont_touch_network [all_clocks]
#set_dont_touch_network [get_ports {rst_n}]
想问下,我没有对时钟 clk_800M和rst_n进行 set_dont-touch_network的设置,即是说会对 clk_800M和rst_n这两条 high-fanout net进行优化,但是结果只对 rst_n进行了优化,没有对时钟进行优化:
Warning: Design 'test' contains 1 high-fanout nets. A fanout number of 1000 will be used for delay calculations involving these nets. (TIM-134)
Net 'clk_800M': 1024 load(s), 1 driver(s)
1
这是为什么呢?
我知道了刚看到一本手册上是这样写的:
Set_ideal_net (已经被set_ideal_network -no_propagate代替) 忽略port,pin,net上的时序优化(timing optimization),以及drc修正(drc fixxing)。network具有传输型。
Set_dont_touch (已经被set_dont_touch_network -no_propagate代替)忽略,port,cell,design,pin上的优化(timing optimization),但是不会忽略DRC。network具有传输型
这样我们在综合的时候就要对high fanout net做一定的约束,让dc不对这些net做优化以及加入buffer。下面分三种情况来说明。
1.Clock,对于clock,当我们用create_clock,or creat_generated_clock创建clock的时候,这些clock已经有了ideal_network的属性。Dc已经不会在clock tree上加入buffer,同时也不会计算drc violation,但是delay timing 仍然会被计算。不计算drc不是说没有负载。
2.Reset,对于复位高扇出信号,因为没有那些属性,所以要手动设置,set_ideal_network。
自己顶一个