在开始之前有两件事想征求一下大家的意见:

最近有同学反映文章中很多专业词汇不太明白,因此想开一个系列专门讲一些后端的基础知识和词汇,毕竟后端的知识颇为繁杂,对入门者极为不利。因此如果大家有不懂的知识尽管留言,我会以适当的形式统一讲解。
如果有人对提高效率的脚本、命令等感兴趣,我也想将自己的一点经验和大家分享。如果大家有实际工作或学习中遇到的这方面问题也可以留言提出来,看看能不能有比较好的解决方案。
言归正传,上次讨论了CTS的策略以及CTS用的SDC的基本写法。在进一步讨论之前,我们先回忆一下CTS的基本流程:

在我们已经决定了如何进行时钟树综合后,就需要对EDA工具进行一系列的设置来使其能够忠实地反应我们的策略。因此,今天我们谈谈CTS的设置。

有人可能担心不同的工具中CTS的方法是否会有不同。以我接触过几种主要的工具的经验来看,虽然某些设置的叫法可能不同,但是其本质并没有变化。比如Innovus的CCOpt中将这些设置称为CTS spec,但是其本质内容大同小异。

在具体讨论CTS设置之前,我们首先需要了解工具在CTS阶段的行为到底是什么。换句话说,所谓时钟树综合,到底是在综合什么东西呢?

时钟树综合阶段,工具首先对clock line上的cell/net进行DRV优化,主要包括max_transition, max_capacitance, max_fanout, max_net_length等约束;在此之后,会分别对每个clock的latency和skew进行优化,也就是尽量缩短每个clock的latency并减小sink之间的skew;最后,如果有clock之间的latency需要balance,还会将这些clock的latency尽量做平。

上述大部分是工具的自发行为,但我们依然可以通过各种设置来调整这些行为。下面我们将一一对CTS的基本设置进行说明和讨论。

Target Skew:clock内部或clock之间需要实现的目标skew值。
在之前的文章中提到过,对于CTS我们需要达到三个目标:skew尽量小、latency尽量短、common path尽量长。而target skew这个设置的目的就是告诉工具,我们希望时钟树综合后能够达到的skew值是多少。在ICC2中可以采用如下命令实现:

set_clock_tree_options -target_skew 100 -clock CLK ;# unit : ps

Clock Max Transition: clock line上cell的最大transition/slew值。
我们知道transition基本是cell高低电平翻转所需要的时间。对于clock line上的cell,我们一般需要对其施加比其他cell更严格的transition约束。不同工艺,不同design和不同时钟频率的芯片对此可能都有不同的设置,但是我们可以大致遵从时钟周期的10%-20%的规律。对于某些频率较低的design可能需要更紧的约束。在ICC2中可以通过如下命令实现:

set_max_transition 200 -clock_path [get_clocks CLK] ;# unit : ps

CTS exceptions:精确控制部分时钟树的设置。在此我们遵从ICC的术语,在ICC2中某些术语已经弃用,但仍能找到对应的设置方法。
stop pin : 使CTS在某处停止或者用于告诉工具将某些pin/port辨认为sink;

set_clock_balance_points -clock clock -consider_for_balancing true -balance_points pins

exclude pin : 将某些pin/port从balance对象中移除,否则CTS将默认balance所有sink;

set_clock_balance_points -clock clock -consider_for_balancing false -balance_points pins

float pin : 用于对某些sink设置useful skew。用法为在sink的clock pin上加上一个正的或者负的delay,从而使工具在计算latency的时候考虑到这些delay而把clock tree做长或者做短。

set_clock_balance_points -clock [get_clocks CLK] -delay 50 -balance_points [get_pins U2/CLK]

non-stop pin : 工具CTS时可能会在某些地方停住,此时我们需要告诉工具穿过这些地方 继续向前,比如分频DFF。在ICC2中取消了原来在ICC中存在的non-stop pin设置,改为统一在sdc中通过create_generate_clock来实现这一功能。

CTS cells : 控制clock line上使用cell的种类。
因为我们需要clock line上的delay和variation尽可能的小,所以很多时候就需要人为规范CTS时使用的cell种类。一般在多种Vth共存的design中,我们总是会使用最快的cell,同时尽可能避免特别小和特别大的cell用于CTS。

set_lib_cell_purpose -include cts [get_lib_cells $cts_cells]

Clock Routing Rules : 控制时钟树上net的绕线规则。包括金属层、线宽、线间距、是否需要shielding等(NDR:Non-Default Rule)。
一般来说clock绕线需要选取尽量高层的金属,尽量宽的线宽来实现更短的latency,同时需要尽量宽的线间距来降低crosstalk的影响。因此,常用的routing rule可能包括2x width 2x spacing, 3x width 2x spacing等,有些公司可能还需要加上shielding。此设置可应用create_routing_rule来实现:

create_routing_rule CTS_NDR -default_reference_rule
-widths { M1 0.1 M2 0.11 M3 0.11 M4 0.11 M5 0.11 }
-spacings { M2 0.16 M3 0.45 M4 0.45 M5 1.1 }

上述routing rule还有很多其他option,大家可以在实际使用中慢慢体会。

设置balance groups。
在实际设计中,我们有时可能会遇到某些path的launch和capture分属于不同的clock,因此需要对不同的clock进行balance。可以通过下面的命令实现:

create_clock_balance_group -objects {clk1 clk2 clk3} -name balance_group1

至此,CTS的基本设置就算告一段落了。其实在ICC2中还有很多其他的option和命令来微调CTS,但是对于clock不太复杂的design,上述设置完全够用了。

