转载于知乎:Inverter vs Buffer Based Clock Tree
Buffer 是 两个反相器的级联。对于CTS来说 (clock tree synthesis 时钟树综合),使用buffer或者inverters 有何不同呢?构建时钟树时,使用inverter或者buffer各自的优劣势是什么?数字后端工程师在做CTS时,将会考虑哪些因素?
基于inverter的时钟树
为了便于讨论,我们假设只是用一种 inverter 来做tree, 并且这些 inverter 都等距摆放。原理如图一所示。
图一:基于inverter的时钟树产生 相同的rise & fall time的波形
使用 inverter clock tree 的好处是,高低脉冲的宽度是对称的。对于时钟信号来说,这十分关键。特别是对于SOC的时钟信号来说,因为SOC中存在大量的正沿驱动和负沿驱动的flipflops 的交互。
基于buffer的时钟树
理论上,buffer是由两个完全相同的inverter级联而成,但这不是标准库单元中设计buffer的做法。为了节省面积,buffer的第一级通常驱动很小,并且离第二级inverter很近,而第二级 inverter的驱动力更大。
图二:基于buffer的时钟树是两个inverter的级联
值得注意的是,第一级 inverter 延时由 第二级inverter input load决定,因为两者的连线很短,所以连线电容可以忽略。但是对于第二级inverter来说,load 包含了连线电容和下一个buffer的input cap。(两级间的驱动和负载很难做到完全相同,译者加)这就造成了时钟信号的上升和下降延时的不均衡,进而造成了时钟信号的高低电平的宽度的不均衡。
图三:高低电平宽度的不同
为了满足时钟高低电平宽度的严苛要求,推荐大家用基于inverter的时钟树。
大多数标准库供应商会提供一个上升时间和下降时间相差几个ps的均衡buffer,其产生的时钟高低电平宽度有些许差别。这种差异(difference between high & low pulse widths)会随着时钟树的深度而加剧!
一种解决这种case的办法是,在buffer clock tree 的中间点插入一个inverter,难点在于如何找到这个中间点,使得插入inverter后,让高低电平到达 sink 的时间完全相同。