Setup&Hold互卡问题和Useful Skew的影响

setup与hold timing互卡(conflict)现象的成因主要有哪些?如何解决?

成因上来说,setup&hold互卡主要有几种因素的影响:

a) 不同PVT条件下的cell delay variation较大

b) 某些cell的library setup time或library hold time特别大

c) setup与hold的uncertainty或者derate约束较为严格或悲观

d) launch, capture的clock common path很短,OCV因素导致setup和hold都很难收敛
有些path是某一种原因导致的,另外一些path可能是几种因素叠加而产生的互卡。

从path的类型上来说,主要有三种情况:
  1. 同一endpoint的setup&hold互卡,但startpoint不同

  2. 相同startpoint与endpoint的setup&hold互卡,但中间经过的data路径不同

  3. 相同startpoint与endpoint的setup&hold互卡,且经过的data路径完全相同

1, 2两种情况相对简单,只要仔细分析大概率可以找到有margin的点去修hold或者setup,最麻烦的是3)这种情况。在了解上面几种因素的基础上,我们可以看一条具体的path来分析这个问题。
例:假设下面的path在worst PVT条件下的setup slack如下所示:
在这里插入图片描述
而对应的best PVT条件下的hold slack如下:
在这里插入图片描述
可以看到setup和hold的slack都是负的。仔细分析delay值可以发现,导致这种情况发生的原因是多样化的:

  1. 不同PVT条件下clock line的delay大概呈2倍比例,而data line的delay比例高达3.4

  2. clock line完全没有common path,计算slack的时候没有任何CPPR的补偿

  3. library hold time数值过大

  4. hold corner的derate比setup更严格(悲观)
    明白了上述原因,再想解决办法就相对简单了。library hold time本身如果lib没有问题,后端很难去改善,如果是sram的话设计早期还可以考虑换类型,但是到ECO基本就没有办法了;hold corner的derate属于signoff约束,一般也不能轻易改动,否则很难保证STA的准确性;因此我们能做的就是在原因1)与原因2)上想办法:
    **对于1)**来说,就是很多人常说的某些cell在不同corner下的variation较大,我们可以去一一对比找出该cell的类型,将其替换成variation更小的cell;
    **对于2)**来说,我们可以想办法增加两条timing path的common clock path,这样CPPR就可以扣掉部分悲观量,从而缓解setup与hold的slack。一般可能需要多管齐下才能很好地解决这种问题。非常建议大家对照上述公式计算一下考虑CPPR的情况下slack会有怎样的改变。

useful skew解setup violation的具体做法有哪些?分别有什么影响?

我们考虑下面一组timing path:
在这里插入图片描述
上图中有三条timing path: A, B和C,有4条clock路径到达各个DFF分别为1, 2,3和4。如果现在timing path B的endpoint上有setup violation,我们可以怎样调整clock可以修掉它呢?根据setup的定义可以知道,做短clock路径2和做长clock路径3都可以修掉B处的setup(不考虑实际情况是否允许做短和做长)。那么这两种方案分别有哪些影响呢?

方案一:做短clock路径2,也就是path B的launch clock。

其影响在于path B本身的hold会变差,同时path A的setup也会变差,因此需要分别检查二者是否有足够的margin支持将clock路径2做短。

方案二:做长clock路径3,也就是path B的capture clock。

其影响在于path B本身的hold会变差,同时path C的setup也会变差。因此需要分别检查二者是否有足够的margin支持将clock路径3做长。

其实这个问题的本质并不复杂,大家需要记住和理解的是:对同一条path来说,setup变好hold就要变差,反之亦然。同时capture变长对setup有利对hold有害,反之launch长对hold有利对setup有害。

做长common clock path 的方法
方法一:bounds法
将其他module(dpu模块)有timing path的寄存器摆放至Common clock gating那个位置来实现。粗暴的做法是给module做一个bounds或region来实现。根据实际情况需求,也可以再加一颗guide buffer避免工具出错。
在这里插入图片描述

方法二:分步做tree思想
这个方法的提出主要目的是让大家体验下分段长tree的基本思想。在CLKIN port处加一颗guide buffer,然后在这颗buffer输出定义一个时钟。这样整条CLKIN的tree就被分成两部分:第一部分是从CLKIN port到guide buffer,第二部分是从guide buffer到所有的sink。
在这里插入图片描述

方法三(分步思想二):
在common clock gating的输出端定义时钟,并根据ICG后面的实际tree长度来调整分支N中寄存器的floating pin值。
采用这些方法后我们可以在ICC2中看到如下的clock tree。确实common clock path的级数变多了,符合我们的预期。
在这里插入图片描述

  • 17
    点赞
  • 70
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 全局偏斜(global skew)和局部偏斜(local skew)是指在数据分布中存在的不均匀性。 全局偏斜是指整个数据集中存在的不均匀性,例如某些数据点的数量远远超过其他数据点,导致在进行数据分析和处理时需要特别注意这些数据点的影响。 局部偏斜是指在某个特定的数据子集中存在的不均匀性,例如在某个时间段内某个地区的销售额远远高于其他地区,需要针对这个子集进行特殊处理。 在数据分析和处理中,需要对全局偏斜和局部偏斜进行识别和处理,以保证数据的准确性和可靠性。 ### 回答2: 全局偏斜和局部偏斜是数据分布中的两个重要概念。其中全局偏斜是指数据分布在其取值范围内不均匀的情况,而局部偏斜则是指数据分布在某个区域内不均匀的情况。 全局偏斜可能会导致某些值出现的频率非常高,而其他值出现的频率非常低。这种情况反映在数据分布的直方图上,就是直方图中某些条形的高度非常高,而其他条形的高度非常低。全局偏斜通常是由于数据中存在大量极端值或者异常值造成的。 而局部偏斜则是指数据在某一区域的分布不均匀。这可能是由于数据的特性或环境的影响造成的。例如,某一地区的气候条件可能会导致某些特定种类的植物或动物种群数量明显高于其他种类。 理解数据的全局偏斜和局部偏斜对于分析数据非常重要。全局偏斜可能会带来偏误或不准确的结果,因此需要对数据进行一些处理,如去掉极端值或异常值。而局部偏斜可能揭示了数据的特殊特征,需要注意这些特征对数据分析的影响。在处理数据时,需要考虑这两种偏斜以获得准确的结果。 ### 回答3: 全局偏斜(global skew)和局部偏斜(local skew)都是在数据处理中常见的数据倾斜问题。 全局偏斜是指某个处理阶段中某个或某些key值出现次数远远超过其他key值的情况。这种情况造成的影响是部分节点可能会负载过高,无法保证集群的整体性能。例如,在分布式计算中,如果一个RDD分区中有很多被处理的条目,而其他的分区中的条目相对较少,那么就会出现全局偏斜的情况。为了缓解全局偏斜的问题,可以采取对数据进行重新分区,或者使用更为均衡的数据划分策略。 而局部偏斜则是指某个或某些节点的处理负载较高,导致处理速度变慢的情况。这种情况可以在单机计算等场景中常见。在这种情况下,需要对任务进行划分与调度,将处理负载较高的部分拆分成多个子任务,通过多线程或多进程并行执行,来提高处理速度。 总之,解决全局偏斜和局部偏斜问题的方法各有不同,需要根据具体情况进行调整与优化。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值