最近发现很多读者问到分段长clock tree的做法,小编今天给大家分享几个SoC芯片中复杂时钟结构设计的分段长clock tree的应用案例。希望对各位的学习和工作有所助益。
分段长clock tree案例一:
下图所示为大型SoC芯片典型时钟设计结构图。晶振IO会给整个SoC芯片提供24M参考时钟,再进入各个PLL进行时钟倍频,无毛刺时钟切换clock mux,clock gating,分频电路以及OCC电路,最终送到各个模拟IP或数字IP。

我们写sdc时会在晶振XIN_24M的输出XC端创建时钟(create_clock)。但它要去的地方有很多,default做clock tree时所有clock path分支都需要做balance的。这种工具行为肯定是不符合咱们设计预期的。因此,该案例需要使用分段长clock tree的方法来把整体clock tree长度做短。
这个话题之前在咱们社区知识星球上讨论过。小编把参考答案分享给大家。
主要处理方式是在各个功能模块最后一级的时钟输出端create_clock,create_generated_clock,并且在这些cell的输入端设置特殊的clock tree sink type,比如stop pin,ignore pin,floating pin,exclude pin等。

即便这样处理后我们发现**OCC(On Chip Controller)**电路中的occ controller的clock tree也会被拖得特别长,最终导致timing问题。


因此,对于设计中的OCC电路,我们还需要按照下图所示的分段长clock tree的方式来处理。
这里需要重点指出的是图中第二个Mux的输出端创建时钟后,我们还可以进一步在occ controller电路的前面添加一个clock guide buffer,用来隔离这个电路的reg和IP那路的reg。

分段长clock tree案例二:

要求以下几路做到等长,clock skew控制在50ps以内,clock tree insertion delay做到800ps!
1)from FF/Q to FF1_1/D through the FF1 CK
2)from FF/Q to FF2_1/D through the FF2 CK
3)from FF/Q to FF3_1/D through the FF3 CK
4)from FF/Q to FF3_1/D through the FF4 CK
这个案例特殊之处在于这思路要求做等长的path不仅有clock path,还有data path。由于寄存器的时钟端CK是default的clock tree终点,所以这里的典型处理方法也是采用分段长clock tree。
这里分享一个咱们社区复杂时钟clock gen设计时钟树训练营学员的解答,欢迎大家参与讨论。

分段长clock tree案例三:
这个案例来自典型SoC芯片中DDRPHY和Memory Controller dfi接口的时序问题。它们的时钟源头都是来自于同一个PLL,但各自的DIVIDER是不同的,而且这里涉及到Memory Controller,LPDDR4PHY和SoC Top的clock tree。clk_dfi clock tree的长度需要根据LPDDR4PHY内部的clock tree长度来做调整。
为了实现方便我们通常会在时钟进入DDRPHY之前创建一个clock guide buffer,用来分段长clock tree。

分段长clock tree案例四:
下图所示时钟结构设计,当我们长clock tree后会发现在scan mode模式下会有比较的hold violation。此时我们可以在scan mux的I1端创建一个clock guide buffer来分段长clock tree,从而实现灵活控制这路的clock tree长度的目的。
