EDABOSS电子论坛

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 779|回复: 4

[转帖] 掌握了这技巧,时序分析题再也不用求人了~

[复制链接]

26

主题

0

回帖

137

E币

技术员

Rank: 2

积分
52
发表于 2020-4-5 22:00:48 | 显示全部楼层 |阅读模式
在数字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.那么该电路正常工作的最高频率为多少?
v2-e39488d555d95cb2a55cc0dca9c63385_720w.jpg

STEP1 Verilog Coding
  1. module test(  output reg out ,  inout clk );   
  2.   wire clk_inv ;  
  3.   assign clk_inv = ~clk ;  
  4.   always@(posedge clk_inv )begin   
  5.     out <= ~out;
  6. end
  7. endmodule
复制代码


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

v2-da3297c0787d0322ae99fb5ee70db499_720w.jpg

重新编码

  1. module test_inv(  input clk ,  output reg out);
  2. wire clk_inv ;
  3. not  inv_ins1 (clk_inv,clk) ;
  4. wire out_inv ;
  5. not  inv_ins2 (out_inv,out) ;
  6. always@(posedgeclk_inv) begin  
  7.   out <= out_inv;
  8. end
  9. endmodule
复制代码


设置
  1. set_dont_touch [get_nets *] true
复制代码


STEP2 Compile

工具终于综合出了我们想要的电路结构
v2-db43dd45a7cb592c48e7bf0c1f535754_720w.jpg

STEP3 定义延时

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



自定义cell延时:
  1. set_annotated_delay  6 -cell -from  out_reg/CK  -to out_reg/Q   //dff CK->Q
  2. set_annotated_delay  2 -cell  -from  U5/A -to U5/Y     //  inv_1
  3. set_annotated_delay  2 -cell  -from  U6/A -to U6/Y     // inv_1
复制代码


自定义触发器setup/hold检查要求:
  1. set_annotated_check  -setup -hold  2  -from out_reg/CK -to out_reg/D  //dff  setup/hold
复制代码


STEP4 施加约束
  1. create_clock  -name clk -period  10 [get_ports clk]
  2. set_output_delay  0   [get_portsout] -clock clk
复制代码


check_timing:
  1. dc_shell>check_timing
  2. Information:Updating design information... (UID-85)
  3. Information:Checking generated_clocks...
  4. Information:Checking loops...
  5. Information:Checking no_input_delay...
  6. Information:Checking unconstrained_endpoints...
  7. Information:Checking pulse_clock_cell_type...
  8. Information:Checking no_driving_cell...
  9. Information:Checking partial_input_delay...
  10. 1
复制代码


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

STEP5 report_timing -max_paths 2

