• 注册
  • 查看作者
  • 数字IC backend 后端设计实现之时钟树综合clock tree synthesis实践高级篇

    数字IC backend 后端设计实现之时钟树综合clock tree synthesis实践高级篇

     

    时钟树综合定义

     

    时钟树综合就是指从某个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的

     

    衡量时钟树的几大指标

    时钟树综合的几大指标,吾爱IC社区小编之前推荐过,推荐阅读以下文章。

    时钟树综合(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所示。

    cts floating pin设置方法

    cts floating pin设置

    图2 未做inter-clock balance

     

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

    set_inter_clock_delay_options -balance_group "Clk1 Clk2" -balance_group_name group2

    cts inter-clock balance

    cts inter-clock balance

    图3  inter-clock balance后

    设置NDR rule

    为了防止clock上的crosstalk 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}

    CTS NDR设置

    CTS NDR

    图4  NDR setting

     

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

    route_zrt_group -all_clock_nets

    clock net shielding方法

    clock net shielding方法

    图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

    IO clock latency adjustment

    IO clock latency adjustment

    图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

     

    clock tree quality analysis

    clock tree quality analysis

    图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如果没用好,你可能会觉得它就是一个坑)。

     

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

     

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

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

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

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

       

        相关文章推荐

    揭秘数字IC后端时钟树综合要用clock inverter来build clock tree(min pulse width check)

    合理的时钟树结构能够加速Timing收敛(数字IC后端实现时钟树综合中级篇)

    数字IC后端时钟树综合质量问答篇

    数字后端实现时钟树综合(clock tree synthesis)基础篇

    从数字IC后端设计实现看先进工艺7nm实现的各种挑战

    数字后端设计实现后期碰到这些问题,如何做ECO?

    数字IC后端工程师多久可以拿到60万年薪?数字后端工程师的技能

    教你彻底搞懂ARM Cortex-A75 CPU的数字后端实现报告

    数字后端设计实现中这些低功耗设计经验,你真的懂了吗?

    深度解析create_clock与create_generated_clock的区别

    数字后端实现IR Drop分析之Redhawk分析流程

    CRPR(Clock Reconvergence Pessimism Removal)能补偿crosstalk吗?

    教你如何计算电路最高工作频率(静态时序分析之setup和hold time计算方法)

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

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

    数字IC设计修复setup violation的方法总结

     

    好了,今天的码字就到这里了,原创不容易,喜欢的可以帮忙转发和赞赏,你的转发和赞赏是我不断更新文章的动力。小编在此先谢过!与此同时,吾爱IC社区(52-ic.com)也正式上线了。吾爱IC社区(52-ic.com)是一个专业交流和分享数字IC设计与实现技术与经验的IC社区。如果大家在学习和工作中有碰到技术问题,欢迎在微信公众号给小编留言或者添加以下几种联系方式进行提问交流。

    打赏的朋友,请长按下方二维码,识别小程序进行打赏,欢迎砸钱过来!小编晚饭能不能加个鸡腿,全靠它了,呵呵!

    作者微信:

     

  • 0
  • 0
  • 0
  • 4.9k
  • 请登录之后再进行评论

    登录
  • 单栏布局 侧栏位置: