盘点数字IC后端实现中clock skew大的各种场景
文章右侧广告为官方硬广告,与吾爱IC社区无关,用户勿点。点击进去后出现任何损失与社区无关。
在分享今天的技术主题之前,告诉大家一个好消息。年底了,很多小伙伴们又开始着手换工作了,因此,应各位邀请小编准备开始尝试IC 前后端招聘相关的业务服务。简单来说就是,各位如果想换个更好的工作,可以私信(微信号:ic-backend2018),小编会帮你出谋划策,避坑,做好职业规划甚至提供技术指导。最重要的是这项服务还是免费的,对的,你没有看错,完全不收费。目前仅面向吾爱 IC 社区 VIP 会员(知识星球用户)。
如果你相信认可小编,可以让小编来为你做好 IC 的职业生涯规划,早日实现年薪百万的目标。
好了,下面进入今天的主题。
前阵子分享如何在 innovus 中分析 clock tree latency 的合理性专题后,相信很多小伙伴应该都已经 get 到这种技能了,应该能独立分析一个相对简单时钟结构 block 的 clock tree latency,以及快速知道你 design 的 tree 应该长多长。
手把手教你如何在 Innovus 中分析 clock tree 质量
我们知道衡量时钟树的两大指标是clock tree latency和clock skew。那今天小编将继续教你如何分析 clock skew 的合理性。掌握好这两大技术指标后,你的技术水平可以甩别人好几条街。
Clock Skew 定义
Clock Skew 是指 max clock latency 和 min clock latency 的差值(Clock Tree Synthesis 后)。而 Clock Skew 又可分为Global skew和Local skew两大类。
- Global skew
Global skew 是泛指 design 中任意两个寄存器 latency 之差的最大值。
- Local skew
Local skew 是指 design 中两个相关寄存器 latency 之差的最大值。因此,在数字后端设计实现中,我们更多的是关注 local skew。因为 local skew 会直接影响到我们的时序(setup 和 hold)。
下图所示 FF1 和 FF2 的 Local skew 为 3 个 buffer 的 delay,即 150ps(本文假定一个 buffer delay 为 50ps)。FF3 和 FF4 直接的 Local skew 为 100ps。那么 Global skew 是不是 200ps 呢?
[思考题] 什么时候 global clock skew 会小于 local clock skew?
如何查看 Clock Skew
掌握了 Clock Skew 概念后,那在实际做项目过程中,我们该如何知道 clock skew 是多少呢?主要可以有下面几种方式:
- 从 log 中获取
从 log 中可以知道每个 stage 做完后的 skew 到底是多少,以及有多少比例是符合预期的 target skew。图中的ratio 为何那么低,各位猜猜是什么原因呢?
- 从 clock tree report 获取
report_clock_tree
report_ccopt_clock_tree
- 从 timing report 上获取
有的时候你可能是通过报某条 path 来看 clock skew,但是需要注意的是这里的 clock skew 会偏大些,主要是因为它考虑了 derate,而 log 中和 clock tree report 中报出来的 clock skew 均不包含 derate。
所以,当有人问题 report_timing 和 report_clock_timing 有何区别的时候,可别再模拟两可了哦,大胆告诉他正确答案。
Clock Skew 多大是合理的?
知道了 clock skew 大小后,你如何知道它是否合理呢?比如当前 clock skew 是 120ps,你觉得合理吗,是否可以接着往下跑 flow 吗?clock skew 需要做到多小,取决于你的设计需求,没有统一的答案。比如 ddr 实现可能要求 skew 在 20ps 内,而普通模块则可以更宽松,一般 100ps 以内均属于正常范畴。
知道 clock skew 大小后,不要仅仅停留在这个值上面,它本身没有太多价值的信息,而是要通过分析得知当前 clock skew 值是何原因导致的?可否有进一步减少的空间?
Clock Skew 太大怎么办?
如果发现 clock skew 太大,我们可以通过分析找出偏大的原因,然后才能对症下药,解决问题。今天小编分享几种常见的原因。这几种情况基本上可以覆盖项目中的 90% 的情景,所以要认真看做好笔记哦。大家在做项目的过程中,可以通过逐一排查,一定可以找到 clock skew 偏大的原因。
- target clock skew 设置值偏大
不论是 C 家还是 S 家的工具,在长 tree 之前都会设置 target skew 值。这个值是告诉工具你的 clock skew 期望值是多少。一般情况下,建议设置 50-80ps 之间即可。如果你不小心将 target clock skew 设置成 250ps,那么工具最终做出来的可能就会在 250ps 左右。这个就有点像 flow 中对 max transition 的约束一样。
- data 和 clock 交叉
这种情况也比较常见,主要原因是 constraint 不完备导致的。一个典型的情况是当你看 hold violation 时发现有 500ps violation,乍一看就是 clock skew 严重不 balance 导致的。仔细分析后发现原来 capture clock path 上有一堆的 data。这种情况小编称之为 data 和 clock 互穿或交叉。解决方法要么是disable timing arc,要么就是设置 clock sense。
数字 IC 后端时钟树综合专题(OCC 电路案例分享)
这种场景乍一看是不是有点晕,没关系,多看多实践,不懂来小编知识星球多提问多交流,久而久之就自然懂了!
- Clock Tree 上的 cell 是否有dont use/touch 属性
时钟树上一般是由 Clock buffer,clock inverter,icg,mux 和一些 AND/OR 等组成的。所以需要检查 flow 中用于长 tree 的 inverter 种类,检查可用的 icg 驱动强度有哪几档,以及检查时钟分频电路上用的 AND/OR 的选型。
- 检查 macro 是否有interal clock tree
这种情况相当常见,典型的案例是 memory 内部有 clock tree。这段内部的 clock tree 是体现在它的 lib 中,表现为 min_clock_path 和 max_clock_path。
从 lib 中可以看到这颗 memory 内部就存在至少 100ps 的 skew。所以当遇到这种情况,如果不做特殊处理,长好 tree 后 clock skew 可能高达 300ps。如果你去硬修 hold violation,一方面可能是 hold buffer 会插爆,另外一方面是浪费 leakage 和面积。
所以,你可以打开你 memory 的 lib 看看是否有 interal 的 clock tree 定义。那么怎么解决呢?很简单,将这类 marco 的 clk设置一个 floating pin 为 0 的值,让工具不要管内部的那段 clock skew 即可。
- 检查 macro 内部是否有 interal checkpin
当一个 pin 既有 sequential arc 又有 combinational arc 时,library compiler 会产生一个内部的 checkpin,用于区分这两种 arc。以下图为例,U5 的 lib 中会有一个 interal 的 checkpin。默认情况下,工具长 Tree 时会把 U5/CK,U5/checkpin 和 U52/U53 的 CK 都当成 sink 来做 balance,从而导致比较大的 clock skew。
当遇到这种情况,可以通过下面的命令告诉工具将这个点 exclude 掉来解决 clock skew 偏大的问题。
set_clock_tree_exceptions -non_stop_pin U5/CKcheckpin1
所以,如果你的设计中是带有子模块的,当出现子模块的 checkpin 时,可以检查下抽 ETM 的环境,大部分情况是 ETM 抽取存在问题。
- 检查 clock tree net 是否有比较大的 max transition
如果 clock tree 上某个 high fanout net 被设置成dont touch 或者 ideal network,那么工具就无法解这个 fanout,从而会导致这个分支 delay 特别大。
好了,今天的内容分享就到这里。另外,因为公众号更改推送规则,小编分享的每篇干货不一定能及时推送给各位。为了避免错过精彩内容,请关注星标公众号,点击 “在看”,点赞并分享到朋友圈,让推送算法知道你是社区的老铁,这样就不会错过任何精彩内容了。
如果你想和小编有更进一步的沟通交流的机会,欢迎加入小编知识星球,让我们一起学习成长,共同进步。相信在这里能让你成就一个更完美的自己。
小编知识星球简介(如果你渴望进步,期望高薪,喜欢交流,欢迎加入 ****):
在这里,目前已经规划并正着手做的事情:
-
ICC/ICC2 lab 的编写
-
基于 ARM CPU 的后端实现流程
-
利用 ICC 中 CCD(Concurrent Clock Data)实现高性能模块的设计实现
-
基于 ARM 四核 CPU 数字后端 Hierarchical Flow 实现教程
-
时钟树结构分析
-
低功耗设计实现
-
定期将项目中碰到的问题以案例的形式做技术分享
-
基于 90nm 项目案例实现教程(ICC 和 Innovus 配套教程)
-
数字 IC 行业百科全书
吾爱 IC 社区知识星球星主为公众号” 吾爱 IC 社区” 号主,从事数字 ic 后端设计实现工作近八年,拥有55nm,40nm,28nm,22nm,14nm等先进工艺节点成功流片经验,成功tapeout 过三十多颗芯片。
这里是一个数字 IC 设计实现高度垂直细分领域的知识社群,是数字 IC 设计实现领域中最大,最高端的知识交流和分享的社区,这里聚集了无数数字 ic 前端设计,后端实现,模拟 layout 工程师们。
在这里大家可以多建立连接,多交流,多拓展人脉圈,甚至可以组织线下活动。在这里你可以就数字 ic 后端设计实现领域的相关问题进行提问,也可以就职业发展规划问题进行咨询,也可以把困扰你的问题拿出来一起讨论交流。对于提问的问题尽量做到有问必答,如遇到不懂的,也会通过查阅资料或者请教专家来解答问题。在这里鼓励大家积极发表主题,提问,从而促进整个知识社群的良性循环。每个月小编会针对活跃用户进行打赏。
最重要的是在这里,能够借助这个知识社群,短期内实现年薪百万的梦想!不管你信不信,反正已经进来的朋友肯定是相信的!相遇是一种缘分,相识更是一种难能可贵的情分!如若有缘你我一定会相遇相识!知识星球二维码如下,可以扫描或者长按识别二维码进入。目前已经有 750位星球成员,感谢这750童鞋的支持!欢迎各位渴望进步,期望高薪的铁杆粉丝加入!终极目标是打造实现本知识星球全员年薪百万的宏伟目标。
欢迎关注 “吾爱 IC 社区”
微信号:ic-backend2018
文章来源:https://www.toymoban.com/news/detail-427758.html
https://mp.weixin.qq.com/s/vR6S-lgsWyESsk1kTvCVng文章来源地址https://www.toymoban.com/news/detail-427758.html
到了这里,关于盘点数字IC后端实现中clock skew大的各种场景的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!