首页 > 其他分享 >Clock Switch,芯片时钟切换的毛刺是什么,如何消除

Clock Switch,芯片时钟切换的毛刺是什么,如何消除

时间:2024-05-02 16:44:25浏览次数:21  
标签:Clock 毛刺 Switch 切换 CLK0 CLK1 DFF1 select 时钟

背景

芯片运行过程中需要时钟切换时,要考虑到是否会产生glitch,小小的glitch有可能导致电路运行的错误。所以时钟切换时需要特别的处理。
直接使用MUX进行时钟切换或者采用如下电路结构进行时钟切换:

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

assign outclock = select? clk1: clk0; (直接采用MUX实现)

但以上两种做法都会产生时钟切换毛刺的,芯片系统很容易进入亚稳态的情况。如下图,由于是纯组合逻辑,select信号变化可能发生在任何时刻,很容易发生时钟切换毛刺,我们需要使用无毛刺的时钟切换电路,即Glitch-free clock switching circuit。

为了解决时钟切换的毛刺问题,对于时钟源分为同步和异步的情况,分为如下两种解决方案:

CLK0与CLK1为同步时钟源,即CLK0与CLK1成整数倍关系

插入下降沿触发的D触发器,当前已打开的时钟路径上的时钟会在其下降沿之后先关闭,然后待打开时钟路径上的时钟在其下降沿之后即打开。如下所示:从下图第二个箭头开始,实际发生时钟切换,两个触发器都是下降沿触发。

当select信号为0时:

此时选择的时钟为CLK0,DFF1 Q端输出始终为0,QN端输出1并反馈至DFF0。当CLK0的下降沿采样后,DFF0的Q端输出1,QN端输出0并反馈至DFF1,从而不会在与门处产生毛刺。此时输出的OUT_CLK为CLK0。

当select信号切换为1时:

只有当CLK0的下降沿到来后,DFF0的Q端输出才会是0,其QN端输出才会是1,随后DFF1的D端的输入才会是1,然后还要等,当CLK1的下降沿到来后,DFF1的Q端输出变为1,QN输出变为0,但由于此时CLK1为低电平,因此OUT_CLK仍然为0。然后还要等,当CLK1出现高电平后,OUT_CLK才会切换到高电平。

注意时序约束关系:

select控制信号到DFF0、DFF1的D端;

DFF0的QN端输出到DFF1的D端;

DFF1的QN端输出到DFF0的D端;

这四条路径中,任何一路径上的信号与目标时钟域的采样时钟同时发生变化,则该寄存器的输出可能变为亚稳态。因此上述两个下降沿触发器结构要求两个时钟是同步时钟,且频率成倍数关系,这样就能始终满足时序约束关系,不会出现毛刺和亚稳态。

请问CLK0与CLK1为异步时钟时,电路如何设计?

CLK0与CLK1为无关时钟源,即异步时钟源

在第一种方法的基础上,在选择路径上再插入一个上升沿触发D触发器,这是对异步信号进行同步处理,这样即使是两个异步的时钟源进行切换,也可以避免亚稳态的产生。从下图中第二个箭头开始,实际发生时钟切换。

select为0时,OUT_CLOCK选择CLK0。

select切换为1时,CLK0的上升沿打一拍,下降沿打一拍,才能关闭CLK0时钟,此时OUT_CLOCK输出为0,然后还要等,等CLK1的上升沿打一拍,下降沿打一拍,才能打开CLK1,此时OUT_CLOC输出为0,等到CLK1上升沿到了OUT_CLOCK才有上升沿。

总结,通过在负沿触发器前添加了1个正沿触发器,使得:

select控制信号到DFF0、DFF1的D端;

DFF0的QN端输出到DFF1的D端;

DFF1的QN端输出到DFF0的D端;

上面四条路径的输入信号和负沿触发器的capture时钟沿之间构成两级触发器打拍,防止跨时钟域的亚稳态传递和毛刺信号出现。

标签:Clock,毛刺,Switch,切换,CLK0,CLK1,DFF1,select,时钟
From: https://www.cnblogs.com/lvzh/p/18170321

