当前位置: 首页 > news >正文

理解FPGA中的亚稳态

一、前言

        大家应该经常能听说到亚稳态这个词,亚稳态主要是指触发器的输出在一段时间内不能达到一个确定的状态,过了这段时间触发器的输出随机选择输出0/1,这是我们在设计时需要避免的。本文主要讲述了FPGA中的亚稳态问题,可以帮助大家更好地理解亚稳态。本文来源于Altera公司的白皮书《Understanding Metastability in FPGAs》

二、概述

        本白皮书描述了fpga中的亚稳态,它发生的原因,以及它如何导致设计失败。它解释了亚稳态MTBF是如何计算的,并强调了各种器件和设计参数如何影响结果。

三、介绍(Introduction)

        亚稳性是当信号在不相关或异步时钟域的电路之间传输时,可能导致包括fpga在内的数字设备中的系统故障的一种现象。本文描述了fpga中的亚稳态,解释了这种现象发生的原因,并讨论了它如何导致设计失败。

        由于亚稳态而计算出的平均故障间隔时间(MTBF)表明设计人员是否应该采取措施减少此类故障的机会。本文解释了如何从各种设计和设备参数中计算MTBF,以及FPGA供应商和设计者如何增加MTBF。通过设计技术和优化,减少亚稳态故障的机会,可以提高系统的可靠性。

四、什么是亚稳态(What Is Metastability?)

        诸如FPGA等数字设备中的所有寄存器都定义了信号时序要求,允许每个寄存器在其输入处正确捕获数据并正确产生输出信号。为了保证寄存器的可靠运行,寄存器的输入必须在时钟沿之前的一段时间内保持稳定,我们称这个时间为建立时间t_{setup}(setup time),同时也必须在时钟沿之后的一段时间保持稳定,我们称之为保持时间t_{hold} 。然后,在指定的时钟到输出延迟之后(t_{co}),寄存器输出就可用了。如果一个寄存器违反了建立时间或者保持时间要求,那么寄存器就有可能进入亚稳态。在亚稳态下,寄存器输出在高状态和低状态之间悬停一段时间,这意味着输出转换到定义的高或低状态会延迟到指定的t_{co}之外。     

        在同步系统中,输入信号必须始终满足寄存器时序要求,这样才不会出现亚稳态。当信号在不相关或异步时钟域的电路之间传输时,通常会出现亚稳态问题。在这种情况下,设计人员不能保证信号满足建立时间和保持时间的时序要求,因为信号可以在相对于目标时钟的任何时刻到达。但是,并不是每个违反寄存器建立时间和保持时间的信号转换都会导致亚稳态输出。寄存器进入亚稳态的可能性和返回稳定状态所需的时间取决于制造设备所使用的工艺技术和操作条件。在大多数情况下,寄存器会很快恢复到稳定状态。  

        在时钟缘对数据信号进行采样的寄存器可以看作是一个球落到山上,如图 1 所示。山的侧面代表稳定状态(在信号转换后,信号的新旧数据值,信号转换的过程就是球翻山的过程,左侧为旧数据,右侧为新数据)山顶代表亚稳态。如果球掉在山顶,它可能会在那里无限期地保持平衡,但实际上它会稍微落到山顶的一侧并滚下山坡。球离山顶越远,它在底部达到稳定状态的速度就越快。

        如果数据信号在时钟沿和保持时间t_{hold}之后发生传输,则类似于将球落在山的“旧数据值”一侧,并且输出信号保持在该时钟传输的原始值。

        当寄存器的数据输入在时钟沿和建立时间t_{setup}之前发生传输,并保持在保持时间t_{hold}之后,这类似于将球落在山的“新数据值”一侧,并且输出足够快地达到稳定的新状态,以满足定义的 t_{co}时间。但是,当寄存器的数据输入违反 t_{setup}t_{hold}时,就类似于将球扔到山上。如果球落在山顶附近,球就需要很长时间才能到达底部,这会增加从时钟传输到稳定输出的延迟,超出定义的t_{co}

        下图说明了亚稳态信号。当时钟信号转换时,输入信号从低状态转换到高状态,违反了寄存器的t_{setup}要求。数据输出信号示例从低状态开始,进入亚稳态,在高状态和低状态之间徘徊。信号输出A解析为输入数据的新逻辑Logic 1状态,输出B返回到数据输入的原始逻辑 Logic 0状态。在这两种情况下,输出转换到定义的1或0的状态会延迟到寄存器指定的t_{co}之外。

