clock tree-构建低功耗clock tree

目录

1 场景

2 从芯片后端部门角度去构建低功耗clock tree

2.1 优化个数

2.1.1 评估标准

2.1.2 方法

2.1.3 实验前后对比

2.2 优化强度

2.3 clock tree常用实现命令和debug命令

3 从跨部门合作角度去构建低功耗clock tree

3.1 核心思路

3.2 流程

3.3 结果分析

4 总结

5 参考书

1 场景

后端完成项目部定的leakage power指标,但是在PTPX仿真动态功耗时,发现clcok tree动态功耗在block内部甚至整芯片中占比很大。公司项目部给出指标,希望大大降低clock tree动态功耗在整芯片功耗的占比。

首先我们先明白正常意义上的clock tree功耗包括从root点到寄存器CP端所有经过的cell的翻转功耗,包括clock 反相器/clock gate/其余clock逻辑cell/寄存器CP端的翻转功耗。

寄存器和clock逻辑cell是设计写好的,后端优化不了,所以只能从clock 反相器来优化,具体就是优化clock 反相器的个数和强度。

问题来了,为什么clock tree功耗会这么高呢?因为clock tree上的cell的翻转率远高于数据路径,并且clock 反相器DCCKND8/D12/D16等以及寄存器,本身的电流就大,功耗就高。

SDC create_clock创建 master clock点, create_generated_clock创建slave clock点。在CTS阶段,SDC转换为spec(时钟树规范文件)之后,create_clock创建的skew_group会包含create_generated_clock创建的skew_group,于是出现如下图所示的现象,所有slave clock点下面的寄存器都会被master clock所balance delay。

如图所示的时钟树完全可以满足timing要求,但是clock tree水分太多,包含了太多没有必要的clock 反相器cell。我们的目标是满足timing要求的情况下,去除水分,构建一个最少数量的clock cell的低功耗时钟树。

2 从芯片后端部门角度去构建低功耗clock tree

2.1 优化个数

方法核心:去除balance cell,又名去除兜圈子cell
方法特色:不用从物理版图下手,直接从clock debug窗口下手,通过修改spec完成

2.1.1 评估标准

        1.balance cell数量和分布 **cdb** **cwb**(只要是包含*cwb* *cdb*的INV,一定是兜圈子cell,非传输cell)

        2. clock cell数量

        3. INV级数

        4. latency

   宗旨:latency尽量短
   翻译:sinks该balance的balance,不该balance的INV级数/latancy尽量短,并且在应该balance的skew_groups中看能否继续优化关键路径长度

2.1.2 方法

        1. 观察:在clock tree debug窗口观察balance cell的分布(允许clock tree尾端也就是sinks前几级有分布,其余的都需观察分析)

        2. 进一步观察:寻找关键路径(lantency最长但是无balance cell)

        3. 优化:修改spec

                1. 将关键路径的sinks点从skew_groups去除

                2. 有些不需要和任何sinks进行balance的,可以从所有skew_groups中去除

        4. 进一步优化:在应该balance的skew_groups中看能否继续优化关键路径长度,通过调整距离或改变驱动强度等方法优化

        5. 分析timing:跑完PR,进STA分析,看看对timing的影响程度,重点观察大的TNS/WNS hold问题

        6. 迭代:CTS和STA反复迭代

                1. 优化目标:1.**评估标准** 2.timing情况合理

        7. 补充:

                1. 该不该balance的依据:

                        1. 提前预估:和前端或综合人员交流,需不需要这两簇之间有没有timing check

                        2. 事后反馈:根据pt timing结果,观察大的WNS hold问题,说明tree之间需要balance

                2. 特殊情况:skew groups不只存在于sinks,也存在于trunk中的分频器

2.1.3 实验前后对比

                                                                             实验前

                                                                            试验后

2.2 优化强度

在CTS阶段设置clock invter选型/max_fanout/clock net线长,通过实验结果反馈来选择合适的配置。

