有毛刺的时钟切换电路

原理图:

这个时钟切换电路是一个纯组合逻辑,输出时钟(OUT CLOCK)由选择信号(SELECT)控制,当SELECT为1时输出CLK1,反之,输出CLK0.

看似很简单,实现了时钟的切换,实则存在着很大的隐患,如下图所示:

对上图的Verilog描述:

assign outclk = (clk1 & select) | (~select & clk0);

相关时钟源的毛刺保护 

下图显示了防止源时钟相互倍数的时钟开关输出出现毛刺的解决方案。在每个时钟源的选择路径中插入一个负边沿触发的D触发器。 在时钟的下降沿采样选择控制(SELECT),以及仅在首先使其他时钟无效后使能选择(SELECT),可以提供出色的输出保护 :

下面简单的解释下这个电路:

当SELECT为0时,明显CLK1的那部分通路到输出无效,仅仅看下半部分电路即可,在CLK0的下降沿采样SELECT(取反后)信号,与CLK0相与之后输出;当SELECT为1时,同理上半部分电路有效;

需要重点分析的是当SELECT在任意时刻切换的时候,输出会不会出现毛刺?

首先SELECT为0,也就是在CLK0的下降沿采样寄存SELECT(取反后)信号与CLK0相与,输出时钟为CLK0;

当在图中时刻SELECT由低电平变为高电平,此时未到CLK0的下降沿,寄存器的输出还将一直是高电平(SELECT之前为0,取反为1),当到达CLK0的下降沿时刻,采样到SELECT为高电平,那么!SELECT为0,也就是下半部分电路从此无效,上半部分电路有效,此时需要等到CLK1的下降沿采样SELECT值,在此之前,输出仍未CLK0,到达CLK1的下降沿后,输出变成了CLK1和SELECT的与,也就是CLK1。由图可见,输出时钟完美切换,并没有出现斩波信号以及毛刺。

在时钟的下降沿寄存选择信号(SELECT)可确保在任一时钟处于高电平时输出端不会发生变化,从而防止斩波输出时钟(意思是下降沿寄存,可以保证下降沿到来之前输出端保持不变,这样就不会斩断当前时钟了)。 从一个时钟的选择到另一个时钟的反馈使开关能够在开始传播下一个时钟之前等待取消选择当前时钟,从而避免任何毛刺(意思是即使当前SELECT突然变化了,也必须等待到当前时钟的下降沿到来才能去使当前时钟无效,这一段时间就避免了毛刺(glitch));

该电路中有三个时序路径需要特别考虑 -  SELECT控制信号到两个负边沿触发触发器中的任何一个,DFF0输出到DFF1的输入,DFF1的输出到DFF0的输入。 如果这三条路径中的任何一条路径上的信号与目标触发器时钟的捕获边缘同时发生变化,则该寄存器的输出很可能变为亚稳态,这意味着它可能会进入理想的0和1两者之间的状态。

对上图的Verilog描述为:

reg     out1;reg     out0;always @(negedge clk1 or negedge rst_n)beginif(rst_n == 1'b0)beginout1 <= 0;endelse beginout1 <= ~out0 & select;endendalways @(negedge clk0 or negedge rst_n)beginif(rst_n == 1'b0)beginout0 <= 0;endelse beginout0 <= ~select & ~out1;endendassign outclk = (out1 & clk1) | (out0 & clk0);

针对无关时钟源的毛刺保护 

先前避免时钟开关输出处的毛刺的方法需要两个时钟源彼此的倍数,使得用户可以避免信号与任一时钟域异步。在该实现中没有处理异步信号的机制。

这导致实现具有同步器电路的时钟开关的第二种方法,以避免由异步信号引起的潜在的亚稳态。当两个时钟源彼此完全无关时,异步行为的源可以是SELECT信号或从一个时钟域到另一个时钟域的反馈。

如图3所示,通过为每个时钟源添加一个额外级的正边沿触发触发器来提供针对亚稳态性的保护。每个选择路径中的正边沿触发触发器以及现有的负边沿触发触发器防止潜在的亚稳态性,这可能是由异步SELECT信号或从一个时钟域到另一个时钟域的异步反馈引起的。

同步器只是两级触发器,其中第一级通过锁定数据来帮助稳定数据,然后将数据传递到下一级;

再看上图时序图,在CLK0的第二个时钟上升沿,采样数据为SELECT为1,但是要等到时钟的下降沿才被输出,这时CLK0的传播到此结束;

对上图的Verilog描述为:

reg     out_r1;reg     out1;reg     out_r0;reg     out0;always @(posedge clk1 or negedge rst_n)beginif(rst_n == 1'b0)beginout_r1 <= 0;endelse beginout_r1 <= ~out0 & select;endendalways @(negedge clk1 or negedge rst_n)beginif(rst_n == 1'b0)beginout1 <= 0;endelse beginout1 <= out_r1;endendalways @(posedge clk0 or negedge rst_n)beginif(rst_n == 1'b0)beginout_r0 <= 0;endelse beginout_r0 <= ~select & ~out1;endendalways @(negedge clk0 or negedge rst_n)beginif(rst_n == 1'b0)beginout0 <= 0;endelse beginout0 <= out_r0;endendassign outclk = (out1 & clk1) | (out0 & clk0);

总结:

