认识FPGA触发器的亚稳态

边沿型触发器的输出有两个稳定状态: 高电平或者低电平。为保证可靠操作, 必须要满足触发器的时序要求,也就是我们熟知的建立时间和保持时间。如果输入信号违反了触发器的时序要求, 那么触发器的输出信号就有可能会出现非法状态—亚稳态。亚稳态是一种不稳定状态,在一定时间后, 最终返回到两个稳定状态之一。亚稳态输出的信号是什么样子的? 对于系统有什么危害? 如果降低亚稳态带来的危害? 这是下面要探讨的问题。
[文中有几张图片对于了解本文很关键,如果不能显示,请参考博客相册中topic2.png]
亚稳态的特点:
1. 增加触发器进入稳定状态的时间。
亚稳态的坏处之一是会导致触发器的TCO时间比正常情况要大。多出来的时间tR (resolution time) 就是亚稳态持续的时间,参考图1。如果触发器的时序要求tSU(建立时间)和tH(保持时间)被满足,那么触发器的延时TCO=tCO_norm; 否则如果违反了触发器的时序要求,那么触发器在经过tCO_norm时间后,进入亚稳态,亚稳态持续的时间叫做resolution time,标识为tR。tR过后,亚稳态返回到两个稳定状态之一。
认识FPGA触发器的亚稳态
这里写图片描述
图 1
数据的跳变距离触发器的采样时刻越近,tR就越大。这种关系参见图2.
这里写图片描述
认识FPGA触发器的亚稳态
器件制造商给出的tSU和tH指标都是有余量的。轻微的违反tSU或者tH并不会发生亚稳态,只是导致触发器的tCO超出器件的规范(spec)。只有当数据的跳变出现在亚稳态捕捉窗口W (见图2中的W,fs级别的时间窗口),才会发生亚稳态。总的来说,数据的跳变越靠近W窗口,触发器进入稳定态的时间就越长。
在同步设计中,源触发器(Source FlipFlop)的输出必须在一个时钟周期内稳定下来,才能够被目的触发器(Destination FlipFlop)准确采样。如果tR过大,可能让目的寄存器采样到亚稳态,会导致亚稳态的传播。
2. 输出毛刺、振荡、或中间电平
经过一段时间之后,亚稳态返回到稳定状态。有可能返回到高电平,也有可能返回到低电平, 这和输入的数据无关。且在亚稳态的过程中,触发器的输出可能在震荡,也可能徘徊在一个固定的中间电平上。我们来看一个真实案例。见图3.
这里写图片描述
认识FPGA触发器的亚稳态
在这个案例中,我们测试一个FPGA逻辑单元中的亚稳态现象。在测试中,我们让sel信号固定在0,那么逻辑关系为 F1 <= local_2m输入,F0 <= local_2m输入,local_2m和cdr_2m都是2MHz的方波信号,被一个50MHz的异步时钟作同步化处理。Verilog代码为:
always @(posedge clk_50m)
if(sel==1)begin
clk2m_oa <= cdr_2m ;
clk2m_ob <= cdr_2m ;
end
else begin
clk2m_oa <= local_2m ;
clk2m_ob <= local_2m ;
end
测试中我们发现触发器的输出clk2m_ob上偶尔有毛刺出现,但是触发器的输入F1和F0上并没有毛刺。而且这个毛刺和下一个clk2m_ob跳变沿的间隔刚好是50MHz的一个周期20nS。 参考图4,红色为F1,黄色为clk2m_ob。
这里写图片描述
我们来分析下这个毛刺。由于2MHz输入信号local_2m和50MHz时钟clk_50m是异步的,因此毫无疑问会有亚稳态的出现。当亚稳态出现的时候,触发器的输出一开始随机震荡到高电平,但很快亚稳态结束,并返回到”错误的”低电平状态。于是就表现为毛刺。如果想从门电路角度解释为什么会出现毛刺,可以参考文献[5].
在测试中,每大约一小时,clk2m_ob就会出现一次这样的毛刺。可以看出亚稳态的捕捉窗口是非常小的。这个实验中大约发生了 60 minutes * 60 seconds/20nS = 180*10^9次采样。因此捕捉窗口的大致范围为20nS * (2/25) / (180*10^9) ~= 9 *10^(-12) s = 9 fs. 这么高的精度,没有任何仪器可以精确模拟,这也是为什么亚稳态现象只能用统计的方法去研究的原因。
另一方面,同样的电路功能,clk2m_oa却从来没有出现过这样的毛刺。这说明亚稳态掉表现形式不是固定的。猜测clk2m_oa的亚稳态表现为中间电平的形式,并最终返回到”正确”的状态。由于tR时间非常短,并且亚稳态和信号的边沿混和在一起,无法和正常情况进行区分。根据XAPP094的解释,亚稳态的表现是和器件的PVT(制作工艺Process,电压Voltage,温度Temperature)相关的,并且和具体电路的增益,噪声相关。如果是这样,clk2m_oa和clk2m_ob的各自触发器的或增益或噪声是有差异的,所以表现不一致。
3. 亚稳态返回到哪一个稳定态是不可预测的,而且和输入数据无关。
亚稳态返回到哪一个稳定态是不可预测的,和输入数据无关。因此假设亚稳态较快的返回,目的寄存器(destination FF)能够采样到稳态电平,也可能采样到错误的电平,导致系统功能错误。

