理解FPGA中的亚稳态
一、前言
大家应该经常能听说到亚稳态这个词,亚稳态主要是指触发器的输出在一段时间内不能达到一个确定的状态,过了这段时间触发器的输出随机选择输出0/1,这是我们在设计时需要避免的。本文主要讲述了FPGA中的亚稳态问题,可以帮助大家更好地理解亚稳态。本文来源于Altera公司的白皮书《Understanding Metastability in FPGAs》
二、概述
本白皮书描述了fpga中的亚稳态,它发生的原因,以及它如何导致设计失败。它解释了亚稳态MTBF是如何计算的,并强调了各种器件和设计参数如何影响结果。
三、介绍(Introduction)
亚稳性是当信号在不相关或异步时钟域的电路之间传输时,可能导致包括fpga在内的数字设备中的系统故障的一种现象。本文描述了fpga中的亚稳态,解释了这种现象发生的原因,并讨论了它如何导致设计失败。
由于亚稳态而计算出的平均故障间隔时间(MTBF)表明设计人员是否应该采取措施减少此类故障的机会。本文解释了如何从各种设计和设备参数中计算MTBF,以及FPGA供应商和设计者如何增加MTBF。通过设计技术和优化,减少亚稳态故障的机会,可以提高系统的可靠性。
四、什么是亚稳态(What Is Metastability?)
诸如FPGA等数字设备中的所有寄存器都定义了信号时序要求,允许每个寄存器在其输入处正确捕获数据并正确产生输出信号。为了保证寄存器的可靠运行,寄存器的输入必须在时钟沿之前的一段时间内保持稳定,我们称这个时间为建立时间(setup time),同时也必须在时钟沿之后的一段时间保持稳定,我们称之为保持时间
。然后,在指定的时钟到输出延迟之后(
),寄存器输出就可用了。如果一个寄存器违反了建立时间或者保持时间要求,那么寄存器就有可能进入亚稳态。在亚稳态下,寄存器输出在高状态和低状态之间悬停一段时间,这意味着输出转换到定义的高或低状态会延迟到指定的
之外。
在同步系统中,输入信号必须始终满足寄存器时序要求,这样才不会出现亚稳态。当信号在不相关或异步时钟域的电路之间传输时,通常会出现亚稳态问题。在这种情况下,设计人员不能保证信号满足建立时间和保持时间的时序要求,因为信号可以在相对于目标时钟的任何时刻到达。但是,并不是每个违反寄存器建立时间和保持时间的信号转换都会导致亚稳态输出。寄存器进入亚稳态的可能性和返回稳定状态所需的时间取决于制造设备所使用的工艺技术和操作条件。在大多数情况下,寄存器会很快恢复到稳定状态。
在时钟缘对数据信号进行采样的寄存器可以看作是一个球落到山上,如图 1 所示。山的侧面代表稳定状态(在信号转换后,信号的新旧数据值,信号转换的过程就是球翻山的过程,左侧为旧数据,右侧为新数据)山顶代表亚稳态。如果球掉在山顶,它可能会在那里无限期地保持平衡,但实际上它会稍微落到山顶的一侧并滚下山坡。球离山顶越远,它在底部达到稳定状态的速度就越快。
如果数据信号在时钟沿和保持时间之后发生传输,则类似于将球落在山的“旧数据值”一侧,并且输出信号保持在该时钟传输的原始值。
当寄存器的数据输入在时钟沿和建立时间之前发生传输,并保持在保持时间
之后,这类似于将球落在山的“新数据值”一侧,并且输出足够快地达到稳定的新状态,以满足定义的
时间。但是,当寄存器的数据输入违反
或
时,就类似于将球扔到山上。如果球落在山顶附近,球就需要很长时间才能到达底部,这会增加从时钟传输到稳定输出的延迟,超出定义的
。
下图说明了亚稳态信号。当时钟信号转换时,输入信号从低状态转换到高状态,违反了寄存器的要求。数据输出信号示例从低状态开始,进入亚稳态,在高状态和低状态之间徘徊。信号输出A解析为输入数据的新逻辑Logic 1状态,输出B返回到数据输入的原始逻辑 Logic 0状态。在这两种情况下,输出转换到定义的1或0的状态会延迟到寄存器指定的
之外。
五、何时亚稳态会造成设计失败(When Does Metastability Cause Design Failures? )
如果数据输出信号在下一个寄存器捕获数据之前解析为有效状态,那么亚稳态信号就不会对系统操作产生负面影响。但是,如果亚稳态信号在到达下一个设计寄存器之前没有解析到低状态或高状态,就会导致系统故障。继续以来看球和山的例子,当球到达山脚下所需的时间(稳定的逻辑值0或1)超过分配的时间(即寄存器的 tco加上任何时间),可能会发生故障。当亚稳态信号在分配的时间内不能解析时,如果目标逻辑观察到不一致的逻辑状态,即不同的目标寄存器捕获亚稳态信号的不同值,就会导致逻辑故障。
六、同步寄存器(Synchronization Registers)
当信号在不相关或异步时钟域的电路之间传输时,必须在使用之前将该信号同步到新的时钟域。新时钟域中的第一个寄存器充当同步寄存器。
为了最小化异步信号传输中由于亚稳态而引起的故障,设计者通常在目标时钟域中使用一系列寄存器(同步寄存器链或同步器)来将信号重新同步到新的时钟域。这些寄存器允许一个潜在的亚稳态信号有额外的时间,在设计的其余部分使用该信号之前解析到一个已知的值。同步器寄存器到寄存器路径中可用的时序裕量是亚稳态信号稳定可用的时间,称为可用亚稳态稳定时间。
同步寄存器链或同步器被定义为满足以下要求的寄存器序列:
(1)链中的寄存器都由相同或相位相关的时钟提供时钟
(2)链中的第一个寄存器由不相关的时钟域驱动,或异步驱动
(3)每个寄存器只扇出一个寄存器,链中的最后一个寄存器除外
同步寄存器链的长度是同步时钟域中满足上述要求的寄存器个数。图 3 显示了长度为 2 的示例同步链,假设输出信号馈送(feed)多个寄存器目标。
请注意,任何异步输入信号或在不相关时钟域之间传输的信号都可以在相对于捕获寄存器的时钟沿的任何点进行传输。因此,设计人员在数据传输完成之前都无法预测信号传输的顺序或目标时钟边沿的数量。例如,如果异步信号总线在时钟域之间传输并同步,则数据信号可能会在不同的时钟沿上转换。结果,总线数据的接收值可能不正确。
设计人员必须使用诸如双时钟 FIFO (DCFIFO) 逻辑来存储信号值或握手逻辑等电路来适应这种行为。 FIFO 逻辑使用同步器在两个时钟域之间传输控制信号,然后使用双端口存储器写入和读取数据。 Altera 为该操作提供 DCFIFO 宏功能,其中包括控制信号的各种延迟和亚稳态保护。否则,如果异步信号充当两个时钟域之间的握手逻辑的一部分,则控制信号指示何时可以在时钟域之间传输数据。在这种情况下,同步寄存器用于确保亚稳态不会干扰控制信号的接收,并且在使用数据之前,数据有足够的稳定时间来解决任何亚稳态条件。在一个设计合理的系统中,只要每个信号在使用前解析为稳定值,设计就可以正常工作。
七、总结
原文章还有一部分的性能分析和专用解决方案,这里就不做展开了,只要系统中有异步元件,亚稳态就是不可避免的,因此设计的电路首先要减少亚稳态导致错误的发生,其次要使设计对于亚稳态产生的错误不敏感。前者通过同步实现,后者根据不同的设计应用会有不同的处理方法。
相关文章:

