🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
我们称为**偏差**。由于时钟到每个寄存器的路径延迟不一样, 造成信号到达 **clock pin(时钟引脚)** 的时间也不一样,我们把时钟信号到达不同寄存器的时间偏差称为skew。一直以来,Skew都是衡量时钟树性能的重要参数,传统CTS的目的就是为了减小skew。 Skew的类型分为很多种,根据clock和data path的方向,skew可以分为**positive skew**和**negative skew**。如下图所示: ![](https://img.kancloud.cn/27/3a/273a1e01c1e77600889c1d42eabe1f20_700x391.png) 对于positive skew,clock和data path在相同方向上。反之对negative skew来说,clock和data path在相反方向上。那它们对我们的design有什么影响呢?我们来看一下setup和hold的计算公式: ![](https://img.kancloud.cn/26/b9/26b91d0d57589759f049e1fd4c5a3de1_289x93.png) 我们可以得到以下结果, > 对于positive skew来说,它可以减少T的时间,相当于提升芯片的performace。但是它的hold时间会变得更加难以满足 > 对于negative skew来说,它的hold时间更加容易满足,取而代之的是,它会降低芯片的性能。 还有另外一种skew的分类方法,是我们更为常见的,根据时钟域以及路径关系, skew 可以分为**global skew**,**local skew**,**interclock skew**。 Global skew 是指,同一时钟域,任意两个路径的最大 skew 。如下图所示,注意是任意两条路径,不管是不是timing path,都会算作gloabl skew计算的对象。CTS时,工具更关注的是global skew, 会尽可能地将global skew做小。 ![](https://img.kancloud.cn/b3/3a/b33aca4114bbf18fd3494aef0c8401e5_661x449.png) Local skew 是指,同一时钟域,任意两个有逻辑关联关系的路径最大 skew 。这边需要注明,必须是存在逻辑关系的path才会计算local skew,也就是说必须要是timing path。如下图所示,我们在分析timing的时候,更多地是关注local skew。 ![](https://img.kancloud.cn/c7/a7/c7a7c88e79c53abbae194c91b8f902c7_672x461.png) interClock skew 是指,不同时钟域之间路径的最大 skew,如下图所示: ![](https://img.kancloud.cn/98/55/9855cd1dd657244fa843671c71340c6c_717x470.png) 另外还有一种比较特使的skew,就是现如今用得较多的useful skew,我们称为**有用偏差**。一般来说,skew会恶化timing结果,但如果合理使用,那skew也可以起到修复timing的作用,从而提高设计的频率。 如下图:时钟周期为 4ns ,各时钟路径延迟如下:可以看到有一条路径的 slack 为 -1ns ,说明这条路径违规。可以看到与这条路径相关的 skew 是 t3-t2= -1ns 。 ![](https://img.kancloud.cn/fb/1c/fb1cbf5fd6508d7ed470478fbc4b1389_573x239.png) 下面我们利用 useful skew 向前面一个 slack 比较充裕的路径(slack=2ns)借用1ns的 时间 ,这样两条path都meet了时序要求。如下图: ![](https://img.kancloud.cn/41/cf/41cf4502bb54881ef2919d6f4b7ca2a5_586x217.png) 这就是 usefulskew 的作用,可以向前,或者向后借time来修正 violation。