时钟无缝切换(Clock Switching Glitch Free)


时钟无缝切换(Clock Switching Glitch Free)

FPGA系统设计时可能遇到多个时钟频率输入而需要选择的情况,因此时钟切换电路是必要的,好的切换电路应做到无缝(Glitch Free),对此需要特殊设计。

参考文档:Intel(Altera)《Techniques to Make Clock Switching Glitch Free》
Xilinx ug472《7Series FPGAs Clocking Resources User Guide》

一、直接时钟切换电路

在这里插入图片描述
如上图是最简单的时钟切换电路,切换的时序图如下,但是因为组合逻辑电路的无保护性,十分容易产生glitch。
在这里插入图片描述

二、一种时钟无缝切换电路(Related clk switching with free-glitch)

在这里插入图片描述

1.实现思路:

想实现时钟的无缝切换,就必须先关断当前时钟,再开启新的时钟。“先…,再…”显然纯组合逻辑电路无法实现,因此采用时序逻辑电路结构是必要的,这也是用到D触发器和引入两个反馈线的原因。(原理类似RS触发器)

2.切换时序分析:

在这里插入图片描述
1.切换前:SEL为低电平,AND0和DFF0的Q输出始终均为0,CLK0无法达到输出端。DFF0的Q’为始终高电平,SEL过反相器后为高,使DFF1输出始终为高,使后级与门导通,CLK1输出。
2.切换后原时钟关断:SEL变高,AND1输出变低,但是低电平因DFF1触发器特性,在CLK1的下降沿Q才会输出,Q’也才会更新,因此待到SEL跳变后的CLK1下降沿,DFF1的Q输出为低,Q’输出高,且因SEL为高,Q永远为低,此时CLK1输出正式关闭(对应上图粉色虚线)。
3.切换后新时钟启动:因DFF1的Q’输出高,SEL也为高,因此DFF0输入端也变高,当CLK0的下降沿到来时,DFF0的Q输出为高(且永远为高),CLK1路径开通,至此完成切换过程。
切换过程总结:从SEL跳变开始后,当原时钟的下降沿到来时,输出为低电平,此时再待新时钟的下降沿到来时,正式完成切换过程,输出为新时钟。

3.细节注意:

1.为什么两个DFF采用下降沿触发,而不是上升沿触发?
(1)第一个原因:如果采用上升沿触发,在切换时存在竞争现象:DFF1的蓝色路径为tco时间+传播时间,而红色路径仅为传播时间,因此如果不加特殊处理,clk1的上升沿(红色路径)要比DFF1输出的低电平(蓝色路径)要早到达后级与门,从而可能产生一个高电平脉冲。而采用下降沿触发则不会,因为下降沿后自然为低电平,不存在出现正脉冲的竞争现象。
在这里插入图片描述
(2)第二个原因:SEL选择信号很多时候是由CLK0或CLK1的驱动下设计的逻辑变化,通常设计为posedge触发,而SEL在CLK的上升沿跳变,对该电路中DFF将存在亚稳态隐患。

2.电路对于的初始态是否有要求?
对于两个DFF,初始态应为“0”态,即Q输出为低,Q’输出为高,通常希望初始时候,不将未准备好的时钟选择输出,因此Q为0可以隔绝掉时钟输出,而Q’为高,则保证了两路时钟对输入级与门的有效性。
否则,存在一种现象,例如SEL为低,选择CLK1,但是如果CLK0自始至终都不存在,DFF0初始也为“1”态,那将直接影响CLK1部分的电路,导致CLK1也无法正常选择输出。

4.电路缺陷:

这种时钟切换器虽然是无缝切换,但是对切换的时钟和SEL信号时序是有要求的:
SEL不能在时钟下降沿切换,因为DFF是下降沿触发,因此SEL的切换时刻与时钟下降沿相同的话会导致亚稳态,正如上述细节注意的问题1的第二个原因,且两个时钟的同时下降沿也会造成DFF反馈后的亚稳态。因此两个时钟的相位必须是可预测的,即不能是完全异步的时钟,而应该是相关时钟(同源只是分频系数不同),才可通过约束对SEL信号与时钟沿相位进行调整,这也是决定了这种电路无法在完全异步时钟的切换中使用,需要改进,优化亚稳态现象