理解FPGA中的亚稳态
一、前言 大家应该经常能听说到亚稳态这个词,亚稳态主要是指触发器的输出在一段时间内不能达到一个确定的状态,过了这段时间触发器的输出随机选择输出0/1,这是我们在设计时需要避免的。本文主要讲述了FPGA中的亚稳态问题,可以帮助…...

Leetcode86. 分隔链表
给你一个链表的头节点 head 和一个特定值 x ,请你对链表进行分隔,使得所有 小于 x 的节点都出现在 大于或等于 x 的节点之前。 你应当 保留 两个分区中每个节点的初始相对位置。 力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台…...
如何处理 Flink 作业中的数据倾斜问题?
分析&回答 什么是数据倾斜? 由于数据分布不均匀,造成数据大量的集中到一点,造成数据热点。 举例:一个 Flink 作业包含 200 个 Task 节点,其中有 199 个节点可以在很短的时间内完成计算。但是有一个节点执行时间…...

cobbler自动化安装CentOS、windows和ubuntu
环境介绍 同时玩cobbler3.3和cobbler2.8.5 cobbler3.3 系统CentOS8.3 VMware虚拟机 桥接到物理网络 IP: 192.168.1.33 cobbler2.8.5 系统CentOS7.9 VMWare虚拟机 桥接到物理网络 IP:192.168.1.33 安装cobbler3.3 yum源修改 cat /etc/yum.repo.d/Cento…...

