Ccopt

传统的 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 更新 (点击文章末尾 “阅读原文” 下载)

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 来做物理实现。

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

当然,开启这个功能也是有弊端的。毕竟同一个 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 不淘汰你,请问该淘汰谁?

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

  • Initialize

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

  • Cluster

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

  • 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 的约束文件。它需要包含以下几个要素

  • 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? 如果你对这些问题还有疑问,欢迎移步小编知识星球进行交流提问。

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 的 “坏点”。

  • 利用 Clock Tree Debugger (CTD)

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

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

  • report_ccopt_skew_groups

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

  • 报出每个 skew group 的 clock latency

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

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值