五、何时亚稳态会造成设计失败(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 设计风格&#xff0c;它提供了一组规范和约束&#xff0c;使得客户端&#xff08;如 Web 应用程序、移动应用等&#xff09;和服务端之间的通信更加清晰、简洁和易于理解。 RESTful API 的设计原则 使用 HTTP 协议&#xff1a;RESTful …...

软件机器人助力行政审批局优化网约车业务流程,推动审批业务数字化转型

随着社会的进步和发展&#xff0c;行政审批业务逐渐趋向于智能化和自动化。近日&#xff0c;某市行政审批局在市场准入窗口引入博为小帮软件机器人大幅度提升了网约车办理业务的效率&#xff0c;创新了原有的业务模式。 软件机器人以其自动化、智能化的特性&#xff0c;优化了网…...

飞天使-python的字符串转义字符元组字典等

文章目录 基础语法数据类型python的字符串运算符输入和输出 数据结构列表与元组字典与集合 参考文档 基础语法 数据类型 数值型 &#xff0c;整数 浮点型 布尔型&#xff0c; 真假&#xff0c; 假范围 字符型 类型转换python的字符串 了解转义字符一些基本的运算 \ 比如一行…...

stm32 uart dma方式接收不定长度字符

一般处理&#xff1a; stm32 uart使用dma接收时&#xff0c;会有自己的数据流中断&#xff0c;数据流中断会调用HAL_UART_RxCpltCallback。但是数据流中断只会在HAL_UART_Receive_DMA函数指定的buffer满时才会触发。 接收不定长度字符&#xff0c;需要和uart的UART_IT_IDLE结…...

SciencePub学术 | Elsevier出版社SCIEEI征稿中

SciencePub学术刊源推荐:Elsevier出版社SCIE&EI征稿中&#xff01;信息如下&#xff0c;录满为止&#xff1a; 一、期刊概况&#xff1a; 计算机科学类SCI-01 【期刊简介】6.5-7.0&#xff0c;JCR1区&#xff0c;中科院2区&#xff1b; 【检索情况】正刊&#xff0c;SC…...

PHP小白搭建Kafka环境以及初步使用rdkafka

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、安装java&#xff08;Kafka必须安装java&#xff0c;因为kafka依赖java核心&#xff09;二、安装以及配置Kafka、zookeeper1.下载Kafka&#xff08;无需下载…...

【Java Web】敏感词过滤

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

stable diffusion实践操作-提示词

本文专门开一节写提示词相关的内容&#xff0c;在看之前&#xff0c;可以同步关注&#xff1a; stable diffusion实践操作 正文 提示词是SD中非常重要&#xff0c;你生成的图片质量&#xff0c;基本就取决于提示词的好坏&#xff0c;提示词分为正向提示词和反向提示词。 模板…...

leetcode8.字符串转整数-Java

题目 请你来实现一个 myAtoi(string s) 函数&#xff0c;使其能将字符串转换成一个 32 位有符号整数&#xff08;类似 C/C 中的 atoi 函数&#xff09;。 函数 myAtoi(string s) 的算法如下&#xff1a; 读入字符串并丢弃无用的前导空格 检查下一个字符&#xff08;假设还未到字…...

从零开始的Hadoop学习(四)| SSH无密登录配置、集群配置

1. SSH 无密登录配置 1.1 配置 ssh &#xff08;1&#xff09;基本语法 ssh 另一台电脑的IP地址 &#xff08;2&#xff09;ssh 连接时出现 Host key verification failed 的解决方法 [atguiguhadoop102 ~]$ ssh hadoop103&#xff08;3&#xff09;回退到 hadoop102 [at…...

微信小程序活动报名管理系统设计与实现

摘 要 随着当下的移动互联网技术的不断发展壮大&#xff0c;现在人们对于手机的应用已经非常的成熟&#xff0c;当下的时代基本上达到了人手一部手机&#xff0c;数字化、信息化已经成为了人们的主流生活。有数据统计&#xff0c;截止到2020年末我国的手机网民人数已经接近10亿…...

用Kubernetes(k8s)的ingress部署https应用

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

【附安装包】MyEclipse2020安装教程

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

软件与软件工程

软件 软件的概念以及特点&#xff1a; 软件是计算机系统中不可或缺的一部分&#xff0c;与硬件共同构成特定的系统功能。 人们通常把各种不同功能的程序&#xff0c;包括系统程序、应用程序、用户自己编写的程序等称为软件 软件的概念: 软件不仅包括程序&#xff0c;还包括程序…...

记录一下:基于nginx配置的封禁真实IP

nginx Situation&#xff08;背景&#xff09;Task&#xff08;任务&#xff09;Action&#xff08;行动&#xff09;1&#xff1a;方法1&#xff1a;使用nginx 自带的deny 和 allow 来实现2&#xff1a;方法2&#xff1a;添加配置 Result&#xff08;结果&#xff09; Situati…...

OpenClaw社区贡献指南:为Qwen3-14b_int4_awq开发并分享自定义技能

OpenClaw社区贡献指南&#xff1a;为Qwen3-14b_int4_awq开发并分享自定义技能 1. 为什么我们需要更多社区技能 上周我尝试用OpenClaw自动整理电脑里堆积如山的PDF论文时&#xff0c;发现现有的文件处理技能无法识别某些特殊格式的学术文献。这个痛点让我意识到&#xff1a;Op…...

十分钟微调Qwen2.5-7B实战:效果立现,适合新手的完整教程

十分钟微调Qwen2.5-7B实战&#xff1a;效果立现&#xff0c;适合新手的完整教程 1. 准备工作与环境介绍 1.1 为什么选择Qwen2.5-7B进行微调 Qwen2.5-7B是阿里云推出的开源大语言模型&#xff0c;7B参数规模在单卡上就能流畅运行。相比全量微调&#xff0c;使用LoRA技术可以在…...

5 鸿蒙应用权限配置快速落地实操 | 鸿蒙开发筑基实战

鸿蒙应用权限配置快速落地实操 | 鸿蒙开发筑基实战 作者&#xff1a;杨建宾&#xff08;华夏之光永存&#xff09; 摘要 本文面向鸿蒙开发新手与普通工程师&#xff0c;详细讲解鸿蒙应用权限配置的完整实操流程&#xff0c;包含权限分类、配置文件声明、运行时申请、权限校验等…...

假芯片识别与防范:工程师实战指南

1. 假芯片泛滥&#xff1a;半导体行业的隐秘危机最近在调试一块电路板时&#xff0c;我发现一个奇怪的现象&#xff1a;明明使用的是同型号的MCU&#xff0c;但部分板子的功耗异常偏高。经过一周的排查&#xff0c;最终发现问题出在芯片上——我们采购到了一批"套牌"…...

快捷键失灵?让Hotkey Detective揪出幕后“键盘小偷“——专业级Windows热键冲突解决方案

快捷键失灵&#xff1f;让Hotkey Detective揪出幕后"键盘小偷"——专业级Windows热键冲突解决方案 【免费下载链接】hotkey-detective A small program for investigating stolen key combinations under Windows 7 and later. 项目地址: https://gitcode.com/gh_m…...

Ubuntu 20.04下Mathematica 12.3安装全攻略(附Jupyter集成技巧)

Ubuntu 20.04下Mathematica 12.3安装与Jupyter集成实战指南 在科研计算与符号数学领域&#xff0c;Mathematica始终保持着不可替代的地位。对于Ubuntu用户而言&#xff0c;安装特定历史版本&#xff08;如12.3&#xff09;往往比最新版本更具挑战性——官方默认提供最新版下载&…...

AI绘画工作流:OpenClaw调度千问3.5-35B-A3B-FP8生成SD提示词

AI绘画工作流&#xff1a;OpenClaw调度千问3.5-35B-A3B-FP8生成SD提示词 1. 为什么需要自动化提示词生成 在Stable Diffusion创作中&#xff0c;最耗时的环节往往不是渲染过程&#xff0c;而是反复调试提示词&#xff08;prompt&#xff09;。我曾在一次商业插画项目中&#…...

仅限首批内测开发者获取:CPython无GIL预编译二进制+无锁标准库API速查表(含ABI兼容性矩阵与降级熔断方案)

第一章&#xff1a;Python无锁GIL环境下的并发模型概览Python 的全局解释器锁&#xff08;GIL&#xff09;长期被视为多线程 CPU 密集型任务的瓶颈。然而&#xff0c;随着 CPython 3.13 的正式引入“实验性无锁 GIL”&#xff08;--without-pymalloc 配合 --with-gildisabled 构…...

量子态可视化太难?用C++ + ImGUI实时渲染Bloch球+概率幅热力图(含跨平台编译脚本)

第一章&#xff1a;量子态可视化太难&#xff1f;用C ImGUI实时渲染Bloch球概率幅热力图&#xff08;含跨平台编译脚本&#xff09;量子计算教学与算法调试中&#xff0c;单量子比特态的几何表示——Bloch球——是理解叠加、相位与测量的核心工具&#xff1b;而复数概率幅的模…...

无失效数据的产品可靠性评估案例

当所有寿命相关的试验全部通过且无失效发生时如何评价产品可靠性作者&#xff1a;Julius王政 关键点o 一个产品可能有几项与寿命相关的可靠性验证试验。例如&#xff0c;车辆中使用的电子控制模块&#xff08;我们称之为 ECU&#xff09;通常有以下四项与寿命相关的试…...