原创 DC概论七之gated clock(1) - [IC]

2009-6-29 16:38 7735 8 8 分类: 工程师职场




版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明
http://bb2hh.blogbus.com/logs/22268175.html


 注明:如需转载,请注明作者出处,谢谢~,Author:pythonlong
以下根据资料和个人体会整理,如果错误,疑问欢迎请指正,讨论!!

 

上图是一个典型的门控时钟电路。但是这种门控时钟无法避免的要受到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进行建立关系检查。由于logic8.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



其中Tphaseclk的低电平时间



 



如果综合过程中gclkinsert buffer或者insert delay,这些延迟也要考虑进去,以及后端过程中可能引入的buffer delay


看一例:



module gate(clk, gate, din, qout);



 input clk,gate;



 input 
[7:0] din;



 



 output [7:0] qout;



 reg   
[7:0] qout;



 



 wire
gclk;



 



 



//assign gclk = clk & gate;



 



 always@(posedge gclk)



  
qout <= din;



 



 reg
gate_out;



 always@(clk)



 
if(!clk)



   
gate_out <= gate;



 



 assign gclk = clk & gate_out;



 



endmodule



 



DC综合脚本:



set lib $env(DC_LIB)



set target_library "slow.db"



set link_library "*
$target_library"



set search_path ". ../src ../scripts
$lib"



analyze -format verilog gate.v



elaborate gate



uniquify



link



check_design



create_clock -period 100 [get_ports clk]



set input_exp_clk [remove_from_collection
[all_inputs] [get_ports clk]]



set_input_delay 60 -clock [get_clocks clk]
$input_exp_clk



set_output_delay 30 -clock [get_clocks clk]
[all_outputs ]



 



set_clock_gating_check
-setup 3 -hold 0



 



compile

综合结束后,setup时序分析:



1.      
门控逻辑AND2setup分析:



report_timing -delay max -nets -from  gate_out







上图中可以看到到达时间是从clk的下降沿计算的,



以及要求时间是从上升沿开始,同事考虑到clock_gating_check中的setup设置



1.      
setupborrow time 分析



report_timing -delay max -nets -to
gate_out_reg/D





dc综合脚本的设置,以及上图report



到达时间是60,由于clk脉冲宽度是50,为了保证输入端建立时间满足,需要向ednpoint borrow  time,上图中可以看出,time borrowed from endpoint10,使要求时间变成60,从而slack0,满足时序要求。



 



现在综合脚本中加入



set_max_time_borrow  7 [get_clock clk]



从新查看setup borrow time分析:



report_timing -delay max -nets -to
gate_out_reg/D





后续还有gated clock 方法论(1),(2),过段时间再贴上来.
PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
8
关闭 站长推荐上一条 /3 下一条