通过使用本文中介绍的设计技术,可以通过非常小的开销避免在时钟源之间切换时在时钟线上产生毛刺的危险。 这些技术完全可扩展,可以扩展到时钟切换两个以上的时钟。 对于多个时钟源,每个时钟源的选择信号将通过所有其他源的反馈启用;

glitch-free的两个时钟切换电路相关推荐

  1. 【Verilog HDL 训练】第 14 天(glitch-free的两个时钟切换电路)

    2019年5月13日 glitch-free的两个时钟切换电路. 可以看到这是一个星期之前的题目了,现在才抽空做,把这篇颠倒个顺序吧,也是最后一天了,以后的题目都是讨论性质的,不会以第多少天的形式来写 ...

  2. 无毛刺的时钟切换电路(Glitch-free clock switching circuit)设计(Verilog)

    从秋招的经验来看,Verilog设计类的题目,如:奇偶分频,状态机,序列检测,波形产生,跨时钟域处理,门控时钟,同步FIFO,格雷码与二进制码转换,异步复位同步释放,时钟切换,异步FIFO等,其中最为 ...

  3. 时钟切换电路(clock switching glitch free)英文版

    链接: https://pan.baidu.com/s/1x9h8iM9T6CPArWLTdnMyhw 提取码: 347n

  4. 无毛刺时钟切换(glitch free clock switching)

    时钟切换电路的意义 为什么要做clock switching,在现代的SoC设计中,很多时候我们设计的模块并不是要跑在一个固定的频率下,而是根据性能和功耗的要求要跑在不同的时钟频率下,当需要降低功耗以 ...

  5. 时钟切换处理(Verilog)

    随着各种应用场景的限制,芯片在运行时往往需要在不同的应用下切换不同的时钟源,例如低功耗和高性能模式就分别需要低频率和高频率的时钟.两个时钟源有可能是同源且同步的,也有可能是不相关的.直接使用选择逻辑进 ...

  6. 数字芯片设计中的时钟分频电路,你了解多少?

    时钟分频电路在数字芯片设计中非常常见,而且也非常重要,正确的符合要求的数字分频电路对功能的正确与否至关重要.现在数字电路设计中的时钟分频主要包括以下几种方法: 1.寄存器分频 寄存器分频就是利用寄存器 ...

  7. 城轨的两类时钟系统均同步于_推介中央电视台4K IP化移动外场系统搭建中解决的主要问题...

    作者:中央电视台 孙培 根据4K超高清技术规划,中央广播电视总台各频道将逐步实现4K超高清体系的播出.为此,总台技术系统从前期拍摄.后期制作.总控.播出等全链路制作流程进行了4K超高清的建设改造.4K ...

  8. 基于51单片机远近光灯切换电路设计方案

    STC89C52单片机设计, 自动模式:通过光敏电阻检测光照强度,正常情况下,白天灯不亮,晚上的时候开启远光灯,通过超声波检测距离,如果距离小于30cm,那么远光灯转化为近光灯,超过30cm,近光灯转 ...

  9. 歪解单片机的时钟系统--关于内外时钟切换及时钟超频测试

    群友问过这种问题,外部接8M晶振和16M晶振有啥区别?        以我微薄的经验来看,这两个在用的时候差别不大,如果使用ST的固件库(以STM32F103为例),使用8M的晶振会更方便,不用改任何 ...

最新文章

  1. 日常记录-Pandas Cookbook
  2. mysql创建表为什么第二次,mysql当我加入同一个表两次聚合是错误的
  3. C 语言编程 — 高级数据类型 — 枚举
  4. hadoop集群配置文件与功能对应解析
  5. QT中播放音乐遇到的问题合集
  6. 简述osi参考模型各层主要功能_计软考研双日练 | OSI参考模型各层提供什么服务?...
  7. Equals 和 == 的区别
  8. android--------ExpandableListView的使用多级列表
  9. Secure CRT修改文件夹的颜色
  10. 使用yum命令安装服务时,一直卡在Loaded plugins: fastestmirror Determining fastest mirrors
  11. 事业单位计算机岗位考公基吗,【事业单位】江苏统考考什么?公基、言语……题量分布!...
  12. cogs 2. 旅行计划
  13. 泊松分布 Poisson Distribution
  14. Redis缓存——(分布式锁)
  15. 什么品牌台灯最舒服?推荐最热门的护眼灯品牌排行
  16. Unity中的数学基础——矩阵
  17. 可替代50欧姆_50欧姆阻抗四层板射频信号隔层参考做不了吗?
  18. 深度学习项目开发流程
  19. labview—word报表使用
  20. 网络营销促销的方式有哪些?

热门文章

  1. 十六进制表示_计算机为什么用二进制和十六进制
  2. SOC芯片中VIP和IP之间的路由关系
  3. 基于I2S通讯MAX98357模块的JetsonNano声音外放
  4. 奥斯特洛夫斯基谈“幸福”
  5. 大请大家好啊 啊 啊啊啊 啊啊 啊啊 啊啊 啊
  6. 计算机主机运行轰轰响,电脑一直嗡嗡响怎么回事?电脑嗡嗡响解决方法
  7. 正则和常用的正则表达式
  8. 简单选择排序显示第K趟
  9. toefl 听力 archaeology
  10. Win11怎么把任务栏调到左边 Win11任务栏在下面怎么调到左边