FPGA亚稳态
- 格式:doc
- 大小:1.42 MB
- 文档页数:9
理解FPGAs中的亚稳态这篇论文描述了在FPGA中的亚稳态,它是怎样产生的,还有它是怎样导致设计的失败。
介绍了如何计算亚稳态的平均无故障时间(MTBF),并且总结了各种器件和设计参数是如何影响平均无故障时间的。
介绍亚稳态是当信号在无关的电路中或异步时钟域之间传输时导致数字器件包括FPGA系统失效的一种现象。
这篇论文描述了FPGA中的亚稳态,解释了它是如何发生的,并讨论了它是如何导致设计失败的。
由亚稳态得出的平均无故障时间可以告诉设计者是否应该去降低出现失效的几率。
这篇论文将告诉你如何由各种设计和器件参数计算出平均无故障时间,FPGA供应商和设计者是如何提高平均无故障时间的。
通过一些设计技巧和优化降低亚稳态造成的失效,系统可靠性是可以提高的。
什么是亚稳态在所有的数字器件如FPGA中的寄存器都定义了一个信号时序要求,满足了这个要求寄存器才可以正确地在输入端获取(capture)数据在输出端产生数据。
为了确保可靠的操作,输入信号在时钟沿之前必须稳定一段时间(寄存器建立时间Tsu)并且在时钟沿之后稳定一段时间(寄存器保持时间Th),然后寄存器输出经过一个特定的时钟到输出延时(clock to output ,Tco)后有效。
如果一个数据信号在翻转中违反了一个寄存器的建立和保持时间的要求,寄存器的输出可能就会是亚稳态。
在亚稳态中,寄存器的输出值在高和低之间徘徊一段时间,这就意味着输出翻转到一个确定的高或低的延时会超过固定的时钟到输出延时。
在同步系统中,输入信号必须总是满足寄存器时序要求,所以亚稳态不会发生。
亚稳态问题通常发生在当一个信号在无关的线路中或异步时钟域中传输。
在这种情况下设计者不能保证信号会满足建立时间(Tsu)和保持时间(Th)的要求,因为相对于目标时钟信号可以在任何时间到达。
但是,不是每个违反寄存器建立保持时间的信号翻转都会导致亚稳态。
一个寄存器进入亚稳态和从亚稳态进入稳态的时间依赖于制造商的制造工艺和使用环境。
【转】亚稳态详解1.什么是亚稳态简单来说,就是信号传输没有满⾜触发器的建⽴保持时间,此时触发器输出端Q在有效时钟沿之后⽐较长的⼀段时间处于不确定的状态,在这段时间⾥Q端⽑刺、振荡、固定的某⼀电压值,⽽不是等于数据输⼊端D的值。
之后Q端将稳定到0或1上,但是究竟是0还是1,这是随机的,与输⼊没有必然的关系。
2.亚稳态的危害从其定义中可以看到,由于输出在稳定下来之前可能是⽑刺、振荡、固定的某⼀电压值,在信号传输中产⽣亚稳态就会导致与其相连的其他数字部件将做出不同的判断,有的判断到“1”有的判断到“0”,有的判断为0~1之间的中间值,还会使下⼀级产⽣亚稳态(即导致亚稳态的传播)。
在复位电路中产⽣亚稳态可能会导致复位失败。
3.亚稳态的发⽣场合1)异步信号检测2)跨时钟域信号传输3)复位电路4)其他不满⾜建⽴保持时间的电路4.具体分析为什么会产⽣亚稳态产⽣亚稳态的原因就是违反了建⽴保持时间。
最典型的就是跨时钟域和异步传输。
在跨时钟域信号传输时,由于源寄存器时钟和⽬的寄存器时钟相移未知,所以源寄存器数据发出数据,数据可能在任何时间到达异步时钟域的⽬的寄存器,所以⽆法保证满⾜⽬的寄存器Tsu和Th的要求。
在异步信号采集中,由于异步信号可以在任意时间点到达⽬的寄存器,所以也⽆法保证满⾜⽬的寄存器Tsu和Th的要求。
当数据在⽬的寄存器Tsu-Th时间窗⼝发⽣变化,也即当数据的建⽴时间或者保持时间不满⾜时,就可能发⽣亚稳态现象。
图1. 亚稳态产⽣⽰意图由图可知,当产⽣亚稳态后Tco时间后会有Tmet(决断时间)的振荡时间段,当振荡结束回到稳定状态时为“0”或者“1”,这个是随机的。
因此,会对后续电路判断造成影响。
5.亚稳态产⽣概率由上⾯分析得知,系统亚稳态发⽣的都是由于clk的Tsu和Th不满⾜,⼜或者是复位信号的移除和恢复时间不满⾜。
常⽤FPGA器件的Tsu+Th约等于1ns,复位移除和恢复时间相加约等于1ns。
有一个有趣的现象,众多数字设计特别是与FPGA设计相关的教科书都特别强调整个设计最好采用唯一的时钟域。
换句话说,只有一个独立的网络可以驱动一个设计中所有触发器的时钟端口。
虽然这样可以简化时序分析以及减少很多与多时钟域有关的问题,但是由于FPGA外各种系统限制,只使用一个时钟常常又不现实。
FPGA时常需要在两个不同时钟频率系统之间交换数据,在系统之间通过多I/O接口接收和发送数据,处理异步信号,以及为带门控时钟的低功耗ASIC进行原型验证。
本章讨论一下在FPGA设计中多时钟域和异步信号处理有关的问题和解决方案,并提供实践指导。
这里以及后面章节提到的时钟域,是指一组逻辑,这组逻辑中的所有同步单元(触发器、同步RAM块以及流水乘法器等)都使用同一个网络作为时钟。
假如设计中所有的触发器都使用一个全局网络,比如FPGA的主时钟输入,那么我们说这个设计只有一个时钟域。
假如设计有两个输入时钟,如图1所示,一个时钟给接口1使用,另一给接口2使用,那么我们说这个设计中有两个时钟域。
图1:双时钟域设计平时我们在设计中遇到的门控时钟、衍生时钟以及事件驱动的触发器都可归为时钟域类别。
如图2所示,通过一个简单门控时钟创建了一个新的时钟域。
我们知道,这类时钟控制在FPGA设计中并不被推崇(可以使用时钟使能替代时钟门控),然而它却非常有利于我们理解时钟域这一概念。
本章我们将着重详细讨论以下主题:•两个不同时钟域之间传输信号。
•亚稳态的产生以及对设计的可靠性的影响•通过相位控制避免亚稳态•在时钟域之间传输单个信号,将信号打两拍•使用FIFO在时钟域之间传输多位数据•使用分区同步器模块提高设计的组织架构•处理ASIC验证原型里的门控时钟•建立一个单时钟模块•自动门控移除图2:通过门控时钟创建的时钟域一、跨时钟域设计中包含多时钟域,首先要解决的是在不同时钟域之间传输信号的问题。
信号跨时钟域传输将会是一个大问题,原因如下:1、信号跨时钟域传输产生的故障总是不太容易复现。
第一章绪论 1第一章绪论1.1 论文产生的背景对于研发人员来说,可靠性是必须保证的设计目标之一。
为了验证系统的可靠性,产品在出厂前都会进行大量的整机测试,包括常温测试、高低温测试直到最终的外场测试,这些测试需要耗费大量的人力和物力。
对于开发人员来说,通常这个阶段出现的问题也是最头疼的,因为其中很多属于偶发性故障,难以复现。
比如芯片上电初始化配置经常失败,或者正常运行的系统突然发生复位,或者网口突然发生阻塞,或者常温下的通过的指标,在进行高低温实验的时候出现了恶化。
整机测试不同于平时研发的单板测试,测试手段受到很多限制。
比如由于单板装入了机壳,就不能使用JTAG口进行实时监测,也不能使用示波器排查。
但是如果在开发初期,设计者能够对系统的各个环节进行认真的评估,充分考虑了可靠性问题,那么在面对测试阶段层出不穷的故障时便能轻松一些。
关于可靠性问题,几乎所有的研究资料都推荐使用同步设计解决,因为同步设计可以保证时钟触发沿避开输入数据发生变化的区域,这也就避免了不稳定采样。
的确,实际中复杂逻辑电路均采用同步设计,FPGA厂家也只对客户的同步设计给予技术支持。
但是同步设计并非不需要考虑异步问题,因为绝大多数的设计都需要与外界通信,比如某项目中的FPGA的外围设备包括CPLD、CPU、DSP 和大量的射频芯片,这些外围器件的工作时钟与FPGA的工作时钟没有任何关系。
因此,每次FPGA与这些外围设备通信都面临着失败的风险,如何降低通信故障率是设计中的一个难点。
本文将围绕异步信号对同步系统的影响进行详细的理论分析,从数字电路的结构出发讨论亚稳态发生的根源,并结合FPGA实际设计经验介绍几种解决方法。
1.2 发展历史输入数据与采样时钟发生沿打沿(marginal trigger)的情况,双稳态电路不能在规定的时间(由厂家定义)进入稳态的现象称为亚稳态。
一旦双稳态电路进入亚稳态,那么在亚稳态停留的时间将不可预知。
在这段时间里,双稳态电路输出的电压处于非法的逻辑电平区间,具体的电压值无法预测,输出还可能发生振荡。
时序分析基础:Setuphold,跨时钟域处理和亚稳态⼀、建⽴时间和保持时间Setup/holdTsetup和Thold内数据都稳定时,data1和data2才会正常被D触发器采样⼆、什么是亚稳态百度百科上说亚稳态是指触发器⽆法在某个规定时间段内达到⼀个可确认的状态。
当⼀个触发器进⼊亚稳态时,既⽆法预测该单元的输出电平,也⽆法预测何时输出才能稳定在某个正确的电平上。
讲⼈话就是,亚稳态就是在建⽴时间或保持时间⾥数据处于不够稳定的状态、正在变化的状态,下⾯以单bit跨时钟域处理为例⼦。
三、单bit跨时钟域中的亚稳态处理先说什么是时钟域,打个⽐⽅,FPGA的主控芯⽚⼯作在系统时钟之下,系统时钟由晶振产⽣为50MHz,如果不分频,板内的所有资源都⼯作在系统时钟之下,那么这就是⼀个时钟域clk_a。
同⼀个时钟域下的信号,综合以及布线⼯具可以在data路径或者clock路径上插⼊buffer使得每⼀个D触发器的setup/hold时间都满⾜,这个时候可以简化⼀下模型,把系统时钟看成clk_a域的理想时钟,并在时钟上升沿D触发器采样(实际上是建⽴时间这个时间段采样的)。
那么当另⼀个时钟域的信号data_b来了(⼀般是外设的标志位或者数据组),就是跨时钟域了,就可能发⽣下图情况。
这时就产⽣了亚稳态,这个数据是不稳定的,可能采样到0,也可能采样到1。
可能会导致信号⽑刺、逻辑判断混乱、振荡等问题。
消除亚稳态有三种⽅法,⼀是⽤多级DFF来延时,俗称打两拍。
打⼀拍的verlog代码如下always@(posedge clk or negedge rst_n)if(!rst_n)data_r<=0;elsedata_r<=data_b;View Code这样就会发⽣下图情况在时钟的上升沿对clk_b域的data_b采样,并将其值赋给clk_a域的data_r。
亚稳态判读出的是1值,data_r就像上图中的data_r,是⼀个稳态值,亚稳态已经消去;亚稳态判读出的是0值,data_r就像上图中的data_r‘,也是⼀个稳态值,亚稳态已经消去。
跨时钟域信号同步方法6种ASIC中心1 引言基于FPGA的数字系统设计中大都推荐采用同步时序的设计,也就是单时钟系统。
但是实际的工程中,纯粹单时钟系统设计的情况很少,特别是设计模块与外围芯片的通信中,跨时钟域的情况经常不可避免。
如果对跨时钟域带来的亚稳态、采样丢失、潜在逻辑错误等等一系列问题处理不当,将导致系统无法运行。
本文总结出了几种同步策略来解决跨时钟域问题。
2 异步设计中的亚稳态触发器是FPGA设计中最常用的基本器件。
触发器工作过程中存在数据的建立(setup)和保持(hold)时间。
对于使用上升沿触发的触发器来说,建立时间就是在时钟上升沿到来之前,触发器数据端数据保持稳定的最小时间。
而保持时间是时钟上升沿到来之后,触发器数据端数据还应该继续保持稳定的最小时间。
我们把这段时间成为setup-hold时间(如图1所示)。
在这个时间参数内,输入信号在时钟的上升沿是不允许发生变化的。
如果输入信号在这段时间内发生了变化,输出结果将是不可知的,即亚稳态 (Metastability)图1一个信号在过渡到另一个时钟域时,如果仅仅用一个触发器将其锁存,那么采样的结果将可能是亚稳态。
这也就是信号在跨时钟域时应该注意的问题。
如图2所示。
信号dat经过一个锁存器的输出数据为a_dat。
用时钟b_clk进行采样的时候,如果a_dat正好在b_clk的setup-hold时间内发生变化,此时b_ dat 就既不是逻辑"1",也不是逻辑"0",而是处于中间状态。
经过一段时间之后,有可能回升到高电平,也有可能降低到低电平。
输出信号处于中间状态到恢复为逻辑"1"或逻辑"0"的这段时间,我们称之为亚稳态时间。
触发器进入亚稳态的时间可以用参数MTBF(Mean Time Between Failures)来描述,MTBF即触发器采样失败的时间间隔,表示为:其中fclock表示系统时钟频率,fdata代表异步输入信号的频率,tmet代表不会引起故障的最长亚稳态时间,C1和C2分别为与器件特性相关的常数。
第1篇1. FPGA是什么?FPGA(现场可编程门阵列)是一种可编程逻辑器件,它可以根据用户的需求进行编程,实现各种数字电路功能。
FPGA具有高灵活性、高集成度、低功耗等优点,广泛应用于通信、工业控制、消费电子等领域。
答案:FPGA是一种可编程逻辑器件,可以根据用户需求进行编程,实现各种数字电路功能。
2. VHDL和Verilog的区别是什么?VHDL和Verilog都是硬件描述语言,用于描述数字电路和系统。
两者在语法和功能上存在一些差异:- VHDL是一种强类型语言,具有丰富的数据类型和操作符,易于编写复杂的数字电路描述。
- Verilog是一种弱类型语言,数据类型较为简单,但具有简洁的语法,便于快速编写代码。
答案:VHDL和Verilog的区别在于数据类型和语法,VHDL是强类型语言,Verilog 是弱类型语言。
3. 什么是FPGA的时钟域交叉问题?FPGA的时钟域交叉问题是指当多个时钟域的信号进行交互时,可能会出现信号竞争、数据丢失等现象,导致系统性能下降或功能失效。
答案:FPGA的时钟域交叉问题是指当多个时钟域的信号进行交互时,可能会出现信号竞争、数据丢失等现象。
4. 如何处理FPGA的时序问题?处理FPGA的时序问题主要包括以下几个方面:- 设计合理的时钟树,确保时钟信号在各个模块之间稳定传播。
- 合理设置时钟分频、倍频等参数,避免时钟抖动。
- 优化模块设计,减少信号路径长度,降低信号传播延迟。
- 进行时序仿真,确保满足设计要求。
答案:处理FPGA的时序问题主要包括设计合理的时钟树、设置时钟参数、优化模块设计和进行时序仿真。
5. FPGA的配置过程是怎样的?FPGA的配置过程主要包括以下几个步骤:- 编写配置文件:使用VHDL或Verilog等硬件描述语言编写配置文件,描述FPGA 内部电路的结构和功能。
- 编译配置文件:使用FPGA厂商提供的编译工具对配置文件进行编译,生成门级网表。
跨时钟域问题处理在FPGA设计中,不太可能只⽤到⼀个时钟。
因此跨时钟域的信号处理问题是我们需要经常⾯对的。
跨时钟域信号如果不处理的话会导致2个问题:(1) 若⾼频率时钟区域输出⼀个脉冲信号给低频率时钟区域,则该脉冲很有可能⽆法被采样到,⽰意图如下,clk2根本采样不到pulse,但是从原理上来说,低频时钟是⽆法完全去采样⾼频信号的,这⾥⾯⼀定会丢失信息。
这是⽆法避免的。
(2) 亚稳态问题在说明亚稳态之前,我们需要先了解什么是建⽴时间和保持时间建⽴时间:在时钟沿到来前,被采样信号应该提前⼀段时间就进⼊稳定状态,这个时间称为建⽴时间保持时间:在时钟沿到来后,被采样的信号应该保持稳定⼀段时间,这个时间称为保持时间⽽亚稳态就是建⽴时间和保持时间不满⾜导致的。
如下图所⽰,就是建⽴时间不满⾜,造成dout是个不确定值,即亚稳态。
很多新⼈以为亚稳态仅仅是逻辑上的障碍,其实亚稳态是实实在在的电路上的问题。
模拟电路中,三极管主要⼯作在其放⼤区间,⽽在数字电路却是要⼯作在截⾄态。
亚稳态⾮常类似模拟电路中的放⼤态,这个状态将使得器件的输出电流被放⼤,如果这个状态被传递,那么将导致更多的电路处在放⼤电路的⼯作状态中,这将引起巨⼤的电流和功耗,甚⾄烧毁芯⽚,所以,跨时钟域是⼀定会出现亚稳态的,但是我们必须要把亚稳态控制在⼀个很⼩的范围内。
这就是为什么要在其后⾯再⽤⼀个寄存器的原因。
它的功能就是把亚稳态仅仅限制在那⼀个寄存器的⼩区域。
亚稳态会造成严重的后果。
就像将军发命令⼀样,若其发出的是⼀个亚稳态的命令,⼠兵A可能判定这个命令为进攻,⼠兵B可能判定这个命令为撤退,这将引起极⼤的混乱。
解决⽅案:1,握⼿操作(⾼频信号要进⼊低频时钟域)针对问题1中所描述的情况,即快时钟域传递⼀个脉冲信号到慢时钟域,慢时钟域很有可能采样不到该脉冲。
这时就需要采⽤握⼿操作来解决了。
⾸先,快时钟域应该将脉冲信号转换为⼀个持续信号,慢时钟域采样到该持续信号后,返回⼀个反馈信号,告知块时钟域将持续信号拉低。
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对于分析亚稳态的问题,只需要记住第一条,任何信号从输入端口传递到输出端口都需要一定的时间。
对于任何其他门电路,分析过程都一样。
fpga中的亚稳态FPGA(Field-Programmable Gate Array)是一种可编程逻辑器件,它具有可重构性和灵活性,可用于各种应用领域。
在FPGA中,亚稳态是一个重要的概念,它在电路设计和时序分析中起着关键的作用。
亚稳态指的是在电路中存在的一个临界状态,处于这种状态下的电路可能会产生不可预测的行为。
在FPGA中,由于其可编程性,电路的状态可能会在不同的时钟周期之间发生变化,从而引发亚稳态问题。
亚稳态的产生主要有两个原因。
首先,由于FPGA中的可编程资源(如查找表、寄存器等)可以在运行时进行重配置,因此电路的状态可能会发生变化。
其次,由于FPGA中的多个逻辑单元(如查找表、寄存器等)之间存在时序差异,即不同逻辑单元的输入和输出信号在时间上存在一定的延迟,这也会导致亚稳态的出现。
亚稳态在FPGA设计中可能会导致一系列问题。
首先,亚稳态可能会导致电路的输出值不稳定,即在不同的时钟周期内,相同的输入可能会产生不同的输出。
这对于一些对输出值精确性要求高的应用来说是不可接受的。
其次,亚稳态还可能会导致电路的功能失效,即电路无法按照设计的预期进行工作。
这对于一些对电路功能要求严格的应用来说是无法容忍的。
为了解决FPGA中的亚稳态问题,设计者可以采取一系列的措施。
首先,可以通过合理的时序约束来避免亚稳态的产生。
时序约束是指在设计中明确规定各个逻辑单元之间的时序关系,以确保电路的正确运行。
其次,可以通过引入冗余逻辑来提高电路的容错性。
冗余逻辑是指在电路中引入一些冗余的逻辑单元,以增加电路的稳定性和可靠性。
此外,还可以通过优化布线和时钟分配来减少亚稳态的发生。
除了在设计阶段采取措施外,还可以在验证和测试阶段对FPGA进行亚稳态分析。
通过使用专门的工具和方法,可以检测和分析电路中存在的亚稳态问题,并对其进行修复和优化。
例如,可以使用模拟和仿真技术来模拟电路的工作过程,并通过观察电路的输出来判断是否存在亚稳态问题。
FPGA的基本原理FPGA(Field-Programmable Gate Array,现场可编程门阵列)是一种集成电路芯片,它可以由用户根据需要进行重新配置和重新编程,以实现特定的功能。
与传统的固定功能芯片相比,FPGA具有更高的灵活性和可重构性。
FPGA由大量的逻辑单元(Logic Element,LE)组成,每个逻辑单元包含查找表(Look-Up Table,LUT)、触发器和多路选择器等基本元件。
这些逻辑单元通过可编程连接资源(Programmable Interconnect Resources)相互连接,形成复杂的电路结构。
1. FPGA的工作原理FPGA的工作原理可以简单概括为:将用户设计的电路描述文件经过综合、布局、布线等过程转化为对FPGA内部逻辑单元和可编程连接资源进行配置的位流文件(Bitstream),然后加载到FPGA芯片中进行运行。
1.电路描述文件用户使用硬件描述语言(HDL)如VHDL或Verilog来描述所需实现的电路功能。
这些描述文件包括了电路结构、信号传输、时序约束等信息。
2.综合综合是将用户设计的高级语言描述转化为低级门级网表表示。
综合工具根据用户的描述生成逻辑电路的等效结构,包括逻辑门、时钟触发器等。
3.布局布局是将综合后的逻辑电路映射到FPGA芯片上。
布局工具根据逻辑电路和FPGA芯片的物理限制,将逻辑元件分配到FPGA芯片上的特定位置。
4.布线布线是将布局后的逻辑电路中的元件相互连接。
布线工具根据逻辑电路和FPGA芯片上的可编程连接资源,生成元件之间的连线路径。
5.位流文件生成位流文件(Bitstream)是将经过布线后的电路配置信息以二进制形式存储。
位流文件包含了对FPGA内部逻辑单元和可编程连接资源进行配置的具体指令。
6.加载与运行将位流文件加载到FPGA芯片中,配置FPGA内部资源,并开始执行用户设计的功能。
加载后,FPGA可以按照用户设计进行计算、数据处理、信号处理等操作。
FPGA跨时钟域亚稳态研究作者:周伟杜玉晓杨其宇张育俊曾浩来源:《电子世界》2012年第03期【摘要】在FPGA电路设计中,一个系统可能包含了很多跨时钟域的时钟信号,当其目标域时钟与源域时钟不同时,如何在这些不同域之间传递数据成为了一个重要问题。
特别是在中心模块与外围电路芯片的通信设计中,容易导致亚稳态的跨时钟域就不可避免。
针对FPGA设计中的亚稳态问题,本文给出了一系列行之有效的解决方法,很好地抑制亚稳态,提高系统可靠性。
【关键词】亚稳态;建立时间;保持时间;异步FIFO;握手协议1.引言在FPGA同步时序电路设计中,即所有时钟寄存器的时钟共享一个时钟,可以有效地消除亚稳态。
然而,许多实际应用要求在同一个可编程逻辑器件内采用多个时钟,且核心模块与外设的通信设计也涉及跨时钟域的数据传递。
跨时钟的异步时序电路含有的多个时钟源,它们存在频率和相位的差异,当它们用作寄存器的输入时钟时,就可能违背建立时间和保持时间的要求,出现亚稳态[1-5]。
亚稳态问题是跨时钟域异步数据传输过程面临的主要问题。
在FPGA设计中,每种触发器都有时序要求。
“建立时间”(Setup time)是指在时钟沿到来之前,触发器输入信号必须保持稳定的时间。
“保持时间”(Hold time)则是指在时钟沿之后,信号必须保持稳定的时间。
这些指标通常比较保守,以应对不同的PVT(工艺、电压、温度)环境下时序各有差异的情况。
如果一个设计满足了这些时序要求,则触发器出现错误的可能性可以忽略不计。
亚稳态是当信号在跨时钟的异步电路中或是无关的时钟域之间传输时导致数字系统失效的一种现象。
为了使触发器能够正确捕获并输出数据,FPGA的信号传输数据信号都会有一定的时序要求,为了确保可靠的操作,输入寄存器的数据信号必须在时钟沿的某段时间(寄存器的建立时间Tsu)之前保持稳定,并且持续到时钟沿之后的某段时间(寄存器的保持时间Th)之后才能改变。
寄存器的输入反映到输出则需要经过一定的延时(时钟到输出的时间Tco)。
亚稳态是指触发器无法在某个规定时间段内达到一个可确认的状态。
当一个触发器进入亚稳态时,既无法预测该单元的输出电平,也无法预测何时输出才能稳定在某个正确的电平上。
在这个稳定期间,触发器输出一些中间级电平,或者可能处于振荡状态,并且这种无用的输出电平可以沿信号通道上的各个触发器级联式传播下去。
1.亚稳态发生的原因在同步系统中,如果触发器的setup time / hold time不满足,就可能产生亚稳态,此时触发器输出端Q在有效时钟沿之后比较长的一段时间处于不确定的状态,在这段时间里Q端毛刺、振荡、固定的某一电压值,而不是等于数据输入端D的值。
这段之间成为决断时间(resolution time)。
经过resolution time之后Q端将稳定到0或1上,但是究竟是0还是1,这是随机的,与输入没有必然的关系。
2.亚稳态的危害由于输出在稳定下来之前可能是毛刺、振荡、固定的某一电压值,因此亚稳态除了导致逻辑误判之外,输出0~1之间的中间电压值还会使下一级产生亚稳态(即导致亚稳态的传播)。
逻辑误判有可能通过电路的特殊设计减轻危害(如异步FIFO中Gray码计数器的作用),而亚稳态的传播则扩大了故障面,难以处理。
3.亚稳态的解决办法只要系统中有异步元件,亚稳态就是无法避免的,因此设计的电路首先要减少亚稳态导致错误的发生,其次要使系统对产生的错误不敏感。
前者要*同步来实现,而后者根据不同的设计应用有不同的处理办法。
用同步来减少亚稳态发生机会的典型电路如图1所示。
左边为异步输入端,经过两级触发器同步,在右边的输出将是同步的,而且该输出基本不存在亚稳态。
其原理是即使第一个触发器的输出端存在亚稳态,经过一个CLK周期后,第二个触发器D端的电平仍未稳定的概率非常小,因此第二个触发器Q端基本不会产生亚稳态。
注意,这里说的是―基本‖,也就是无法―根除‖,那么如果第二个触发器Q出现了亚稳态会有什么后果呢?后果的严重程度是有你的设计决定的,如果系统对产生的错误不敏感,那么系统可能正常工作,或者经过短暂的异常之后可以恢复正常工作,例如设计异步FIFO时使用格雷码计数器当读写地址的指针就是处于这方面的考虑。
fpga中的亚稳态FPGA中的亚稳态引言:FPGA(Field-Programmable Gate Array)是一种可编程逻辑器件,具备高度灵活性和可重构性。
在FPGA设计中,亚稳态是一个重要概念。
本文将深入探讨FPGA中的亚稳态,包括其定义、形成原因、影响和应对措施等方面。
一、亚稳态的定义亚稳态指的是FPGA中的一种不稳定状态,即在特定条件下,FPGA 中的逻辑电路可能会出现持续摆动的现象,而不是稳定在某个确定的状态。
这种状态不仅会导致逻辑错误,还可能对FPGA系统的可靠性和性能产生负面影响。
二、亚稳态的形成原因亚稳态的形成通常与信号传输延迟、电路噪声和时序限制等因素密切相关。
在FPGA设计中,由于电路中存在不同的时钟域、复杂的逻辑路径以及时序约束等,这些因素可能导致信号到达某个逻辑元件的时间存在微小的差异,从而导致亚稳态的产生。
三、亚稳态的影响亚稳态可能导致FPGA系统在特定条件下产生错误的逻辑输出。
这种错误可能会导致系统的功能异常,甚至严重影响系统的可靠性。
亚稳态还可能导致时序约束的失效、电路的功耗增加以及系统性能的下降等问题。
四、亚稳态的应对措施为了解决亚稳态带来的问题,在FPGA设计中,可以采取以下措施:1. 时序分析和约束优化:通过对电路的时序分析,确定逻辑元件之间的最小延迟,以优化时序约束,减少亚稳态的发生概率。
2. 时钟域划分和同步技术:将FPGA中的电路划分为不同的时钟域,并采用同步技术,确保在不同时钟域之间的数据传输的一致性,减少亚稳态的发生。
3. 噪声抑制和滤波技术:通过合理布局和设计电路,采取噪声抑制和滤波技术,减少外部噪声对FPGA系统的干扰,降低亚稳态的产生。
4. 逻辑优化和仿真验证:对FPGA设计进行逻辑优化,并进行仿真验证,以确保电路的正确性和稳定性,减少亚稳态的出现。
五、结论亚稳态是FPGA设计中需要重视和解决的一个问题。
了解亚稳态的定义、形成原因、影响和应对措施有助于提高FPGA系统的可靠性和性能。
在FPGA开发中尽量避免全局复位的使用最近几天读了Xilinx网站上一个很有意思的白皮书(white paper,wp272.pdf),名字叫《Get Smart About Reset:Think Local, Not Global》,在此分享一下心得,包括以前设计中很少注意到的一些细节。
在数字系统设计中,我们传统上都认为,应该对所有的触发器设置一个主复位,这样将大大方便后续的测试工作。
所以,在所有的程序中,我往往都在端口定义中使用同一个reset信号(其实好多时候根本就没有用到)。
所以,当看到文档中提到,“不建议在FPGA设计中使用全局复位,或者说应该努力避免这种设计方式”时,许多设计人员(包括我)都会觉得非常难以理解,这种设计思想跟我们通常的认识是相冲突的!继续读下去,不知不觉发现这个白皮书讲的还真是在理。
接下来把我的个人理解讲述一下。
1.全局复位是不是关键时序?全局复位信号一般由以下三种途径获得:1. 第一种,最常见的,就是用一个复位按钮产生一个复位信号接到FPGA的全局复位管脚上。
它的速度显然是非常慢的(因为是机械结构),而且存在抖动的问题。
2. 第二种是上电的时候由电源芯片产生的,如TI的TPS76x系列的电源系统一般都可以产生复位信号,供主芯片上电复位使用。
3. 第三种是由控制芯片产生的复位脉冲,这个是我们设计人员可以方便使用程序控制的。
在这些情况下,复位信号的变化与FGPA芯片内部信号相比看起来是及其缓慢的,例如,复位按钮产生的复位信号的周期至少是在毫秒级别的,而我们FPGA内部信号往往是纳米或者微秒级别的。
复位信号的频率是如此之低,以至于我们任务它不属于关键时序(not timing-critical)。
即使是对此类信号进行时序约束,约束的周期也是非常长的。
全局复位脉冲的周期远大于时钟周期,所以传统意义上假设FPGA芯片中所有的触发器都能够得到有效的复位。
然而,随着FPGA性能和工作频率的快速提高,这种假设开始不再成立。
fpga复位方法总结
FPGA(现场可编程门阵列)的复位方法主要包括同步复位、异步复位以及同步复位异步释放。
1. 同步复位:在时钟上升沿或下降沿时,根据复位信号的状态确定是否对系统进行复位。
这种复位方式需要时钟信号的控制,在时钟信号的上升沿或下降沿时检查复位信号的状态。
如果复位信号有效,则将系统复位。
2. 异步复位:无论时钟信号处于何种状态,只要复位信号有效,就对系统进行复位。
这种复位方式简单直接,只要检测到复位信号的上升沿,就会把输出置为复位值。
但异步复位释放可能导致的问题是时序违规和亚稳态,即电路可能处于一个不稳定的中间状态。
3. 同步复位异步释放:这是一种FPGA设计方法,通常用于确保电路在重新启动后能够正常工作。
在异步复位同步释放的设计中,一组异步复位信号用于重置电路的状态,而另一组同步释放信号则用于释放电路的状态。
这种设计方法是为了保证电路的可靠性和可重复性。
以上信息仅供参考,如有需要,建议咨询专业技术人员。
FPGA面试题1. 什么是Setup 和Holdup时间?答:setip 建立时间 holdup 保持时间建立时间是指,时钟边缘前,数据信号保持不变的的时间,保持时间是指时钟跳变边缘数据信号数据信号保持不变的时间。
不满足建立时间和保持时间,DFF将得不到正确的采样数据,DFF D触发器将会出现mentablity 亚稳态的情况,亚稳态是不确定的状态如果数据信号在时钟沿触发前后持续的时间均超过建立和保持时间,那么超过量就分别被称为建立时间裕量和保持时间裕量。
2 什么是竞争与冒险现象?怎样判断?如何消除?在组合逻辑中,由于门的输入信号通路中经过了不同的延时,导致到达该门的时间不一致叫竞争。
产生毛刺叫冒险。
如果布尔式中有相反的信号则可能产生竞争和冒险现象。
解决方法:一是添加布尔式的消去项,二是在芯片外部加电容。
3 用D触发器实现2倍分频的逻辑电路?module divide2( clk , clk_o, reset);input clk , reset;output clk_o;wire in;reg out ;always @ ( posedge clk or posedge reset)if ( reset)out <= ;elseout <= in;assign in = ~out;assign clk_o = out;endmodule4 什么是"线与"逻辑,要实现它,在硬件特性上有什么具体要求?线与逻辑是两个输出信号相连可以实现与的功能。
在硬件上,要用oc门来实现,由于不用oc门可能使灌电流过大,而烧坏逻辑门。
同时在输出端口应加一个上拉电阻。
5 什么是同步逻辑和异步逻辑?同步逻辑是时钟之间有固定的因果关系。
异步逻辑是各时钟之间没有固定的因果关系。
6 请画出微机接口电路中,典型的输入设备与微机接口逻辑示意图(数据接口、控制接口、锁存器/缓冲器)。
7 你知道那些常用逻辑电平?TTL与COMS电平可以直接互连吗?TTL和CMOS不可以直接互连,由于TTL是在0.3-3.6V之间,而CMOS则是有在12V的有在5V的。
1. 应用背景1.1 亚稳态发生原因在FPGA系统中,如果数据传输中不满足触发器的T su和T h不满足,或者复位过程中复位信号的释放相对于有效时钟沿的恢复时间(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)beginif(!rst_n) a <= 1’b0;else a <= b;end综合出来复位电路模型如图3.2所示:图3.2 异步复位电路模型如图3.3所示,为复位电路复位时序图。
如果异步复位信号的撤销时间在Trecovery (恢复时间)和Tremoval(移除时间)之内,那势必造成亚稳态的产生,输出在时钟边沿的Tco后会产生振荡,振荡时间为Tmet(决断时间),最终稳定到“0”或者“1”,就会可能造成复位失败。
图3.3 异步复位时序2.2.2 同步复位电路的亚稳态在复位电路中,由于复位信号是异步的,因此,有些设计采用同步复位电路进行复位,并且绝大多数资料对于同步复位电路都认为不会发生亚稳态,其实不然,同步电路也会发生亚稳态,只是几率小于异步复位电路。
如下面verilog代码对同步复位电路的描述。
always @(posedge clk)beginif(!rst_n) a <= 1’b0;else a <= b;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_nsyn;wire sig_nsyn_p;reg[1:0] sig_nsyn_r;always @(posedge clk or negedge rst_n)beginif(!rst_n) sig_nsyn_r <= 2’d0;else sig_nsyn_r <= { sig_nsyn_r [0], sig_nsyn };endassign 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_nsyn;wire sig_nsyn_p;reg[3:0] sig_nsyn_r;always @(posedge clk or negedge rst_n)beginif(!rst_n) sig_nsyn_r <= 2’d0;else sig_nsyn_r <= { sig_nsyn_r [2::0], sig_nsyn };endassign 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)beginif(!rst_n) rst_r <= 2’d0;else rst_r <= {rst_r[0], 1’b1};endassign sys_rst_n = rst_r[1];通过上面三种方式处理异步信号、异步数据、以及异步复位可有效的提高系统的稳定性。
减少亚稳态的产生。