springcloud3 GateWay章节-Nacos+gateway动态路由负载均衡4
一 工程结构 1.1 工程 1.2 搭建gatewayapi工程 1.pom文件 <dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.13</version><scope>test</scope></dependency><!--gateway--&g…...

RESTful API 面试必问
RESTful API是一种基于 HTTP 协议的 API 设计风格,它提供了一组规范和约束,使得客户端(如 Web 应用程序、移动应用等)和服务端之间的通信更加清晰、简洁和易于理解。 RESTful API 的设计原则 使用 HTTP 协议:RESTful …...
软件机器人助力行政审批局优化网约车业务流程,推动审批业务数字化转型
随着社会的进步和发展,行政审批业务逐渐趋向于智能化和自动化。近日,某市行政审批局在市场准入窗口引入博为小帮软件机器人大幅度提升了网约车办理业务的效率,创新了原有的业务模式。 软件机器人以其自动化、智能化的特性,优化了网…...

飞天使-python的字符串转义字符元组字典等
文章目录 基础语法数据类型python的字符串运算符输入和输出 数据结构列表与元组字典与集合 参考文档 基础语法 数据类型 数值型 ,整数 浮点型 布尔型, 真假, 假范围 字符型 类型转换python的字符串 了解转义字符一些基本的运算 \ 比如一行…...
stm32 uart dma方式接收不定长度字符
一般处理: stm32 uart使用dma接收时,会有自己的数据流中断,数据流中断会调用HAL_UART_RxCpltCallback。但是数据流中断只会在HAL_UART_Receive_DMA函数指定的buffer满时才会触发。 接收不定长度字符,需要和uart的UART_IT_IDLE结…...
SciencePub学术 | Elsevier出版社SCIEEI征稿中
SciencePub学术刊源推荐:Elsevier出版社SCIE&EI征稿中!信息如下,录满为止: 一、期刊概况: 计算机科学类SCI-01 【期刊简介】6.5-7.0,JCR1区,中科院2区; 【检索情况】正刊,SC…...