Path1:
  1. Startpoint:out_reg (rising edge-triggered flip-flop clocked by clk')  
  2. Endpoint: out (output port clocked by clk)  
  3. Path Group: clk  
  4. Path Type: max  
  5. Point                                    Incr       Path -----------------------------------------------------------  
  6. clock clk' (rise edge)                   5.00       5.00  
  7. clock network delay (ideal)              0.00       5.00  
  8. out_reg/CK (DFFQXL)                      0.00       5.00 r  
  9. out_reg/Q (DFFQXL)                       6.00 *    11.00 r  
  10. out (out)                                0.00      11.00 r  
  11. data arrival time                                  11.00  

  12. clock clk (rise edge)                   10.00      10.00  
  13. clock network delay (ideal)              0.00      10.00  
  14. output external delay                    0.00      10.00  
  15. data required time                                 10.00
  16. -----------------------------------------------------------  
  17. data required time                                 10.00
  18. data arrival time                                 -11.00
  19. -----------------------------------------------------------  
  20. slack (VIOLATED)                                   -1.00
复制代码


v2-e90651a9777a94629a2b6d75b054f323_720w.jpg

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

v2-18fc6c9d8b35df9e28a9c0ee1e153d4e_720w.jpg

v2-56a4d37e8f247979a1372b6e8d356338_720w.jpg

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

set_output_delay 0 [get_ports out] -clock clk -clock_fall

  1. Startpoint:out_reg (rising edge-triggered flip-flop clocked by clk')  
  2. Endpoint: out (output port clocked by clk)  
  3. Path Group: clk  
  4. Path Type: max   
  5. Point                                    Incr       Path  
  6. -----------------------------------------------------------  
  7. clock clk' (rise edge)                   5.00       5.00  
  8. clock network delay (ideal)              0.00       5.00  
  9. out_reg/CK (DFFQXL)                      0.00       5.00 r  
  10. out_reg/Q (DFFQXL)                       6.00 *    11.00 r  
  11. out (out)                                0.00      11.00 r  
  12. data arrival time                                  11.00  
  13. clock clk (fall edge)                   15.00      15.00  
  14. clock network delay (ideal)              0.00      15.00  
  15. output external delay                    0.00      15.00  
  16. data required time                                 15.00
  17. -----------------------------------------------------------  
  18. data required time                                 15.00  
  19. data arrival time                                 -11.00
  20. -----------------------------------------------------------  
  21. slack (MET)                                         4.00
复制代码


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

Path2 :

  1. Startpoint:out_reg (rising edge-triggered flip-flop clocked by clk')  
  2. Endpoint: out_reg (rising edge-triggeredflip-flop clocked by clk')  
  3. Path Group: clk  
  4. Path Type: max   
  5. Point                                    Incr       Path
  6. -----------------------------------------------------------  
  7. clock clk' (rise edge)                   5.00       5.00  
  8. clock network delay (ideal)              0.00       5.00  
  9. out_reg/CK (DFFQXL)                      0.00       5.00 r  
  10. out_reg/Q (DFFQXL)                       6.00 *    11.00 f  
  11. U6/Y (CLKINVX1)                          2.00 *    13.00 r  
  12. out_reg/D (DFFQXL)                       0.00      13.00 r  
  13. data arrival time                                  13.00   

  14. clock clk' (rise edge)                  15.00      15.00  
  15. clock network delay (ideal)              0.00      15.00  
  16. out_reg/CK (DFFQXL)                      0.00      15.00 r  
  17. library setup time                      -2.00 *    13.00  
  18. data required time                                 13.00
  19. -----------------------------------------------------------  
  20. data required time                                 13.00  
  21. data arrival time                                 -13.00  
  22. -----------------------------------------------------------  
  23. slack (MET)                                         0.00
复制代码


v2-dbab6732f32a32d517b2be38c00e7566_720w.jpg

v2-1120733a4876e198e0c79980b51f540c_720w.jpg
积分规则
回复

使用道具 举报

0

主题

14

回帖

407

E币

技术员

Rank: 2

积分
15
发表于 2020-8-7 23:38:46 | 显示全部楼层
6+2+2(tcq+tdata+tsetup)
回复 支持 反对

使用道具 举报

0

主题

3

回帖

101

E币

技术员

Rank: 2

积分
5
发表于 2020-8-8 12:25:47 | 显示全部楼层
ys0290 发表于 2020-8-7 23:38
6+2+2(tcq+tdata+tsetup)

分几种情况的吧。
比如REG2REG,INPUT2REG,等等。。。
回复 支持 反对

使用道具 举报

1

主题

21

回帖

320

E币

技术员

Rank: 2

积分
27
发表于 2020-8-12 14:29:28 | 显示全部楼层
thanks very usefull
回复 支持 反对

使用道具 举报

0

主题

2

回帖

4

E币

技术员

Rank: 2

积分
2
发表于 2020-9-3 22:21:08 | 显示全部楼层

thanks very usefull
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|EDABOSS电子论坛

GMT+8, 2024-4-20 02:13 , Processed in 0.048044 second(s), 23 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表