本次主要分享的内容是时钟切换相关的设计,时钟切换在数字设计中也是很常用的设计,通常有一定的“套路”,本篇文章将会把“套路“拆开给你看。
关注公众号【TechDiary】后台回复“时钟切换”,可以获得相关Verilog代码和简单的验证testbench。
当我们在设计一些支持多时钟转换的外设驱动模块时,时常遇到需要无glitch切换时钟的情况。我们可以从分析问题的产生开始,再把整个问题拆解开来,逐一解决每个子问题。以下是本篇文章的目录结构:
- 切换时钟时的毛刺是如何产生的
- 为时钟加上一个“开关”
- 为时钟加上“指示灯”
切换时钟时的毛刺是如何产生的
当我们拿到时钟切换这个需求的时候,脑子里冒出的第一个想法是不是下面这样的?

assign clk_out = (clk_sw) ? clk_A : clk_B;
NONONO这样写太不优雅了,简单粗暴并解决不了问题。我们来举个例子看上面的电路结构在切换时钟时的表现:

需要特别说明的是clk信号是clk_sw的时钟域,从上面的图中可以观察到在时钟切换的时刻(clk_sw 1 -> 0)输出时钟出现了即不属于clk_A也不属于clk_B时钟周期的一段信号,这段信号称为时钟当中的毛刺。由于目前的数字设计基本为同步电路设计,时钟

本文探讨了在数字设计中如何实现无glitch时钟切换,重点在于理解毛刺的产生原因及解决方案。通过为时钟添加门控开关和指示信号,确保时钟切换的稳定性和系统可靠性。文章提供了Verilog代码和验证testbench,供读者参考。
最低0.47元/天 解锁文章
921

被折叠的 条评论
为什么被折叠?



