primetime和design vision 里的时序分析
而且两者使用的时序分析命令都差不多。
这个问题问得好,那就的搞清楚DC/PT的差异在哪儿就可以啦。
哪些是DC/PT都能做的;哪些是DC能PT不能的;哪些是DC不能PT能作的。
PT是标准SIGNOFF工具,精度准确,而且读入的RC文件也是SIGNOFF的,基于以上,DC只能是看看而已。不过大多数情况下如果DC下面TIMING MARGIN很大,PT一般不会有问题。
请问下,在时序分析方面DC和pt有什么区别呢?有相关资料吗?
个人感觉应该pt更强大吧。pt还可以版图做完后,提取参数计算时序,
DC应该不可以吧。
请解释下signoff,谢谢!signoff中包含了些什么?
signoff就是验收,PT是做时序验收的。CALIBRE是做物理验收
PT更精准,算法和模型不同。
spice有很多级模型。懂了吗?
大概理解了。我想看一下foundry提供的库文件里某个单元(比如说一个D触发器)
的延时信息,在DC里面有没有什么办法可以看到。
另外有一次我在做实验的时候,发现同样的一个D触发器,setup time 居然不一样,
求解释,谢谢!
这个东西看*.lib才是正道.不懂的再查DC 的user guide.
怎么看呀?用report_lib这条语句,也看不到单元的信息呀。
谢谢分享
2楼说得对
这就是一个工具的某一个功能,和一个专用工具的差别
小编好问题啊,我新手现身说法一下,也请有经验的大神帮我看看哪里写错了:)
module fixmultiply(product,a,b,clk);
output [32:1] product;
input [32:1] a,b;
input clk;
wire clk;
reg [32:1] product;
reg [32:1] aa,bb;
reg sign;
reg [62:1] cc;
reg [64:1] ccc,y_out;
always @(posedge clk)
begin
aa<=(a[32]==0)?a:{a[32],~a[31:1]+1'b1}; //?
bb<=(b[32]==0)?b:{b[32],~b[31:1]+1'b1}; //?
sign <= aa[32] ^ bb[32]; //64 bit
cc <= aa[31:1]*bb[31:1]; //62 bit positive data;
ccc <= {sign,1'b1,cc};
y_out <= (ccc[64]==0)?ccc:{ccc[64],~ccc[63:1]+1'b1};
product<=y_out[48:17];
end
endmodule
以上就是我的verilog代码,就是一个流水线的某类乘法器。
以下是得到的sdc文件
###################################################################
# Created by write_sdc on Tue Mar 19 18:45:49 2013
###################################################################
set sdc_version 1.8
set_units -time ns -resistance kOhm -capacitance pF -voltage V -current mA
set_max_dynamic_power 0
set_max_leakage_power 0
set_max_area 0
create_clock [get_ports clk] -period 5 -waveform {0 2.5}
set_clock_transition -rise 0 [get_clocks clk]
set_clock_transition -fall 0 [get_clocks clk]
set_clock_uncertainty -from clk -to clk 0
以下是DC得到的report timing的文件,显示clk为5ns时,slack>0 满足要求。
Information: Updating graph... (UID-83)
Information: Updating design information... (UID-85)
****************************************
Report : timing
-path full
-delay max
-max_paths 1
Design : fixmultiply
Version: D-2010.03-SP2
Date : Tue Mar 19 18:45:52 2013
****************************************
Operating Conditions: tt_1p2v_25c Library: scx3_cmos9sf_rvt_tt_1p2v_25c
Wire Load Model Mode: top
Startpoint: aa_reg[3] (rising edge-triggered flip-flop clocked by clk)
Endpoint: cc_reg[48] (rising edge-triggered flip-flop clocked by clk)
Path Group: clk
Path Type: max
Point Incr Path
--------------------------------------------------------------------------
clock clk (rise edge) 0.00 0.00
clock network delay (ideal) 0.00 0.00
aa_reg[3]/CK (DFFQX2VH) 0.00 0.00 r
aa_reg[3]/Q (DFFQX2VH) 0.14 0.14 f
mult_17/a[2] (fixmultiply_DW_mult_uns_1) 0.00 0.14 f
mult_17/U3496/Y (CLKINVX2VH) 0.04 0.18 r
mult_17/U2162/Y (CLKINVX2VH) 0.17 0.35 f
mult_17/U3482/Y (XNOR2X2VH) 0.11 0.46 f
mult_17/U2605/Y (NAND2BX1VH) 0.32 0.78 f
mult_17/U2615/Y (OAI21X1VH) 0.11 0.89 r
mult_17/U2060/Y (XNOR2X2VH) 0.06 0.95 r
mult_17/U2614/CO (ADDHXLVH) 0.06 1.01 r
mult_17/U2387/CO (ADDHXLVH) 0.05 1.06 r
mult_17/U2575/CO (ADDHXLVH) 0.05 1.11 r
mult_17/U2167/S (ADDFX2VH) 0.11 1.22 f
mult_17/U2398/Y (OR2X2VH) 0.07 1.29 f
mult_17/U2074/Y (AOI22XLVH) 0.08 1.37 r
mult_17/U2148/Y (OAI21X1VH) 0.06 1.43 f
mult_17/U2067/Y (AOI22XLVH) 0.08 1.51 r
mult_17/U2145/Y (OAI21X1VH) 0.05 1.56 f
mult_17/U2188/Y (AOI21XLVH) 0.09 1.65 r
mult_17/U2140/Y (OAI21X1VH) 0.05 1.71 f
mult_17/U2190/Y (AOI21XLVH) 0.09 1.79 r
mult_17/U2141/Y (OAI21X1VH) 0.05 1.85 f
mult_17/U2192/Y (AOI21XLVH) 0.09 1.93 r
mult_17/U2142/Y (OAI21X1VH) 0.05 1.99 f
mult_17/U2194/Y (AOI21XLVH) 0.09 2.08 r
mult_17/U2149/Y (OAI21X1VH) 0.05 2.13 f
mult_17/U2240/Y (AOI21XLVH) 0.09 2.22 r
mult_17/U2150/Y (OAI21X1VH) 0.05 2.27 f
mult_17/U2196/Y (AOI21XLVH) 0.09 2.36 r
mult_17/U2151/Y (OAI21X1VH) 0.05 2.41 f
mult_17/U2242/Y (AOI21XLVH) 0.09 2.50 r
mult_17/U2143/Y (OAI21X1VH) 0.05 2.55 f
mult_17/U2198/Y (AOI21XLVH) 0.09 2.64 r
mult_17/U2144/Y (OAI21X1VH) 0.05 2.69 f
mult_17/U2200/Y (AOI21XLVH) 0.11 2.80 r
mult_17/U2108/Y (OAI21X1VH) 0.06 2.87 f
mult_17/U2146/Y (AOI21XLVH) 0.07 2.93 r
mult_17/U2204/Y (OAI21X1VH) 0.05 2.98 f
mult_17/U2153/Y (OAI2BB1X2VH) 0.07 3.05 f
mult_17/U202/CO (ADDFX2VH) 0.11 3.16 f
mult_17/U2154/CO (ADDFX2VH) 0.11 3.27 f
mult_17/U200/CO (ADDFX2VH) 0.11 3.38 f
mult_17/U2155/CO (ADDFX2VH) 0.11 3.49 f
mult_17/U198/CO (ADDFX2VH) 0.11 3.60 f
mult_17/U2156/CO (ADDFX2VH) 0.11 3.71 f
mult_17/U196/CO (ADDFX2VH) 0.11 3.83 f
mult_17/U2159/CO (ADDFX2VH) 0.11 3.94 f
mult_17/U194/CO (ADDFX2VH) 0.11 4.05 f
mult_17/U193/CO (ADDFX2VH) 0.11 4.16 f
mult_17/U2157/CO (ADDFX2VH) 0.11 4.27 f
mult_17/U191/CO (ADDFX2VH) 0.11 4.39 f
mult_17/U2158/CO (ADDFX2VH) 0.11 4.50 f
mult_17/U189/CO (ADDFX2VH) 0.11 4.61 f
mult_17/U2161/CO (ADDFX2VH) 0.11 4.72 f
mult_17/U187/CO (ADDFX2VH) 0.11 4.83 f
mult_17/U2180/Y (XNOR2X2VH) 0.05 4.88 f
mult_17/product[47] (fixmultiply_DW_mult_uns_1) 0.00 4.88 f
cc_reg[48]/D (DFFRQX2VH) 0.00 4.88 f
data arrival time 4.88
clock clk (rise edge) 5.00 5.00
clock network delay (ideal) 0.00 5.00
cc_reg[48]/CK (DFFRQX2VH) 0.00 5.00 r
library setup time -0.07 4.93
data required time 4.93
--------------------------------------------------------------------------
data required time 4.93
data arrival time -4.88
--------------------------------------------------------------------------
slack (MET) 0.05
以下是我用PT跑出来的时序分析结果,slack<0很多,说明不满足,非常郁闷,不知是谁算错了。
****************************************
Report : timing
-path_type full
-delay_type max
-max_paths 3
Design : fixmultiply
Version: D-2009.12
Date : Thu Mar 21 17:33:07 2013
****************************************
Startpoint: product_reg[1]
(rising edge-triggered flip-flop clocked by clk)
Endpoint: product[1] (output port clocked by clk)
Path Group: clk
Path Type: max
Point Incr Path
---------------------------------------------------------------
clock clk (rise edge) 0.00 0.00
clock network delay (ideal) 0.00 0.00
product_reg[1]/CK (DFFRQX2VH) 0.00 0.00 r
product_reg[1]/Q (DFFRQX2VH) 7.90 7.90 r
product[1] (out) 0.00 7.90 r
data arrival time 7.90
clock clk (rise edge) 5.00 5.00
clock network delay (ideal) 0.00 5.00
output external delay -1.00 4.00
data required time 4.00
---------------------------------------------------------------
data required time 4.00
data arrival time -7.90
---------------------------------------------------------------
slack (VIOLATED) -3.90
Startpoint: product_reg[2]
(rising edge-triggered flip-flop clocked by clk)
Endpoint: product[2] (output port clocked by clk)
Path Group: clk
Path Type: max
Point Incr Path
---------------------------------------------------------------
clock clk (rise edge) 0.00 0.00
clock network delay (ideal) 0.00 0.00
product_reg[2]/CK (DFFRQX2VH) 0.00 0.00 r
product_reg[2]/Q (DFFRQX2VH) 7.90 7.90 r
product[2] (out) 0.00 7.90 r
data arrival time 7.90
clock clk (rise edge) 5.00 5.00
clock network delay (ideal) 0.00 5.00
output external delay -1.00 4.00
data required time 4.00
---------------------------------------------------------------
data required time 4.00
data arrival time -7.90
---------------------------------------------------------------
slack (VIOLATED) -3.90
Startpoint: product_reg[3]
(rising edge-triggered flip-flop clocked by clk)
Endpoint: product[3] (output port clocked by clk)
Path Group: clk
Path Type: max
Point Incr Path
---------------------------------------------------------------
clock clk (rise edge) 0.00 0.00
clock network delay (ideal) 0.00 0.00
product_reg[3]/CK (DFFRQX2VH) 0.00 0.00 r
product_reg[3]/Q (DFFRQX2VH) 7.90 7.90 r
product[3] (out) 0.00 7.90 r
data arrival time 7.90
clock clk (rise edge) 5.00 5.00
clock network delay (ideal) 0.00 5.00
output external delay -1.00 4.00
data required time 4.00
---------------------------------------------------------------
data required time 4.00
data arrival time -7.90
---------------------------------------------------------------
slack (VIOLATED) -3.90
1
做DC综合时, 我用的TCL脚本如下:
set bus_naming_style {%s[%d]}
set hdlin_ff_always_sync_set_reset "true"
set hdlin_latch_always_async_set_reset "true"
set compile_preserve_sync_resets "true"
set change_names_dont_change_bus_members "true"
#read_file -format verilog {./svm/AddrGen.v}
read_file -format verilog {./svm/FixMultiply.v}
#current_design AddressGenerator
current_design fixmultiply
link
list_design
uniquify
check_design -multiple_designs
#set_flatten -design [find design "*"] false
#set_structure -design [find design "*"] false
#/*set_load 5 * (load_of (SClib+ind/inv0d4/i)) all_outputs()*/
#set_max_transition 2 ldocon_iet
#set_max_transition 2 [all_outputs]
#set_max_fanout 1 [all_inputs]
#set_max_fanout 1 ldocon_iet
set_max_area 0
set_max_leakage_power 0
set_max_dynamic_power 0
#set_dont_touch_network [find port "rst_n"]
#create_clock [get_ports clk] -period 5 -waveform {0.5 1}
create_clock -name clk -period 5 [get_port clk]
set_dont_touch_network [find port "clk"]
set_clock_transition 0 [find clock "clk"]
set_clock_uncertainty 0 -from "clk" -to "clk"
#create_clock [get_ports CLKGVCO] -period 25 -waveform {0.5 1}
#set_dont_touch_network [find port "CLKGVCO"]
#set_false_path -from [get_clocks "CLKGVCO"] -to [get_clocks "CLKREF"]
#set_false_path -from [get_clocks "CLKREF"] -to [get_clocks "CLKGVCO"]
set_fix_multiple_port_nets -all -buffer_constants
set_structure true -boolean true -timing false -boolean_effort high -design [find design *]
compile -map_effort high
write -f ddc -hier -out ./gate/FixMul.ddc
write_sdc ./gate/FixMul.sdc
write_sdf ./gate/FixMul.sdf
write_parasitics -output ./gate/FixMul.spf
write -f verilog -hier -out ./gate/FixMul.gate.v
#ungroup -flatten -all
report_timing > ./result/FixMul.timing
report_power > ./result/FixMul.power
report_area > ./result/FixMul.area
report -reference -area > ./result/FixMul.ref
#quit
做PT静态时序分析时,我用的TCL如下,应高手们看看我哪里设置错了。
set search_path ". ~/ASIC/aci/sc-x/synopsys"
set link_library "* scx3_cmos9sf_rvt_tt_1p2v_25c.db"
set target_library "scx3_cmos9sf_rvt_tt_1p2v_25c.db"
read_verilog ./gate/FixMul.gate.v
current_design fixmultiply
link_design fixmultiply
set_load 3 [all_output]
set_drive 0.0335 [all_inputs]
create_clock -period 5 -waveform {0.00000 2.5000000} {clk}
#create_clock -name clk -period 5 [get_port clk]
check_timing
set_input_delay -clock clk -max 0.5 [get_ports {a[32] a[31] a[30] a[29] a[28] a[27] a[26] a[25] a[24] a[23] a[22] a[21] a[20] a[19] a[18] a[17] a[16] a[15] a[14] a[13] a[12] a[11] a[10] a[9] a[8] a[7] a[6] a[5] a[4] a[3] a[2] a[1] b[32] b[31] b[30] b[29] b[28] b[27] b[26] b[25] b[24] b[23] b[22] b[21] b[20] b[19] b[18] b[17] b[16] b[15] b[14] b[13] b[12] b[11] b[10] b[9] b[8] b[7] b[6] b[5] b[4] b[3] b[2] b[1]}]
set_input_delay -clock clk -min 0 [get_ports {a[32] a[31] a[30] a[29] a[28] a[27] a[26] a[25] a[24] a[23] a[22] a[21] a[20] a[19] a[18] a[17] a[16] a[15] a[14] a[13] a[12] a[11] a[10] a[9] a[8] a[7] a[6] a[5] a[4] a[3] a[2] a[1] b[32] b[31] b[30] b[29] b[28] b[27] b[26] b[25] b[24] b[23] b[22] b[21] b[20] b[19] b[18] b[17] b[16] b[15] b[14] b[13] b[12] b[11] b[10] b[9] b[8] b[7] b[6] b[5] b[4] b[3] b[2] b[1]}]
set_output_delay -clock clk -rise 1.0 [all_outputs]
report_constraint -all_violators -verbose -max_delay > ./PTResults/constraint
report_constraint -all_violators -verbose -min_delay
report_timing -max_paths 3 > ./PTResults/max_paths.txt
report_timing -max_paths 3 -delay min > ./PTResults/min_paths.txt
有可能是你在dc里面没有设置load,在pt里面设置了。
由于你的load值太大了导致输出时间过慢。
多谢大侠指点迷津:)
其实我的tcl文件都是照着网上能找得到的例子或者大学实验手册拼凑起来的,我自己对DC和PT的理解很弱。
请问一般set_driving_cell 和 set_load (我还见过一种set_capacitance 0.5 [all_outputs])一般该如何设置?
您说我的DC里没有设置load,请问这样的DC分析出来的是不是错误不合理的估计呢?
如果是非常高速的设计我就说不好了。
大概参照你模块所处的环境,例如你上一级
驱动的cell,线上的负载,你输出的负载。具体数值
还需要参照代工厂给的文件。
这些值差不多就行了,我喜欢把输出负载设的比
较大。
您好!不知道您的问题后来解决了没有。我也遇到了同样的问题,DC和PT的时序约束是一样的,用的工艺库文件也是一样的,但是PT分析出来的时序报告文件显示的setup违背特别大。望能够分享经验。
signoff
顶一顶
是的,学习一下啊
