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