数字IC时钟树综合 clock tree synthesis

一、时钟的定义
时钟是同步工作系统的同步节拍。它是用来指挥保障SOC中各种功能模块,比如cpu,GPU,DRAM控制器,GPIO等的正常工作。那么何为同步工作系统或者同步电路?概括起来就是不同源一定异步,同源可以不是同步(同源大部分是同步)。

二、时钟源
无论你是从事数字IC前端或者是从事IC后端工作,你都需要搞清楚,芯片中的时钟是如何获取以及如何供应给各个功能模块。
1、外部直接输入时钟信号
这种情况比较少见。由于SOC系统中不同功能模块工作的频率不一样,因此从外部直接拉时钟信号进芯片,不具备可行性。对于某些特别简单的asic芯片,可能有机会用到这种方案。
2、外部晶振+内部时钟发生器
这种方案是从外部晶振引入IO,与内部时钟发生器产生一个24MHz时钟信号,然后供给各种功能模块。
3、外部晶振+内部时钟发生器+内部PLL产生高频时钟+内部分频器得到各种频率的时钟
这种时钟获取方式是目前SOC芯片设计实现中普遍采用的时钟产生方案。这个方案的整体思路是先从晶振,时钟发生器产生一个24MHz,再经过PLL产生倍频时钟(高频时钟),最后再经过分频电路产生各种频点的时钟供给各个功能模块。说到这里,吾爱IC社区小编留一个思考题给大家。为何不直接从外部晶振产生高频时钟,供给SOC使用呢?
三、SOC系统中时钟系统结构
无论是多大规模的SOC芯片,其时钟系统结构都与下图所示类似。在低功耗设计实现中,还需要考虑采用clock gating技术,即通过ICG来控制时钟信号是否传输到对应功能模块。图中的DIV为分频器,它可以是整数分频器,也可以是小数分频器。
如果碰到PLL倍频出来的时钟频率经过整数分频器后无法获得某个模块的工作频率,则需要采用小数分频器。小数分频器的前端设计相比整数分频要复杂点,但是从数字IC后端实现的角度看,没有什么大区别(数字IC设计面试经常会问到小数分频器的实现方法)
从本案例时钟结构图中,得知该SOC芯片采用了四个PLL,分别是APLL,MPLL,EPLL和VPLL。由于PLL的面积还比较大,我们在芯片中当然是使用的越少越好,毕竟面积就是白花花的银子。那么,为了节省芯片成本,在时钟结构规划阶段就需要先对整个芯片中的各大功能模块的时钟频率需求进行统计,设计分频器,最后计算出PLL的数量。 PLL位置
在数字后端实现中,PLL的摆放位置直接决定了时钟树的长度—clock tree latency。PLL位置的摆放需要先理解各路时钟的复用关系,PLL倍频后的时钟都要供给哪些功能模块以及这些功能模块的位置等。我们都知道衡量时钟树质量的两大指标是clock tree latency 和clock skew。如果PLL位置不合理,很有可能会把整个芯片的时钟树拖得很长。
如果时钟树长度太长,有哪些弊端呢?这个问题的答案,小编已经在公众号(ic-backend)和知识星球上分享过很多次了,如果你还不是很懂,可以再翻翻以前的文章或者知识星球问答。 一网打尽时钟树综合Clock Skew
很多数字IC后端工程师都觉得做时钟树综合只要设置好参数,就可以让工具自己build clock tree。如果你是这么认为的,有两种可能性。一种是你们的时钟设计很简单,可能就一两个时钟。另外一种是你们的设计timing要求很松,你们压根就没关心过时钟的长度。 合理的时钟结构能够加速Timing收敛(时钟树综合中级篇)
一般情况下,中等规模及以上的SOC芯片的时钟树综合,都是需要编写时钟树约束文件。因为时钟太多了之后,工具处理起来比较费劲,特别是当一堆时钟进行mux操作后,工具经常还会把tree做的很长。工具之所以做起来费劲,之所以做不好tree,主要原因还是时钟结构相对复杂,其复杂程度已经超出它的能力范围了。 如果我们能够对时钟结构进行拆分,把时钟结构很清晰地告诉工具,那么它还是能够做的非常漂亮的。当然这个前提是你要理清楚整个芯片的时钟结构。 画时钟结构图和写时钟约束文件都是数字IC后端工程师必备的一项工作技能,当然也是一项非常核心技能。如果这项技能能够很好的掌握,那么整个数字IC后端设计实现,还有比这更难的吗? 当你拿到一个design,你应该要能画出像上图所示的时钟结构图。有了这个图之后,写个时钟约束文件,那是水到渠成的事情。 这里结合本文的案例,简单解析下如何写时钟约束文件。 首先,可以把整个芯片的时钟路径分为三部分。第一部分是晶振—-> PLL,第二部分是PLL—-> CLOCK GEN,第三部分是分频器输出——-> 各个功能模块。 其次,搞清楚CLOCK Gen模块是用来产生各种分频时钟信号的,它本身并不会直接与其他逻辑进行一个交互。因此,该模块内的寄存器都和别人是异步的。如果把CLOCK GEN内部的寄存器和各功能模块的寄存器进行同步,会有什么后果呢?另外各个PLL出来的时钟一定是异步的。 最后,再整理下各个时钟路径的终点和clock exception,比如floating pin,exclude pin,non-stop pin,断开一些不需要穿过mux的时钟等等。
好了,关于数字soc时钟系统结构以及时钟树综合约束编写的相关内容就分享到这里。如果你对文章内容有任何疑问,欢迎前往小编的知识星球,进行提问。更多关于时钟树综合的干货(主要内容会分享到知识星球上),后续会不断更新,敬请期待!

本人转载地址:
http://bbs.eetop.cn/thread-868017-1-1.html?_dsign=7b38d5cc

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值