打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
CTS的前世今生

 Clock TreeSynthesis,时钟树综合,简称CTS。时钟树综合就是建立一个时钟网络,使时钟信号能够传递到各个时序器件。CTS是布局之后相当重要的一个步骤,在现如今集成了上亿个晶体管的芯片上,如何设计一个合理的时钟网络,是一件非常具有挑战性的事情。个人认为相比于placeroute更依赖工具的能力,CTS是需要更多的人为干预。通常需要人工做的事情,那都是比较难弄的。在深入学习如何做好时钟树之前,以下这些概念和问题我们首先得先弄明白:

What’s the purpose ofCTS?

现代人做事情讲究先明确目标,才能未雨绸缪。那CTS的目标是什么?这是一个开放性的问题,每个人的答案都不尽相同。往大的讲就是建立一个合理的时钟网络,往小的方向讲,个人认为可以分为以下两点:

1)保持时钟信号完整性

2)平衡时钟树

 

首先看第一点,保持时钟信号完整性,这是最基本,也最重要的一点。那时钟信号的完整性包括哪些东西呢?时钟的传播延迟(Latency时钟偏差(Skew时钟转换时间(transition),时钟不确定性( uncertainy),时钟的级数…..这些参数构成了一个完整的时钟树,也是衡量时钟树性能的重要指标。并不是单一地认为这些参数越小越好,有利必有弊,整个PR流程中没有绝对的概念,而如何综合考虑这些参数,得出一个最优的组合,这才是CTS的精髓所在。那下面我来分别介绍一下这些概念。

时钟的传播延迟(Latency

时钟传播延迟Latency,通常也被称为插入延迟(insertiondelay)。主要指从Clock源到时序组件Clock输入端的延迟时间。它可以分为两个部分,时钟源插入延迟(sourcelatency)和时钟网络延迟(networklatency

 

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

network latency主要指从clock定义端到时序器件的clock pin端的延迟。

 

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

我们可以用如下命令来定义描述clock latency:

#specify sourcelatency

set_clock_latency1.9 -source [get_clocks SYS_CLK]

#specify clocklatency

set_clock_latency0.8 [get_clocks CLK_CONFIG]

 

latency值有什么用呢?其实这相当于一个target值,CTSengine会根据你设置的latency值来插入buffer(当然只是对network latency操作),做出一个接近于你设定的值,可能多一点,也可能少一点。latency值的大小直接影响着clock skew的计算和固定。因为我们的时钟树是以平衡为目的,假设你对一个rootsink设置了1nslatency值,那么对另外的几个sink来说,就算你没有给定latency值,CTS为了得到较小的skew,也会将另外的几个sink做成1nslatency。过大的latency值会受到OCVPVT等因素的影响较大(因为有time derate的存在)。

时钟的偏差(skew

时钟偏差(skew),这是CTS中相当重要的一个概念。在CTS中,由于时钟到每个寄存器的路径延迟不一样,造成信号到达 clockpin 的时间也不一样,寄存器也不会同时翻转。 Skew 的定义就是最长路径延迟减去最短路径延迟的值。一直以来,Skew都是衡量时钟树性能的重要参数,CTS的目的就是为了减小skew

 

Skew的类型分为很多种,

根据clockdata path的方向,skew可以分为positive skewnegative skew。如下图所示:

 

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

我们可以得到以下结果,

对于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 


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


这就是 usefulskew 的作用,可以向前,或者向后借time来修正 violation

限于篇幅所限,关于skew,我先简单介绍这些概念,许多深入的skew探讨后面我会专门写一篇文章来介绍它。

时钟转换时间(transition time)

时钟转换时间clock transition time ,也称为clock slew。通常是指电压从10%VDD上升到90%VDD所需要的时间,或者是从90%VDD下降到10%VDD所需要的时间,上升和下降时间过长意味着电路的速度很慢。如下图所示

sdc中,用以下命令来限制slew大小

set_max_transition0.1 -clock_path[all_clocks]

CTS来说,这也是一个target值,当你设定了一个slew target后,CTS engine会通过插入buffer或者upsize等操作,尽可能地去满足整个target值。当然,slew也不是越小越好,过小的slew会导致CTS阶段在clock path上插入过多的buffer,从而影响到skewbalance以及功耗和面积。

时钟不确定性(clock uncertainty)

定义了Clock信号到时序器件的Clock端可能早到或晚到的时间。主要是用来降低时钟抖动jitter对有效时钟周期的影响。值得注意的是,在setup check中,clock uncertainty是代表着降低了时钟的有效周期;而在hold check中,clock uncertainty是代表着hold check所需要满足的额外margin

来看下面一条reg2reg path. 对照着如下时钟波形图。可以写出下面的约束。


set_clock_uncertainty-fromVIRTUAL_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的时候,我们将时钟的不确定性设定为targetskewjitter值之和来模拟真实的时钟;而post-CTS之后,时钟树propagate delay已经确定,skew真实存在,所以uncertainty就是时钟的真实抖动值。因此preCTStarget skew不能设置的太大或者太小,这样会造成preCTSpostCTScorrelation不好。总结一下:

pre-CTS中,

setupclock uncertainty = jitter + clock treeskew

holdclock uncertainty = clock tree skew

post-CTS中,

setupclock uncertainty = jitter

holdclock uncertainty = 0 

时钟树级数

时钟树其实是由buffer一级一级串行级联下去组成,每一个分结点就化分成一级,如下图所示

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


 

至于第二点,“Balance clock sinks”CTS的目的始终是Balanceclock 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 clocktree?

最后一个问题,我们如何去评判一个clock tree. 这个问题留给大家,相信理解完前面的概念,大家应该有所思路了吧~~小编认为,不管tree怎么样,最终我们更关注于timing.

 

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
数字后端基础技能之:CTS(中篇)
时钟的Jitter和Skew(转)
CTS介绍——定义(2)
Design Compiler学习2
Ispatial | Early clock Flow
【学术论文】Multi-Tap FlexHtree在高性能CPU设计中的应用
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服