怎么样能避免D触发器出现亚稳态哪些电路存在亚稳态?

触发器涉及到的问题的一系列思考:
建立时间:触发器在时钟沿来到前,其数据输入端的数据必须保持不变的时间 保持时间:触发器在时钟沿来到后,其数据输入端的数据必须保持不变的时间
因为触发器内部数据的形成是需要一定的时间的,如果不满足建立和保持时间,触发器将进入亚稳态,进入亚稳态后触发器的输出将不稳定,在0和1之间变化,这时需要经过一个恢复时间,其输出才能稳定,但稳定后的值并不一定是你的输入值。这就是为什么要用两级触发器来同步异步输入信号。这样做可以防止由于异步输入信号对于本级时钟可能不满足建立保持时间而使本级触发器产生的亚稳态传播到后面逻辑中,导致亚稳态的传播。
两级触发器可防止亚稳态传播的原理:假设第一级触发器的输入不满足其建立保持时间,它在第一个脉冲沿到来后输出的数据就为亚稳态,那么在下一个脉冲沿到来之前,其输出的亚稳态数据在一段恢复时间后必须稳定下来,而且稳定的数据必须满足第二级触发器的建立时间,如果都满足了,在下一个脉冲沿到来时,第二级触发器将不会出现亚稳态,因为其输入端的数据满足其建立保持时间。 同步器有效的条件: 第一级触发器进入亚稳态后的恢复时间 + 第二级触发器的建立时间 <
找出了以前下的一篇文章,应该写的很详细了,当时看不太懂,也不太理解流水线,现在明白点了^_^图8跟楼主的图是一样的,不过多了Tco,原题应该默认为0吧。 用流水线技术提高同步电路的速度
同步电路的速度是指同步系统时钟的速度,同步时钟愈快,电路处理数据的时间间隔越短,电路在单位时间内处理的数据量就愈大。在讨论同步电路的运行速度之前,先看看电路的数据传输模型,如图8所示
Tco是触发器的输入数据被时钟打入到触发器到数据到达触发器输出端的延时时间;Tdelay是组合逻辑的延时;Tsetup是D触发器的建立时间。假设数据已被时钟打入D触发器,那么数据到达第一个触发器的Q输出端需要的延时时间是Tco,经过组合逻辑的延时时间为Tdelay,然后到达第二个触发器的D端,要希望时钟能在第二个触发器再次被稳定地打入触发器,则时钟的延迟必须大于Tco+Tdelay+Tsetup,也就是说最小的时钟周期Tmin =Tco+Tdelay+Tsetup,即最快的时钟频率Fmax =1/Tmin。FPGA开发软件也是通过这种方法来计算系统最高运行速度Fmax。因为Tco和Tsetup是由具体的器件工艺决定的,故设计电路时只能改变组合逻辑的延时时间Tdelay,所以说缩短触发器间组合逻辑的延时时间是提高同步电路速度的关键所在。由于一般同步电路都大于一级锁存,而要使电路稳定工作,时钟周期必须满足最大延时要求。故只有缩短最长延时路径,才能提高电路的工作频率。可以将较大的组合逻辑分解为较小的N块,通过适当的方法平均分配组合逻辑,然后在中间插入触发器,并和原触发器使用相同的时钟,就可以避免在两个触发器之间出现过大的延时,消除速度瓶颈,这样可以提高电路的工作频率。这就是所谓\流水线\技术的基本设计思想,即原设计速度受限部分用一个时钟周期实现,采用流水线技术插入触发器后,可用N个时钟周期实现,因此系统的工作速度可以加快,吞吐量加大。注意,流水线设计会在原数据通路上加入延时,另外硬件面积也会稍有增加。
总结 对于Tsetup和Thold的心得 看了许多对于这两个概念的讨论,现在是真理越辩越明啊! 首先在头脑里想像着由两级触发器,他们之间有一个组合逻辑电路,从而信号经过这个组合逻辑有一个时延Tmax(也就是考虑期最坏的情况,产生的最大时延),或者,Tmin(也就是他可能来得很快哦)。而对于这两个触发器,他们本身对于时间也是有要求的。这个要求就是建立和保持时间。 首先声明,这两个时间指标都是对于触发器数据输入端而言。而且,只有讨论第二个触发器的建立保持时间才有意义,因为这两个指标都是对应上一级的输出而做出的规范。而第一个就只能在需要讨论他的上一级时才有意义。
然后,什么是建立时间,建立时间Tsetup就是触发器在时钟沿来到前,其数据输入端的数据必须保持不变的时间。而保持时间呢:触发器在时钟沿来到后,其数据输入端的数据必须保持不变的时间。那么要问的是,为什么一个触发器需要这两个时间指标而引得这么麻烦!因为触发器内部数据的形成是需要一定的时间的,如果不满足建立和保持时间,触发器将进入亚稳态,进入亚稳态后触发器的输出将不稳定。在深入就是触发器的工艺问题了我想,所以不对此作深入讨论
那么有了这几个时间指标之后,我们应该让他们有个什么样的关系呢?
既然建立时间指的是数据输入端的数据在时钟到来之前必须保持不变的时间,也就是(考虑第二级触发器)第一级触发器的输出经过组合逻辑的那个Tmax到达第二级触发器的时间要先于时钟上升沿到来的时间。具体地说,第一个时钟沿在使得第一个触发器的数据输出到第二个触发器,然后再第二时钟沿又将这个数据打入第二个触发器,使之输出到下一级。。。
现在考虑更细一点,并不是第一个时钟一到就能使第一个触发器输入端的数据到达输出端,这中间还有延迟Tco,也就是一个时钟周期内,信号经过Tco,在经过Tmax,到达第二级触发器的时间还要先于第二个时钟上升沿,也就是说将一个时钟周期的时间减去Tmax+Tco,剩余的时间应该比较多以满足建立时间,即这个数据你要在允许你进入之前先在门口呆一段时间,里面还没有完全准备好呢。 所以他们之间的关系应该是T(时钟周期)>Tmax+Tco+Tsetup(这种情况时给定了右边这几个参数之后要你选择时钟频率) 如果考虑更细一点呢,即还要考虑时钟延迟Tpd,时钟偏移Tskew,甚至温度,电源带来的影响?那我就无能为力了!哈哈。 下面谈谈保持时间,说了这么多,可能又忘记前面的概念了,什么是保持时间:触发器在时钟沿来到后,其数据输入端的数据必须保持不变的时间。首先要声明的是,一般的设计当中,保持时间远没有建立时间来的重要。谈保持时间,就要考虑Tmin了,因为在谈建立时间的时候是讨论怎么样延迟小来满足建立时间。而这里就是如果来得太快,也会出问题。因为,保持时间的含义就是这个数据必须要经过这么长的时间处理,在这个时间段里,不允许输入端有变化的信号,你如果来得太快,那么有可能触发器的输出将可能出错(有可能触发器内部电容没有充放电完全)。这样,因为第一个触发器输出的数据最快也要Tmin到达,所以,保持时间要小于这个时间,也就是你要尽快处理。即Thold<Tmin。这样,在信号到达第二个触发器的时候,他们允许你到达了(但是不让你进哦,还有一个建立时间)。如果深入探讨一点,我们又来考虑一下Tco,即信号在触发器中的延迟,如果考虑到他,那么上面那个公式要改为:Thold<Tmin+Tco。
下面谈谈在FPGA当中的最大时钟频率的估算问题 了解了前面的一些概念以后,我们知道我的系统的时钟周期要有一定的长度,这个长度要覆盖建立时间Tsetup,触发器的输出延迟Tco,组合逻辑延迟Tlogic,现在我么年考虑更细一点,即再包含一个布线延迟,我们必须估算出布线延迟才能更精确的知道所能达到的上限频率,但是xilinx公司没有给出布线延迟的模型,不过业内通过统计分析表明,逻辑延迟与布线延迟的比值约为1:1到1:2由于我们所选用的芯片大量已经进入0.18um和0.13um深亚微米的工艺,因此我们取逻辑延迟与布线延迟比值为1:2,这样我们可以这样计算最大周期时间,Tmax = Tsetup+ Tco+Tlogic+Troute = Tsetup+ Tco+Tlogic+2Tlogic
= Tsetup+ Tco+3Tlogic 这样,我们的上限频率为Fmax = 1 / Tmax 注意:由于针对某一个器件(可能一种特定工艺下的库单元,他的触发器的时序参数时固定的)他的Tsetup和Tco是固定的,因此我们在设计中要考虑的参数只有两个Tlogic和Troute,通过良好的设计和诸如流水线技术我们可以把这两个指标控制在一个合理的范围之内。
现在来讨论设计建立时间和保持时间的一些工程问题:\流水线\技术;为什么要用两级触发器来同步异步输入信号 见最前面的讨论,这里还不是非常清楚,留待以后再分析。 接着讨论,一般工程中,都有速度要求,也就是要处理速度越快越好,这就要求时钟频率更快,但是频率快也将带来一系列的问题,首先是如果频率加大,那么周期减少(呵呵,废话),那么,根据前面对建立时间的讨论,允许我们的组合逻辑的延迟就越来越小。这给设计也带来了复杂性。由于组合逻辑的延迟是一个关键数据(一般他的级别比触发器内部延迟如Tco要大很多),所以他就是提升速度的一个瓶颈,怎么解决呢?在同步设计中,我们是通过在延迟比较大的组合逻辑中插入触发器,他他们分成几个独立的更小一点的组合逻辑块,这样,系统地频率就能加快。但是注意,这样就在原来的数据通路上加入延时。而且,原来设计受限制的部分只要一个周期完成,现在由于加入了触发器,所以,加多少个触发器就需要多几个时钟周期把数据从一段送到另一端。也许我们会疑惑为什么?这样好像更慢了,我觉得应该从大局着想,这样的话系统地频率上去了,那么原来的一个周期和改变后的一周期不是一个概念了(周期变短了)。 再就是整个系统因此而提升了速度,这样才是不为一粒老鼠屎,坏了一锅粥阿,实在是何乐而不为。
这也就是所谓的“流水线技术” 附:到底什么情况下我们使用流水线技术? 如果某个设计的处理流程分为若干步骤,而且整个数据处理时“单向的”,即没有反馈和迭代,前一个的输出是下一个的输入 就行
下面讨论亚稳态问题了,呵呵,当然也和触发器相关。 首先要清楚,什么是亚稳态? 亚稳态是指触发器无法在一个规定的时间内达到一个可确认的状态。
我们可以来打个比方: 假想两个触发器为两个相邻的交通灯,这两个交通灯必须要步调一致,也就是说如果第一个交通灯绿灯亮了之后车开始行驶,然后到达第二个交通灯处,那么,如果这个时候第二个交通灯还没有从红灯转到绿灯,也就是说这里的车还在等,那么从第一个交通灯驶来的车将会与其发生碰撞。 这里,我们就可以将交通灯当作时钟,而汽车当作要传递的信号。 也就是说这两个交通灯必须同时(或者相差很近)的改变,从而使得从第一个交通灯的驶来的车到达第二个交通灯的时候,这里的车已经离开。两个交通灯发生改变也就是时钟触发时刻,如果一致就是时钟没有发生偏移,否则时钟偏移。 这个偏移发生的原因是时钟布线相关的延时。 如果时钟偏移过大就可能会发生交通事故,也就是会产生亚稳态。 其次,什么时候会出现亚稳态呢? 如果锁存器的一个输入脉冲太窄,或两个输入同时有效,或两个输入相互间隔足够小,那么硬件锁存器可能进入亚稳态。 如果异步信号(所谓异步信号就是:如果信号不能由时钟控制,或者如果他是由不同域(时钟域)中的时钟同步,那么它就是异步信号)恰巧在触发器的初始化期间来到,那么他们可能造成触发器进入亚稳态。 如果数据输入在时钟跳变之前或之后的有限时间间隔中发生变化,那么触发器可能进入亚稳态。(摘自Verilog 高级数字设计)
注:这里涉及到同步异步信号的问题 当一个信号跨越某个时钟域(如,低俗向高速域传输数据)时,对新时钟的电路来说,他就是一个异步信号,接受该信号的电路需要对他进行同步处理,同步可以防止第一级存储单元(触发器)的亚稳态在新的时钟域里传播蔓延。(这就是同步的目的)
那么怎样避免亚稳态,也就是怎样同步呢? 简单的同步器有两个触发器串联组成,中间没有其他任何电路(而且要尽量贴得近,以确保两者间有最小的时滞(clock skew)),这种设计可以保证后一个触发器获得前一个触发器的输出时,前一个触发器已退出了亚稳态,并且输出已经稳定。 同步器典型有三种:电平同步器,边沿检测和脉冲。 摘自:/special_column/techarticle/jszl4911.html
除了同步器外,还有一些方法: 用反应更快的触发器 降低采样频率,给DFF更多的时间避开亚稳态时间 使用边沿变化快速的信号(并不是频率快,而是时钟沿陡峭) 原则就是:器件使用比较好的工艺,时钟周期余量大一些。
具体代码解决办法之一: always@(posedge clka) siga<= always@(posedge clkb) begin
//对sigb再取样一次 end wire comba=sigb_d & 1; wire conbb =sign_d & 1; 这样,comba与combb的值就会完全一样。避免之后逻辑上的错误。 可以这样只考虑:
一个异步信号,经过多个组合路径,进入不同的触发器。 就需要 时钟周期 > 最长的组合路径延迟 + 典型的亚稳态恢复时间 + 触发器的setup time。 根据以上几个数据确定你如何处理亚稳态信号 深入的探讨暂避。 1、setup time的意义:为什么Data需要在Clock到达之前到达?
其实在实际的问题中,setup time并不一定是大于零的,因为Clock到达时刻并不等同于latch的传输门A关闭的时刻(更何况这种关闭并不是绝对的和瞬间完成的),这之间有一个未知的延迟时间。
为使问题简化,假设Clock的到达时刻为传输门A关闭、传输门B打开的时刻。如果Data没有在这之前足够早的时刻到达,那么很有可能内部的feedback线路上的电压还没有达到足够使得inv1翻转的地步(因为inv0有延时,Data有slope,传输门B打开后原来的Q值将通过inv2迫使feedback保持原来的值)。如果这种竞争的情况发生,Q的旧值将有可能获胜,使Q不能够寄存住正确的Data值;当然如果feedback上的电压已经达到了足够大的程度也有可能在竞争中取胜,使得Q能够正确输出。
如果inv0、inv1和inv2的延时较大(Data的变化影响feedback和Q的时间越长),那么为了保证正确性就需要更大的setup time。所以在实际测量setup time的时候,需要选取工艺中最慢的corner进行仿真测量。 2、、hold time的意义:为什么Data在Clock到达之后仍然要保持一段时间?
和setup time的情况不一样,因为Clock到达时刻并不等同于latch的传输门A完全关闭的时刻。所以如果Data没有在Clock到达之后保持足够长的时间,那么很有可能在传输门A完全关闭之前Data就已经变化了,并且引起了feedback的变化。如果这种变化足够大、时间足够长的话,很有可能将feedback从原本正确的低电压拉到较高电压的电压。甚至如果这种错误足够剧烈,导致了inv1和inv2组成的keeper发生了翻转,从而彻底改变了Q的正确值,就会导致输出不正确。当然,如果这种错误电压不是足够大到能够改变keeper的值,就不会影响到Q的正确输出。
如果inv0、inv1和inv2的延时较小(Data的变化影响feedback和Q的时间越短),那么为了保证正确性,就需要更大的hold time。所以在实际测量hold time的时候,需要选取工艺中最快的corner进行仿真测量。
有同步信号引发到跨域传送有牵扯到了握手和FIFO 握手协议和FIFO作用处理诸如地址总线,数据总线,控制总线跨域传输的问题。
什么情况下用握手协议? 当几个电路不能预知相互的响应时间时,握手方法能让数字电路间实现有效的通信 什么情况下用FIFO? 许多情况下,数据在跨时钟域时要堆积起来,因此使用单个保持寄存器(见握手协议中)无法完成工作。 例如,一种情况是某个传输电路猝发式传送数据,接收电路来不及采样。 另一种情况是接收电路采样速度超出发送电路发送数据的速度,但采样的数据宽度不够。 或者是跨时钟域的数据传输您所在位置: &
&nbsp&&nbsp&nbsp&&nbsp
D锁存器与D触发器亚稳态的,结合定时参数-写的极好资料.docx 11页
本文档一共被下载:
次 ,您可全文免费在线阅读后下载本文档。
&#xe600;下载提示
1.本站不保证该用户上传的文档完整性,不预览、不比对内容而直接下载产生的反悔问题本站不予受理。
2.该文档所得收入(下载+内容+预览三)归上传者、原创者。
3.登录后可充值,立即自动返金币,充值渠道很便利
需要金币:350 &&
你可能关注的文档:
··········
··········
这篇文章感觉写的相当好
1、简介 这篇文章是我对电子设计中,亚稳态问题的一种分析和总结。文章通过对数字电路中器件的工作机制的介绍,引出亚稳态问题的发生机制。并通过对亚稳态问题发生机 制的探讨,用以得到一种能够清楚地,有的放矢地解决亚稳态问题的能力。而这种能力,将会成为你作为一个工程师的价值所在。希望通过这个探讨,可以使你设计 出属于自己的预防亚稳态的方法。对于常用的预防亚稳态的方法,由于网上已经有大量介绍,并且涉及到具体问题的分析,这里将不做重点介绍。
2、CMOS中的信息保存
Fig. 1. MOS管的电容模型
当一个MOS工艺晶体管被制造之后,在不同极之间,因为介电物质的存在,会形成电容。当晶体管工作时,这些电容会被充/放电。当充放电回路上的R,C有不同取值的时候,回路的时间常数(由RC表示)会不同。 在数字电路中,最简单的结构是反向器(inverter)。在CMOS工艺中,它由一个NMOS加一个PMOS组成。
Fig. 2. 反向器
对于这个反向器,可以简化成由工作电阻Ron,结点电容CL组成的充放电电路。 Fig. 3. 反向器充放电模型
当Inverter输入为0时,PMOS导通,对CL充电,时间由Rp*CL决定 当Inverter输入为1时,NMOS导通,对CL放电,时间由Rn*CL决定 其中CL由P/NMOS的漏极结点上所有相关的电容组成,这是一种近似的计算方法(将分布的电容进行集总)。 CL=Cdb+Cgd(Miller效应)+Cwire+Cg_fanout 从这里我们得到 1,任何信号都需要时间才能从输入端口传递到输出端口。 2,对CL的充放电影响系统的动态(翻转)功耗,如果想降低功耗,可以对不使用的信号添加使能。 3,由于Rp != Rn,所以Rp*CL != Rn*CL,所以rising time != falling time 对于分析亚稳态的问题,只需要记住第一条,任何信号从输入端口传递到输出端口都需要一定的时间。对于任何其他门电路,分析过程都一样。
3、SETUP/HOLD 时间的意义 S/H时间是时序器件的属性。下面我们来说一下,这两个时间是如何产生的。任何器件“原则”上都是电平有效的,边沿触发的器件是一种“把戏”。 首先我们看一下D锁存器。
Fig. 4. D锁存器
真值表: E? D? Q 0? x? PreQ 1? 0? 0 1? 1? 1
时序表示(局部)
Fig. 5. D锁存器时序图
当E维持在高电平的时候,D端在某一时刻,输入一个值D0。这个值从D端与非门进入,在器件内会有一个延迟,再加上反馈回与非门一个输入端的信号与另一个输入端的信号可能存在不一致,使得在整个D锁存器的建立过程中,Q端输出的电压会存在一个“不稳定阶段”,我们可以把它叫做Setup time,这个不稳定阶段的“长度”与上一节提到的器件传输时延,和D端输入电平,Q端初始电平有关(假设E端电平始终不变)。注意,这个时间段的起始位置在D开始有效的那一点上。因为D输入后,还要经过一个时间段,Q端才开始“震荡”。 在时序电路中,我们经常用到的D触发器,就是通过诸如D锁存器一样的电平器件所组成的。这里我们提供一个典型的由D锁存器所组成的上升沿有效的D触发器模型。
Fig. 7. 上升沿有效的D触发器(DFF)
在D锁存器时序的基础上,分析一下D触发器的时序(局部)
Fig. 8. 上升沿有效的D触发器的时序图
Fig. 8 中的2/E1,4/D1,5/Q1/D2与D锁存器中的时序一模一样。 从时钟端口1上升沿开始,到窗口时间前面那一点结束,这段时间就是DFF的setup time。 从时钟端口1上升沿开始,到窗口时间后面的那一点结束,这段时间就是DFF的hold time。 从时钟端口1上升沿开始,到输出点Q稳定结束,这段时间就是DFF的clock to output时间,可用Tcko,Tco表示。
通常来讲,对于一个高速器件,这个时间窗口都会非常小。现在我们把时间窗口缩到正常比例,并略去DFF内部时序,只关注D,Q,CLK,我们会得到下面这个图。
Fig. 9. 在时序仿真中,可能出现的实际时序图
到这里,我们说一下“负hold time”。如果在纯时序器件前端加上一些组合逻辑,从而组合成一个有一定功能的时序器件。那么因为前面这个组合逻辑会占用一部分传输时间,因此从这个不纯的时序器件上看,采样窗口就会相对时钟上升沿提前,当采样窗口的尾部可以提前到时钟上升沿之前的时候,就会出现负hold time(setup time永远在上升沿前面,永远是正的)。这说明:“不纯的时序器件内部的组合逻辑的传输时间”大于“纯时序器件原来的hold time的绝对值”。
从这里,我们可以得到,(粉色的是key,但是不太理解) 1,主从结
正在加载中,请稍后...君,已阅读到文档的结尾了呢~~
D锁存器与D触发器亚稳态的分析,结合定时参数写的极好
扫扫二维码,随身浏览文档
手机或平板扫扫即可继续访问
D锁存器与D触发器亚稳态的分析,结合定时参数写的极好
举报该文档为侵权文档。
举报该文档含有违规或不良信息。
反馈该文档无法正常浏览。
举报该文档为重复文档。
推荐理由:
将文档分享至:
分享完整地址
文档地址:
粘贴到BBS或博客
flash地址:
支持嵌入FLASH地址的网站使用
html代码:
&embed src='/DocinViewer--144.swf' width='100%' height='600' type=application/x-shockwave-flash ALLOWFULLSCREEN='true' ALLOWSCRIPTACCESS='always'&&/embed&
450px*300px480px*400px650px*490px
支持嵌入HTML代码的网站使用
您的内容已经提交成功
您所提交的内容需要审核后才能发布,请您等待!
3秒自动关闭窗口博客访问: 108239
博文数量: 48
博客积分: 945
博客等级: 准尉
技术积分: 360
注册时间:
IT168企业级官微
微信号:IT168qiye
系统架构师大会
微信号:SACC2013
分类: IT业界
1.1&&&&&&&& 亚稳态发生原因&&&&& 在FPGA系统中,如果数据传输中不满足触发器的Tsu和Th不满足,或者复位过程中复位信号的释放相对于有效时钟沿的恢复时间(recovery time)不满足,就可能产生亚稳态,此时触发器输出端Q在有效时钟沿之后比较长的一段时间处于不确定的状态,在这段时间里Q端在0和1之间处于振荡状态,而不是等于数据输入端D的值。这段时间称为决断时间(resolution time)。经过resolution time之后Q端将稳定到0或1上,但是稳定到0或者1,是随机的,与输入没有必然的关系。1.2&&&&&&&& 亚稳态发生场合&&&&& 只要系统中有异步元件,亚稳态就是无法避免的,亚稳态主要发生在异步信号检测、跨时钟域信号传输以及复位电路等常用设计中。1.3&&&&&&&& 亚稳态危害&&&&& 由于产生亚稳态后,寄存器Q端输出在稳定下来之前可能是毛刺、振荡、固定的某一电压值。在信号传输中产生亚稳态就会导致与其相连其他数字部件将其作出不同的判断,有的判断到“1”有的判断到“0”,有的也进入了亚稳态,数字部件就会逻辑混乱。在复位电路中产生亚稳态可能会导致复位失败。怎么降低亚稳态发生的概率成了FPGA设计需要重视的一个注意事项。&2. 理论分析2.1&&&&&&&& 信号传输中的亚稳态&&&& 在同步系统中,输入信号总是系统时钟同步,能够达到寄存器的时序要求,所以亚稳态不会发生。亚稳态问题通常发生在一些跨时钟域信号传输以及异步信号采集上。它们发生的原因如下:(1)在跨时钟域信号传输时,由于源寄存器时钟和目的寄存器时钟相移未知,所以源寄存器数据发出数据,数据可能在任何时间到达异步时钟域的目的寄存器,所以无法保证满足目的寄存器Tsu和Th的要求;(2)在异步信号采集中,由于异步信号可以在任意时间点到达目的寄存器,所以也无法保证满足目的寄存器Tsu和Th的要求;当数据在目的寄存器Tsu-Th时间窗口发生变化,也即当数据的建立时间或者保持时间不满足时,就可能发生亚稳态现象。如图3.1所示。&&图3.1& 亚稳态产生示意图&&&& 由图可知,当产生亚稳态后Tco时间后会有Tmet(决断时间)的振荡时间段,当振荡结束回到稳定状态时为“0”或者“1”,这个是随机的。因此,会对后续电路判断造成影响。2.2&&&&&&&& 复位电路的亚稳态2.2.1&&& 异步复位电路在复位电路设计中,复位信号基本都是异步的,常用异步复位电路Verilog描述如下:always @(posedge clk or negedge rst_n)begin&&&&&& if(!rst_n) a <= 1’b0;&&&&&& else&&&&&&&& a <=end综合出来复位电路模型如图3.2所示:&&图3.2& 异步复位电路模型&&&&& 如图3.3所示,为复位电路复位时序图。如果异步复位信号的撤销时间在Trecovery(恢复时间)和Tremoval(移除时间)之内,那势必造成亚稳态的产生,输出在时钟边沿的Tco后会产生振荡,振荡时间为Tmet(决断时间),最终稳定到“0”或者“1”,就会可能造成复位失败。&图3.3& 异步复位时序2.2.2&&& 同步复位电路的亚稳态&&&& 在复位电路中,由于复位信号是异步的,因此,有些设计采用同步复位电路进行复位,并且绝大多数资料对于同步复位电路都认为不会发生亚稳态,其实不然,同步电路也会发生亚稳态,只是几率小于异步复位电路。如下面verilog代码对同步复位电路的描述。always @(posedge clk)begin&&&&&& if(!rst_n) a <= 1’b0;&&&&&& else&&&&&&&& a <=end综合出硬件电路如图3.4所示。&图3.4& 同步复位电路&&&&& 在此,我们不讨论同步复位的消耗资源问题,只讨论同步复位的亚稳态产生情况。&&&&& 当输入端Din为高电平,而且复位信号的撤销时间在clk的Tsu和Th内时候,亚稳态就随之产生了。如图3.5时序所示,当复位撤销时间在clk的Tsu和Th内,输入数据为“1”,通过和输入数据相与后的数据也在clk的Tsu和Th内,因此,势必会造成类似异步信号采集的亚稳态情况。&图3.5& 同步复位电路时序图2.3&&&&&&&& 亚稳态产生概率以及串扰概率&&&&& 在实际的FPGA电路设计中,常常人们想的是怎么减少亚稳态对系统的影响,很少有人考虑怎么才能减少亚稳态发生几率,以及亚稳态串扰的概率问题。2.3.1&&& 亚稳态发生概率&&&&& 由上面分析得知,系统亚稳态发生的都是由于clk的Tsu和Th不满足,又或者是复位信号的移除和恢复时间不满足。常用FPGA器件的Tsu+Th约等于1ns,复位移除和恢复时间相加约等于1ns。&&&&& 当异步信号不是一组数据,或者信号量较少,那就需要对异步信号进行同步处理,例如对一个异步脉冲信号进行采集,只要脉冲信号变化发生在时钟Tsu和Th窗口内,那就很可能会产生亚稳态,亚稳态产生的概率大概为:&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& &&& &概率 = (建立时间 + 保持时间)/ 采集时钟周期&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& &&&&&&&&& (公式3-1)&&&&& 由公式3-1可以看出,随着clk频率的增加,亚稳态发生的几率是增加的。&&&&& 例如,为系统采用100M时钟对一个外部信号进行采集,采集时钟周期为10ns,那采集产生亚稳态的概率为:1ns/10ns = 10%&&&&& 同理采用300M时钟对一个外部信号进行采集,那产生亚稳态的概率为:1ns/3.3ns = 30%&&&&& 如果采用三相相位差为120°的时钟对一个外部信号进行采集,那产生亚稳态的概率接近90%&&&& 所以在异步信号采集过程中,要想减少亚稳态发生的概率:& (1) 降低系统工作时钟,增大系统周期,亚稳态概率就会减小;& (2) 采用工艺更好的FPGA,也就是Tsu和Th时间较小的FPGA器件;2.3.2&&& 亚稳态的串扰概率&&&& 使用异步信号进行使用的时候,好的设计都会对异步信号进行同步处理,同步一般采用多级D触发器级联处理,如图3.6所示,采用三级D触发器对异步信号进行同步处理。&图3.6& 三级寄存器同步&&&&& 这种模型大部分资料都说的是第一级寄存器产生亚稳态后,第二级寄存器稳定输出概率为90%,第三极寄存器稳定输出的概率为99%,如果亚稳态跟随电路一直传递下去,那就会另自我修护能力较弱的系统直接崩溃。接下来我们分析这种串扰的概率问题。&&&&&如图3.7所示为一个正常第一级寄存器发生了亚稳态,第二级、第三极寄存器消除亚稳态时序模型。&&图3.7&三级寄存器消除亚稳态&&&& 由上图可以看出,当第一个寄存器发生亚稳态后,经过Tmet的振荡稳定后,第二级寄存器能采集到一个稳定的值。但是为什么第二级寄存器还是可能会产生亚稳态呢?&&&& 由于振荡时间Tmet是受到很多因素影响的,所以Tmet时间又长有短,所以当Tmet时间长到大于一个采集周期后,那第二级寄存器就会采集到亚稳态。如图3.8所示。&&图3.8& 二级寄存器亚稳态&&&&& 由上图可知,第二级也是一个亚稳态,所以在这种情况下,亚稳态产生了串扰,从第一级寄存器传到了第二级寄存器,同样也可能从第二级寄存器串扰到第三级寄存器。这样会让设计逻辑判断出错,产生亚稳态传输,可能导致系统死机奔溃。2.3.3&&& 亚稳态振荡时间Tmet&&&&& 亚稳态震荡时间Tmet关系到后级寄存器的采集稳定问题,Tmet影响因素包括:器件的生产工艺、温度、环境以及寄存器采集到亚稳态离稳定态的时刻等。甚至某些特定条件,如干扰、辐射等都会造成Tmet增长。3. 应用分析有亚稳态产生,我们就要对亚稳态进行消除,常用对亚稳态消除有三种方式:(1)&&&&&& 对异步信号进行同步处理;(2)&&&&&& 采用FIFO对跨时钟域数据通信进行缓冲设计;(3)&&&&&& 对复位电路采用异步复位、同步释放方式处理。3.1.1&&& 对异步信号进行同步提取边沿在异步通信或者跨时钟域通信过程中,最常用的就是对异步信号进行同步提取边沿处理。对一个异步信号进行提取上升沿通常采用程序清单 4.1所示。程序清单 4.1 双极寄存器提取边沿input& &&& sig_wire&&&&&&& sig_nsyn_p;reg[1:0]&& sig_nsyn_r;always @(posedge clk or negedge rst_n)begin&&&&&& if(!rst_n) sig_nsyn_r <= 2’d0;&&&&&& else&&&&&&&& sig_nsyn_r <= { sig_nsyn_r [0], sig_nsyn };end&assign&&&& sig_nsyn_p = sig_nsyn_r[0] & ~sig_nsyn_r[1];&&&&&& 这种边沿提取方式对于一个稳定的系统是不合适的,例如:当第一级寄存器采集到亚稳态,那势必造成sig_nsyn_p输出亚稳态,这样就会对采用sig_nsyn_p的信号进行判断的电路造成影响,甚至判断出错误的值。根据3.3.1小节的亚稳态产生概率,如果在100M时种下那第一级寄存器产生亚稳态的概率约为10%,随着系统采集频率升高,那产生亚稳态的概率也会随之上升。因此,在进行异步信号跨频提取边沿时候,一般采用多进行一级寄存器消除亚稳态,可能在系统稳定性要求高的情况下,采用更多级寄存器来消除亚稳态,如程序清单 4.2所示,即为采用4级寄存器消除亚稳态,相应的边沿信号产生的时间就晚了两个时钟周期。程序清单 4.2 多级寄存器提取边沿信号input& &&& sig_wire&&&&&&& sig_nsyn_p;reg[3:0]&& sig_nsyn_r;always @(posedge clk or negedge rst_n)begin&&&&&& if(!rst_n) sig_nsyn_r <= 2’d0;&&&&&& else&&&&&&&& sig_nsyn_r <= { sig_nsyn_r [2::0], sig_nsyn };end&assign&&&& sig_nsyn_p = sig_nsyn_r[2] & ~sig_nsyn_r[3];3.1.2&&& FIFO进行异步跨频数据处理当数据流从一个时钟域到另一个时钟域的时候,绝大多数情况下都采用FIFO来作为中间缓冲,采用双时钟对数据缓冲,就可以避免亚稳态的发生。3.1.3&&& 异步复位,同步释放对于复位情况下的亚稳态,常常是由于恢复时间和移除时钟不满足造成的,因此,最常用的处理方式是采用异步复位、同步释放。常用电路模型如所示。采用第二级寄存器输出作为全局复位信号输出。程序清单 4.3& 异步复位处理wire&&&&&&& sys_rst_n;reg [1:0]& rst_r;always @(posedge clk or negedge rst_n)begin&&&&&& if(!rst_n) rst_r <= 2’d0;&&&&&& else&&&&&&&& rst_r <= {rst_r[0], 1’b1};endassign&&&& sys_rst_n = rst_r[1];通过上面三种方式处理异步信号、异步数据、以及异步复位可有效的提高系统的稳定性。减少亚稳态的产生引自:&/linjie-swust/archive//YWT.html
阅读(14037) | 评论(1) | 转发(4) |
相关热门文章
给主人留下些什么吧!~~
你好,文章很好受益匪浅。关于图3.7有点问题请教你。在图中reg1.q稳定后的值是不确定的,但是reg2.q采样的是reg1.q的值也是不确定的,reg2.q也是这样的,那这是怎样达到同步的呢?输出的值都不确定了。
请登录后评论。}

我要回帖

更多关于 施密特触发器电路图 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信