相关文章

  • 模拟集成电路设计系列博客——6.2.5 毛刺
    6.2.5毛刺数字逻辑的毛刺是转换器进行高速工作时的一个主要问题,\({b_1,b_2,...,b_N}\)与开关信号直接关联。毛刺的来源是开关切换不同信号的延迟。例如,但数字码从\(0111...1\)切换到\(1000...0\)时,所有的\(N-1\)的LSB都关闭,而MSB打开,然而,有可能LSB开关的电流先于MSB开关的电流关......
  • Matlab用BUGS马尔可夫区制转换Markov switching随机波动率SV模型、序列蒙特卡罗SMC、M
    原文链接:http://tecdat.cn/?p=24498原文出处:拓端数据部落公众号在这个例子中,我们考虑马尔可夫转换随机波动率模型。统计模型让  是因变量和  未观察到的对数波动率 .随机波动率模型定义如下 区制变量  遵循具有转移概率的二态马尔可夫过程 表示均值的正态分布......
  • python3解析FreeSWITCH会议室列表信息
    操作系统:CentOS7.6_x64FreeSWITCH版本:1.10.9 Python版本:3.9.12进行FreeSWITCH会议室相关功能开发过程中,会遇到需要解析会议室列表信息并进行特定操作的情况,比如设置特定通道变量、发送dtmf、录音等。今天整理下CentOS7环境下,使用Python3解析FreeSWITCH会议室列表信息然后......
  • ILA抓出匪夷所思的错误,如一个always块里面的两个相同逻辑寄存器赋值出现毛刺
    有一种可能性是下载器太烂了,可以降速使用,或者换个质量好的(带屏蔽的下载器)。出错代码:(已知所有条件正确、length_fpga1和length_fpga2的逻辑完全相同,时钟稳定,时序无误)可以看到length_fpga2的bit11莫名其妙翻转,现在直接揭晓答案,因为下载器丢包了,当把测试的特定值改为0xaa,0x55等......
  • PYTHON用时变马尔可夫区制转换(MARKOV REGIME SWITCHING)自回归模型分析经济时间序列|附
    全文下载链接:http://tecdat.cn/?p=22617最近我们被客户要求撰写关于MRS的研究报告,包括一些图形和统计输出。本文提供了一个在统计模型中使用马可夫转换模型模型的例子,来复现Kim和Nelson(1999)中提出的一些结果。它应用了Hamilton(1989)的滤波器和Kim(1994)的平滑器  %matplot......
  • SystemVerilog -- 6.4 Interface ~ Clocking Block Part II
    SystemVerilogClockingBlockPartII时钟模块允许在指定的时钟事件对输入进行采样并驱动输出。如果提到时钟模块的输入skew,则该模块中的所有输入信号都将在时钟事件之前以skew时间单位进行采样。如果提到时钟模块的输出skew,则该模块中的输出信号都将在相应的时钟事件之后以ske......
  • SystemVerilog -- 6.4 Interface ~ Clocking Blocks
    SystemVerilogClockingBlocks默认情况下,模块端口和接口不指定信号之间的任何时序要求或同步方案。在clocking和endclocking之间定义的时钟块正是这样做的。它是与特定时钟同步的信号集合,有助于指定时钟和信号之间的定时要求。这将允许测试编写者更多地关注事务,而不是担心信号......
  • react报错export ‘Switch‘ (imported as ‘Switch‘) was not found in ‘react-rou
    报如下错,查react-router-dom版本。 因为:react-router-dom从V5升级到V6造成的(1)将Switch重命名为Routes(2)Route的新特性变更,component/render被element替代(3) 嵌套路由变得更简单 ......
  • Java switch() case中的switch可用的数据类型 byte,shor,int ,string ,char不能是long
    Javaswitch()case中的switch可用的数据类型   byte,shor,int,string,char1.swtich()里面必须是int和enum--即枚举类型。2.short、char或者byte他会自动转换为int的。。3.long不能自动转换为int,因为long比int范围大..可能会丢失精度..4.java把string也'转化'成int了,用......
  • 选择语句 - if、if-else 和 switch
    选择语句- if、if-else 和 switch项目2023/08/014个参与者反馈 本文内容if语句switch语句C#语言规范另请参阅if、if-else 和 switch 语句根据表达式的值从多个可能的语句选择要执行的路径。仅当提供的布尔表达式的计算结果为 true 时,if,if 语......