理解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}之外。

        关于建立时间,保持时间等相关内容,请阅读:FPGA时序分析与约束(2)——时序电路时序icon-default.png?t=N7T8https://blog.csdn.net/apple_53311083/article/details/132626131?spm=1001.2014.3001.5502

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

        在时钟缘对数据信号进行采样的寄存器可以看作是一个球落到山上,如图 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 宏功能,其中包括控制信号的各种延迟和亚稳态保护。否则,如果异步信号充当两个时钟域之间的握手逻辑的一部分,则控制信号指示何时可以在时钟域之间传输数据。在这种情况下,同步寄存器用于确保亚稳态不会干扰控制信号的接收,并且在使用数据之前,数据有足够的稳定时间来解决任何亚稳态条件。在一个设计合理的系统中,只要每个信号在使用前解析为稳定值,设计就可以正常工作。 

七、总结

        原文章还有一部分的性能分析和专用解决方案,这里就不做展开了,只要系统中有异步元件,亚稳态就是不可避免的,因此设计的电路首先要减少亚稳态导致错误的发生,其次要使设计对于亚稳态产生的错误不敏感。前者通过同步实现,后者根据不同的设计应用会有不同的处理方法。

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

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

相关文章

某物联网数智化园区行业基于 KubeSphere 的云原生实践

公司简介 作为物联网 数智化园区一体化解决方案提供商,我们致力于为大中型园区、停车场提供软硬件平台,帮助园区运营者实现数字化、智能化运营。 在使用 K8s 之前我们使用传统的方式部署上线,使用 spug(一款轻量级无 Agent 的自…

书单制作方法详细步骤,需要的小伙伴快来看看~

随着网络的发展,视频已经成为了人们获取信息的主要途径之一。书单视频作为一种特殊类型的视频,既能为观众提供阅读建议,又能为制作者带来收益,因此备受欢迎。本文将分享书单视频制作的详细步骤,帮助有兴趣的朋友们快速…

Flink基础实操-计算单词出现次数

🥇🥇【大数据学习记录篇】-持续更新中~🥇🥇 个人主页:beixi 本文章收录于专栏(点击传送):【大数据学习】 💓💓持续更新中,感谢各位前辈朋友们支持…

用Qt自制一个小闹钟

小闹钟 功能 当按下启动按钮时,停止按钮可用,启动按钮不可用,闹钟无法设置,无法输入自定义内容 当按下停止按钮时,暂停播报,启动按钮可用,闹钟可以设置,可以输入自定义内容 .pro文…

Weblogic SSRF【漏洞复现】

文章目录 漏洞测试注入HTTP头,利用Redis反弹shell redis不能启动问题解决 Path : vulhub/weblogic/ssrf 编译及启动测试环境 docker compose up -dWeblogic中存在一个SSRF漏洞,利用该漏洞可以发送任意HTTP请求,进而攻击内网中redis、fastcgi…

企业架构LNMP学习笔记12

1、Server配置: Server虚拟主机的配置: 在实际生产业务环境中,一台web服务器,需要使用多个网站部署。搭建vhost虚拟主机实现不同域名,解析绑定到不同的目录。 #基于http的web服务 server{#监听端口listen 80#配置虚…

微服务[Nacos]

CAP 1)一致性(Consistency) (所有节点在同一时间具有相同的数据) 2)可用性(Availability)(保证每个请求不管成功或者失败都有响应) 3)分区容错(Partition tolerance)(系统中任意信息的丢失或失败不会影响系统的继续运作) 一、虚拟机镜像准备 …

vue3中TCplayer应用

环境win10:vitevue3elementUI 1 安装 npm install tcplayer.js2 使用 <template><div><video id"player-container-id" width"414" height"270" preload"auto" playsinline webkit-playsinline></video>&l…

Excel·VBA二维数组组合函数的应用实例

看到一个问题《关于#穷举#的问题&#xff0c;如何解决&#xff1f;(语言-开发语言)》&#xff0c;对同一个数据存在“是/否”2种状态&#xff0c;判断其是否参与计算&#xff0c;并输出一系列数据的“是/否”状态的结果 目录 方法1&#xff1a;二维数组组合函数结果 方法2&am…

JVM垃圾回收算法和CMS垃圾收集器

目录 判断一个对象是否死亡&#xff1f; 1、引用计数法 2、可达性分析算法 三色标记 垃圾收集算法 1、分代收集理论 2、垃圾回收算法 标记-清除 标记-复制 标记-整理 CMS&#xff08;Concurrent Mark Sweep&#xff09;收集器 CMS垃圾收集器步骤 CMS垃圾收集器优…

科创板50ETF期权交易:详细规则、费用、保证金和开户攻略

科创板50ETF期权是指以科创板50ETF为标的资产的期权合约。科创板50ETF是由交易所推出的一种交易型开放式指数基金&#xff08;ETF&#xff09;&#xff0c;旨在跟踪科创板50指数的表现&#xff0c;下文介绍科创板50ETF期权交易&#xff1a;详细规则、费用、保证金和开户攻略&am…

ChatGPT AIGC 完成动态堆积面积图实例

先使用ChatGPT AIGC描述一下堆积面积图的功能与作用。 接下来一起看一下ChatGPT做出的动态可视化效果图: 这样的动态图案例代码使用ChatGPT AIGC完成。 将完整代码复制如下: <!DOCTYPE html> <html> <head><meta charset="utf-8"><tit…