dc综合与pt静态时序分析(中文)_掌握了这技巧,时序分析题再也不用求人了~

9cca9c894d8817dfed6fdf6288f99627.png

写此文时,时间临近国庆。中午的阳光还似盛夏,不过气温低了许多。路边插了很多红色的旗帜,超市的折扣让这几天更加喜庆。

在数字IC的相关笔试当中,不可避免会遇到各种时序分析笔试题,

1、求最大工作频率

2、分析设计setup/hold是否违例,违例了该怎样修复?等等

针对这样的问题,我们可以自己编码相应的设计,然后使用工具进行时序分析。这样就再也不用为了简单的时序分析问题去问大佬们了,才能有尊严地做一条咸鱼~~

经过研究,我发现使用set_annotated_delay/set_annotated_check,就足够满足我们的需求,即自定义反标设计中cell/net延时,自定义触发器的setup/hold检查。具体使用可以参考Synopsys工具的manpage或者google

也就是说,我们虽然使用了target_library来综合我们的设计,实际上并不会用到std cell库里面的时序信息。使用set_annotated_delay/set_annotated_check也并不需要了解lib库的格式。

下面以几道时序分析题为例来演示如何使用set_annotated_delay/set_annotated_check命令,让工具替你完成时序分析以验证自己的计算结果。

示例

如下一个分频电路,触发器DIV_FF的建立时间为2ns,保持时间为2ns,逻辑延时为6ns,反相器INV_1,INV_2的逻辑延时为2ns,连线延时为0.那么该电路正常工作的最高频率为多少?

12e1f85c82eed5f42778087a5db781f5.png

STEP1 Verilog Coding

module test(  output reg out ,  inout clk );   
  wire clk_inv ;  
  assign clk_inv = ~clk ;  
  always@(posedge clk_inv )begin    
    out <= ~out; 
 end
 endmodule

然后直接compile,工具并没有综合成我们想要的电路结构。

7e7d79bcb33f58b9cbe0b34ffae375e4.png

重新编码

module test_inv(  input clk ,  output reg out); 
wire clk_inv ;
not  inv_ins1 (clk_inv,clk) ; 
wire out_inv ;
not  inv_ins2 (out_inv,out) ; 
always@(posedgeclk_inv) begin  
  out <= out_inv;
end
endmodule

设置

set_dont_touch [get_nets *] true

STEP2 Compile

工具终于综合出了我们想要的电路结构

fe693595808b1809ed7fb76e5c318c2c.png

STEP3 定义延时

接下来,就需要为上述电路结构自定义我们的cell/net延时,施加约束,才能让工具进行时序分析

自定义cell延时:

set_annotated_delay  6 -cell -from  out_reg/CK  -to out_reg/Q   //dff CK->Q
set_annotated_delay  2 -cell  -from  U5/A -to U5/Y     //  inv_1
set_annotated_delay  2 -cell  -from  U6/A -to U6/Y     // inv_1

自定义触发器setup/hold检查要求:

set_annotated_check  -setup -hold  2  -from out_reg/CK -to out_reg/D  //dff  setup/hold

STEP4 施加约束

create_clock  -name clk -period  10 [get_ports clk]
set_output_delay  0   [get_portsout] -clock clk

check_timing:

dc_shell>check_timing
Information:Updating design information... (UID-85) 
Information:Checking generated_clocks... 
Information:Checking loops... 
Information:Checking no_input_delay... 
Information:Checking unconstrained_endpoints... 
Information:Checking pulse_clock_cell_type... 
Information:Checking no_driving_cell... 
Information:Checking partial_input_delay...
1

所有的路径都被约束上了。

STEP5 report_timing -max_paths 2

Path1:

Startpoint:out_reg (rising edge-triggered flip-flop clocked by clk')  
Endpoint: out (output port clocked by clk)  
Path Group: clk  
Path Type: max  
Point                                    Incr       Path -----------------------------------------------------------  
clock clk' (rise edge)                   5.00       5.00  
clock network delay (ideal)              0.00       5.00  
out_reg/CK (DFFQXL)                      0.00       5.00 r  
out_reg/Q (DFFQXL)                       6.00 *    11.00 r  
out (out)                                0.00      11.00 r  
data arrival time                                  11.00  

clock clk (rise edge)                   10.00      10.00  
clock network delay (ideal)              0.00      10.00  
output external delay                    0.00      10.00  
data required time                                 10.00 
-----------------------------------------------------------  
data required time                                 10.00 
 data arrival time                                 -11.00 
 -----------------------------------------------------------  
 slack (VIOLATED)                                   -1.00 

40e97a744d65d6a20f936f9c04fb29ad.png

我们发现在约束时钟周期为10ns时,存在-1ns的setup 违例,再进一步分析可以发现,违例原因是工具默认在输出out后被一个clk的上升沿触发器采样

32068cd3599c07431f659c13df81cf28.png

89b6113dcf39483b4a94b0f4f4505b4b.png

上述如果需要指定被下降沿采样时,可以使用约束

set_output_delay 0 [get_ports out] -clock clk -clock_fall

Startpoint:out_reg (rising edge-triggered flip-flop clocked by clk')  
Endpoint: out (output port clocked by clk)  
Path Group: clk  
Path Type: max   
Point                                    Incr       Path  
-----------------------------------------------------------  
clock clk' (rise edge)                   5.00       5.00  
clock network delay (ideal)              0.00       5.00  
out_reg/CK (DFFQXL)                      0.00       5.00 r  
out_reg/Q (DFFQXL)                       6.00 *    11.00 r  
out (out)                                0.00      11.00 r  
data arrival time                                  11.00  
clock clk (fall edge)                   15.00      15.00  
clock network delay (ideal)              0.00      15.00  
output external delay                    0.00      15.00  
data required time                                 15.00 
-----------------------------------------------------------  
data required time                                 15.00  
data arrival time                                 -11.00 
-----------------------------------------------------------  
slack (MET)                                         4.00

我们发现时序还有很多余量

Path2 :

Startpoint:out_reg (rising edge-triggered flip-flop clocked by clk')  
Endpoint: out_reg (rising edge-triggeredflip-flop clocked by clk')  
Path Group: clk  
Path Type: max   
Point                                    Incr       Path 
-----------------------------------------------------------  
clock clk' (rise edge)                   5.00       5.00  
clock network delay (ideal)              0.00       5.00  
out_reg/CK (DFFQXL)                      0.00       5.00 r  
out_reg/Q (DFFQXL)                       6.00 *    11.00 f  
U6/Y (CLKINVX1)                          2.00 *    13.00 r  
out_reg/D (DFFQXL)                       0.00      13.00 r  
data arrival time                                  13.00   

clock clk' (rise edge)                  15.00      15.00  
clock network delay (ideal)              0.00      15.00  
out_reg/CK (DFFQXL)                      0.00      15.00 r  
library setup time                      -2.00 *    13.00  
data required time                                 13.00 
-----------------------------------------------------------  
data required time                                 13.00  
data arrival time                                 -13.00  
-----------------------------------------------------------  
slack (MET)                                         0.00

476e2d067161572955bcfc00421fd96f.png

9cce6a1941f2945610ec9e7c166b9bd9.png

setup需要满足:

T/2 +6 +2<= T/2 + T -2

T >=10,也就是说最大频率为100M

hold分析 同理

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值