ic后端学习笔记-CTS

目录

为什么要CTS

基础概念

CTS完成哪些工作

CTS时钟树结构

选择插入buffer还是inverter

时钟绕线步骤


为什么要CTS

CTS就是时钟树综合。时钟树就是指从某个时钟root点长到sink点的buffer/inverter树,时钟树综合,顾名思义,就是指对时钟树进行综合:生成时钟树,使得同一时钟尽量尽快、同时地到达不同寄存器,对抗时钟源到不同终点寄存器的距离的不一致,保证不同寄存器的相位一致。

CTS是P&R(Placement&Route)阶段的一个重要流程,它进行在placement之后,信号routing之前。在CTS完成后,design就有了真实的时钟(propagated clock,传播时钟。相对于CTS完成之前人为设定的理想时钟),在这之后就可以利用抽RC工具抽取design的真实RC用以后续的STA(Static Timing Analysis),进行精确的timing check。

 在CTS中,上面提到的尽量快其实就是latency尽量小,尽量同时就是skew尽量小。这也是CTS的两个重要指标:

smaller latency

smaller skew

除此之外,对于CTS的评价还有其他考虑,比如:

better timing

better power

longer common path

smaller area on chip

分别是指更优秀的时序性能,更合理的功率分配,更长的公共路径(减少OCV,on chip variation),更小的面积。简而言之,就是PPA的全方位提升。

基础概念

这里对CTS中会用到的一些名词作解释。

Latency:从时钟源端(source)到时钟终端(sink)的路径delay。

 Skew:不同sink的latency之差。分为global skew及local skew,global skew为同一时钟下的最大latency差,local skew为任意两个有时序关系的路径之间的skew。PR工具在分析timing时,更多关注的local skew。

 Useful skew:从进行timing check的路径的前后级借用一定的margin,来满足当前的时序要求。比如我们要对下图最后一级做setup check,而此时的slack为-1ns,存在违例。这时候我们向前一级比较充裕的slack借用1ns的时间,这时候两条路径都满足了时序要求。

NDR:Non-Default rule,非默认规则,比如2倍线宽,2倍线间距,可以减少latency,减少串扰。

Shielding net:屏蔽层,通常是地线,用来减少串扰并保证更好的占空比。

OCV:On Chip Variation,不同位置V&T不同导致的片上误差。

CTS完成哪些工作

如何使同一时钟在最短时间内同时到达不同寄存器呢?工具的优化目标就是:尽量将某个时钟到不同sink的路径做到相同长度。大体包括三个工作:

1.插入buffer/inverter

2.时钟绕线

3.检查timing

我的理解是,插入inverter和buffer会一定程度的增加路径的latency,通过对不同路径插入不同数量的buffer/inverter,并辅以尽量对称的时钟树结构(对称绕线),就可以平衡到达不同sink的时间差(skew)。

下面左图是没有时钟树的虚拟时钟连接,右图是做完CTS后的时钟树,这是一个H-树。可以看到它有着基本对称的结构和长度,并且有尽量长的common path。

CTS时钟树结构

除此之外,时钟树还有其他结构。下面左图就是上面示例中的H-树,优点就是对称结构的skew小,缺点是实际设计中这样对称的布线难度是非常高的,适用范围比较受限。右图是fishbone树(鱼骨树)。fishbone树有着较粗的主干,通常为多倍宽度,多倍线间距的NDR,其他寄存器像鱼的脊骨一样挂载在主干上,形成一个长条分布的时钟区域,不同分支之间的路径通过inverter/buffer做平衡。这样的好处是common path特别长,可以尽量减小OCV的影响,减小skew。坏处就是主干部分会占用非常多的绕线资源。适用于高速运算处理器。

 除此之外,还有为了减少反射电流影响的而收缩分支线宽的“裁剪状的H树”(下左c),为了减少走线长度的对称树“X树”(下左b),适用于分层时钟树设计的“平衡树”(下左d)。以及平衡效果更好但是更加复杂的网状时钟树(下右ab)。