亚稳态的危害
目前主流的FPGA都是基于同步设计思想。一个良好的子模块设计都是同步于同一个时钟的子系统。当不同时钟域的多个模块进行通信时,就可能会发生亚稳态。
另外,同一个时钟域内,如果时序不满足,比如由于组合逻辑和走线的延时过大,导致源寄存器的跳变到达目的寄存器的时刻刚好位于时钟的跳变沿,也会发生亚稳态。当然,在同步模块中,对于一个时序收敛良好的设计,不会存在亚稳态的情况。
1. 理论上讲,如果亚稳态不能够在一个时钟周期内返回到稳定态,那么目的寄存器也会发生亚稳态。这就是亚稳态的传播。
2. 亚稳态的毛刺直接输出,有可能导致系统错误。比如毛刺信号送给CPU做中断,可能导致CPU产生错误的中断响应。
3. 采样到错误的电平,导致功能错误。这是逻辑设计人员最容易遇到的问题。最典型的例子是,假设有一个4bits one-hot编码的状态机。正常的功能只有四个状态0,2,4,8。但是这个状态机的有多个异步输入信号,那么就会发生亚稳态。我们知道,亚稳态返回到1或者0是随机的,这样就会出现状态机的输入有非法的组合,导致状态机进入到非法状态{1,3,5,6,7,9,10….}。如果状态机没有安全编码保护,状态机就会挂死在非法状态。
4. 破坏Block RAM的内容。在读取RAM时,如果生成读地址的时钟和RAM的读时钟是异步的,那么读取也会破坏RAM的内容。基本上是因为读RAM会伴随一个自动的回写动作,这是大多数CMOS FPGA的特性。回写的时候,由于在地址上发生了亚稳态,导致某一个地址的内容回写到了另外的地址上,从而破坏了RAM的内容。

亚稳态的处理
理论上讲,异步信号输入到一个同步系统,亚稳态是不可避免的。现实问题是如何降低亚稳态带来的危害,如何降低亚稳态发生的概率。
亚稳态最终会返回到稳定态,因此只要等足够的时间,就可以免受亚稳态的危害。亚稳态返回的时间tR(resolution time)是个很复杂的问题,取决于系统的MTBF要求和器件本身。总的来是很短的。对于90nm或者更小的工艺,在可以接受的MTBF如10年内,tR大约在1nS左右;MTBF如1000年内,tR大约在2nS左右,具体可以咨询响应的FPGA制造商。
1. 降低亚稳态发生的概率。
经典的处理方法是多拍同步。参见图5的Correct Method.
这里写图片描述
异步信号经过第一个寄存器,如果发生了亚稳态,2nS(假设MTBF=1000Y)左右返回到稳定态,如果时钟周期大于2ns(时钟频率小于500MHz), 那么显然第二个寄存器就没有亚稳态发生了。此时亚稳态的唯一影响就是不能在最准确的时刻识别到异步信号,有可能早一拍,或者晚一拍识别。
多说一点,为了处理亚稳态,识别异步信号需要的时间就较长(2拍或者更多),这就是目前流行的同步设计的代价。异步设计较好的解决了这个问题,异步设计靠硬件握手机制来反馈什么时候识别成功。有兴趣的朋友可以了解一下一个新兴的FPGA公司Achronix。
作为对比,我们看看图5中的wrong method. 第一拍触发器在接收异步信号后,产生了亚稳态。由于经过了组合逻辑和走线的延时,亚稳态传播到目的寄存器的时间增大很多。这种情况下,只有在很低速的时钟频率时,第二拍触发器才可以避免亚稳态。因此是不正确的处理方法。

  1. 降低亚稳态带来的危害。
    一个良好的设计必须有好的容错能力,让设计对亚稳态不敏感。如果亚稳态出现,至少要有能力恢复。
    1. 状态机如果有异步信号输入,一定要多拍处理异步信号,并且使用安全状态机,任何情况下不可以让状态机挂死在非法状态。
    2. 异步接口不可能做到准确地定时,在预算精度时,必须容忍+/-1拍的延时。
    3. 异步FIFO两个时钟域的地址交互时,使用格雷码计数器并多拍处理, 可减低对亚稳态的敏感.
    4. 能用低的频率实现的功能,不要用高的频率。频域较高时,要用三拍或者更多的触发器来降低亚稳态的危害。
    5. 较陡的信号边沿(包括数据和时钟)有利于降低发生亚稳态的概率。

