2. 内部逻辑时钟
内部逻辑时钟即指由芯片内部的组合逻辑或计数器分频产生的时钟。
对于组合逻辑时钟,特别是由多级组合逻辑产生的时钟,是要被严格禁止使用的,因为一方面组合逻辑极容易产生毛刺,特别是对多级组合逻辑;另一方面组合逻辑电路的Jitter和Skew比较大,这将恶化时钟的质量。所以,一般组合逻辑产生的内部时钟仅仅适用于时钟频率较低、时钟精度要求不高的情况。
对于计数器分频产生的时钟,也应该尽量少地使用,因为这种时钟会带来比较大的延迟,降低设计的可靠性,也使得静态时序分析变得复杂。计数器分频时钟需完成的逻辑功能完全可由PLL锁相环或时钟使能电路替代。
还有一种由触发器产生的时钟—行波时钟,即一个触发器的输出用作另一个触发器的时钟输入。文中1.1.2节描述的时钟分频电路就是一种行波时钟。因为各触发器的时钟之间产生较大的时间偏移,很容易就会违反建立时间、保持时间的要求,导致亚稳态的发生。所以,这种行波时钟要被严格禁止使用。
3. 门控时钟
一般情况下,应该避免使用门控时钟。因为经组合逻辑产生的门控时钟极可能产生毛刺,对系统造成很大危害。但对于某些功耗很大的系统而言,需要使用门控时钟来降低功耗。 我们推荐使用右图中描述的门控时钟的设计,该设计一般不会产生毛刺和亚稳态的问题。因为触发器避免了毛刺的产生,而亚稳态只可能出现在源时钟的下降沿,但是随后它与源时钟低相位相与,最后不会产生影响。
source_clk
clk_enqoutgated_clk
门控时钟最好只在顶层模块中出现,并将其分离到一个在顶层的独立模块中。这同时保证了底层的每个模块有单一的时钟,且在本模块中的时钟不进行门控。
在补充教程4和补充教程5中,我们对时钟和时序的设计进行了更详细的讨论。