skew,是时序分析的基本概念,也称为偏差。由于时钟到每个寄存器的路径延迟不一样,造成信号到达 clock pin 的时间也不一样,寄存器也不会同时翻转,我们把时钟信号到达不同寄存器的时间偏差称为skew。skew 的定义就是最长路径延迟减去最短路径延迟的值。

时钟偏移(skew)是指同样的时钟产生的多个子时钟信号之间的延时差异。它表现的形式是多种多样的,既包含了时钟驱动器的多个输出之间的偏移,也包含了由于PCB走线误差造成的接收端和驱动端时钟信号之间的偏移。同一时钟源到达各个同步单元的最大时间差称作时钟偏移。
  产生时钟偏移的原因有:时钟源到各个时钟端点的路径长度不同;各个端点负载不同;在时钟网中插入的缓冲器不同等。时钟偏差过大会引起同步电路功能混乱。
  一直以来,skew都是衡量时钟树性能的重要参数,传统CTS的目的就是为了减小skew。skew的类型分为很多种:

1. 根据clock和data path的方向,skew可以分为positive skewnegative skew

如图所示:

时钟偏差告警怎么设置_寄存器


对于positive skew,clock和data path在相同方向上。

反之对negative skew来说,clock和data path在相反方向上。

那它们对我们的design有什么影响呢?我们来看一下setup和hold的计算公式:

时钟偏差告警怎么设置_时钟偏差告警怎么设置_02


  综上可得出:对于positive skew来说,它可以减少T的时间,相当于提升芯片的performace。但是它的hold时间会变得更加难以满足;对于negative skew来说,它的hold时间更加容易满足,取而代之的是,它会降低芯片的性能。

2. 根据时钟域以及路径关系, skew 可以分为global skewlocal skewinterclock skew

  Global skew 是指,同一时钟域,任意两个路径的最大 skew 。如图所示,注意是任意两条路径,不管是不是timing path,都会算作gloabl skew计算的对象。CTS时,工具更关注的是global skew, 会尽可能地将global skew做小。

时钟偏差告警怎么设置_关联关系_03


  Local skew 是指,同一时钟域,任意两个有逻辑关联关系的路径最大 skew 。这边需要注明,必须是存在逻辑关系的path才会计算local skew,也就是说必须要是timing path。如图所示,我们在分析timing的时候,更多地是关注local skew。

时钟偏差告警怎么设置_时钟偏差_04


  interClock skew 是指,不同时钟域之间路径的最大 skew,如图所示

时钟偏差告警怎么设置_时钟偏差_05


3. 另外还有一种比较特使的skew,就是现如今用得较多的useful skew,我们称为有用偏差。一般来说,skew会恶化timing结果,但如果合理使用,那skew也可以起到修复timing的作用,从而提高设计的频率。

  如图,时钟周期为 4ns ,各时钟路径延迟如下:可以看到有一条路径的 slack 为 -1ns ,说明这条路径违规。可以看到与这条路径相关的 skew 是 t3-t2= -1ns 。

时钟偏差告警怎么设置_时钟偏差_06


  下面我们利用 useful skew 向前面一个 slack 比较充裕的路径(slack=2ns)借用1ns的 时间 ,这样两条path都meet了时序要求。如下图:

时钟偏差告警怎么设置_关联关系_07


  这就是 usefulskew 的作用,可以向前,或者向后借time来修正 violation。