怎么设计一个Gfree mux电路(含代码)
在数字电路的设计中,凡是碰到时钟的电路设计都是十分小心的,最怕时钟出现glitch,这种情况下,容易导致timing fail,或者传播亚稳态。
因此常见的做法都是在切时钟的时候把输出clk给暂停几个cycle,这样也仅仅是降低了performance。
循着这样的思路,我们可以设计一个Gfree Mux电路,即在两个clk切换之间设计反馈电路,只有当一个clk的输出暂停以后才去操作另外的一个clk。
这个图中的sync unit就是同步单元,其中包含了多级同步器,一般是由特定的同步DFF组成。由图中可以看出,只有当一个clk的ICG关闭以后,反馈信号才会同步到另外一个clk path的操作上,这样导致的后果就是,在两个clk切换之间会导致比较大的时钟停摆。
仿真结果如下图所示。
那么上述电路中,一次时钟切换会导致多久的clock 停摆呢?
假设原来的clk是clock0,理论上停摆时间是,需要先保证原有的clock0被gating,然后通过一级DFF传给clock1,那么需要1个clock0的cycle,然后将这个信号传输给Clock1的ICG,需要2到3个clock穿过Sync Unit,这个看实际工作频率和用户设置。以3个clock的Sync Unit为例,则最长需要1 clock0和3 clock1的时钟停摆,当然时钟之间存在skew,所以可能比这个稍微短点。
当然,在数字电路设计中,不仅仅只有上面这种方式设计gfree mux电路,面试笔试中最常见的方式则是这个方式:时钟切换中的glitch觉得有收获,希望帮忙点赞、转发~,本文原发于微信公众号【数字IC小站】