如何在Innovus中做好Clock Tree Synthesis_

如何在Innovus中做好Clock Tree Synthesis?

文章右侧广告为官方硬广告,与吾爱IC社区无关,用户勿点。点击进去后出现任何损失与社区无关。

近期有不少粉丝私信,一年一度的校招很快又要开始了,希望能提供比较全面的指导。为此,小编最近正在定制一份应对校招学习方案。只要严格按照给定方案学习,做好作业,找一份好工作是一件 so easy 的事情。任何人都可以参与方案的学习,前提是需要将自己的作业提交到小编的知识星球上(各位星友互相讨论,星主点评)。

如果你还有其他需求,可以私信小编(ic-backend2018)。各位准备找工作的小伙伴们,也可以看看下面这份面试宝典(知识星球上有电子档)。

如何在Innovus中做好Clock Tree Synthesis__第1张图片

今天小编跟大家分享下如何在 Innovus 中做好 Clock Tree Synthesis。其实不论是用何种 PR 工具,思路和方法都是一样的,唯一不同的地方就是命令设置不太一样,当然核心的东西是 CTS engine 不一样,不过这个东西用户不需要太关心。

传统的 CTS Methodology

早期的 encounter 使用的就是下图所示的 balance clock 的 CTS engine。它的目的是将同一个 skew group 的 sink 都尽量做平。这种做法显然是有弊端的,主要表现为如下几点:

  • 插入更多的 clock buffer

  • High clock leakage

  • 性能瓶颈(需要人为调 clock tree)

  • 动态 IR Drop 更差

数字 IC 设计后端实现前期预防 IR Drop 的方法汇总

RedHawk Training Lab 和 Training Slides 更新 (点击文章末尾 “阅读原文” 下载)

如何在Innovus中做好Clock Tree Synthesis__第2张图片

Clock Concurrent Optimization with useful skew

CCOpt 这个 concurrent 的功能与 S 家的 CCD(Concurrent Clock And Data) 是类似的。添加这个功能的主要原因还是因为以前工程师需要不断地利用前后级的 timing margin 来人为调整 clock tree 的长度,从而改善 critical path 的 timing。因此,对于高性能模块比如 ARM CORE,GPU 等模块都会采用这个 flow 来做物理实现。

如何在Innovus中做好Clock Tree Synthesis__第3张图片

另外,相比传统方式做 tree 方式,它将各个寄存器的时钟到达时间错开了,所以在某个时刻的峰值电流会更小点,从而改善动态 IR Drop。

如何在Innovus中做好Clock Tree Synthesis__第4张图片

当然,开启这个功能也是有弊端的。毕竟同一个 skew group 下 sink 的 skew 更大了,hold violation 的数量会更多。

数字 IC 设计实现之 hold violation 修复大全

Useful skew 控制选项

对于普通的非高速设计,一般建议不开启 useful skew 功能。可以通过 setOptMode -usefulSkew false 来关闭。

对于高频设计,可以通过开启这个功能来获得一个比较好的 performance。同时,还可以通过设置以下几个变量,控制工具在不同阶段调用 useful skew 功能。

setOptMode -usefulSkewCCopt none| standard| medium| extreme

none: No useful skew

standard: skew balanced cts +post-cts useful skew

medium: CCopt useful skew+post-cts useful skew optimization(medium effort)

extreme: CCopt useful skew+post-cts useful skew optimization(high effort)

CCopt 两种跑法

建议将 ccopt 分两步来完成, 这两步分别是 Clock tree synthesis 和 POST CTS Timing 优化,即使用 ccopt_design -cts 和 optDesign -postCTS 两个命令来做 CTS 和 CTO。很多朋友喜欢闭着眼睛跑 flow,即便 flow 是分两步来跑的,也从来不看 CTS 后的结果。这种习惯非常不好(应届生倒是可以理解)。长此以往你的价值何在?你的 boss 不淘汰你,请问该淘汰谁?

如何在Innovus中做好Clock Tree Synthesis__第5张图片

CTS 阶段主要涉及下面几个步骤:

  • Initialize

这步主要做 checking placement,Validating cts configuration 和 Clock tree balancer configuration。

如何在Innovus中做好Clock Tree Synthesis__第6张图片

  • Cluster