小结
亚稳态是一个逻辑设计者必须知道的知识点。搞清楚亚稳态的响应,并采取措施防范是一个良好的逻辑设计的基本要求,必须在编码过程中加倍小心。而不是在亚稳态对设计产生了危害之后,再花费大量资源去找出根因。做正确的事情远比把事情做正确要重要的多。希望本文对你的工作有所帮助。
References:
[1]Altera, AN042 , Metastability in Altera Devices
[2]Xilinx, XAPP094:Metastable Recovery in Virtex-II Pro FPGAs
[3]Lattice, Tn1055:Metastability in Lattice Devices
[4]wikipedia.org, Metastability in electronics
[5]TI, Metastable Response in 5-V Logic Circuits

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

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

相关文章

一觉醒来,借呗竟然被封了

近日有一个网友向马云喊冤&#xff0c;自己经常用借呗&#xff0c;而且都是按时还款&#xff0c;给马云创造了不少的利润&#xff0c;可是前几天他一觉醒来&#xff0c;发现自己的借呗不能借了&#xff0c;只能还钱&#xff0c;不能借钱&#xff0c;这个朋友就很纳闷&#xff0…

开源指令集RISC-V

作者&#xff1a;知乎用户 链接&#xff1a;https://www.zhihu.com/question/28368960/answer/63275513 来源&#xff1a;知乎 著作权归作者所有。商业转载请联系作者获得授权&#xff0c;非商业转载请注明出处。 现在已经有不少关于RISC-V的项目了玛德拉斯印度理工学院(II…

贷款被拒,因为你的手机有问题

最近有个朋友去贷款&#xff0c;到了贷款公司&#xff0c;本来聊得挺好的&#xff0c;后来风控说要看下他手机&#xff0c;结果看完之后&#xff0c;风控说回去等结果&#xff0c;然后就没有任何消息了。为何风控看了一眼手机&#xff0c;然后贷款就被拒了呢&#xff1f;因为你…

世界各地奇葩讨债方法,竟百发百中

俗话说有借有还&#xff0c;再借不难&#xff0c;但是实际上有很多人天生就是老懒的性格&#xff0c;借钱的时候很客气&#xff0c;说的比唱的还好听&#xff0c;到了该还钱的时候突然变了一个人&#xff0c;任你怎么软磨硬泡他就是无动于衷。借债不还在世界各地都有发生&#…

PID笔记

PID笔记 在t时刻: 输入量为rin(t)输出量为rout(t)偏差量为err(t)=rin(t)-rout(t)PID的控制规律为: 假设是规定为直流电机调速的。 输入量rin(t)为电机转速预定值(转/min)。 输出量rout(t)为电机转速实际值(转/min)。 偏差量为预定值和实际值之差(转/min)。 执行器为直…

因为征信原因,买房的2万定金没了

近日有一位网友在网上发帖寻求帮助&#xff0c;他自己买了套房&#xff0c;已经向开发商交了2万元定金&#xff0c;但是等他去办理贷款的时候&#xff0c;银行却说他不符合贷款条件&#xff0c;所以按揭贷款没有批下来&#xff0c;最后他要求开发商退还那2万的定金&#xff0c;…

C指针的理解

C指针的理解 指针 &#xff08;编程语言中的一个对象&#xff09;:指针也就是内存地址&#xff0c;指针变量是用来存放内存地址的变量&#xff0c;在同一CPU构架下&#xff0c;不同类型的指针变量所占用的存储单元长度是相同的&#xff0c;而存放数据的变量因数据的类型不同&a…

你以为有白金卡就很牛逼?错!

近段有个朋友办了一张平安银行的白金卡&#xff0c;额度5万元&#xff0c;然后他高兴得不得了&#xff0c;还到处炫耀&#xff0c;以为带个“白金”字就很牛逼&#xff0c;其实不然&#xff0c;表面上看&#xff0c;白金卡虽然高大上&#xff0c;其实也只是一种卡级而已。所以今…

串口(RS - 232)

串口(RS - 232) 串行接口是将FPGA连接到PC的一种简单方法。我们只需要一个收发模块。 异步发射器 它通过序列化要传输的数据来创建一个信号“TxD”。 异步接收器 它从FPGA外部接收信号“RxD”,并对其进行“反序列化”,以便在FPGA内部轻松使用。 RS-232串行接口是如何工作…

