【数字IC设计】亚稳态与多时钟切换

2023-11-10


本次是与触发器有关的亚稳态以及多时钟系统中的时钟切换问题讲解。
博客摘抄自https://www.cnblogs.com/IClearner/p/6475943.html,目的是为了记录下数字IC设计相关知识,方便后续查看。

1. 亚稳态的产生与传输

我们知道,交叉耦合反相器、SR锁存器、D锁存器和D触发器等存储元件有两个稳定的状态,即0和1,也就是能存储0和1这两个状态。那么亚稳态是什么呢?从字面上看,亚稳态就是亚于稳态,既0又不是1的状态。在时钟有效沿到来的前后,触发器的数据端的数据不稳定导致违反触发器的建立时间或者保持时间,引起触发器的输出处于未知的状态,这种未知的状态称为亚稳态。

我们知道了亚稳态是产生是由于违反了触发器的建立时间或者保持时间,那么为什么会有亚稳态呢?我们从底层的CMOS器件开始。

1.1 CMOS反相器的电平传输特性曲线

在这里插入图片描述
在上面的图里面。我们把Vout=Vin的点叫做反相器的阈值电压。CMOS反相器的特性是,在阈值电压附近输出迅速完成了电平的切换,而在其他区域输出电平几乎不变。

对于输入,假设0-1V的输入是低电平,1.5V到2.5V是高电平;也就是说,反相器的输入在正常情况下要么是高电平,要么是低电平,那么反相器靠什么来识别它是高还是低了,就是靠输入电平的电压了;当输入信号在0-1V的时候,反相器识别为低,输入在1.5V-2.5V时反相识别为高输入。至于反相器的输入在1~1.5V的时候,这是没有定义的,也就是在阈值电压附近,反相器可能将它认为是高电平也可能认为是低电平。

对于输出,假设输出2.25-2.5V是高电平,0-0.25V是低电平。那么我们就从输入由0增大到2.5v的情况看看输出是怎么样的。当输入在0~1V时,反相器识别输入为低电平,根据电平传输特性曲线,输出基本大于2.25V,反相器输出为高电平(可能大于2.25V)。当反相器的输入从1过渡到1.5V的时候,反相器对这段的电压没有定义,比如输入为1.25V的时候,曲线对应的输出大概为1.25V,这是反相器就会迅速进行电平切换:可能进行高电平切换,认为这个输入是低电平于是对应的输出高电平;也有可能进行低电平切换,认为这个输入是高电平,于是对应输出低电平。因此在这段电压内,输出是高是低都有可能。当输入大于1.5V时,反相器识别为高电平,于是反相输出低电平。

当输入数据不满足寄存器的建立时间或者保持时间的时候,寄存器就很可能捕捉到输入数据的电平在未定义的电平区间,输出处于亚稳态(并不是所有未满足建立时间或者保持时间都会产生亚稳态!)。
下图是D触发器的门级结构图:在这里插入图片描述
当建立时间不满足的时候,也就是数据端D的数据来得太晚了,使得输入电压 或者 主D锁存器内部的线路电压处于阈值电压附近,就可能会使主D锁存器不能正确输出,之后的从锁存器也不能正确输出,即输出Q处于亚稳态:输出电压可能处于阈值电压附近,也可能处于高电平,也可能处于低电平,也可能是在高低电平之间震荡(因为反相器具有电平切换功能),总之我们无法预测输出具体是哪一种稳定的电平状态。

同理,当保持时间不满足的时候也是一样,也会使主锁存器内部的线路电压不足以使门器件/反相器进行翻转/工作,也会导致亚稳态。

亚稳态用一个经典的图表示如下所示:
在这里插入图片描述
山顶就是亚稳态,这是数字逻辑中存在的一种状态,在这个状态下,触发器/寄存器的输出可能为毛刺或者某一未定义的电压值(电压值在高低电平之间波动),反正基本不是正确的输入值。
注意事项:亚稳态是器件的固有属性,不能消除,只能从概率上减少这一状态的发生。