这步主要是 fix timing drc 和减少 insertion delay。

如何在Innovus中做好Clock Tree Synthesis__第7张图片

  • Implementation

这步主要是做功耗优化,clock balance,polish 和 clock route。

以上这几步建议大家都要去认真查看 log,看懂看透每个步骤都在做哪些工作,发现 CTS 过程异常的地方。

Physical Constraint

在做 CTS 之前,我们需要提前设置好约束条件。这个约束条件包含 physical constraint 和 balance constraint,这两个词汇是参照 C 家的说法来陈述。名字叫什么都没有关系,重要的是要知道它要包含哪些东西。

Physical Constraint 主要包含以下几个方面:

  • Max transition,max capacitance,max wire length

  • Non-default routing rule(NDR)

  • Clock cell 选取

  • 其他

Innovus 中 physical constraint 相关命令

set_ccopt_property max_fanout 40

set_ccopt_mode -integration “native” \

-cts_inverter_cells $clock_inverter_cells \

-cts_buffer_cells $clock_buffer_cells \

-cts_clock_gating_cells $clock_icgs \

-cts_use_inverters true \

-ccopt_modify_clock_latency true

add_ndr -name $ndr_name -width_multiplier {5:8 2} -spacing_multiplier {5:82} -generate_via

create_route_type -name TOP -top_preferred_layer M8 -bottom_preferred_layer M5 -preferred_routing_layer_effort medium -non_default_rule $ndr_name -shield_net VSS

create_route_type -name TRUNK -top_preferred_layer M8 -bottom_preferred_layer M5 -preferred_routing_layer_effort medium -non_default_rule $ndr_name

create_route_type -name LEAF -top_preferred_layer M5 -bottom_preferred_layer M3 -preferred_routing_layer_effort medium

set_ccopt_property -net_type leaftarget_max_trans 0.15

set_ccopt_property -net_type trunktarget_max_trans 0.2

set_ccopt_property -net_type top target_max_trans 0.2

设置好这些命令,是不是就大功告成了呢?显然不是,如果仅仅设置这些约束,小编相信所有人都会。实际上,设置完 physical constraint 仅仅是 CTS 准备工作的一小部分。

数字后端设计实现之时钟树综合实践篇

时钟树综合 CTS 技术经验分享(高薪必备!)

Balance Constraint (CTS Constraint)

这里其实就是小编一直反复强调的 CTS Constraint。对于稍微复杂一点的时钟结构设计,为了获得一个更好的 clock skew 和 clock latency,都需要尝试用分段 build tree 的思想来写 CTS 的约束文件。它需要包含以下几个要素

如何在Innovus中做好Clock Tree Synthesis__第8张图片

  • create_clock 和 create_generated_clock

  • clock group balance

  • set_case_analysis

  • set_disable_timing

  • floating pin/ignore pin/exclude pin

还不懂如何写 cts constraint 的同学,再好好看看下面这篇文章。

数字 IC 后端时钟树综合专题(OCC 电路案例分享)

写好 CTS constraint 后,工具才能很完美 crate 出 clock tree 的 spec,从而做出完美的 tree。对于复杂的时钟结构设计,仅仅有一个 placement 或者 signoff 的 timing constraint 是远远不够的,工具是无法做好时钟树的。

【思考题】 下面是一个典型的时钟结构图。请问,为何要在 d1 的 Q 端定义 generated clock?能否改成 create_clock?d2 的 Q 端为何不定义 generated clock? 如果你对这些问题还有疑问,欢迎移步小编知识星球进行交流提问。

如何在Innovus中做好Clock Tree Synthesis__第9张图片

Clock Tree Analysis &Debug

这里罗列几种快速 debug clock tree 的方法。任何分析和 debug 的基础是时钟结构图,所以,在此之前你需要把它画出来或者存储在脑海中。这个基础工作做好后,剩下的就是利用工具能够提供的信息来辅助 debug,最后解决问题。

实际上很多工程师 debug 的思路恰恰相反。当然也不是说这种方式不可以,只是效率会低很多。有时候想找到一个真问题,可能需要耗费特别多的时间。

  • 快速 DRV Fixing

