CTS的前世今生

Clock Tree Synthesis,时钟树综合,简称CTS。时钟树综合就是建立一个时钟网络,使时钟信号能够传递到各个时序器件。CTS是布局之后相当重要的一个步骤,在现如今集成了上亿个晶体管的芯片上,如何设计一个合理的时钟网络,是一件非常具有挑战性的事情。个人认为相比于place和route更依赖工具的能力,CTS是需要更多的人为干预。通常需要人工做的事情,那都是比较难弄的。在深入学习如何做好时钟树之前,以下这些概念和问题我们首先得先弄明白:
What’s the purpose of CTS?
现代人做事情讲究先明确目标,才能未雨绸缪。那CTS的目标是什么?这是一个开放性的问题,每个人的答案都不尽相同。往大的讲就是建立一个合理的时钟网络,往小的方向讲,个人认为可以分为以下两点:
1)保持时钟信号完整性
2)平衡时钟树
首先看第一点,“保持时钟信号完整性”,这是最基本,也最重要的一点。那时钟信号的完整性包括哪些东西呢?时钟的传播延迟(Latency),时钟偏差(Skew),时钟转换时间(transition),时钟不确定性( uncertainy),时钟的级数…..这些参数构成了一个完整的时钟树,也是衡量时钟树性能的重要指标。并不是单一地认为这些参数越小越好,有利必有弊,整个PR流程中没有绝对的概念,而如何综合考虑这些参数,得出一个最优的组合,这才是CTS的精髓所在。那下面我来分别介绍一下这些概念。
时钟的传播延迟(Latency)
时钟传播延迟Latency,通常也被称为插入延迟(insertion delay)。主要指从Clock源到时序组件Clock输入端的延迟时间。它可以分为两个部分,时钟源插入延迟(source latency)和时钟网络延迟(network latency)

source latency:主要指从clock source端到clock定义端的延迟,即是时钟源(例如PLL)到当前芯片时钟根节点(clock root pin)之间的延迟。
network latency:主要指从clock定义端到时序器件的clock pin端的延迟。

以下两张图分别定义了片上(on chip)和片外(off chip)中clock latency的描述
!

我们可以用如下命令来定义描述clock latency:
#specify source latency
set_clock_latency 1.9 -source [get_clocks SYS_CLK]
#specify clock latency
set_clock_latency 0.8 [get_clocks CLK_CONFIG]

那latency值有什么用呢?其实这相当于一个target值,CTS的engine会根据你设置的latency值来插入buffer(当然只是对network latency操作),做出一个接近于你设定的值,可能多一点,也可能少一点。latency值的大小直接影响着clock skew的计算和固定。因为我们的时钟树是以平衡为目的,假设你对一个root和sink设置了1ns的latency值,那么对另外的几个sink来说,就算你没有给定latency值,CTS为了得到较小的skew,也会将另外的几个sink做成1ns的latency。过大的latency值会受到OCV和PVT等因素的影响较大(因为有time derate的存在)。
时钟的偏差(skew)
时钟偏差(skew),这是CTS中相当重要的一个概念。在CTS中,由于时钟到每个寄存器的路径延迟不一样,造成信号到达 clock pin 的时间也不一样,寄存器也不会同时翻转。 Skew 的定义就是最长路径延迟减去最短路径延迟的值。一直以来,Skew都是衡量时钟树性能的重要参数,CTS的目的就是为了减小skew。

Skew的类型分为很多种,
根据clock和data path的方向,skew可以分为positive skew和negative skew。如下图所示:
!

对于positive skew,clock和data path在相同方向上。反之对negative skew来说,clock和data path在相反方向上。那它们对我们的design有什么影响呢?我们来看一下setup和hold的计算公式(这个公式大家应该很熟悉吧):

我们可以得到以下结果,
对于positive skew来说,它可以减少T的时间,相当于提升芯片的performace。但是它的hold时间会变得更加难以满足
对于negative skew来说,它的hold时间更加容易满足,取而代之的是,它会降低芯片的性能。

还有另外一种skew的分类方法,是我们更为常见的,根据时钟域以及路径关系, skew 可以分为 global skew , local skew , interclock skew。

Global skew 是指,同一时钟域,任意两个路径的最大 skew ,如下图所示。CTS时,工具更关注的是global skew, 会尽可能地将global skew做小

Local skew 是指,同一时钟域,任意两个有逻辑关联关系的路径最大 skew ,如下图所示,我们在分析timing的时候,更多地是关注local skew

interClock skew 是指,不同时钟域之间路径的最大 skew,如下图所示:

另外还有一种比较特使的skew就是现如今用得较多的useful skew,它也是二代CTS工具这么红火的一个特色。大概说一下useful skew的概念。
如下图:时钟周期为 10ns ,各时钟路径延迟如下:可以看到有一条路径的 slack 为 -1ns ,说明这条路径违规。可以看到与这条路径相关的 skew 是 T3-T2= -1ns 。


下面我们利用 useful skew 向前面一个 slack 比较充裕的路径(slack=2ns)借点 time ,来修正现在这条路径。如下图:

这就是 useful skew 的作用,可以向前,或者向后借time来修正 violation。
限于篇幅所限,关于skew,我先简单介绍这些概念,许多深入的skew探讨后面我会专门写一篇文章来介绍它。
时钟转换时间(transition time)
时钟转换时间clock transition time ,也称为clock slew。通常是指电压从10%VDD上升到90%VDD所需要的时间,或者是从90%VDD下降到10%VDD所需要的时间,上升和下降时间过长意味着电路的速度很慢。如下图所示

在sdc中,用以下命令来限制slew大小
set_max_transition 0.1 -clock_path[all_clocks]
对CTS来说,这也是一个target值,当你设定了一个slew target后,CTS engine会通过插入buffer或者upsize等操作,尽可能地去满足整个target值。当然,slew也不是越小越好,过小的slew会导致CTS阶段在clock path上插入过多的buffer,从而影响到skew的balance以及功耗和面积。
时钟不确定性(clock uncertainty)
定义了Clock信号到时序器件的Clock端可能早到或晚到的时间。主要是用来降低时钟抖动jitter对有效时钟周期的影响。值得注意的是,在setup check中,clock uncertainty是代表着降低了时钟的有效周期;而在hold check中,clock uncertainty是代表着hold check所需要满足的额外margin。
来看下面一条reg2reg path. 对照着如下时钟波形图。可以写出下面的约束。


set_clock_uncertainty-from VIRTUAL_SYS_CLK -to SYS_CLK -hold 0.05
set_clock_uncertainty -from VIRTUAL_SYS_CLK -to SYS_CLK -setup 0.3
set_clock_uncertainty -from SYS_CLK -to CFG_CLK -hold 0.05
set_clock_uncertainty -from SYS_CLK -to CFG_CLK -setup 0.1
在pre-CTS的时候,我们将时钟的不确定性设定为target的skew和jitter值之和来模拟真实的时钟;而post-CTS之后,时钟树propagate delay已经确定,skew真实存在,所以uncertainty就是时钟的真实抖动值。因此preCTS的target skew不能设置的太大或者太小,这样会造成preCTS和postCTS的correlation不好。总结一下:
在pre-CTS中,
setup的clock uncertainty = jitter + clock tree skew
hold的clock uncertainty = clock tree skew
在post-CTS中,
setup的clock uncertainty = jitter
hold的clock uncertainty = 0
时钟树级数
时钟树其实是由buffer一级一级串行级联下去组成,每一个分结点就化分成一级,如下图所示

通常来说,我们期望时钟树的级数越少越好,因为这样tree上的common path最长,受到OCV和PVT因素的影响也最小,时钟的性能也最好。但是,这样情况下tree很难去生长完成,并且会导致过多的fanout,导致负载过大,延迟变差。因此这也是一个trade off 的过程。



至于第二点,“Balance clock sinks”,CTS的目的始终是Balance clock sinks。至于特殊的useful skew是会考虑到timing的情况下,做不到balance,这个放在以后单独开辟一章介绍。较小的skew值会得到较为平衡的时钟树,性能也越好,有利于时序收敛。

这里面有几个关于clock tree经常用的名词大家需要了解下
root pin指的是时钟的产生点,通常在create_clock定义
sink pin指的是时钟所到达的最后寄存器的ckpin
leaf net指的是时钟到达寄存器和它前一级buffer之间的net
trunk net指的是除去leafnet后剩余所有的net我们都称之为trunk,如下图所示

当然还有一种叫top net,是人为自定义的。我们可以把fanout超过指定数目的net,定义为top net. 但是CTS中的fanout和传统的fanout定义不一样,相比传统的只trace后面一级相比,它会一直trace最后一级。top net的存在可以让我们多一种方式去查看tree.
How to judge a clock tree?
最后一个问题,我们如何去评判一个clock tree. 这个问题留给大家,相信理解完前面的概念,大家应该有所思路了吧~~小编认为,不管tree怎么样,最终我们更关注于timing.

原文地址:http://blog.51cto.com/14075497/2344300

时间: 2024-10-22 19:32:49

CTS的前世今生的相关文章

Git前世今生-版本控制软件的发展

