四时宝库

程序员的知识宝库

IC后端工程师大部分都不懂Encounter timing report中的phase shift

很多人工作多年,却还不理解Encounter timing report中的phase shift是如何计算出来的?确实是一个很抽象的概念,这次我们来介绍一下它是怎么计算的。

先看以下公式

首先得会学会“取沿”

setup和hold的check机制不一样

它们的capture edge取法也不大一样

setup检查:自己和别人检查,因此capture edge发生在最近的launch edge后面

hold检查:自己和自己检查,因此capture edge发生在最近的launch edge前面或者正好同沿

如下图所示,两种箭头很好地表示出了setup和hold的检查机制,牢牢地记住这两张图才能很好地去计算Phase shift.

实战分析

leading edge VS leading edge(single clk)

对于setup来说

图上L代表leading edge,T代表trailing edge。capture clock edge发生在launch clock edge之后,因此,我们可以以0作为launch clock edge点,想一想上面那张检查机制图。那它对应的capture clock edge位置就在4这个位置。由于都是leading edge,第一个cycle的相位差其实就是0-0。因此,计算公式如下:

Phase Shift = (CE-LE) - (C1-L1) = (4-0)- (0 - 0)= 4

这种情况下面Phase Shift确实就是时钟周期

我们可以来看一下report_timing的结果来验证一下:

对于hold来说

captureclock edge发生在launch clock edge之前或者同沿,因此,我们可以以0作为launch clock edge,这个位置往前没有leading edge,那我们可以取同沿的0作为capture clock edge。同样的,第一个cycle的相位差其实就是0-0。因此,计算公式如下:

Phase Shift = (CE-LE) - (C1-L1) = (0-0)- (0 - 0)= 0

通过timing report来验证一下

2

trailing edge Vs leading edge(single clk)

对于setup来说

同样的,我们选0作为launch clock edge,往后看,选第一个trailing edge作为capture clock edge。第一个cycle的边沿相位差就是2-0。因此,计算公式如下:

Phase Shift = (CE-LE) - (C1-L1) = (2-0)- (2 - 0)= 0

这种情况下,Phase Shift就不等于周期了

通过timing report来验证一下:

对于hold来说

我们如果选0作为launch clock edge的话,往前看就没有trailing edge。因此我们需要选择4作为launch clock edge,那对应的capture clock edge就选择2。第一个cycle的边沿相位差就是2-0。因此,计算公式如下:

Phase Shift = (CE-LE) - (C1-L1) = (2-4)- (2 - 0)= -4

加深点难度,来看复杂的,在不同的clock domain中,如何去计算Phase Shift呢?

其实,leading edge和trailing edge的定义方式还是一样,只是capture clock edge和launch clock edge的差值我们需要选择最小的delta值,因为最小的delta值满足check以后,剩余的其他delta值也都可以满足。

3

leading edge VS leading edge(diff clk)

对于setup来说

我们选4作为launch clock edge。对应的最短的capture clock edge就是6。第一个cycle的边沿相位差就是0-0。因此,计算公式如下:

Phase Shift = (CE-LE) - (C1-L1) = (6 - 4)- (0 - 0)= 2

对于hold来说

我们可以选0作为launch clock edge。0也可以作为capture clock edge。而且是距离最短的沿,第一个cycle的边沿相位差就是0-0。因此,计算公式如下:

Phase Shift = (CE-LE) - (C1-L1) = (0 - 0)- (0 - 0)= 0

4

railing edge VS leading edge(diff clk)

对于setup来说

从上图就可以看出,为了得到最短的leading到trailing edge,我们选8作为launch clock edge。对应的最短的capture clock edge就是9。第一个cycle的边沿相位差就是3-0。因此,计算公式如下:

Phase Shift = (CE-LE) - (C1-L1) = (9 - 8)- (3 - 0)= -2

对于hold来说

为了得到最短的leading到trailing edge,我们选4作为launch clock edge。对应的最短的capture clock edge就是3。第一个cycle的边沿相位差就是3-0。因此,计算公式如下:

Phase Shift = (CE-LE) - (C1-L1) = (3 - 4)- (3 - 0)= -4

leading edge VS leading edge(multicycle)

最后,来看个更加复杂的,multicycle path

这条path的setup multicycle设成2

它的划分方法也和普通的一样,上图中,红色边沿代表leading edge,绿色代表trialing edge。我们选11作为launch clock edge。对应的最短的capture clock edge就是12。第一个cycle的边沿相位差就是0-1。因此,计算公式如下:

Phase Shift = (CE-LE) - (C1-L1) = (12 - 11)- (0 - 1)=2

唯一不同的是,对于multicycle path,我们还需要加上cycle adjustment值,也就是补偿的cycle值,上图中multicycle是2,那它补偿的cycle就是1个cycle,也就是4ns

发表评论:

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言
    友情链接