Glitch free 无毛刺时钟切换电路,时钟无缝切换,时钟无毛刺切换技术

news2024/11/25 3:02:05

、无毛刺时钟切换电路,又叫 Glitch free 电路、时钟无缝切换电路,在笔试中遇到过,如果没有接触过,很可能无从下手。

  随着越来越多的多时钟应用于当今的芯片中(尤其是在通信领域),在芯片运行时经常需要切换时钟源。通常的实现方式是:在硬件中复用两个不同频率的时钟源,并通过内部逻辑控制复用器 MUX。

    这两个时钟在频率上可能完全不相关,也可能成倍数关系。不管是哪种情况,都有可能在开关门控时产生毛刺(Glitch)。时钟线上的毛刺对整个系统是危险的,因为它可能使用边沿触发了部分寄存器,而其他寄存器却没被触发。

    在这篇文章中,使用两种不同的方式来避免输出时钟上有毛刺。第一种方法适用于两个时钟的频率有倍数关系,第二种方法适用于两个无关的时钟。

1. 实时的时钟切换的问题


The problem with on-the-fly clock switching

如图 1 所示为时钟切换的一个简单实现,使用 AND-OR 门组成复用器 MUX。

纯组合逻辑的时钟切换,由于为电平触发,不可避免会产生毛刺;

这个时钟切换复用器有 1 个控制信号 SELECT,当 SELECT = 0 时输出 CLK0,当 SELECT = 1 时输出 CLK1。

当 SELECT 的值发生变化,输出时钟从当前的时钟源切换到下一个时钟源,此时可能会产生毛刺。

如图 1-1 中的时序图所示,当 SELECT 控制信号变化时,在输出 OUT CLOCK 上产生了毛刺。这类门控开关的问题在于,SELECT 开关控制信号会在时钟源的任意电平位置发生变化,从而导致输出时钟截断或者产生毛刺。

SELECT 控制信号很可能是由两个输入时钟源中的某一个去驱动触发器产生的,这意味着如果两个时钟源的频率成倍数关系,那么 SELECT 和两个时钟源有已知的时序关系,否则 SELECT 可能至少和一个时钟源异步
不管是不是已知多个输入时钟源之间的频率或者相位关系,都不能在这些时钟源的高电平状态下进行切换(任一个高电平都不行,即对图 1,必须在 2 个输入时钟源均为低电平的时候进行切换)。如果两个时钟源有固定的关系,那么可以使用固定延时来减少两个时钟源起始和结束时间的差距。如果输入频率未知或者时钟不相关,则不能使用固定延时。

2. 相关时钟的无缝切换


Glitch protection for related clock sources

 如图 2-1 所示为相关时钟源的无毛刺切换解决方法。在每个时钟源的选择路径上,都插入一个下降沿有效的 D 触发器。

(这里为什么是下降沿,参考:门控时钟与控制信号电平、与门门控、或门门控、上升沿门控、下降沿门控)

在时钟的每个下降沿寄存选择控制信号 SELECT,并且只有在其他时钟的选择被释放后(无效后)才会使能新的时钟选择,这样对输出毛刺问题进行很好的解决。

    在时钟的下降沿处寄存选择控制信号,保证了控制信号不会在 2 个时钟源的高电平处进行跳变,这样就防止对输出时钟进行截断(截断导致毛刺)。

    一个时钟的选择反馈到了另一个时钟(两个 QN,即~Q),这种反馈机制使得门控开关在选择输出下一个时钟之前,必须先取消当前时钟的输出选择,这样避免了任何可能出现的毛刺 Glitch。

    假设此时 SELECT 在适中的高电平处进行了跳变,由于与门作用,需要等待其另一个时钟触发的寄存器输出 QN 也变化为 1 时,与门的结果  SELECT-1 才会变化,而 QN 的变化需要等待到时钟的下降沿才会变化,所以经过处理后的 SELECT-1 信号的跳变只发生在时钟的低电平处。
 

  如图 2-2 的时序图所示为 SELECT 选择信号从 0 到 1 变化时是如何影响的输出 OUT CLOCK 的波形。首先在 CLK0 的下降沿停止 CLK0 在 OUT CLOCK 上的输出,然后在紧接着的 CLK1 的下降沿开始输出 CLK1。

