ASIC设计学习总结之静态时序分析概要及书籍推荐
本文为EETOP网友:tfpwl_lj 的《ASIC设计学习》 系列博客之一
博客地址:http://www.eetop.cn/blog/1638430
一、静态时序分析
一般的电路仿真激励没办法触发所有的时序路径;真实的门级电路单元、金属互联线是有延迟和转换时间的。基于以上两种原因,为了更真实的把握电路运行的时序细节,以避免因时序问题而导致的电路功能出错,IC设计工程师就不得不对综合前后、版图布局中的电路进行静态时序分析。在前文讲到综合的时候,故意忽略了对静态时序分析的介绍,主要是为了能集中的对静态时序分析的问题进行介绍。本章节将依次介绍静态时序分析的目的,时序约束、修正时序违例的办法。
1.1 建立时间和保持时间、四条时序路径
对电路进行静态时序分析,主要目的是为了保证电路中四条路径的建立时间和保持时间能够被约束在合适的范围类。这里提到了两个概念,什么是电路中的四条时序路径?什么是建立时间和保持时间?
建立时间(Tsu:set up time)
是指在触发器的时钟信号上升沿到来以前,数据稳定不变的时间,如果建立时间不够,数据将不能在这个时钟上升沿被稳定的打入触发器,Tsu就是指这个最小的稳定时间。
保持时间(Th:hold time)
是指在触发器的时钟信号上升沿到来以后,数据稳定不变的时间,如果保持时间不够,数据同样不能被稳定的打入触发器,Th就是指这个最小的保持时间。
--详细解释请查看https://www.cnblogs.com/amanlikethis/p/3721968.html
https://www.cnblogs.com/IClearner/p/7306335.html
电路的四条时序路径分别是指从
1,信号从电路的输入端到寄存器输入端的路径;
2,信号从寄存器输出端到下一个寄存器输入端的路径;
3,信号从寄存器输出端到电路输出端的路径;
4,信号从电路输入端到电路输出端的路径,中间只经过组合逻辑电路。
图片来源于《Prime Time User Guide 2016》
1.2 时序约束
静态时序分析的工作就是添加适当的时序约束条件使得信号在这四条时序路径中传输时能够满足建立时间和保持时间的要求。说到时序约束条件,其实它和综合的约束条件相同程度可达90%以上,如果在综合篇就已经了解了这些命令,那么在使用PT进行静态时序分析时会容易很多。有关DC与PT的关系已经在综合篇略有介绍。相关DC-TCL命令如下所示,
1. 定义输入输出延迟、最大最小扇出
set_input_delay
set_output_delay
set_min_pulse_width
set_max_capacitance
set_min_capacitance
set_max_fanout
set_max_transition
2. 定义时钟约束
create_clock
set_clock_uncertainty
set_clock_latency
set_clock_transition
3,定义时序例外和多时钟周期
set_multicycle_path
set_false_path
set_disable_timing
4,定义操作环境和输入驱动,线载模型
set_operating_conditions
set_driving_cell
set_load
set_wire_load_model
------命令来源于《Prime Time User Guide 2016》
1.3 时序报告
有了这些约束命令,然后又要做什么呢?这个问题是当初笔者很困惑的,随着后面对静态时序分析更加的了解,这个问题得到了解答。问题的答案就在于静态时序分析的目的。正如前面提到的“静态时序分析的工作就是添加适当的时序约束条件使得信号在这四条路径中传输时能够满足建立时间和保持时间的要求”。满足建立时间与保持时间的要求与否是通过什么来判断呢?那就是时序报告。通过时序报告来判断对电路是否在给定的时序约束条件下满足时序要求。下面的数据是前文综合之后的建立时间与保持时间的时序报告,当然这个报告只是给出了基于时钟Clock路径的时序报告,如果想要得到四条路径或者其他路径的时序报告,则需要在TCL脚本中添加对应的命令。
建立时间的时序报告:
****************************************
Report : timing
-path full
-delay max
-max_paths 1
Design : UART_XMTR
Version: K-2015.06
Date : Sun Mar 4 19:32:58 2018
****************************************
Operating Conditions: tt_1v8_25c Library: tt_1v8_25c
Wire Load Model Mode: enclosed
Startpoint: Byte_ready (input port clocked by Clock)
Endpoint: M1/XMT_shftreg_reg[1]
(rising edge-triggered flip-flop clocked by Clock)
Path Group: Clock
Path Type: max
Des/Clust/Port Wire Load Model Library
------------------------------------------------
UART_XMTR smic18_wl30 tt_1v8_25c
Point Incr Path
-----------------------------------------------------------
clock Clock (rise edge) 0.00 0.00
clock network delay (ideal) 15.00 15.00
input external delay 10.00 25.00 r
Byte_ready (in) 0.01 25.01 r
M0/Byte_ready (Control_Unit) 0.00 25.01 r
M0/U11/Y (INVX2M) 0.14 25.15 f
M0/U10/Y (NOR3X2M) 0.94 26.10 r
M0/Load_XMT_shftreg (Control_Unit) 0.00 26.10 r
M1/Load_XMT_shftreg (Datapath_Unit) 0.00 26.10 r
M1/U36/Y (NOR2X1M) 0.51 26.61 f
M1/U12/Y (INVX2M) 1.11 27.72 r
M1/U33/Y (CLKNAND2X2M) 1.30 29.01 f
M1/U31/Y (OAI222X1M) 0.66 29.68 r
M1/XMT_shftreg_reg[1]/D (DFFSX1M) 0.00 29.68 r
data arrival time 29.68
clock Clock (rise edge) 10000.00 10000.00
clock network delay (ideal) 15.00 10015.00
clock uncertainty -5.00 10010.00
M1/XMT_shftreg_reg[1]/CK (DFFSX1M) 0.00 10010.00 r
library setup time -0.06 10009.94
data required time 10009.94
-----------------------------------------------------------
data required time 10009.94
data arrival time -29.68
-----------------------------------------------------------
slack (MET) 9980.26
保持时间的时序报告:
****************************************
Report : timing
-path full
-delay min
-max_paths 1
Design : UART_XMTR
Version: K-2015.06
Date : Sun Mar 4 19:32:58 2018
****************************************
Operating Conditions: tt_1v8_25c Library: tt_1v8_25c
Wire Load Model Mode: enclosed
Startpoint: M1/bit_count_reg[3]
(rising edge-triggered flip-flop clocked by Clock)
Endpoint: M1/bit_count_reg[3]
(rising edge-triggered flip-flop clocked by Clock)
Path Group: Clock
Path Type: min
Des/Clust/Port Wire Load Model Library
------------------------------------------------
UART_XMTR smic18_wl30 tt_1v8_25c
Point Incr Path
-----------------------------------------------------------
clock Clock (rise edge) 0.00 0.00
clock network delay (ideal) 15.00 15.00
M1/bit_count_reg[3]/CK (DFFRX2M) 0.00 15.00 r
M1/bit_count_reg[3]/QN (DFFRX2M) 0.51 15.51 r
M1/U40/Y (OAI32X1M) 0.29 15.80 f
M1/bit_count_reg[3]/D (DFFRX2M) 0.00 15.80 f
data arrival time 15.80
clock Clock (rise edge) 0.00 0.00
clock network delay (ideal) 15.00 15.00
clock uncertainty 4.00 19.00
M1/bit_count_reg[3]/CK (DFFRX2M) 0.00 19.00 r
library hold time 0.11 19.11
data required time 19.11
-----------------------------------------------------------
data required time 19.11
data arrival time -15.80
-----------------------------------------------------------
slack (VIOLATED) -3.31
判断时序是否满足要求,只需要看slack(裕量)这个参数右边的值,如果是正数则表示满足时序,如果是负数则表示不满足时序。Point下面的是路径节点,Incr下面的是经过该节点需要的时间,Path下面的是路径延迟的逐步累加,r=rise 上升沿,f=fall下降沿。
1.4 时序违例修正
一般来说,建立时间违例比较难以修正,保持时间违例会比较容易修复。
1,当保持时间违例的时候,可以通过增加buffer的形式来修正,当然修正之后要检查建立时间是否违例。上述保持时间违例(slack -3.31)可采用这种办法。
2,延长时钟周期,在性能指标约束内,消除时序违例。
3,调整关键路径,减少线网延时;例如,通过插入寄存器的方式将两个寄存间大的组合逻辑分割为小的组合逻辑,修正建立时间违例。
4,调整器件尺寸或更换器件,减小器件延时,改善建立和保持时间裕度;
5,重新设计时钟树,减少时钟偏移。
6,更换算法,减少通路延时(如用超前进位代替行波进位)
7,更改系统结构,减小通路延时(如流水操作)。
8,改变工艺,减小器件及通路延时。
9,判断违例路径是否是虚假路径,如果是,则屏蔽掉该路径。
所谓虚假路径是指信号的各种传输方式中绝对不会经过的路径。通过命令设置虚假路径可以排除一些不能算做是违例的时序路径。
以上的时序违例修正方法,这里只是简单的进行罗列,具体到如何操作,则需要结合具体的项目进行。以上每一种方法都有其对应的代价,代价最高的是改变工艺和延长时钟周期(个人认为)。一般来说,除非工艺实在是不能满足要求,否则绝不会轻易变更工艺。时钟周期如果在约束时没有留裕量,那么,基本无法更改。频率是IC芯片的一条硬性指标,除非对IC芯片的频率要求不高,那么此条修改建议才会被采纳。其余的修正违例的方式相对来说要容易得多,但6,7条修改起来仍然是比较麻烦的。
二、推荐书籍
《Verilog HDL高级数字设计》
《集成电路静态时序分析与建模》
《Prime Time User Guide 2016》
三、工具:
静态时序分析的主要工具是Prime Time,当然Encounter Timing System(cadence公司出品)也是。《集成电路静态时序分析与建模》这本书中例子就是以Encounter Timing System作为工具的。