2.3 clock tree常用实现命令和debug命令

innovus UG Design Implementation Capabilities/Clock Tree Synthesis

1. 常用实现命令

#可以为每个skew group设置一个target skew和insertion delay
set_ccopt_property -skew_group name target_skew value
set_ccopt_property -skew_group name target_insertion_delay value
# 修改skew_groups的sinks
modify_ccopt_skew_group ignore pin/stop pin/exclude pin
# 指定sinks的rank
rank
# 为sink点设置insertion delay
set_ccopt_property -pin mem1/CK insertion_delay 1.2ns

2. debug命令

innovus UG P489

3 从跨部门合作角度去构建低功耗clock tree

3.1 核心思路

在芯片设计中,部门流程上越往前走,对设计越了解,做改动会产生更大的优势。这种方法的核心思路就是IP设计者提供哪些模块之间的寄存器可以balance,哪些模块之间的寄存器不需要balance,让后端获得更多信息,尽可能的从源头上优化clock cell数量。那么IP设计者如何判断呢?简单来说就是这两个模块之间的寄存器是不是有大量的timing check,如果有大量的timing check,则这两个模块需要balance,如果只有少量的timing check,则这两个模块之间不需要timing check。

3.2 流程

跨部门设计流程图

  1. IP部门提供模块寄存器的时钟公共点,一般来说是clock gate输出pin。
  2. STA写SDC时,在这些clock gate输出点create_generated_clock
  3. 后端在flow里设置这些模块的寄存器单独长clock tree,不与其余模块的寄存器balance delay。实现命令如下

参考书籍《Configure Debug Complex Clock Network CCOpt》如何让slave clock下的slave skew group从master clock下的master skew group中剥离出来。

3.3 结果分析

                                                                  实验结果数据                                     

                                                                  clock tree调试工具

IP部门仿真PTPX后,跑不同case,对比三版动态功耗,发现优化明显,具体结果数据我这里没有。

跑了三版数据:

  1. 用默认SDC长得tree跑完postroutehold
  2. IP提供的时钟公共点list,后端将list下的寄存器从master clock下剥离出来,使之满足仅模块内部的寄存器之间balance delay,但是保留master clock创建的top skew group,这样不在list下的寄存器会继续在top ske group内部参与balance delay.
  3. 与第二版的区别是不保留master clock创建的top skew group,不在list下的寄存器不参与任何balance,按最短长tree。

结果分析:

  1. 反相器DCCK*个数优化明显,在13.7~16.5%
  2. 时钟树调整会影响少部分path的timing,导致修复hold插入buffer。
  3. leakage power无影响(减少的clock 反相器与增加的修复hold的buffer,使得Leakage总体保持不变,而动态功耗来说,减少的反相器带来的动态功耗的收益远大于数据路径上插的buffer)
  4. density无影响
  5. PTPX动态功耗评估提升明显

结论:

  1. list覆盖的寄存器越多,覆盖率越高,则优化个数更明显提升,并且对timing影响也会减少。
  2. 对于低频设计,推荐采用第二种方案处理。对于高频设计,且模块间独立性很差,则推荐采用第三种方案处理。

4 总结

构建低功耗clock tree的方法原理很简单,就是将该balance delay的寄存器balance,不该balance delay的寄存器不balance,最后时序符合要求就行。跨部门合作,从设计源头了解设计联系,优化力度大;仅后端部门设计,优化力度小,但也很明显。目标和方法知道了,难点是探索能实现方法的命令,需要多结合书籍和实验,最终达到目的。各位读者有更好的办法或者意见,多多交流,也可私信我继续宁更深入的交流。

5 参考书籍

《Configure Debug Complex Clock Network CCOpt》

《基于40nm数字芯片的复杂时钟树结构分析和优化》

《innovus user guide CTS章节》

《更多的是来自于不断的实验和结果分析》

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值