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

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

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

时钟树综合定义

时钟树综合就是指从某个 clock 的 root 点长到各个 sink 点的 clock buffer/inverter tree。工具试图将某个 clock 所属的所有 sinks 做到相同长度。从概念上,我们可以得到几个要点。

图 1 时钟树

CTS 之前你应该先搞清楚以下几点(非常重要)

  • clock 的 root 点需要定义清楚。这个可以通过 create_clock 来定义。如果是 create_generated_clock,它的 master clock 需要定义清楚。同时要求 generate clock 与 master clock 是可以 trace 通的

  • clock 的 sinks

  • 哪些 clock 是同步,哪些是异步的

  • 分析时钟结构,大致画出其结构图。如果时钟结构比较复杂,建议编写 CTS constraint,来引导工具 build tree

  • 定义好 stop pin ignore pin exclude pin floating pin 等

  • 哪些 clock 是需要做 inter-balance 的

衡量时钟树的几大指标

合理的时钟结构能够加速 Timing 收敛(时钟树综合中级篇)

时钟树综合(clock tree synthesis)基础篇

设置 DRC 参数

设置 max_transition max_capacitance max_fanout 等参数。对于 clock 的 max transition 的设置,应该根据 clock 的频率来设置。高频率的 clock,需要额外设置严格点。

指定 clock inverter list

set_clock_tree_references -references $cts_clock_inv_list

set_clock_tree_references -references $cts_clock_inv_list -sizing_only

set_clock_tree_references -references $cts_clock_inv_list -delay_insertion_only

clock inverter cell list 的选择往往比较有讲究。一般情况下 fab 都会给出建议。往往是驱动中等的几类 cell。以 TSMC28 为例,官方建议 clock inverter 应该选用三款 cell,分别是 CKND8,CKD12,CKD16 的 cell。

大驱动的 clock inverter(比如 CKND20,CKD24)容易出现EM 问题

而小驱动的 clock inverter(比如 CKND2), 受 PVT 影响比较大,容易出现较大的工艺偏差

用来 build clock tree 的 clock inverter 必须使用 LVT 或者 SVT,而且必须保证 clock tree 上只有一种 VT。HVT cell 禁止使用在 clock tree 上,因为工艺偏差较大,导致 signoff 的 timing 和实测严重不 match,甚至导致功能错误。

设置 don’t_use cell list

设置 floating pin 和 inter-clock balance

很多时候我们为了将某些 reg 做短(可能是 timing 考虑,可能是 clock latency 的要求),此时需要设置 floating pin。有的 hierarchical design,我们需要告诉工具子模块中的 clock latency 长度,也要设置 floating pin。

当两个时钟并不是同步的,但是他们的某些 register 会进行 talk。默认情况下,CTS build CLOCK1 和 CLOCK2 时,会各自 build clock tree,不会做 inter-clock balance,如图 2 所示。

图 2 未做 inter-clock balance

因此,我们需要设置 inter-clock balance 选项。设置命令如下:

set_inter_clock_delay_options -balance_group “Clk1 Clk2” -balance_group_name group2

图 3 inter-clock balance 后

设置 NDR rule

为了防止 clock 上的 SI 和 EM,我们需要对时钟信号线进行 non-default rule 的设置。通常设置两倍宽度,两倍间距(当然也有更大,根据实际情况进行更改)。

define_routing_rule CTS_NDR_RULE

-widths {M2 0.15 M3 0.15 M4 0.15 M5 0.15 M6 0.15}

-spacings {M2 0.15 M3 0.15 M4 0.15 M5 0.15 M6 0.15}

由于标准单元出 pin 大部分是 M1/M2,如果设置 ndr rule,会导致很多 DRC。因此,可以将最 leaf 端采用默认的线宽和线间距来走线。

set_clock_tree_options -routing_rule_ rule -use_default_routing_for_sinks 1

为了使得 clock tree 质量更好,我们往往将高层用来作为时钟信号的走线。

set_clock_tree_options -layer_list {M7 M8}

图 4 NDR setting

除了对 clock net 设置 NDR 外,还需要对某些对时钟质量要求比较高的 clock,进行 shielding。

route_zrt_group -all_clock_nets

图 5 shielding 示意图

define_routing_rule ${rule_prefix}_shielding_rule -default_reference_rule

-widths {M2 0.10 M3 0.10 M4 0.10 M5 0.10 M6 0.20}

-spacings {M2 0.05 M3 0.05 M4 0.05 M5 0.05 M6 0.10}

-shield_widths {M2 0.05 M3 0.05 M4 0.05 M5 0.05 M6 0.10}

-shield_spacings {M2 0.05 M3 0.05 M4 0.05 M5 0.05 M6 0.10}

create_zrt_shield -mode reshield -with_ground VSS -nets $shielding_nets -align_to_shape_end true

Apply IO Latency

set_latency_adjustment_options -from_clock clk -to_clock virtual_clk(如果 IO port 是用 virtual clock 来 constraint 的,通过此命令来进行 IO Latency 的 apply)

update_clock_latency

图 6 IO Latency adjustment

时钟树综合后需要将 clock tree 上的 cell 进行 mark,防止工具后续进行 timing 优化而对 clock tree 进行改动。

mark_clock_tree -clock_trees [all_clocks] -clock_synthesized