基于 floorplan/DRV constraint,快速 debug clock tree latency 是否合理。可以通过下面的命令来实现。

Set_ccopt_property balance_mode cluster

Ccopt_design -cts

  • 快速 balance clock group

Set_ccopt_property balance_mode trial

Ccopt_design -cts

  • Report_ccopt_clock_tree_structure

不论是 ICC2 或者 Innovus,都支持打印 clock tree structure 的功能。这里的时钟结构是长好 tree 后的结构,所以它包含了 clock inverter。这个文件可以用来快速 debug clock tree 的 “坏点”。

如何在Innovus中做好Clock Tree Synthesis__第10张图片

  • 利用 Clock Tree Debugger (CTD)

S 家的工具也有这个功能,之前小编做过分享了。其实两家的东西大同小异,只要会用一家的东西后,看懂另外一家也就是几分钟的事情。这个功能最大的好处是可以在 CTD 窗口中实现与 layout 窗口同步显示,方便用户 debug。

对于数字 IC 后端工程师来说,也可以用这个来分析时钟结构。对于时钟结构非常清晰的同学,其实没太多必要来看这东西,用好上面介绍的 clock structure 文件即可。

  • report_ccopt_skew_groups

通过打印出各种 skew group 的信息,可以快速找到 constraint 有问题的点,检查我们所编写的 cts constraint 是否合理。

如何在Innovus中做好Clock Tree Synthesis__第11张图片

  • 报出每个 skew group 的 clock latency

通过 report_clock_timing -type latency -clock 来报出所有 clock latency 的长度。

好了,今天的内容分享就到这里。如果你喜欢小编的文章,帮忙点下**“在看”**并转发给你的朋友,算是鼓励支持下小编呗。

小编知识星球简介(如果你渴望进步,期望高薪,喜欢交流,欢迎加入 ****)

在这里,目前已经规划并正着手做的事情:

  • ICC/ICC2 lab 的编写

  • 基于 ARM CPU 的后端实现流程

  • 利用 ICC 中 CCD(Concurrent Clock Data)实现高性能模块的设计实现

  • 基于 ARM 四核 CPU 数字后端 Hierarchical Flow 实现教程

  • 时钟树结构分析

  • 低功耗设计实现

  • 定期将项目中碰到的问题以案例的形式做技术分享

吾爱 IC 社区知识星球星主为公众号” 吾爱 IC 社区” 号主,从事数字 ic 后端设计实现工作近八年,拥有55nm,40nm,28nm,22nm,14nm等先进工艺节点成功流片经验,成功tapeout 过三十多颗芯片

这里是一个数字 IC 设计实现高度垂直细分领域的知识社群,是数字 IC 设计实现领域中最大,最高端的知识交流和分享的社区,这里聚集了无数数字 ic 前端设计,后端实现,模拟 layout 工程师们。

在这里大家可以多建立连接,多交流,多拓展人脉圈,甚至可以组织线下活动。在这里你可以就数字 ic 后端设计实现领域的相关问题进行提问,也可以就职业发展规划问题进行咨询,也可以把困扰你的问题拿出来一起讨论交流。对于提问的问题尽量做到有问必答,如遇到不懂的,也会通过查阅资料或者请教专家来解答问题。在这里鼓励大家积极发表主题,提问,从而促进整个知识社群的良性循环。每个月小编会针对活跃用户进行打赏。

最重要的是在这里,能够借助这个知识社群,短期内实现年薪百万的梦想!不管你信不信,反正已经进来的朋友肯定是相信的!相遇是一种缘分,相识更是一种难能可贵的情分!如若有缘你我一定会相遇相识!知识星球二维码如下,可以扫描或者长按识别二维码进入。目前已经有480星球成员,感谢这480童鞋的支持!欢迎各位渴望进步,期望高薪的铁杆粉丝加入!终极目标**是打造实现本知识星球全员年薪百万的宏伟目标 **。

如何在Innovus中做好Clock Tree Synthesis__第12张图片

欢迎关注 “吾爱 IC 社区

微信号:ic-backend2018

点击下方 “阅读原文” 下载 Redhawk 培训资料

https://mp.weixin.qq.com/s/Qktk803nxJbkChlOT2RJjw

你可能感兴趣的:(面试,职场和发展)