FPGA亚稳态

合集下载

理解FPGA中的亚稳态

理解FPGA中的亚稳态

理解FPGAs中的亚稳态这篇论文描述了在FPGA中的亚稳态,它是怎样产生的,还有它是怎样导致设计的失败。

介绍了如何计算亚稳态的平均无故障时间(MTBF),并且总结了各种器件和设计参数是如何影响平均无故障时间的。

介绍亚稳态是当信号在无关的电路中或异步时钟域之间传输时导致数字器件包括FPGA系统失效的一种现象。

这篇论文描述了FPGA中的亚稳态,解释了它是如何发生的,并讨论了它是如何导致设计失败的。

由亚稳态得出的平均无故障时间可以告诉设计者是否应该去降低出现失效的几率。

这篇论文将告诉你如何由各种设计和器件参数计算出平均无故障时间,FPGA供应商和设计者是如何提高平均无故障时间的。

通过一些设计技巧和优化降低亚稳态造成的失效,系统可靠性是可以提高的。

什么是亚稳态在所有的数字器件如FPGA中的寄存器都定义了一个信号时序要求,满足了这个要求寄存器才可以正确地在输入端获取(capture)数据在输出端产生数据。

为了确保可靠的操作,输入信号在时钟沿之前必须稳定一段时间(寄存器建立时间Tsu)并且在时钟沿之后稳定一段时间(寄存器保持时间Th),然后寄存器输出经过一个特定的时钟到输出延时(clock to output ,Tco)后有效。

如果一个数据信号在翻转中违反了一个寄存器的建立和保持时间的要求,寄存器的输出可能就会是亚稳态。

在亚稳态中,寄存器的输出值在高和低之间徘徊一段时间,这就意味着输出翻转到一个确定的高或低的延时会超过固定的时钟到输出延时。

在同步系统中,输入信号必须总是满足寄存器时序要求,所以亚稳态不会发生。

亚稳态问题通常发生在当一个信号在无关的线路中或异步时钟域中传输。

在这种情况下设计者不能保证信号会满足建立时间(Tsu)和保持时间(Th)的要求,因为相对于目标时钟信号可以在任何时间到达。

但是,不是每个违反寄存器建立保持时间的信号翻转都会导致亚稳态。

一个寄存器进入亚稳态和从亚稳态进入稳态的时间依赖于制造商的制造工艺和使用环境。

FPGA跨时钟域亚稳态研究

FPGA跨时钟域亚稳态研究

有时序要求 。 “ 建立时 间” ( e u 和 复杂 化 ,只 要系 统 中存 在跨 时钟 产 生亚 稳 态 ,此 时 触发 器 输 出端 Q Stp
tm )是指在时钟沿到来之前 ,触发 域 ,亚稳态就是无法避免的,因此设 在有 效 时钟 沿之后 较长 时间处于 不 ie
器输 入信号 必须保 持稳 定 的时间 。 计 的电路首先要减少亚稳态导致错误 确定状态 ,在这段时间 内Q 端产生毛 “ 保持时间 ” (o d t m )则是指 的发生,其次要使系统对产生的错误 刺并 不断振 荡 ,最 终 固定在某一 个 H l ie
即所有时钟寄存器 的时钟共享一个时 的建立 时间T U S )之 前保 持 稳 定 ,
2 2亚稳态分析 . 跨 时钟异 步输入信 号可 以在任
并且 持续 到时钟沿 之后 的某段 时 间
( 寄存 器 的保 持 时间T )之后 才 能 何 时间 点翻转 ,它与下 级 同步采样 h
辑器件 内采用多个时钟,且核心模块 改变 。寄存器 的输 入反 映到输 出则 信 号没有 必然联 系 。此 外 ,在 数据
在 时钟 沿之 后 ,信 号必 须保 持稳定 不敏感。前者要靠 同步来实现 ,而后 值 ,这 个值 不一定 等于 原来数据 输 的 时间 。这 些指标 通常 比较保 守 , 度 )环 境下 时序各 有差异 的情 况 。 如果一个设计满足 了这些 时序要求 , 则 触发器 出现 错误 的可是一 个不 e i
F G 设计 中,要 减少亚稳 态导 正确 定 的稳 态值 。也就 是说这 种处 PA
定状态 ,就会导致系统混乱 。
致 的错误 并使系 统对产 生 的错 误不 理方 法不 能排 除采 样错 误 的产 生 。
亚 稳态 的危害 主要是 破坏 系统 敏感 ,就要 正确 定义和处 理F G 内 P A 这 时就要 求所 设计 的系 统对采 样错

【转】亚稳态详解

【转】亚稳态详解

【转】亚稳态详解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设计相关的教科书都特别强调整个设计最好采用唯一的时钟域。

换句话说,只有一个独立的网络可以驱动一个设计中所有触发器的时钟端口。

虽然这样可以简化时序分析以及减少很多与多时钟域有关的问题,但是由于FPGA外各种系统限制,只使用一个时钟常常又不现实。