build clock tree 的两种方法

  • comile_clock_tree 和 optimize_clock_tree

  • clock_opt -only_cts

大家可以分别用这两种方法去实践下,结果差不多。

查看时钟树结果

可以从 log 中看到每个 clock 长 tree 的情况,比如 clock latency,clock skew, 某个 clock domain 中最长的 clock path 和最短的 clock path。

图 7 时钟树综合 log

同时,还可以通过以下命令来查看更多关于 clock tree 的信息。

report_clock_tree -clock_trees CLK -structure -drc_violators –summary

时钟树结果主要 focus on clock skew, clock latency。 查看工具做出来的 skew 和 latency 是否符合设计要求,是否是最优的。如果不是,请根据实际情况进行调整和优化。

限于篇幅,本文还未介绍 CTS 中一个比较牛逼的功能——CCD(Concurrent Clock And Data)。这个功能用好了,往往可以使得设计的性能和功耗有个明显的提升(这个 feature 如果没用好,你可能会觉得它就是一个坑)。

关于 flow 中 CCD(Concurrent Clock And Data),后续会结合 ARM CortexA 系列 CPU 的后端实现来做一个分享。会以文档的形式推送到吾爱 IC 社区的知识星球上。应部分粉丝要求,近期知识星球上还会发布 ICC 和 ICC2 lab 对应的实践演练(由小编亲自实操 lab,进行知识点延伸,并以文档形式分布,绝对比官方的详细!)

这几天,粉丝越来越多了,提问的人也越来越多了。有的是重复的问题,有的则是新问题。对于之前我回答过的问题,想通过找历史回答记录,似乎很困难(要么去翻群历史消息,要么去翻个人历史消息)。

所以个人觉得这个不是长久之计,知识和解答不容易随着时间的积累而慢慢沉淀下来。所以小编注册了知识星球(原小密圈),建立了一个数字后端技术交流圈(需要付费,志愿加入原则)。

在这里,各位可以提问,小编会在 24 小时内给予解答(也可以发表你对某个知识点的看法,项目中遇到的难点,困惑或者职业发展规划等)。

反正它是一个缩减版的论坛,增强了大家的互动性。更为重要的是,微信有知识星球的小程序入口。星球二维码如下,可以扫描或者长按识别二维码进入。目前已经有六位星球成员,感谢六位童鞋的支持!

相关文章推荐(不看保证后悔)

【惊呆了!】你居然还在用 flatten 方式进行 timing signoff

数字后端面试问答 No.16-18

合理的时钟结构能够加速 Timing 收敛(时钟树综合中级篇)

数字后端面试问答 No.13-15(每日三问)

【机密】从此没有难做的 floorplan(数字后端设计实现 floorplan 篇)

数字后端面试问答 No.10-12(每日三问)

数字后端面试问题 No.7-9(每日三问)

听说 Latch 可以高效修 hold 违例(Timing borrowing 及其应用)

15 天零基础入门到精通 python - 最全的视频教程

数字后端面试问答 No.4-6(每日三问)

IR Drop 分析之 Redhawk 分析流程

CRPR 能补偿 crosstalk 吗?

原来电路最高工作频率是这么算出来的(STA 基础篇)

数字后端面试问答 No.1-3(每日三问)

秒杀数字后端实现中 clock gating 使能端 setup violation 问题

教你轻松调 DCT 和 ICC 之间 Timing 与 Congestion 的一致性

数字芯片设计实现中修复 setup 违例的方法汇总

数字 IC 设计中 ECO 的那些事,其实并不是事!

Scan chain reordering 怎么用你知道吗?

如何评价数字后端设计中 floorplan 的好坏?

数字后端实现时 congestion 比较严重,你 hold 得住吗?

数字后端实现 place 过程进阶

Final netlist release 前,你应该做好哪些工作?

基于 Physical Aware 的动态功耗优化实现方案

深入浅出讲透 set_multicycle_path,从此彻底掌握它

【大师必备】最全的数字 IC 设计经典书籍电子版下载

你与数字后端大神的差距在这里,快来瞧瞧!

数字后端实现时 congestion 比较严重,你 hold 得住吗?

时钟树综合(clock tree synthesis)基础篇

【福利】数字 IC 后端各种 Userguide 下载

好了,今天的内容分享就到这里。另外,因为公众号更改推送规则,小编分享的每篇干货不一定能及时推送给各位。为了避免错过精彩内容,请关注星标公众号,点击 “在看”,点赞并分享到朋友圈,让推送算法知道你是社区的老铁,这样就不会错过任何精彩内容了。

如果你想和小编有更进一步的沟通交流的机会,欢迎加入小编知识星球,让我们一起学习成长,共同进步。相信在这里能让你成就一个更完美的自己

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

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

  • 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 后端设计实现领域的相关问题进行提问,也可以就职业发展规划问题进行咨询,也可以把困扰你的问题拿出来一起讨论交流。对于提问的问题尽量做到有问必答,如遇到不懂的,也会通过查阅资料或者请教专家来解答问题。在这里鼓励大家积极发表主题,提问,从而促进整个知识社群的良性循环。每个月小编会针对活跃用户进行打赏。

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

欢迎关注 “吾爱 IC 社区

微信号:ic-backend2018

https://mp.weixin.qq.com/s/uR8PDNv86-HBegvscVOXCA

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值