2. 亚稳态的恢复时间与平均无故障时间

亚稳态除了可以用上面的那个图表示外,还可以用下面的时序图表示:
在这里插入图片描述
红色段就是处于亚稳态的输出段。我们再来看看这幅图,本来经过一定的延时值tco之后就会输出正确的稳定的电平值;由于产生了亚稳态,亚稳态持续了tMET时长后,恢复到稳定的电平状态(稳定,但不一定是正确的!),这段持续的时间叫做亚稳态的恢复时间,一般情况下这段时间不会超过一个或者两个时钟周期(取决于触发器的性能)。如果亚稳态持续时间过长(超过一个或者两个时钟周期),就有可能被下一级的触发器捕获,导致下一级触发器也处于亚稳态,这就是亚稳态的传播现象,这是很严重的。

触发器处于亚稳态可能会使系统产生故障,故障发生率的倒数叫做平均故障时间(MTBF,mean time before failure),平均故障时间越长,系统越稳定。在这里,我们不讨论平均故障时间怎么来的,我们了解平均故障时间的公式是什么,然后与哪些因素有关就OK了:
在这里插入图片描述
也就是说,故障发生的几率为:
在这里插入图片描述
其中:

(1)C2是一个与器件有关的常数,器件的建立时间和保持时间越小,C2越小。(使用更快的触发器)

(2)C1也是一个与器件相关的常数。

(3)fclk1是前级的时钟,fclk2是后一级电路的时钟(这里涉及到时钟域了),反正就知道与时钟有关就可以了。(降低系统的工作频率)

(4)tslack是时序裕量,可以理解为触发器喘息的时间。(使用同步器)

由此可见,时钟越快,越容易发送故障。

3. 减小亚稳态的建议

亚稳态是不可避免的,但是我们可以减少亚稳态的发生和传播,从上面的内容中可以,我们有以下减少亚稳态的建议:

  1. 使用同步器: 同步器在跨时钟域中会进行讲解,使用同步器可以减少采样异步信号导致的亚稳态。
  2. 在满足要求的情况下,降低时钟频率。从上面的式子中可以知道,降低时钟频率,可以降低故障的发生率。
  3. 采用反应更快的触发器。上面的式子中的常数跟触发器有关,如果有更快的触发器,同样可以减少亚稳态的产生。
  4. 减少使用或者避免使用那种信号翻转时间很长的输入信号,如果翻转时间长,那么进入器件未定义的电平的时间也很长,容易导致亚稳态的产生。

当然还有其他减少亚稳态产生的方法,这里只是列出了典型的、常见的集中方法而已。

4. 多时钟切换电路

在这里插入图片描述
时钟在切换的时候难免会产生毛刺,这里就来聊聊如何把这个时钟切换产生的毛刺减少(甚至消灭)的典型电路,而不是要求时钟切换的时候寄存器要处于复位的情况(当然寄存器复位也是双重保险的措施)。

首先,我们来看看毛刺产生的根源:在clk1的高电平的时候进行切换,如果此时clk2正好为高电平,这时候clk2和clk1的高电平可能占空比变大也可能使占空比变小,总的来说有可能产生毛刺。在clk1的高电平的时候进行切换,如果此时clk2正好为低电平,那么肯定产生毛刺,因此这不能这样切换。从Clk2切向clk1也是这么一个原理。于是我们就有下面的结论:

