| |
上图是一个典型的门控时钟电路。但是这种门控时钟无法避免的要受到gate的影响,容易产生毛刺,除非你严格限制gate的输入。
一般常用的门控时钟是下面这种形式
为了得到稳定的gclk高电平,我们使用clk的低电平来锁存gate的值,如果gate是低电平,那么gclk保持低电平,如果gate为高电平,锁存后,gate_out为高电平,与clk运算后,可以得到稳定的gclk高电平。
考虑上图中的各种延迟,分析门控时钟的建立时间检查和保持时间检查。
对于门控单元建立时间的检查路径:
门控的建立时间检查的路径中,因为clk_latch为低电平,所以理想化的可以认为,gate直接传输到gate_out,但是实际要考虑点点延迟。可以简化成图一
考虑到延迟的时序图:
由时序图可以知道gate的上升沿或者下降沿到clk_and的时间应该长些比较好。
对于门控单元保持时间的检查路径:
考虑到延迟的保持时间检查:
由上图可以知道clk_latch的延迟如果比clk_and延迟大点,那么电路会更稳定些。
门控时钟综合:
综合工具内置时钟故障分析,但是有时候会产生不正确的分析。虽然如此,由于优化算法比较强大,仍然可以得到理想的结果。
1. 首先要开启时钟故障分析
set_clock_gating_check –setup $setup_time -hold $hold_time
$setup_time 和$hold_time如上图的时序图所示
2. 建立时间分析
如上图所示,综合工具会认出门控时钟里的锁存器,同时标识这条路径为锁存路径,分析的时候会将这条路径分为2部分。
第一条, 上级输出到锁存器的输入端d
第二条, 锁存器输出端q到门控逻辑的输入单
综合工具会实现分析第一条路径,因为这个锁存器的缘故。所以会发生前级向锁存器borrow time的情况,出现这种情况的时候,即使第一条路径满足时序,可能的violations还是会产生在第二条path上。
这里介绍下latch-base设计中的borrow time
上图是基于latch的设计,黑色时钟线代表没有borrow time的时序图,
粉红和红色部分代表borrow time。
对于latch2进行建立关系检查。由于logic的8.9ns的延迟,latch1输出至少要经过8.9ns的时间才能到达latch2。但是根据时序图可以知道clk1,和clk2的关系,当latch2 capture 数据的时候,latch1的数据还没有到。这样就会产生逻辑故障。
为了修正这个逻辑故障,综合工具会borrow time,以满足建立时间关系,如上图中的红色和粉红色部分。综合工具会使clk1的低电平持续的时间够长,那么就要使clk2的低电平够端,只要满足setup relation就可以。
如果latch2还有下级,那么我们可以知道,由于上级的borrow time,下级有可能会产生一些time violations。
这个时候我们就要用set_max_time_borrow 限制综合工具借入更多的时序,为了满足setup relation,综合工具会最大优化logic部分。
如果将上图放入到门控电路中,如下:
结合borrow time的时序图,我们分析下门控时钟里面可以设置的最大borrow time:
上图是borrow time之后时序图,由时序图我们可以知道:
必须满足的时序关系:
T2-T1>Tcq_latch+Tcell_delay+clock_uncertainty
如下图红色路径所示
所以borrowTime<Tphase – Tcq_latch –Tcell_delay –Tuncertainty
其中Tphase为clk的低电平时间
如果综合过程中gclk上insert buffer或者insert delay,这些延迟也要考虑进去,以及后端过程中可能引入的buffer delay。