您的位置:首页 > 其它

欢迎使用CSDN-markdown编辑器

2016-06-26 06:31 197 查看

ASIC design 关于clock-gated setup/ hold的检查以及multi-cycle path 的整理

本文根据网络搜索所得,以及synopsis相关文档整理而来。

涉及的内容

gated-clock 的setup/hold的检查

multi-cycle path 的理解

1. clock-gated 的setup/hold 检查

clock-gated 的setup/hold 检查不同于一般register setup/hold的检查。clock-gated 时序上要求不能出现毛刺,换句话说,如果用AND gate 去gating,时钟使能信号必须在时钟低电平的地方才能插入。如果是用OR gate 去gating, 那么使能信号必须在时钟高电平的地方插入。

为什么电路中会有clock-gating ?大部分情况是为了省power。synthesis工具在综合的时候会根据RTL的写法,推测哪些情况下可以把时钟关掉(也就是时钟被gated)。比如处理一帧图像,某个信号只在帧同步信号来的时候加1:

always @(posedge sclk or posedge rst)

if(rst) fcnt <= 0

else if(vsync) fcnt <= fcnt + 1


这种情况下,只要synthesis工具很有可能会在vsync=0的情况下把sclk gated。 这种gating的行为也可能由designer自己做,因为工具并不能保证识别所有的可能插入gating的情况。

还有些情况下,为了在电路中产生时钟信号(而不是都由PLL产生),也可能有工具推导出gating。这个具体问题具体分析。

好了,既然有clock-gated电路,并且不能产生毛刺,那么时序检查的tool就必须去检查clock-gated的timing。以Prime Time(PT)为例, 对于时序的检查包括setup和hold。而setup/hold的检查有包括:

clock group的setup、hold

clock gating的setup, hold

一下是PT对一条path的timing report:

Startpoint: UFF (rising edge-triggered flip-flop clocked by CLK1)

Endpoint: UGAT (rising clock gating-check end-point clocked by CLK2)

Path Group: * clock_gating_default *

Path Type: min

Point Incr Path

clock CLK1 (rise edge) 0.00 0.00

clock source latency 0.00 0.00

CLK1 (in) 0.00 0.00 r

UFF/CP (FD1) 0.00 0.00 r

UFF/Q (FD1) 1.29 1.29 r

UGAT/A (AN2) 0.00 1.29 r

data arrival time 1.29

clock CLK2 (fall edge) 8.00 8.00

clock source latency 0.00 8.00

CLK2 (in) 0.00 8.00 f

UGAT/B (AN2) 0.00 8.00 f

clock gating hold time 0.00 8.00

data required time 8.00

data required time 8.00

data arrival time -1.29

slack (VIOLATED) -6.71

这个report有几个重点

1. path bype min:这是关于hold time 的

2. launch path 的clock 从 T=0 开始

3. capture path 的clock 从T=8开始,为什么?

下面是CLK1和CLK2的waveform描述

create_clock -period 16 -waveform {0 8} CLK1

create_clock -period 16 -waveform {0 8} CLK2


为什么 capture从T=8,也就是半个时钟周期开始 ?

因为这是一个AND gate的clock gating,使能信号要从CLK2的低电平处插入。也就是在8~16之间插入。换句话说,使能信号至少得有半个周期的latency才能 meet setup timing。这种情况对于比较慢的时钟就不容易实现。

multi-cycle path

multi-cycle path 通常是指哪些不需要在一个cycle的时间内做完的path,降低速度的要求,从而减少优化的时间和最终而面积。命令如下:

set_multicycle_path 3 -setup -from FF1/CP -to FF2/D


将setup的检设在3个cycle以后(默认为1)。默认情况下,hold的检查会被设在3-1=2, 第二个cycle。也就是说,工具要保证最慢也得有2个cycle的latency,显然不合理。于是一般又加上如下命令:

set_multicycle_path 2 -hold -from FF1/CP -to FF2/D


也就是将hold的检查设在3-1-2=0,第0个cycle。也就是跟没有设multi-cycle之前一样的位置。这样最快的case就容易实现多了。

但是,还有问题 !

以上2条命令意味着,信号可以在0~3个cycle之间任意位置变化,如果变化发生在中间上升沿的位置哪?

因此,multi-cycle 的设置要求designer清楚地知道输出结果不会在第3个cycle之前被用到(怎么保证?):

1. 要嘛加enable信号在第三个cycle才去取信号

2. 要嘛保证即使中间采到亚稳态,往后传播也不会有什么后果。

实际情况当中,可能有些register被设置之后,会过很长的时间才会起作用,那么中间的亚稳态有足够的时间稳定,设成multi-cycle不会有问题。但是凡是设成了multi-cycle的都是心里有数的。

另外,有时候我们也会将multi-cycle和false-path等价。false-path可视为multi-cycle的一种无限特例。上面提到的情况,可以是等价的,但是有些情况下并不是,此处不展开。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  verilog asic timing