选择插入buffer还是inverter

上面一直在讲可以通过插入buffer或者inverter来调节latency达到平衡时钟的目的,那在CTS中到底是插buffer还是inverter呢?答案是inverter。因为在进行CTS时要插入的buffer/inverter非常多,它们对信号带来的影响会累加,而相比于buffer,经过两级inverter驱动的信号具有更好的信号完整性(inverter是反相器,所以要两级)。

下图是信号经过等间距摆放的inverter驱动后的输出,它的上升下降沿都是对称的。而且inverter有自校正作用,就算有畸形也会在下一级inverter自动校正。这在时钟树中至关重要。

 下图是等距摆放的buffer。我们当然希望理想的buffer如下图中上面那行一样,信号怎么进去就怎么出来,这要求buffer由两个完全相同的inverter级联而成。而实际上为了节省面积,标准单元库的buffer是由一级小inverter驱动一个大inverter。

我们知道,影响单元延迟的因素包括input_transition和output_load,显然,这一大一小两个inverter的input_transition和output_load很不均衡,这会导致输出波形的上升下降沿的不对称,input_transition大于output_transition,造成占空比畸形。随着深度的增加,脉冲宽度也会被吸收的越来越窄。

 同时,inverter的leakage power也小于buffer,因此有更小的静态功耗;inverter的skew也会更小(skew会随latency缩放)。所以推荐使用inverter来生成时钟树。当然,inverter也有缺点,为了保证信号相位一致,inverter只能成对插入,导致skew不太好调。

总结:

时钟绕线步骤

要进行时钟绕线,进行CTS之前,首先要进行global总体绕线(optDesignGlobalRouteStep);接着工程师按照一定的CTS策略进行CTS配置(CTS configuration),包括NDR规则设置,clock cell类型设置,transition设置,线长&扇出数的设置等 ;接着工具进行时钟树综合,这中间又包括聚类,建立时钟树,修时钟树,反复迭代,最后balance;最后完成时钟的绕线。

上述是工具行为的描述,具体到工程师的工作思路及工作内容,可以参见:

数字后端基础技能之:CTS(上篇)_数字后端cts_IC后端小白的博客-CSDN博客

数字后端基础技能之:CTS(中篇)_ic后端cts_IC后端小白的博客-CSDN博客

数字后端基础技能之:CTS(下篇)_cts插入过多delay_IC后端小白的博客-CSDN博客

还没接触软件,对工具语言还很陌生,等深入学习后有新的体会再来补充。

  • 4
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
《Python学习笔记》是由皮大庆编写的一本关于Python语言学习的教材。在这本书中,作者详细介绍了Python语言的基础知识、语法规则以及常用的编程技巧。 首先,作者简要介绍了Python语言的特点和优势。他提到,Python是一种易于学习和使用的编程语言,受到了广大程序员的喜爱。Python具有简洁、清晰的语法结构,使得代码可读性极高,同时也提供了丰富的库和模块,能够快速实现各种功能。 接着,作者详细讲解了Python的基本语法。他从变量、数据类型、运算符等基础知识开始,逐步介绍了条件语句、循环控制、函数、模块等高级概念。同时,作者通过大量的示例代码和实践案例,帮助读者加深对Python编程的理解和应用。 在书中,作者还特别强调了编写规范和良好的编程习惯。他从命名规范、注释风格、代码缩进等方面指导读者如何写出清晰、可读性强的Python代码。作者认为,良好的编程习惯对于提高代码质量和提高工作效率非常重要。 此外,作者还介绍了Python的常用库和模块。他提到了一些常用的库,如Numpy、Pandas、Matplotlib等。这些库在数据处理、科学计算、可视化等领域有广泛的应用,帮助读者更好地解决实际问题。 总的来说,《Python学习笔记》是一本非常实用和全面的Python学习教材。通过学习这本书,读者可以系统地学习和掌握Python编程的基础知识和高级应用技巧,为以后的编程学习和工作打下坚实的基础。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值