module glitch_2 (
  input clk0,    
  input clk1,
  input select,
  input rst_n,
  output clkout
);
 reg out1;
 reg out0;
 always @(negedge clk1 or negedge rst_n)begin
     if(rst_n == 1'b0)begin
         out1 <= 0;
     end
     else begin
         out1 <= ~out0 & select;
      end
 end
 always @(negedge clk0 or negedge rst_n)begin
       if(rst_n == 1'b0)begin
           out0 <= 0;
       end
       else begin
           out0 <= ~select & ~out1;
       end
 end
 assign clkout = (out1 & clk1) | (out0 & clk0);
 endmodule

分析:

1、当select=0时,F1的输出一直都是0,因此输出受F0和clk0影响,而F0的输入端始终为1,因此输出只受clk0影响,且同相;

2、当select=1时,输出受F1影响,但是由于之前F0有一段时间为1,只有在clk0下降沿才会读入输入0,此时输出保持之前状态,当clk1下降沿来之后,开始随clk1同相;那么在clk0下降沿来之后,clk1下降沿来之前的输出,输出由谁决定呢?

3、clk0的停止位置下降沿来之后,或门的下输入为0,而之前时刻的clk1的输出一直为0,所以输出还是为0;当clk1时钟下降沿来之后,才知道seelct变为1,以后输出就按照clk1变化了
 

在这个电路中有 3 条时序路径需要特别考虑:

(1)SELECT 控制信号到任意一个下降沿有效的触发器 ;

(2)DFF0 的输出到 DFF1 的输入;

(3)DFF1 的输出到 DFF0 的输入。

    如果这三条路径中的任一路径上的信号在目的寄存器时钟的捕获沿时发生变化,则寄存器的输出有一定的机会会进入亚稳态(meta-stable),这意味着会进入理想的 0 和 1 之间的一个状态。(在此例中,捕获沿均为下降沿)。

    亚稳态经过一段时间后会 随机的 稳定为 0 或者 1,这就导致两个寄存器可能采集到不同的值(一个认为是 0,而另一个认为是 1)。因此,这就要求两个寄存器捕获沿和 对 SELECT 信号的发起沿分开,以避免任何可能的异步接口。由于两个时钟源的时序关系是已知的,所以上述可以通过使用恰当的多周期约束(multi-cylce hold)或者最小延时(minimun delay)约束来实现。

    在芯片的启动时,DFF0 和 DFF1 两个寄存器都应该复位为“0”状态,这样在最开始时,两个时钟都没有被选中输出。通过在“0”状态下起点两个触发器,时钟开关内置了容错功能。

    假定在启动时有个错误导致其中一个时钟没有进行翻转。如果使用这个错误时钟的触发器的初始状态是“1”状态,而此时这个触发器由于没有时钟的翻转边沿触发,所以导致该寄存器的输出状态不变,这就阻止了对另一个时钟的选择。通过让两个寄存器都以“0”状态开始,那么即使有一个时钟没能正常的工作,另一个正常的时钟也能通过门控输出。
 

3. 不相关时钟的无缝切换

Glitch protection for unrelated clock sources

 在前一种避免输出毛刺的门控选择方式中,要求两个输入时钟源的频率有倍数关系,这样使用者可以(通过使用恰当的时序约束)避免信号与任何一个时钟域异步。这种实现方式没有处理异步信号的机制。

    这样,提出第二种实现方式,使用同步电路来避免异步信号带来的潜在的亚稳态风险。当两个时钟源完全不相关时,异步行为可能来自 SELECT,也可能来自另一个时钟域的异步的反馈信号。

    如图 3-1 所示,对每个时钟源路径上,各增加一个该时钟源上升沿驱动的触发器来避免亚稳态。时钟源路径上增加的上升沿有效的触发器,与现有的下降沿有效的触发器一起,用于减少 SELECT 或者异步反馈信号导致的潜在的亚稳态的概率。

    使用简单的两级寄存器搭建的同步器,第一级的寄存器通过锁存数据来稳定数据,然后将稳定后的数据传输到第二级的触发器,由电路中的其他部分来解释。
 

电路功能:两个异步时钟源切换电路;

DFF1和DFF3作用(每条路是前两个触发器):在选择路径插入一个上升沿触发器,用于缓存数据,将数据传递给下一级;若去掉,会电路产生由异步信号引起的亚稳态;

DFF2和DFF4采用负沿采用原因(每条路上的后两个触发器):SELECT与反馈输出相与,下降沿采样反馈可以保证一个时钟被完全取消选择后,输出才输出另一个时钟,从而避免产生毛刺

module glitch_DFF (
    input clk0,    
    input clk1,
    input select,
    input rst_n,
    output clkout
);
wire B;
reg   DFF3Q, DFF4Q, DFF4_Q;   //DFF4Q=Q,DFF4_Q=~Q
wire A;
reg   DFF1Q, DFF2Q, DFF2_Q;  //DFF2Q=Q,DFF2_Q=~Q

assign A = select & DFF4_Q;
assign B = ~select & DFF2_Q;

//第一级触发器用上升沿采样,选择信号与反馈信号的与运算
always@(posedge clk1 or negedge rst_n) begin
    if(~rst_n)
        DFF1Q <= 0;
    else
        DFF1Q <= A;
end
 //第二级触发器用下降沿采样
always@(negedge clk1 or negedge rst_n) begin
    if(~rst_n) begin
        DFF2Q <= 0;
        DFF2_Q <= 1;
    end
    else begin
        DFF2Q <= DFF1Q;
        DFF2_Q <= ~DFF1Q;
     end
 end
 //====================================================================
//第一级触发器用上升沿采样,选择信号与反馈信号的与运算
always@(posedge clk0 or negedge rst_n) begin
    if(~rst_n)
        DFF3Q <= 0;
    else
        DFF3Q <= B;
end
//第二级触发器用下降沿采样
always@(negedge clk0 or negedge rst_n) begin
    if(~rst_n) begin
        DFF4Q <= 0;
        DFF4_Q <= 1;
    end
    else begin
        DFF4Q <= DFF3Q;
        DFF4_Q <= ~DFF3Q;
     end
end

wire E, F;
assign E = clk1 & DFF2Q;
assign F = clk0 & DFF4Q;
assign clkout = E | F;
endmodule

4. 结论

Conclusion

    通过本文介绍的技术,可以避免时钟切换时产生的毛刺,而且开销很小。这些技术是完全可以进行扩展的,能用在多个时钟的切换上。对于多个时钟源,每个时钟的选择信号来源与其他所有时钟源的反馈。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1036781.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

shap-An introduction to explainable AI with Shapley values

An introduction to explainable AI with Shapley values 训练模型检查模型系数使用部分依赖图的更完整的图片从部分相关性图中读取SHAP值Shapley值的可加性解释additive regression模型解释non-additive boosted tree模型解释线性逻辑回归模型解释non-additive boosted tree逻…

Jenkins “Trigger/call builds on other project“用法及携带参数

1.功能 “Trigger/call builds on other project” 功能是 Jenkins 中的一个特性&#xff0c;允许您在某个项目的构建过程中触发或调用另一个项目的构建。 当您在 Jenkins 中启用了 “Trigger/call builds on other project” 功能并配置了相应的触发条件后&#xff0c;当主项…

python实验2

1、实验题目&#xff1a;个人用户信息注册 模拟用户个人信息注册&#xff0c;需要输入用户个人信息 姓名、性别、年龄、血型、身高、电话 信息&#xff0c;并输出显示。 源代码&#xff1a; print(用户个人信息注册) name input("请输入您的姓名&#xff1a;") sex…

Northstar 量化平台

基于 B/S 架构、可替代付费商业软件的一站式量化交易平台。具备历史回放、策略研发、模拟交易、实盘交易等功能。兼顾全自动与半自动的使用场景。 已对接国内期货股票、外盘美股港股。 面向程序员的量化交易软件&#xff0c;用于期货、股票、外汇、炒币等多种交易场景&#xff…

1.2 kV SiC SWITCH-MOS 在短路应力后的分析

标题&#xff1a;Analysis of 1.2 kV SiC SWITCH-MOS after Short-circuit Stress 摘要 本研究调查了在短路应力后1.2 kV SWITCH-MOS的残余损伤。在应力施加后&#xff0c;相当于SWITCH-MOS耐受时间的约80%&#xff0c;正向阻断状态下的漏电流急剧增加。发现SWITCH-MOS中的SB…

一起学数据结构(8)——二叉树中堆的代码实现

在上篇文章中提到&#xff0c;提到了二叉树中一种特殊的结构——完全二叉树。对于完全二叉树&#xff0c;在存储时&#xff0c;适合使用顺序存储。对于非完全二叉树&#xff0c;适合用链式存储。本文将给出完全二叉树的顺序结构以及相关的代码实现&#xff1a; 1. 二叉树的结构…

Categraf v0.3.22部署

wget https://github.com/flashcatcloud/categraf/releases/download/v0.3.22/categraf-v0.3.22-linux-amd64.tar.gz下载安装包。 sudo mkdir /opt/categraf创建一个目录。 tar zxf categraf-v0.3.22-linux-amd64.tar.gz -C /opt/categraf进行解压。 /opt/categraf/categ…

ORA-27102: out of memory

正在外面办事呢&#xff0c;项目经理打电话并截图说明&#xff0c;物理服务器增加内存后&#xff0c;他调整sgapga后&#xff0c;重启无法启动了&#xff0c;报错ORA-27102: out of memory。 SYSorcl> startup; ORA-27102: out of memory Linux-x86_64 Error: 28: No space…

9领域事件

本系列包含以下文章&#xff1a; DDD入门DDD概念大白话战略设计代码工程结构请求处理流程聚合根与资源库实体与值对象应用服务与领域服务领域事件&#xff08;本文&#xff09;CQRS 案例项目介绍 # 既然DDD是“领域”驱动&#xff0c;那么我们便不能抛开业务而只讲技术&…

深度学习综述:Computation-efficient Deep Learning for Computer Vision: A Survey

论文作者&#xff1a;Yulin Wang,Yizeng Han,Chaofei Wang,Shiji Song,Qi Tian,Gao Huang 作者单位&#xff1a;Tsinghua University; Huawei Inc. 论文链接&#xff1a;http://arxiv.org/abs/2308.13998v1 内容简介&#xff1a; 在过去的十年中&#xff0c;深度学习模型取…

原生HTML实现marquee向上滚动效果

实现原理&#xff1a;借助CSS3中animation动画以及原生JS克隆API <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta name"viewport" content"widthdevice-width, initial-scale1.0" /…

【MySQL集群二】使用MyCat和ProxySql代理MySQL集群

中间件代理MySQL MyCat安装MyCat介绍&#xff1a;步骤1&#xff1a;安装Java环境步骤2&#xff1a;下载并解压Mycat步骤3&#xff1a;配置Mycat步骤4&#xff1a;启动Mycat ProxySql安装ProxySql介绍&#xff1a;步骤1&#xff1a;更新系统步骤2&#xff1a;安装ProxySQL步骤3&…

数学笔记:傅里叶变化

1 介绍 简而言之&#xff0c;傅里叶变换把一个输入信号分解成一堆正弦波的叠加 比如&#xff0c;以下是一个波&#xff1a; 这个波可以分解为两个正弦波的叠加。 也就是说&#xff0c;当我们将两个正弦波相加时&#xff0c;就会得到原来的波 哪怕是一个方波 也可以分解成一组…

【块状链表C++】文本编辑器(指针中 引用 的使用)

》》》算法竞赛 /*** file * author jUicE_g2R(qq:3406291309)————彬(bin-必应)* 一个某双流一大学通信与信息专业大二在读 * * brief 一直在竞赛算法学习的路上* * copyright 2023.9* COPYRIGHT 原创技术笔记&#xff1a;转载…

稀疏奖励问题解决方案总览

方案简介 HER (Hindsight Experience Replay) - 2017年 思想 HER&#xff08;Hindsight Experience Replay&#xff09;是一种特别设计用于解决稀疏奖励问题的强化学习算法。它主要用于那些具有高度稀疏奖励和延迟奖励的任务&#xff0c;特别是在连续动作空间中&#xff0c;如机…

IDEA设置注释快捷键进行 注释对齐

给大家推荐一个嘎嘎好用的功能~ 相信大家在使用IDE写代码的时候&#xff0c;经常用到 Ctrl / 来注释代码吧&#xff0c;但是默认的是将注释在行首对齐&#xff0c;看着很让人不舒服。但是下面的操作会将注释会和当前代码对齐&#xff0c;还会自动保留一个空格&#xff0c;真的…

【用unity实现100个游戏之13】复刻类泰瑞利亚生存建造游戏——包括建造系统和库存系统

文章目录 前言素材人物瓦片其他 一、建造系统1. 定义物品类2. 绘制地图3. 实现瓦片选中效果4. 限制瓦片选择5. 放置物品功能6. 清除物品7. 生成和拾取物品功能 二、库存系统1. 简单绘制UI2. 零代码控制背包的开启关闭3. 实现物品的拖拽拖拽功能拖拽恢复问题 4. 拖拽放置物品5. …

【C语言精髓 之 指针】指针*、取地址、解引用*、引用

/*** file * author jUicE_g2R(qq:3406291309)————彬(bin-必应)* 一个某双流一大学通信与信息专业大二在读 * copyright 2023.9* COPYRIGHT 原创技术笔记&#xff1a;转载需获得博主本人同意&#xff0c;且需标明转载源* language …

人工智能驱动的自然语言处理:解锁文本数据的价值

文章目录 什么是自然语言处理&#xff1f;NLP的应用领域1. 情感分析2. 机器翻译3. 智能助手4. 医疗保健5. 舆情分析 使用Python进行NLP避免NLP中的陷阱结论 &#x1f389;欢迎来到AIGC人工智能专栏~人工智能驱动的自然语言处理&#xff1a;解锁文本数据的价值 ☆* o(≧▽≦)o *…

flutter web 优化和flutter_admin_template

文章目录 Flutter Admin TemplateLive demo: https://githubityu.github.io/live_flutter_adminWeb 优化 Setup登录注册英文 亮色主题 中文 暗黑主题管理员登录权限 根据权限动态添加路由 第三方依赖License最后参考学习 Flutter Admin Template Responsive web with light/da…