前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >怎么设计一个Gfree mux电路(含代码)

怎么设计一个Gfree mux电路(含代码)

作者头像
数字IC小站
发布2022-08-26 18:45:47
6250
发布2022-08-26 18:45:47
举报
文章被收录于专栏:数字IC小站数字IC小站

怎么设计一个Gfree mux电路

在数字电路的设计中,凡是碰到时钟的电路设计都是十分小心的,最怕时钟出现glitch,这种情况下,容易导致timing fail,或者传播亚稳态。

因此常见的做法都是在切时钟的时候把输出clk给暂停几个cycle,这样也仅仅是降低了performance。

循着这样的思路,我们可以设计一个Gfree Mux电路,即在两个clk切换之间设计反馈电路,只有当一个clk的输出暂停以后才去操作另外的一个clk。

(代码从本文末的阅读原文访问)

具体设计如下图所示:

这个图中的sync unit就是同步单元,其中包含了多级同步器,一般是由特定的同步DFF组成。由图中可以看出,只有当一个clk的ICG关闭以后,反馈信号才会同步到另外一个clk path的操作上,这样导致的后果就是,在两个clk切换之间会导致比较大的时钟停摆。

仿真结果如下图所示。

因为最终输出的clk out仅仅是将两个clk的输出进行或操作,理论上组合逻辑是很容易出现毛刺glitch的,因此此处能够保证不出glitch的秘诀是使用了ICG模块,因为ICG中包含有低电平触发的latch,只有当时钟为低电平时,才会起作用,保证了clk out的输出是正常的。

另外一个问题,这个电路为什么要多使用一级DFF,然后将输出再反馈给另一条path呢?能不能直接使用Sync Unit的输出反馈给另一条path呢?理论上,这个是存在风险的,在比较极端的情况下,一个clock和另一个clock之间的周期相差很大,那么就有可能存在一个clock还没被gating住,另外一个clock已经打开,这时就会导致glitch。

那么上述电路中,一次时钟切换会导致多久的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

时钟切换方式千万条,谨记无glitch是第一条。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-03-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 数字IC小站 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档