FPGA时常需要在两个不同时钟频率系统之间交换数据,在系统之间通过多I/O接口接收和发送数据,处理异步信号,以及为带门控时钟的低功耗ASIC进行原型验证。

本章讨论一下在FPGA设计中多时钟域和异步信号处理有关的问题和解决方案,并提供实践指导。

这里以及后面章节提到的时钟域,是指一组逻辑,这组逻辑中的所有同步单元(触发器、同步RAM块以及流水乘法器等)都使用同一个网络作为时钟。

假如设计中所有的触发器都使用一个全局网络,比如FPGA的主时钟输入,那么我们说这个设计只有一个时钟域。

假如设计有两个输入时钟,如图1所示,一个时钟给接口1使用,另一给接口2使用,那么我们说这个设计中有两个时钟域。

图1:双时钟域设计平时我们在设计中遇到的门控时钟、衍生时钟以及事件驱动的触发器都可归为时钟域类别。

如图2所示,通过一个简单门控时钟创建了一个新的时钟域。

我们知道,这类时钟控制在FPGA设计中并不被推崇(可以使用时钟使能替代时钟门控),然而它却非常有利于我们理解时钟域这一概念。

本章我们将着重详细讨论以下主题:•两个不同时钟域之间传输信号。

•亚稳态的产生以及对设计的可靠性的影响•通过相位控制避免亚稳态•在时钟域之间传输单个信号,将信号打两拍•使用FIFO在时钟域之间传输多位数据•使用分区同步器模块提高设计的组织架构•处理ASIC验证原型里的门控时钟•建立一个单时钟模块•自动门控移除图2:通过门控时钟创建的时钟域一、跨时钟域设计中包含多时钟域,首先要解决的是在不同时钟域之间传输信号的问题。

信号跨时钟域传输将会是一个大问题,原因如下:1、信号跨时钟域传输产生的故障总是不太容易复现。

关于FPGA中的亚稳态现象

关于FPGA中的亚稳态现象

第一章绪论 1第一章绪论1.1 论文产生的背景对于研发人员来说,可靠性是必须保证的设计目标之一。

为了验证系统的可靠性,产品在出厂前都会进行大量的整机测试,包括常温测试、高低温测试直到最终的外场测试,这些测试需要耗费大量的人力和物力。

对于开发人员来说,通常这个阶段出现的问题也是最头疼的,因为其中很多属于偶发性故障,难以复现。

比如芯片上电初始化配置经常失败,或者正常运行的系统突然发生复位,或者网口突然发生阻塞,或者常温下的通过的指标,在进行高低温实验的时候出现了恶化。

整机测试不同于平时研发的单板测试,测试手段受到很多限制。

比如由于单板装入了机壳,就不能使用JTAG口进行实时监测,也不能使用示波器排查。

但是如果在开发初期,设计者能够对系统的各个环节进行认真的评估,充分考虑了可靠性问题,那么在面对测试阶段层出不穷的故障时便能轻松一些。

关于可靠性问题,几乎所有的研究资料都推荐使用同步设计解决,因为同步设计可以保证时钟触发沿避开输入数据发生变化的区域,这也就避免了不稳定采样。

的确,实际中复杂逻辑电路均采用同步设计,FPGA厂家也只对客户的同步设计给予技术支持。

但是同步设计并非不需要考虑异步问题,因为绝大多数的设计都需要与外界通信,比如某项目中的FPGA的外围设备包括CPLD、CPU、DSP 和大量的射频芯片,这些外围器件的工作时钟与FPGA的工作时钟没有任何关系。

因此,每次FPGA与这些外围设备通信都面临着失败的风险,如何降低通信故障率是设计中的一个难点。

本文将围绕异步信号对同步系统的影响进行详细的理论分析,从数字电路的结构出发讨论亚稳态发生的根源,并结合FPGA实际设计经验介绍几种解决方法。

1.2 发展历史输入数据与采样时钟发生沿打沿(marginal trigger)的情况,双稳态电路不能在规定的时间(由厂家定义)进入稳态的现象称为亚稳态。

一旦双稳态电路进入亚稳态,那么在亚稳态停留的时间将不可预知。

在这段时间里,双稳态电路输出的电压处于非法的逻辑电平区间,具体的电压值无法预测,输出还可能发生振荡。

时序分析基础:Setuphold,跨时钟域处理和亚稳态

时序分析基础:Setuphold,跨时钟域处理和亚稳态

时序分析基础: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种

跨时钟域信号同步方法6种

跨时钟域信号同步方法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分别为与器件特性相关的常数。

fpga面试题目及答案(3篇)

fpga面试题目及答案(3篇)

第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厂商提供的编译工具对配置文件进行编译,生成门级网表。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

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];通过上面三种方式处理异步信号、异步数据、以及异步复位可有效的提高系统的稳定性。

减少亚稳态的产生。

相关文档
最新文档