数字设计--亚稳态

亚稳态

FPGA 等数字设备中的所有寄存器都定义了信号时序要求----允许每个寄存器在其输入端正确捕获数据并产生输出信号。为确保可靠操作,寄存器的输入必须在时钟边沿之前的最短时间(建立时间 setup time 或 \(t_{su}\))和时钟边沿之后的最短时间(保持时间 hold time 或 \(t_H\))保持稳定。然后寄存器输出在指定的时钟到输出延迟 (\(t_{co}\)) 之后可用。如果数据信号转换违反了寄存器的建立时间\(t_{su}\)或保持时间\(t_H\)时序要求,则寄存器的输出可能会进入亚稳态

在亚稳态中,寄存器输出在高电平和低电平状态之间徘徊一段时间,这意味着输出转换到定义的高电平或低电平状态被延迟,时间将超过指定的\(t_{co}\)

在同步系统中,输入信号必须始终满足寄存器时序要求,因此一般不会出现亚稳态。(如果同步系统中包含复位信号,同步复位的建立时间和撤离时间不满足寄存器的建立时间和保持时间,就会发生亚稳态,但也只会影响一个时钟,在下一个时钟就会恢复)。

当信号在不相关或异步时钟域的电路之间传输时,通常会出现亚稳态问题。在这种情况下,设计人员不能保证信号将满足\(t_{su}\)\(t_H\)时序要求,因为信号可以在相对于目标时钟的任何时间到达。

但是,并非每个违反寄存器\(t_{su}\)\(t_H\)的信号转换都会导致亚稳态输出。

寄存器进入亚稳态的可能性和返回稳定状态所需的时间取决于制造设备所使用的工艺技术和操作条件。在大多数情况下,寄存器会很快恢复到稳定的定义状态。

亚稳态出现的原因

我们在分析元器件时,是把元器件抽象为理想器件以简化分析,但实际的元器件并不是理想的。

image

举个例子,我们在分析反相器器件的时候,当输入电压大于\(V_M\)(高电平)时,就认为输出电压为\(0\)(低电平),当输入电压小于\(V_M\)(低电平)时,就认为输出电压为\(V^+\)(高电平)。当然这是理想情况。

实际上器件的特性是这样的

image

器件的输出电压不是理想的直上直下,他有一个过渡的过程。当输入电压小于\(V_{IL}\),输出电压大于\(V_{OH}\),当输入电压大于\(V_{IH}\),输出电压小于\(V_{OL}\)。当输入电压在\(V_{IL}\)\(V_{IH}\)范围内,输出电压从\(V_{OH}\)\(V_{IH}\)范围波动。

我们认为输入电压低于\(V_{IL}\)时为低电平,当输入电压高于\(V_{IH}\)时为高电平,与此相对的输出电压\(V_{OH}\)看作高电平,\(V_{OL}\)看作低电平。

数字化电路都是二值化的,只有0和1,理想情况下,如果输入电压高于\(V_{th}\)那么就是1,如果低于\(V_{th}\)就是0,\(V_{th}\)叫做判断阈值。但是实际情况往往不是这样的,没有一个点来作为分界线,实际的电路做不出来。实际上是高于\(V_H\)才算1, 低于\(V_L\)才算0, \(V_H\)>\(V_L\),也就是说高阈值\(V_H\)和低阈值\(V_L\)之间是有一段距离的。

如果输入电压在\(V_{OH}\)\(V_{IH}\)之间的范围,那么输出将在\(V_{OL}\)\(V_{OH}\)范围之内,这是输出既不是高电平又不是低电平,将会导致亚稳态。

当然器件实际上的变化特性与理想有差距是一方面,实际寄存器的结构也会导致亚稳态的产生。

image

上图是经典上升沿D触发器的内部结构图:

与非门G1到G4是维持阻塞电路,G5和G6构成一个RS触发器用于数据的锁存。

图中可以看到,时钟信号直接作用在了G2和G3上面,也就意味着G2和G3是真正的采样传输门电路,输入信号应该要正确的被G2和G3采样后传输至后面的RS触发器。我们注意到,数据在传输到G3之前经过了G4,传输至G2之前经过了G4和G1。我们知道,实际情况中信号经过门电路是有延迟的。所以输入信号在到达G2和G3之前经过了G1和G4的延迟,因此就引入了建立时间的概念:建立时间就是为了补偿信号在G1和G4上的延迟。也就是数据在时钟沿来临之前,需要足够的建立时间让信号经过G1和G4到达G2和G3。触发器的建立时间主要取决于G1和G4.