电平相反的时候切换时钟,肯定有毛刺;电平相同的时候,有可能产生毛刺。这里我们关注低电平上产生的毛刺,同为高电平的时候切换,有可能产生毛刺,影响了上升沿,因此我们就选择在两者都是低电平的时候进行切换。根据这个选择方案,切换过程就是:A 先是选择信号改变(即进行时钟切换),B 然后clk1(或clk2)为低时停掉clk1(或clk2)的选择 ,C 接着在clk2(或clk1)为低时打开clk2((或clk21)的选择端,D 最后进行正常工作,完成切换。

至于这么设计这个电路呢?一个思路是使用状态机,但是这似乎不太现实,要是使用状态机,还得再要一个更高频率时钟最为状态寄存器的驱动时钟。除了状态机之外,前辈们给我们设计了这样的一个电路,使用负边沿触发的寄存器,设计的电路如下所示:
在这里插入图片描述
分析这个电路的思路如下所示。
在这里插入图片描述
当然,这个是波形是没有输出延时和转换延时的。从波形图里面可以看出,这个时钟切换电路理论上是没有毛刺的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【数字IC设计】亚稳态与多时钟切换 的相关文章

  • [项目管理-33]:需求管理与范围管理的异同

    目录 前言 一 组织层面的项目客户需求与项目管理层次图 二 需求管理与范围管理的比较 2 1 不同点 2 2 相同点 2 3 相互关系 前言 产品开发中 我们经常听到需求管理与范围管理 这两个概念相似 相关 但有是不同层面的概念 经常会混用
  • QVariant自定义数据类型

    struct STUMyStruct int age QString name Q DECLARE METATYPE STUMyStruct QVariant v STUMyStruct man man age 1 man name sdg

随机推荐

  • 什么是数组 为什么要在c语言中引用数组,为什么要在c使用数组有什么用怎么用...

    简单地说指针就是指向变量和对象的地址 指针的用途非常广泛 比如如果你想通过函数改变一个变量的值 就得用指针而不能用值传递 还有在很多时候变量 特别是对象的数据量实在太大 程序员就会用指针来做形参 只需要传递一个地址就行 大大提高了效率 以上
  • Python学习25:中国古代数学问题——李白买酒(python123)

    描述 诗仙李白 一生好酒 一天 他提着酒壶 从家里出来 酒壶中有酒若干 他边走边唱 无事街上走 提壶去买酒 遇店加一倍 见花喝一斗 五遇店和花 喝光壶中酒 计算并输出壶中原有酒几斗
  • 2022 Github 上传仓库

    由于2022后 Github上传不再支持用户名密码的方式了 记录一下新的上传方式 备忘 在配置好token后 1 新建仓库 2 克隆仓库到本地 git clone SSH 3 本地修改 4 在仓库文件夹中 git add git commi
  • threejs视图切换方法

    1 获取观察物体group的中心位置 group可以是stl glb group对象等 2 设置相机位置和朝向 从而达到切换视图的目的 正视图 camera position设置为 x y z 150 camera up x 0 camer
  • java.util.concurrent.Future 使用指南

    1 介绍 本篇文章将了解 Future 一个自 Java 1 5 以来就存在的接口 它在处理异步调用和并发处理时非常有用 2 创建Futures 简单地说 Future 类表示异步计算的未来结果 这个结果最终会在处理完成后出现在 Futur
  • 学人工智能以后从事什么工作?这6大就业方向前景广阔

    学AI以后从事什么工作 近些年来 科技的快速发展 使人工智能方面的人才炙手可热 根据此前UiPath发布的数据显示 我国AI岗位空缺数量最多 有12113个相关职位因为招聘不到人才而发生空缺 我国对于AI人才的渴求已经超过了人工智能大国美国
  • 【TCP/IP】第三章 数据链路

    数据链路的作用 数据链路相关技术 MAC地址用于识别数据链路中互连的节点 MAC地址长48bit 一般来说全球MAC地址为一不会重复 地址结构组成 从通信介质的使用方法上看 网咯可以分为共享介质型和非共享介质型 共享介质方式指的是多个设备共
  • Declaration of 'struct sockaddr_in' will not be visible outside of this function警告的处理

    Declaration of struct sockaddr in will not be visible outside of this function 做ios网络开发的肯定会用到苹果的官方库Reachability ios5发布了
  • 单片机-4x4个矩阵按键控制数码管显示数字程序

    1 include 8051 h 2 typedef unsigned char u8 3 typedef unsigned int u16 4 u8 smgduan 5 0 1 2 3 4 5 6 7 6 0x3f 0x06 0x5b 0
  • Redis常用的命令String,list,hash,set,zset

    常用的指令 redis Key关键字 keys 查看本库中的所有的key exists key的名字 判断某个key是否存在 move key db 当前的库中的key就没有了 被移除了 expire key 秒钟 给指定的key设置过期的
  • npm设置和取消代理的方法

    设置代理 npm config set proxy http 127 0 0 1 8087 npm config set registry http registry npmjs org 关于https 经过上面设置使用了http开头的源
  • 51单片机的数字时钟系统【含仿真+程序+报告+原理图】

    1 主要功能 该系统由AT89C51单片机 DS1302时钟模块 按键模块 LCD显示模块构成 利用51单片机实现电子时钟的功能 使用DS1302芯片作为计时设备 用LCD1602作为显示设备 按键按下可修改当前时间 按下的时候蜂鸣器会di
  • dao层代码

    dao层 数据接口层 方法层 介于业务逻辑层和数据库之间 进行数据的访问和操作 在实际业务处理过程中 往往需要进行多次数据库的访问 这些访问性质往往是相同的 采用Dao层可以将对数据库访问进行封装 避免经行重复性数据库访问开发操作 同时降低
  • 数据挖掘-为什么进行数据挖掘

    为什么进行数据挖掘 1 进入信息时代 信息时代数据量暴增 社会计算机化和功能强大的数据收集和存储工具导致数据的爆炸式增长 数据的爆炸式增长 广泛可用和巨大数量使得当前时代成为真正的数据时代 急需功能强大和通用的工具 以便从这些海量数据中发现
  • matlab运动背景位移矢量,[Matlab科学绘图] 绘制平面位移云图

    Matlab科学绘图 绘制平面位移云图 Matlab科学绘图 绘制平面位移云图 在用MATLAB做有限元分析的时候 难免需要绘制云图 网上的资料又很少 且不通用 自己实现之后在此记录一下 希望也能帮助到其他人 平台 Win7 Matlab
  • 《雷达系统设计MATLAB仿真》学习

    文章目录 第一章 雷达分类 按频段分类 按波形分类 按用途分类 监视雷达 跟踪雷达 第四章 模糊函数 模糊函数的几点应用 目标分辨情况 测量精度 模糊情况 杂波抑制能力 输出功率波形 第六章 杂波 擦地角 掠射角 下俯角 入射角 海杂波 地
  • 上拉和下拉电阻 [附:OC门与OD门]

    上拉就是通过一个电阻将芯片的一个引脚或线路中的一点接电源正极 Vcc 将该处电平拉向高电平 下拉就是通过一个电阻将芯片的引脚或线路中的一点接地 将该处电平拉向低电平 其主要目的是在电路驱动器关闭时给引脚或线路节点一个固定的默认的电平 上拉电
  • IOS开发笔记 - 调试技巧之自定义宏输出

    这个小技巧是在翻阅别人的代码时候发现的 由于以前学过C 所以知道这里应该是一个神奇的宏把 按alt点进去果然是酱紫 这里是当再DEBUG模式下 调用这个LogMethod的宏时会输出所在方法的方法名及所在行数 运行如下 有了这个宏 调试是不
  • vue中实现在子组件中刷新父组件

    一 首先是父组件 现在父组件中的子组件属性上添加监听事件 signStatusVerdict 二 其次是子组件 发射一个事件给父组件的监听属性 三 最后是父组件 父组件中监听到事件后会执行listenSignStatus方法 执行更新父组件
  • 【数字IC设计】亚稳态与多时钟切换

    数字IC设计 亚稳态与多时钟切换 1 亚稳态的产生与传输 1 1 CMOS反相器的电平传输特性曲线 2 亚稳态的恢复时间与平均无故障时间 3 减小亚稳态的建议 4 多时钟切换电路 本次是与触发器有关的亚稳态以及多时钟系统中的时钟切换问题讲解