大家好,我是数字小熊饼干,一个练习时长两年半的ic打工人。我在两年前通过自学跨行社招加入了IC行业。现在我打算将这两年的工作经验和当初面试时最常问的一些问题进行总结,并通过汇总成文章的形式进行输出,相信无论你是在职的还是已经还准备入行,看过之后都会有有一些收获,如果看完后喜欢的话就请关注我吧~谢谢~
大家好,本期文章我们来聊聊一种在芯片中常见的器件缓冲器buffer,这种器件不仅在我们的时钟树上,还在数据路径上有着大量的应用。接下来就让我们好好了解一下这种常见的器件。
一、buffer的功能
buffer的结构是偶数个反相器的级联或者是类似结构的电路,buffer的一个特点是其输出的信号和输入的信号是相同的,不会改变逻辑值。如下面的真值表所示:
既然buffer不会改变信号的逻辑值,那么其作用到底是什么呢?事实上buffer的功能主要有以下两点:
- 提高驱动能力。
- 优化时序。
这里的驱动能力指的是:前级电路的输出信号可以在规定时间内被后级电路有效响应。而所谓的提高驱动能力,就是指在电路中插入buffer后,后面可以挂更多的负载(扇出)而其输出信号不会失真,如下图所示:
如果电路的负载过大,将导致其输出电流不够,输出信号上下边沿不够陡峭,即图上的第二种的信号一样。而在插入buffer后,由于buffer的驱动能力比较强,最终输出的信号会是第一种而非第二种。这种信号的边沿陡峭程度可由转换时间(transition time)进行定量描述,信号的转换时间越短,代表着该单元内部电路的驱动能力越强,延时就越短。
二、buffer的应用
由于buffer的种种特性,在芯片中的时钟树以及各种路径上有着非常重要的应用,接下来我们进行具体的说明:
2.1 buffer在时钟树上的应用
在芯片中,时钟源输出的时钟信号需要驱动大量的寄存器,单独依靠时钟源的信号驱动能力明显是不够支撑其如此之大的扇出。
因此,正确的做法是添加大量时钟buffer,由这些buffer一级一级串行级联下去组成时钟树,每一个分结点就化分成一级新的分支,如下图所示:
在组成了时钟树后,时钟直接驱动buffer,由buffer驱动后面的寄存器,这就相当于通过插入buffer减少了时钟树各个分支的负载数量,因此各个时钟树分支的驱动能力就会比较强,从而使得时钟的的传播延迟和时钟的转换时间变得比较小。
下图展示了一种时钟树的例子,该时钟树分为3节结构,第一节是从时钟的根节点(clock root)后的一长串缓冲器链组成;第二节是时钟网格(global clock mesh),这种时钟网格最显著的特点是使用多个缓冲器进行驱动;第三节是连接各个触发器的局部时钟树。
由于时钟的根节点到达每个寄存器的时钟端的路径不同,因此到达的时间也会不同,即存在时钟偏移(clock skew)。在我们前面的文章中提到过建立时间和保持时间裕量的计算方式:
Tsetupslack=Tclk+Tskew-Tco-Tcomb-Tsu>=0Tholdslack=Tco+Tcomb-Tskew-Thd>=0
从上面的公式可以看出:
-
对于建立时间来说,时钟偏移越大越有利满足建立时间(即时钟到达目标触发器的时间与源触发器之间的时间差越大越好);
-
对于保持时间来说,时钟偏移越少,越有利于满足保持时间(即时钟到达目标触发器的时间与源触发器之间的时间差越小越好)。
因此,我们可以利用buffer来对时钟偏移加以控制,使其处于一个能够满足建立时间和保持时间的合理值。比如在下图的例子中,由于组合逻辑的延时过大,而导致了建立时间违例,因此我们可以通过增加第二个目标触发器的时钟路径延时,使得时钟偏移变大,从而避免时序违例:
大家观察上图可以发现,在图中的第二个触发器的时钟端是通过加buffer来增加延迟的,这似乎是与我们之前说的加入buffer可以增加驱动能力以及优化时序相矛盾,实际上,buffer本身便有延时,如果插入buffer前的路径上的驱动能力已经足够强,信号的转换时间也比较小,那么再插入buffer也起不到优化的作用,反而会带来更多的延时,上图中就是利用buffer的这种特性来增大时钟偏移的。
2.2 buffer在数据路径的应用
接下来我们介绍插入buffer在数据路径起到的作用。
在芯片内部,触发器之间通过导线连接,通常来说导线的延迟是和其长度的平方成正比,如果某条路径很长的话,那么导线本身的负载电容就不容忽视,会导致很大的延时。
这种情况下,我们可以等间距插入N个buffer,原本的路径分为N+1段,其中每一段buffer驱动的负载电容较少,在给定相同的电压时,由于电路的负载电容减少,自然对电容的充电速度变得更快了,这就使得信号的上升沿变得更加陡峭;同理,当电容放电时,由于负载电容变少,因此放电的速度也会变快,这也就使得信号的下降沿也变得更加陡峭。
因此由于信号的转换时间变小,路径的延迟也随着变小。所以即使buffer本身也会带来延时,但是插buffer减少的延时大于buffer自身带来的延时,仍然可以实现对时序的优化。
三、总结
以上是buffer功能的简要介绍啦,在下篇文章中,我们将之前提到过的时钟门控、时钟分频、时钟切换、osc和pll等电路组合起来,就可以组成一个基础的时钟和复位产生模块(CRG, clock reset generator)中的时钟部分电路,我们将在下篇文章对其进行介绍,那么我们下次再见~
往期时钟篇文章:
[ic基础|时钟篇:关于时钟切换的二三事(https://mp.weixin.qq.com/s?__biz=Mzk0MTY1MDgxOQ==&mid=2247483928&idx=1&sn=342d3b609557fd94d01adadc2dd6d7f7&chksm=c2ce64f4f5b9ede2e7e0c7e42d936ec49ef6952e3a11e82905794d20012b0f26042ed590a162&token=162837663&lang=zh_CN#rd)
ic基础|时钟篇02:关于时钟分频器的二三事
ic基础|时钟篇03:低功耗技术之——门控时钟clock gating及锁存器latch的避免
ic基础|时钟篇04:原来芯片中的时钟是这样来的?一文带你了解芯片中的时钟源头——osc振荡器和pll锁相环
如果你喜欢这篇文章的话,请关注我的公众号-熊熊的ic车间,里面还有ic设计和ic验证的学习资料和书籍等着你呢~欢迎您的关注!