震惊,用过微粒贷的人没资格贷款买房!

在网络借贷非常发达的今天&#xff0c;使用借呗&#xff0c;金条的人应该很多&#xff0c;因为简单方面&#xff0c;随借随还&#xff0c;所以深受广大朋友欢迎。但是这种方便有时候也会给一些朋友带来了巨大的烦恼。用过微粒贷&#xff0c;金条不能贷款买房近日&#xff0c;南…

信用卡PK信用贷款,那个更划算?

信用贷款和信用卡都是解决资金短缺很好的方式&#xff0c;两者都是无抵押无担保&#xff0c;因此成为了很多人解决小额资金难题的首选。但是无抵押贷款和信用卡也是有很大的区别的&#xff0c;所以今天我们就来分析下两者的优劣&#xff0c;看看哪个更划算。申请条件信用贷款&a…

JTAG接口

JTAG接口 JTAG是IEEE标准(1149.1),于20世纪80年代开发,用于解决电子板制造问题。现在,它被更多地用于编程、调试和探测端口。 但是首先,让我们看看JTAG最初的用途——边界测试。 这是一个简单的电子板(也被称为“PCB”的“印刷电路板”),有两个集成电路(“集成电路”),…

全相FFT

作者&#xff1a;桂。 时间&#xff1a;2017-12-02 23:29:48 链接&#xff1a;http://www.cnblogs.com/xingshansi/p/7956491.html 一、相位提取 以正弦信号为例&#xff0c;x sin(2pi*f*tpi)&#xff0c;希望提取phi&#xff1a; 思路1&#xff1a;通过Hilbert变化解决 思路…

现金贷合法吗?

说到现金贷&#xff0c;大家估计都听说过&#xff0c;甚至使用过&#xff0c;因为最近现金贷很火&#xff0c;整顿也很火&#xff0c;新闻充斥了各种平台。现金贷可以说让人欢喜让人优&#xff0c;喜的是&#xff0c;现金贷门槛很低&#xff0c;让那些借钱无门的朋友找到了一个…

I2C接口

I2C接口 I2C总线是一种简单的方法来连接多个芯片,特别是fpga / cpld。 I2C总线的特点 除了电源和接地外,只使用2根电线(命名为“SDA”和“SCL”)可以在同一总线上支持超过100个设备(总线上的每个设备都有一个单独可访问的地址)多主机(例如,两个cpu可以很容易地共享相同的I…

EPP (Enhanced Parallel Port 增强型并口)

EPP (Enhanced Parallel Port 增强型并口) EPP使与PC的通信快速和容易。 这里我们使用Pluto-P FPGA板与启用epp的PC通信。 EPP是IEEE 1284(并行端口标准)的一部分。 IEEE 1284还定义了SPP和ECP,但EPP提供了两者的最佳特性,即速度和简单性。 EPP的主要特点是: 通过并行端口…

公积金10万元,为何却不能贷款买房?

近日有一朋友&#xff0c;自己和老公公积金加在一起已经超过10万元&#xff0c;可是想用公积金去办理贷款的时候却被拒绝了&#xff0c;这到底是怎么回事呢&#xff1f;其实类似这样的案例最近在很多城市都有发生&#xff0c;继海南停止执行装修提取住房公积金政策之后&#xf…

现金贷平台倒闭后,借的钱是否可以不还?

目前火热的现金贷遭到一盆冷水&#xff0c;国家已经开始着手大力整顿那些不合规的现金贷&#xff0c;凡是没有获得相关放贷资质的就不能从事现金贷业务。在监管重拳整顿之下&#xff0c;很多现金贷已经开始吃不消&#xff0c;甚至有的面临倒闭的风险。11月份&#xff0c;就有媒…

好用的Perl包 Class::Ref

包的链接 https://metacpan.org/pod/Class::Ref 网页上介绍是 Class::Ref - Automatic OO wrapping of container references 就是将一个哈希、数组引用到一个 package 中来使用。 下面给出一个例子&#xff1a; #!/usr/bin/perluse FindBin qw($RealBin); use lib "$…

以太网UDP帧发包设计

以太网UDP帧发包设计 RTL8211 是一片 10M/100M/1000M 自适应以太网收发器&#xff0c;提供 MII/GMII/RGMII 接口的 MAC 连接。 下图为 RTL8211 与 FPGA 的连接关系。 以太网MAC层&#xff08;媒体介入控制层&#xff09;接口介绍 MII 接口 PHY是物理接口收发器&#xff0…