PHP小白搭建Kafka环境以及初步使用rdkafka
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、安装java(Kafka必须安装java,因为kafka依赖java核心)二、安装以及配置Kafka、zookeeper1.下载Kafka(无需下载…...

【Java Web】敏感词过滤
一、前缀树 假设有敏感词:b,abc,abd,bcd,abcd,efg,hii 那么前缀树可以构造为: 二、敏感词过滤器 package com.nowcoder.community.util;import org.apache.commons.lang3.CharUt…...

stable diffusion实践操作-提示词
本文专门开一节写提示词相关的内容,在看之前,可以同步关注: stable diffusion实践操作 正文 提示词是SD中非常重要,你生成的图片质量,基本就取决于提示词的好坏,提示词分为正向提示词和反向提示词。 模板…...
leetcode8.字符串转整数-Java
题目 请你来实现一个 myAtoi(string s) 函数,使其能将字符串转换成一个 32 位有符号整数(类似 C/C 中的 atoi 函数)。 函数 myAtoi(string s) 的算法如下: 读入字符串并丢弃无用的前导空格 检查下一个字符(假设还未到字…...

从零开始的Hadoop学习(四)| SSH无密登录配置、集群配置
1. SSH 无密登录配置 1.1 配置 ssh (1)基本语法 ssh 另一台电脑的IP地址 (2)ssh 连接时出现 Host key verification failed 的解决方法 [atguiguhadoop102 ~]$ ssh hadoop103(3)回退到 hadoop102 [at…...
微信小程序活动报名管理系统设计与实现
摘 要 随着当下的移动互联网技术的不断发展壮大,现在人们对于手机的应用已经非常的成熟,当下的时代基本上达到了人手一部手机,数字化、信息化已经成为了人们的主流生活。有数据统计,截止到2020年末我国的手机网民人数已经接近10亿…...

用Kubernetes(k8s)的ingress部署https应用
用Kubernetes的ingress部署https应用 环境准备Ingress安装域名证书准备 部署应用通过ingress暴露应用根据ssl证书生成对应的secret创建ingress暴露部署的应用确认自己安装了ingress创建ingress 访问你暴露的应用 环境准备 Ingress安装 我之前有一片文章写的是用ingress暴露应…...

【附安装包】MyEclipse2020安装教程
软件下载 软件:MyEclipse版本:2020语言:简体中文大小:1.61G安装环境:Win11/Win10/Win8/Win7硬件要求:CPU2.5GHz 内存4G(或更高)下载通道①百度网盘丨下载链接:https://pan.baidu.co…...

软件与软件工程
软件 软件的概念以及特点: 软件是计算机系统中不可或缺的一部分,与硬件共同构成特定的系统功能。 人们通常把各种不同功能的程序,包括系统程序、应用程序、用户自己编写的程序等称为软件 软件的概念: 软件不仅包括程序,还包括程序…...
记录一下:基于nginx配置的封禁真实IP
nginx Situation(背景)Task(任务)Action(行动)1:方法1:使用nginx 自带的deny 和 allow 来实现2:方法2:添加配置 Result(结果) Situati…...

【Oracle APEX开发小技巧12】
有如下需求: 有一个问题反馈页面,要实现在apex页面展示能直观看到反馈时间超过7天未处理的数据,方便管理员及时处理反馈。 我的方法:直接将逻辑写在SQL中,这样可以直接在页面展示 完整代码: SELECTSF.FE…...

基于当前项目通过npm包形式暴露公共组件
1.package.sjon文件配置 其中xh-flowable就是暴露出去的npm包名 2.创建tpyes文件夹,并新增内容 3.创建package文件夹...

令牌桶 滑动窗口->限流 分布式信号量->限并发的原理 lua脚本分析介绍
文章目录 前言限流限制并发的实际理解限流令牌桶代码实现结果分析令牌桶lua的模拟实现原理总结: 滑动窗口代码实现结果分析lua脚本原理解析 限并发分布式信号量代码实现结果分析lua脚本实现原理 双注解去实现限流 并发结果分析: 实际业务去理解体会统一注…...

RNN避坑指南:从数学推导到LSTM/GRU工业级部署实战流程
本文较长,建议点赞收藏,以免遗失。更多AI大模型应用开发学习视频及资料,尽在聚客AI学院。 本文全面剖析RNN核心原理,深入讲解梯度消失/爆炸问题,并通过LSTM/GRU结构实现解决方案,提供时间序列预测和文本生成…...

AI书签管理工具开发全记录(十九):嵌入资源处理
1.前言 📝 在上一篇文章中,我们完成了书签的导入导出功能。本篇文章我们研究如何处理嵌入资源,方便后续将资源打包到一个可执行文件中。 2.embed介绍 🎯 Go 1.16 引入了革命性的 embed 包,彻底改变了静态资源管理的…...
服务器--宝塔命令
一、宝塔面板安装命令 ⚠️ 必须使用 root 用户 或 sudo 权限执行! sudo su - 1. CentOS 系统: yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh2. Ubuntu / Debian 系统…...

Docker 本地安装 mysql 数据库
Docker: Accelerated Container Application Development 下载对应操作系统版本的 docker ;并安装。 基础操作不再赘述。 打开 macOS 终端,开始 docker 安装mysql之旅 第一步 docker search mysql 》〉docker search mysql NAME DE…...

[ACTF2020 新生赛]Include 1(php://filter伪协议)
题目 做法 启动靶机,点进去 点进去 查看URL,有 ?fileflag.php说明存在文件包含,原理是php://filter 协议 当它与包含函数结合时,php://filter流会被当作php文件执行。 用php://filter加编码,能让PHP把文件内容…...
LangFlow技术架构分析
🔧 LangFlow 的可视化技术栈 前端节点编辑器 底层框架:基于 (一个现代化的 React 节点绘图库) 功能: 拖拽式构建 LangGraph 状态机 实时连线定义节点依赖关系 可视化调试循环和分支逻辑 与 LangGraph 的深…...

DBLP数据库是什么?
DBLP(Digital Bibliography & Library Project)Computer Science Bibliography是全球著名的计算机科学出版物的开放书目数据库。DBLP所收录的期刊和会议论文质量较高,数据库文献更新速度很快,很好地反映了国际计算机科学学术研…...