除了保证CTS的基本质量之外,对于某些特殊design或者先进工艺,CTS的EM以及Power问题也是我们关注的重点。尤其是在传统CTS之外的一些特殊时钟树,比如H-tree, fishbone等,都是一些很有意思的话题。希望以后我们有机会能够共同探讨。

在下次CTS系列的最后一片文章中,我将会和大家聊聊如何调用工具命令跑CTS以及如何查看CTS的结果,同时会涉及如何debug一些CTS的常见问题,敬请关注。

喜欢的话不要忘了点赞~

原文首发于: 数字IC后端设计工程师修炼之路
​作者:阎浮提
更多后端技术相关的文章请关注我哦!每周都有更新哦

数字后端基础技能之:CTS(中篇)相关推荐

  1. 数字后端基础技能之:CTS(下篇)

    不知道为什么用原来系列的标题突然提示字数超出,可能最近知乎更新了标题字数限制.所以我把原来的Clock Tree Synthesis这几个单词去掉了.请谅解~ 拖了很久才写了CTS系列的最后一篇,很是 ...

  2. 数字后端基础——各种缩写定义

    BGA:Ball grid array,球栅阵列或焊球阵列封装技术,自提出以来发展迅速并成为主流的封装工艺之一.它是一种高密度表面装配封装技术,在封装底部,引脚都成球状并排列成一个类似于格子的图案,由 ...

  3. (4)FPGA面试技能提升篇(数字信号处理基础)

    1.1 FPGA面试技能提升篇4(数字信号处理基础) 1.1.1 本节目录 1)本节目录: 2)本节引言: 3)FPGA简介: 4)FPGA面试技能提升篇4(数字信号处理基础): 5)结束语. 1.1 ...

  4. 艾为数字ic面试题_每日学习:数字后端面试100问(2019全新版)

    关注并标星大同学吧 每天1次,打卡学习 积累1个新知识,增1分职场底气 作者称谓:Tao涛 个人介绍:摸爬滚打多年的数字后端工程师 微信公众号:数字后端IC芯片设计 半导体知识分享第29期 技能升级, ...

  5. 项目后期踩到这些坑,原来可以这么简单处理(数字后端实现救火篇)

    项目后期踩到这些坑,原来可以这么简单处理!(数字后端实现救火篇) 文章右侧广告为官方硬广告,与吾爱IC社区无关,用户勿点.点击进去后出现任何损失与社区无关. 最近一直在帮同事解决各种问题.由于临近项目 ...

  6. 数字后端基本概念-合集

    个人将基本概念重新整理 原碎片来源:Tao_ZT 个人空间 https: //blog.csdn.net/Tao_ZT 数字后端基本概念 macro Box 坐标 方向 standard cell E ...

  7. 数字后端面试100问(校招版)

    上次发布面试100问以后,应读者强烈要求,抽空写了一篇校招版的后端100问,希望对各位应届生面试有用.题目难度类型更偏向基础概念的理解.对于校招,由于在校学生缺乏实际项目经验,考官通常会更加注重学生对 ...

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

    秒杀数字后端实现中clock gating使能端setup violation问题 文章右侧广告为官方硬广告,与吾爱IC社区无关,用户勿点.点击进去后出现任何损失与社区无关. 点击标题下「蓝色微信名」 ...

  9. IC设计职位介绍之“数字后端设计工程师”

    IC设计职位介绍之"数字后端设计工程师" 数字后端处于数字IC设计流程的后端,属于数字IC设计类岗位的一种.在IC设计中,数字后端所占的人数比重一直是最多的,而且随着芯片规模不断加 ...

最新文章

  1. 华为全新发布开源操作系统欧拉:覆盖数字基础设施全场景
  2. v-model双向绑定原理_Vue数据绑定
  3. javascript宿主对象之window.history
  4. 2030年,逾1亿中国人需要学习新技能并转换岗位,这就是摩擦性失业
  5. 服务器cpu,内存正常, 部分网站打不开,提示死锁,应用程序池回收就正常,如何解决?...
  6. bzoj4919 [Lydsy1706月赛]大根堆
  7. C++ 常用查找算法
  8. leetcode 1579. 保证图可完全遍历(并查集)
  9. mysql 扩展存储过程_MySQL4:存储过程和函数
  10. 全新的membership框架Asp.net Identity(1)——.Net membership的历史
  11. java 排序stackoverflow_爬取 100 万条 StackOverflow 问答后,我得出的结论!
  12. D3d/opengl texture yuv yuv420p nv12 yv12 等等 显示 以及传入shaderresource
  13. PreparedStatement解读
  14. 中国省市县信息JS文件(省--市--县)
  15. Buck_Boost电路分析 亲测
  16. Debian7系统安装python3
  17. locust 性能测试工具(V2.8.6)
  18. javascript 实现购物车多项物品累计求总价案例 ,价格保留两位小数
  19. css 剪辑图片_css实现图片剪裁
  20. 20180710-B · Craft Beer USA · ggplot2 geom_density_ridges_gradient 核密度估计峰峦图 字体设置 · R 语言数据可视化 案例 源码

热门文章

  1. git HEAD detached from origin 问题的解决
  2. 利用 mount 指令解决 Read-only file system的问题
  3. 如何使用putExtra()和getExtra()来表示字符串数据
  4. 如何在Python中创建常量?
  5. 怎么看端口有没有被占用?Win11查看端口是否占用的方法
  6. win11虚拟机如何安装 Windows11虚拟机安装步骤教程
  7. win11网络怎么优化 Windows11优化网速的步骤教程
  8. python结束线程类_Python线程指南(转)
  9. GPS :NEMA数据解析
  10. php求平均值的函数_最全计算机二级函数关键知识点汇总整理!