版本控制软件发展至今已有40多年的历史. 最早的版本控制软件是1972年由Marc J. Rochkind开发的SCCS (Source Code Control System),通过将不同版本下的文件单独保存的形式完成,将同一版本的所有文件打包保存.SCCS使用了长达10年的时间,直到1982年RCS的问世. 1982年,Walter F.Tichy 发布了RCS (Revision Control System),提供了较SCCS更多的功能,并作为GNU项目的一部分. 1986年创建的CVS

NetScaler SDWAN 的前世今生

                                                   论 NetScaler SDWAN 的前世今生 首先知道Citrix 思杰公司的人都知道Citrix 的网络产品线 有两款产品 ADC 应用交付平台产品-NetScaler 另外还有一款广域网优化的产品 这个名字可就变化频繁了 – 从WANScaler – Repeater – CloudBridge 到NetScaler SDWAN 平台产品.有很多人也许会产生一些困惑,是不是思杰公司有一个"

Python前世今生

Python前世今生 Python简介 Python前世今生 python的创始人为吉多·范罗苏姆(Guido van Rossum).1989年的圣诞节期间,吉多·范罗苏姆为了在阿姆斯特丹打发时间,决心开发一个新的脚本解释程序,作为ABC语言的一种继承. 最新的TIOBE排行榜,Python赶超PHP占据第五!!! 由上图可见,Python整体呈上升趋势,反映出Python应用越来越广泛并且也逐渐得到业内的认可!!! Python可以应用于众多领域,如:数据分析.组件集成.网络服务.图像处理.

Android兼容性测试框架(CTS)手册

了解老码农个人隐私,请看这里:http://www.koulianbing.com/?page_id=12 本文翻译自Android官方的CTS手册android-cts-manual-r4.pdf Android兼容性测试框架手册 1.为什么需要兼容性测试(以下称CTS)? 1.1.让APP提供更好的用户体验.用户可以选择更多的适合自己设备的APP.让APP更稳定. 1.2.让开发者设计更高质量的APP. 1.3.通过CTS的设备可以运行Androidmarket. 另外,CTS是免费的,而且

JavaScript的前世今生

和CSS一样,JavaScript在各浏览器下并非完全一致,它所带来的兼容性问题时常困扰着我们,以至于现在“能否处理流行浏览器的兼容性问题”成为了检验一个程序员是否合格的标准之一.了解JavaScript的前世今生或许能够帮助我们更好的理解和处理浏览器带来的兼容性问题.同时,初学者站在更高的地方去重新审视一下JavaScript,或许能够揭开它的神秘面纱,一旦它失去了神秘性而变得平易近人,学习起来就会更加轻松. 前些天,我看了一本书<JavaScript核心概念及实践>,邱俊涛著.书中过半的内

(转)关于浮动的前世今生

原文链接:http://www.qianduan.net/about-float.html 原文:all about floats译文:关于浮动的前世今生版权所有,转载请注明出处,多谢!! 什么是浮动? 浮动是 css 的定位属性.我们可以看一下印刷设计来了解它的起源和作用.印刷布局中,文本可以按照需要围绕图片.一般把这种方式称为“文本环绕”.这是一个例子: 在排版软件里面,存放文字的盒子可以被设置为允许图文混排,或者无视它.无视图文混排将会允许文字出现在图片的上面,就像它甚至不会在那里一样.这

Data Race Free 的前世今生

Data Race Free 是多线程程序是非常重要的概念,因为Java 和 C++的内存模型都是基于 Data Race Free 的,这篇文章将介绍这个概念的由来,另一篇文章<对Data Race Free的理解>介绍它的主要思想. 事情要追溯到遥远的1979年, Lamport 在他的著名论文 How to make a multiprocessor computer that correctly executes multiprocess programs 中提出了今后在内存模型领域被

HTML的前世今生

HTML的前世今生 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 三年前,我就听周围的一些工程师说,python就是一个脚本语言,没啥好学的,学JAVA吧,python能干的JAVA都能干,而且性能又好.确实如此,Python能干的活,JAVA都能干,而且效率还能实现的比Python高.而且JAVA在近几年的使用中排行榜中首居第一位.但是Python使用率是直线飙升我就不说了,这是大家有目共睹的.Python用途很广,就说我常用Python就写一些运维工具,链接数据库啊,做备

“通用类型系统”(CTS)

一.什么是"通用类型系统"(CTS) 描述类型的定义和行为 二.CTS规范 一个类型可以包含零个或者多个成员1,成员①字段(Field)作为对象状态一部分的数据变量.字段根据名称和类型来区分②方法(Method)针对对象执行操作的函数,通常会改变对象的状态.方法有一个名称.一个签名以及一个或多个修饰符.签名指定参数数量(及其顺序):参数类型:方法是否有返回值:如果有返回值,还要指定返回值类型③属性(Property)对于调用者,属性看起来是字段.但对于类型的实现者,属性看起来像是一个方