三、改进的时钟无缝切换电路(Unrelated clk switching with free-glitch)

在这里插入图片描述
在这里插入图片描述
对比前一种无缝切换电路,其在DFF前增加了一个上升沿触发的DFF,通过打拍缓冲的方式,改善了亚稳态现象,此时不再对时钟相位和SEL信号有任何强制要求,但是推荐SEL在原选择时钟的低电平期间(上升沿前)跳变,这样可以节省时钟缓冲的延时,充分利用了DFF_A上升沿触发的特性(这也是DFF_A采用上升沿触发的原因),但不满足也不会造成glitch。
另外,对于多路时钟切换(大于等于3),可基于上述电路模型,增加门电路输入和反馈线即可。

四、回顾Xilinx FPGA 时钟部件原语

1. BUFGCTRL

Xilinx-7全局时钟缓冲器(原语)很多,包括BUFGCTRL 、BUFG 、BUFGCE 、BUFGMUX 、BUFGMUX_CTRL等,其中所有资源都以BUFGCTRL作为基本模型,这些全局时钟资源功能无外乎:时钟拓扑缓冲、使能控制和时钟切换。
在这里插入图片描述
在这里插入图片描述
BUFGCTRL本质作用是实现两路输入时钟I0、I1的无缝切换,其余6个引脚均为控制引脚,由Table2-3真值表可知,当CEx和Sx均为高电平时,选择该路时钟输出,两路的CEx和Sx当同时为高电平时,保持原来的有效输入时钟,注意:默认控制信号切换后,原时钟由高至低跳变后,输出保持为低电平,直到新切换的时钟由高变低,此时切换过程完毕,输出与新切换时钟相同,以此过程避免了时钟切换时的毛刺冲突。如果只控制Cex, 而Sx预置,时钟切换后则不需等待原时钟的由高至低跳变。当IGNOREx置位时,切换时将忽略该路的Ix下降沿跳变过程。(时序图中的建立保持时间和延时时间在DS182:Kintex‐7 FPGAs Data Sheet: DC and AC Switching Characteristics 手册中有说明)
在这里插入图片描述

2. BUFGMUX

在这里插入图片描述
功能上看,作为一个带选择器(复用)的时钟缓冲器,实现二选一切换功能,通过增加非门逻辑控制BUFGCTRL的CE端实现,同一时间,两路输入的片选信号只有一个能使能。同样因控制引脚是CE脚,应满足setup时间,此时对应上述三种时钟切换电路中的第二种,可以设想其内部结构实现与上述电路图类似(Related clk switching with free-glitch)
在这里插入图片描述

3. BUFGMUX_CTRL

在这里插入图片描述
从BUFGMUX_CTRL与BUFGCTRL对比关系上看,与BUFGMUX很相似,区别在于控制的为S端,而非CE端。
S切换时,无论是否满足对I0当前选择时钟的下降沿的setup时间,都不会产生glitch(这是由BUFGCTRL的S和CE的控制性质决定的,若由CE端控制则必须满足setup时间),S控制端不满足setup时间时只是会多等待一个时钟脉冲,此时对应上述三种时钟切换电路中的第三种(Unrelated clk switching with free-glitch)。

五、一道经典数字IC的笔试题

(面试题目图片摘自知乎)
在这里插入图片描述
在这里插入图片描述
关于题目简述的问题,本文均已说明到。
切换过程的时序图如下所示:绿色基准线是SEL跳变时刻;粉色线是clk0的下降沿,原时钟关断时刻;蓝色为clk1的下降沿,clk1正式选通时刻。
在这里插入图片描述

总结

时钟切换过程中的glitch现象需要重视,对于xilinx-7平台,推荐使用BUFGMUX或BUFGMUX_CTRL原语进行切换。

  • 6
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Hongney

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值