今天来聊一聊时钟树。首先我先讲一下我所理解的时钟树是什么,然后介绍两种时钟树结构。
时序器件传递信号的时候需要依赖时钟,而STA一项关键的检查就是不能有setup/hold violation。如果对于同一时钟域的两个时序器件,如果他们接收到的时钟之间有相位差,有可能会使setup/hold更难满足,如果产生violation,芯片就会发生逻辑错误。而时钟从时钟源到sink是需要一定的传播时间的,距离时钟源越远的器件传播时间越长。有的时候data的传播方向和clock的传播方向相同,如果不做任何时钟树处理,这种情况对setup有好处;有的时候data传播方向与clock传播方向相反,这就对hold有好处;而如果电路中存在反馈回路,那data传播方向就不确定。所以为了能使上述所有情况都有一个较好的时钟性能,我们会希望时钟到达每个时序器件的时间一样,也就是传播时间的差(skew)越接近0越好。时钟树的目的正是如此。因为时钟树实在太过重要,现在也是很多人研究的课题。
我想说的第一种结构就是H-tree。它的结构确实很形象的像一棵树,是应用最广的结构了。对于一个四四方方完全对称的芯片来说,H-tree会先从root长到整个芯片的中心,再分出两个trunk到芯片左右两侧,分出的trunk与root相互垂直,每个trunk再分两个垂直枝干出来……不断这样分下去,得到一个简单的分形结构,最终的leaf连接到相应的clock pin上。这样在物理上就可以保证每一个cell到root的走线长度一致,相应的net上的delay