那么保持时间呢?一样的,上升沿来临时,数据通过G2和G3传输至后面的RS触发器,但G2和G3也会存在延时。因此又引入了保持时间的概念:保持时间就是为了补偿信号在G2和G3上的延迟。也就是数据在时钟沿来临之后,需要足够的保持时间让信号正确的从G2和G3传输至RS触发器。

当CLK=1时,对于上图中与门G1和G4,G2和G3,此时与门内部MOS门还没有完全关闭(传输门关闭需要时间,时钟刚拉高时还不能阻止输入信号传入)。如果此时输入的信号变化则将会传播到后面的RS触发器,影响RS触发器保存的有效电平状态信号。同时因为时钟沿之后变化的数据其稳定时间没有达到RS触发器的建立时间,同样会引起RS触发器内部的环路震荡,产生亚稳态。

由于触发器的保持时间不仅取决于G1到G4还包含着RS触发器的建立时间,进而可以推断出,一般D触发器的保持时间比建立时间要长。

从上面的分析可以看出,如果不满足寄存器的建立时间和保持时间,一方面寄存器采样的输入电压可能在非触发电压之间,导致寄存器输出电压的不稳定,另一方面即使能够采样到正确的输入电压,但是留给输入信号传递到触发器内部后一级RS触发器的时间不够或者根本不能正确传递到寄存器的RS寄存器部分(在前一级部分传递时输入信号发生变化,导致寄存器震荡或者输入电压达不到触发电压区间),导致最后输出发生亚稳态。

综上,如果不满足寄存器的建立时间和保持时间,输出将会导致亚稳态,但也不是绝对关系,也有可能虽然存在亚稳态,但很快就稳定下来,这时我们就认为没发生亚稳态(?)

当发生亚稳态时,寄存器的输出可能是错误的,寄存器最后最稳定的值是随机的。当寄存器输入的变化越靠近时钟沿,输出稳定的时间越长。

亚稳态的危害

如果数据输出信号在下一个寄存器捕获数据之前解析为有效状态,则亚稳态信号不会对系统操作产生负面影响。但是,如果亚稳态信号在到达下一个设计寄存器之前没有解析为低或高状态,则可能导致亚稳态的传播,可能会使下一级产生亚稳态。

亚稳态这种现象是不可避免的,哪怕是在同步电路中也有概率出现,所以作为设计人员,我们能做的是减少亚稳态发生的概率,当然这也是一个稳健的系统所必须拥有的前提条件。

MTBF

亚稳态导致的平均故障间隔时间MTBF(Mean Time Between Failure)提供了对亚稳态可能导致设计失败的实例之间的平均时间的估计。更高的 MTBF(例如亚稳态故障之间的数百或数千年)表明设计更稳健。

可以使用有关设计和器件特性的信息来计算特定信号传输或设计中所有传输的亚稳态 MTBF。同步器链的 MTBF 使用以下公式和参数计算:

\[MTBF = \frac{e^{t_{MET}/C_2}}{C_1 \cdot f_{CLK} \cdot f_{DATA}} \]

\(C_1\)\(C_2\)常数取决于器件工艺和操作条件。\(f_{CLK}\)\(f_{DATA}\)参数取决于设计规范:\(f_{CLK}\)是接收异步信号的时钟域的时钟频率,\(f_{DATA}\)是异步输入数据信号的翻转频率。更快的时钟频率和更快的数据切换会降低(或恶化)MTBF。\(t_{MET}\)参数是可用的亚稳态建立时间,或超出寄存器\(t_{co}\)的可用时序裕量,用于将潜在亚稳态信号解析为已知值(亚稳态稳定所需时间)。同步链的\(t_{MET}\)是链中每个寄存器的输出时序裕量的总和。

如何避免亚稳态

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

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

参考
芯片设计进阶之路—亚稳态和同步器 - 知乎 (zhihu.com)
(9条消息) FPGA中亚稳态的理解(Understanding Metastability in FPGAs)_孤独的单刀的博客-CSDN博客
漫谈STA-setup/hold time (qq.com)
亚稳态与多时钟切换 - IC_learner - 博客园 (cnblogs.com)

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数字设计--门控时钟与时钟切换

门控时钟(ICG) 使用门控时钟的原因 芯片功耗组成中,大部分是由时钟树消耗掉的。因为这些时钟树在系统中具有最高的切换频率,而且有很多时钟buffer,并且为了最小化时钟延时,它们通常具有很高的驱动强度。此外,即使输入和输出保持不变,接收时钟的触发器也会消耗一定的功耗。…

ComfyUI进阶篇:ComfyUI核心节点(二)

ComfyUI核心节点(二) 前言: 学习ComfyUI是一场持久战。当你掌握了ComfyUI的安装和运行之后,会发现大量五花八门的节点。面对各种各样的工作流和复杂的节点种类,可能会让人感到不知所措。在这篇文章中,我们将用通俗易懂的语言对ComfyUI的核心节点进行系统梳理,并详细解释每…

题目集7~8

由于个人原因,最后两次题目集未提交,对自己的放纵感到愧疚,后期的补练我也会抽出时间完成这两道题 经过分析,题目集7,是在前面的基础上加上了一个新概念:互斥开关,以及模拟一种受控窗帘, 在我的想法,互斥开关便可当作两个普通开关去完成电路,窗帘则是新增一个用电器。…

EtherCAT转Profinet网关配置说明第一讲:配置软件安装及介绍

网关XD-ECPNS20为EtherCAT转Profinet协议网关,使EtherCAT协议和Profinet协议两种工业实时以太网网络之间双向传输 IO 数据。适用于具有EtherCAT协议网络与Profinet协议网络跨越网络界限进行数据交换的解决方案。 网关XD-ECPNS20为EtherCAT转Profinet协议网关,使EtherCAT协议…

4、flask-项目拆分

项目的拆分其实就是将app.py中的工作拆分开来、类似Django一样、每个项目都把路由模板和试图函数分开写 app.py # 路由 + 视图函数from flask import Blueprint from models import *#蓝图 # 创建蓝图对象 # 第一个参数:蓝图的名字 # 第二个参数:蓝图的包名 blue = Blueprin…

2-SAT 问题

2-SAT 问题 模型有 \(n\) 个布尔类型的变量 \(x_1, x_2, \ldots, x_n\),有 \(m\) 条限制形如 \(x_i \space [\operatorname{or}/\operatorname{and}]\space x_j=[1/0]\). 求一组符合要求的解。核心问题只需要考虑有没有解。 对于每个变量都只有两种取值:\(0/1\),那么把每…

坚果云与floccus实现Chrome书签国内跨设备、跨平台同步

本文介绍基于floccus插件与坚果云协同使用的方法,对浏览器的书签进行实时在线同步的操作~本文介绍基于floccus插件与坚果云协同使用的方法,对浏览器的书签进行实时在线同步的操作。在工作与学习中,我们时常希望在不同浏览器之间实现书签的同步;而一些传统的浏览器书签同步方…

性能监控调优

1.命令行工具 1.1 jps 查看系统JVM进程 jps [options] [hostid]optionhostid:省略则本机,监控远程需要安装jstatd1.2 jstat 查看JVM统计信息 jstat -[-t] [-h] [[]]option-t:加程序运行时间 [-h]:输出设定行数加表头信息 :查询间隔时间 count:查询总次数 结果:当ou上涨趋…

【第7个渗透靶机项目】 DerpNStink

Hack it 信息搜集 发现主机 nmap 192.168.0.17 -sS -sV -A -T5 全面扫描一下,有点有用信息访问一下但是没有用。 访问一下http服务查看源代码,发现有文件泄露下面还有个flag查看info.txt。<-- @stinky,确保使用本地 dns 更新您的主机文件,以便可以在新的 derpnstink 博客…

Linux运维工程师推荐学习的开发语言

前言:会开发的运维和不会开发的运维可以说是两个世界的运维。 个人推荐python和go,前者可以做自动化运维,后者可以深挖k8s;最近就不先演示运维服务技术的部署和架构搭建了,在深挖自动化运维,为了让现在的工作更加高效和便捷。如果有需要了解的运维服务技术,可以评论说出…

2、flask-run启动参数详解

app.py 这里 app.run(True, port=5001, host=0.0.0.0) from flask import Flask#创建flask应用对象 app = Flask(__name__)@app.route(/) # 路由 def hello_world(): # 视图函数return Hello World! # 响应给前端#添加路由和视图函数 @app.route(/index/) def index():…

从零学习的JAVAday1~day7

作为一个刚要迈入大二的预备程序员,已经学习过了c语言和c++的部分知识,在暑假期间满怀期待的开始Java的学习,希望一个暑假可以对Java的了解加深一些。 学习Java首先要学习windows电脑的cmd命令: 同时点击键盘上面的win+r键输入cmd即可进入默认的cmd面版,然后我们就可以输入…