关于FPGA中的亚稳态现象_第1页
关于FPGA中的亚稳态现象_第2页
关于FPGA中的亚稳态现象_第3页
关于FPGA中的亚稳态现象_第4页
关于FPGA中的亚稳态现象_第5页
已阅读5页,还剩52页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

PAGE2亚稳态及在FPGA中处理方法PAGE4第一章绪论第一章绪论1.1论文产生的背景对于研发人员来说,可靠性是必须保证的设计目标之一。为了验证系统的可靠性,产品在出厂前都会进行大量的整机测试,包括常温测试、高低温测试直到最终的外场测试,这些测试需要耗费大量的人力和物力。对于开发人员来说,通常这个阶段出现的问题也是最头疼的,因为其中很多属于偶发性故障,难以复现。比如芯片上电初始化配置经常失败,或者正常运行的系统突然发生复位,或者网口突然发生阻塞,或者常温下的通过的指标,在进行高低温实验的时候出现了恶化。整机测试不同于平时研发的单板测试,测试手段受到很多限制。比如由于单板装入了机壳,就不能使用JTAG口进行实时监测,也不能使用示波器排查。但是如果在开发初期,设计者能够对系统的各个环节进行认真的评估,充分考虑了可靠性问题,那么在面对测试阶段层出不穷的故障时便能轻松一些。关于可靠性问题,几乎所有的研究资料都推荐使用同步设计解决,因为同步设计可以保证时钟触发沿避开输入数据发生变化的区域,这也就避免了不稳定采样。的确,实际中复杂逻辑电路均采用同步设计,FPGA厂家也只对客户的同步设计给予技术支持。但是同步设计并非不需要考虑异步问题,因为绝大多数的设计都需要与外界通信,比如某项目中的FPGA的外围设备包括CPLD、CPU、DSP和大量的射频芯片,这些外围器件的工作时钟与FPGA的工作时钟没有任何关系。因此,每次FPGA与这些外围设备通信都面临着失败的风险,如何降低通信故障率是设计中的一个难点。本文将围绕异步信号对同步系统的影响进行详细的理论分析,从数字电路的结构出发讨论亚稳态发生的根源,并结合FPGA实际设计经验介绍几种解决方法。1.2发展历史输入数据与采样时钟发生沿打沿(marginaltrigger)的情况,双稳态电路不能在规定的时间(由厂家定义)进入稳态的现象称为亚稳态。一旦双稳态电路进入亚稳态,那么在亚稳态停留的时间将不可预知。在这段时间里,双稳态电路输出的电压处于非法的逻辑电平区间,具体的电压值无法预测,输出还可能发生振荡。此时如果两个扇出对亚稳态的输出信号进行采样,由于扇出个体间及两条信号线延迟的差异,不能保证两个扇出能够最终将其识别为相同的逻辑值。因此,处于亚稳态的系统很容易发生功能故障[1]。从数字电路发展初期,人们就开始广泛的研究亚稳态。刚开始时人们重点关注电路发生亚稳态的现象,提出了一些经验数据[2,3,4]和抽象理论[5,6]以及亚稳态的理论和经验模型[7,8]。后来通过这些模型的研究,得到了由亚稳态引起故障的概率[9,10]。利用同样的方法,双稳态电路的研究得到了极大发展:出现了测量亚稳态参数的方法[11,12,13],设计出了检测亚稳态现象的电路[14,15]和克服亚稳态的同步器[16,17,18,19]等等。另一方面,微电子的飞速发展将亚稳态的研究推到了更加重要的位置。事实上,因为系统复杂度的快速提高,出现沿打沿的概率变得越来越大,所以时序问题变得越来越重要。系统工作频率的提高使得留给器件从亚稳态恢复到稳态的时间变短。这些因素使得在FPGA设计中越来越重视亚稳态,大量的研究表明亚稳态就是双稳态电路的模拟特性本质的表现。会发生亚稳态的电路很多,包括常用的AD、存储器和总线控制器等等。不同的系统对故障率的要求也不同,比如语音通信中,由于人耳朵听觉特性,语音信号的误码率可以相对较高。但是对于其他数字处理领域,就会要求相对较低的误码率。在数字电路中,最容易出现问题的就是总线控制器。图1.1所示为一个外界异步信号与处理器通信的总线控制器的系统结构。外界的异步信号经过同步器同步后进入总线控制器。如果异步信号的频率较低,比如键盘输入,那么系统的故障率(由MTBF衡量)也会相对较低。然而,如果外界异步信号来自高速IC,那么这个系统的故障率就会相应变高。图1.1一个与处理器通信的总线控制器结构当今的FPGA设计人员有许多工具软件帮助完成百万门级的电路,但是这些工具并不能解决异步信号的同步问题,这就要求设计者了解提高可靠性的技术,减小跨时钟域时的故障率。对于触发器来说,在时钟触发沿附近的一个小的时间窗口内,输入信号应当保持稳定,其中时间窗口的宽度由厂家决定。FPGA生产厂家对其产品的可靠性负责,他们使用MTBF(meantimebetweenfailure平均无故障时间)来描述发生亚稳态的概率。每个厂家都要求输入信号必须满足器件的建立时间和保持时间。建立时间指在时钟触发沿到来前输入信号必须保持稳定的时间,保持时间指时钟触发沿到来后输入信号必须保持稳定的时间。这些参数指标通常与工作电压,工作温度,信号质量和工艺有关。如果输入数据满足这些参数指标,那么器件发生故障的概率就微乎其微。1.3本文的主要工作及内容安排本文主要讨论了数字电路设计中,尤其是FPGA的设计中遇到的亚稳态的问题。文章从数字电路的原理以及数字电路的基本组成单元的结构出发,研究了亚稳态是如何发生的,并从亚稳态的统计特性出发研究了对亚稳态的计算及度量方法,最后结合具体实例重点讨论了对亚稳态的各种处理方法。本文的主要工作内容如下:第一章为绪论,简单介绍了亚稳态的发生和危害以及对亚稳态的研究的重要性,并简述了亚稳态的研究在国内外的发展情况。第二章主要阐述了亚稳态发生的根源,介绍了亚稳态的具体含义,从数字电路的模拟特性,数字电路的基本组成单元RS锁存器和D触发器的结构出发,从根源上讨论了亚稳态的发生。第三章从触发器的响应曲线、亚稳态窗及平均无故障时间三方面(统计学的角度)出发详细讨论了对亚稳态的计算及度量方法。第四章是文章的重点,从四个方面即两级触发器级联、握手协议、开环控制、及双口RAM出发,结合具体实例详细介绍了实际中处理亚稳态的方法。

PAGE8第二章亚稳态发生的根源第二章亚稳态发生的根源2.1亚稳态概述对于数字电路设计者来说,设计的可靠性是极其重要的。而对于触发器来说,只有满足特定的时序关系才能保证电路可靠。如果不满足这个关系,就可能发生亚稳态。而亚稳态意味着输出信号不能在预定的时间内进入已知的状态,也就是说器件的传播延迟超过了额定值。当发生亚稳态后,即使最终输出稳定下来,设计者也不能肯定输出的逻辑值一定正确。在输出信号从亚稳态到稳态的变化过程中,输出信号也许长期游离于非法的逻辑电平值,也可能发生振荡,不论何种情况,对于下一级门电路这都将是一场灾难。在FPGA中,时钟域是个很重要的概念,几乎所有亚稳态的发生都是由于跨时钟域的问题所引起的。要想理解跨时钟域所引发的故障,首先要了解时钟域,以及同步信号、异步信号的概念。所谓时钟域,是指在FPGA内部由单一时钟或者由多个但是相位恒定的时钟控制的区域。一个时钟和其派生时钟(通过PLL产生)属于同一个时钟域,反转时钟也属于同一个时钟域。如果时钟之间的基准不同,比如来自不同的晶振,即使标称频率相同(通过频率计能看到晶振的频率漂移),也属于不同的时钟域。简单的讲,同步信号是指属于同一个时钟域的信号,异步信号就是指属于不同的时钟域的信号。也可以这样解释,同步信号是指信号与采样时钟之间具有稳定的相位关系,异步信号是指信号与采样时钟之间没有稳定的相位关系。任何异步信号对于本地时钟域系统都意味着一个不稳定的源,因为总是存在这种可能,时钟会在异步信号变化的时候进行了采样。也就是说,因为异步信号会在相对于时钟触发沿的任何位置到达,所以有这种可能,异步信号会在由建立和保持时间界定的时间窗中变化,这就违背了器件的正常工作条件。当发生这种情况时,芯片可能会出现3种不同的结果:(1)识别成功,稳定的输出新的数据(2)识别失败,继续稳定的输出旧的数据(3)识别失败,进入亚稳态因为实际中无法断定究竟会出现上述哪一种结果,所以为了保证工作正常,所有跨时钟域的信号即异步信号不能直接使用,必须全部进行同步处理变为本地的同步信号。下面以一个具体的亚稳态发生的例子来引入对亚稳态的讨论。图2.1所示为一个典型的数字设计,时钟域A向时钟域B发送数据,所以对于时钟域B来说,输入数据是异步数据。时钟域B需要采用同步器才能保证接收正常。图2.1一个典型的数字设计即使在第一次触发的时候出现了亚稳态,只要输入信号足够长,在下一次触发的时候就一定能够保证采样到稳定的输入数据,如果从这个角度考虑,好像亚稳态至多只是延长了一个处理周期而已,比如传输一个足够长的控制信号,即使这次判断为无效,那么下次一定会被识别为有效,如图2.2所示。但是实际情况并没有这么简单,因为如果触发器拥有多个扇出,那么就不能保证所有的扇出将亚稳态的信号识别为相同的逻辑电平值,如图2.3所示。图2.2亚稳态的发生示意图图2.3亚稳态对触发器的影响示意图2.2数字电路的模拟特性如果数字系统中只存在逻辑“0”和逻辑“1”,那么设计者也就不会面临可靠性的问题。然而实际上,所有的逻辑电路处理的都是模拟电压信号,后面将会发现可靠性问题实际上均源于数字电路的模拟特性。下面以最常用的LVTTL33逻辑电平为例来说明,LVTTL33逻辑电平如表2.1和图2.4所示:表2.1LVTTL逻辑电平工作电压VCC=3.3V输出高电平VOH≥2.4V输出低电平VOL≤0.4V输入高电平VIH≥2V输入低电平VIL≤0.8V图2.4LVTTL逻辑电平示意图对于输出电平来说,大于VOH的电平将被解释为逻辑“1”,小于VOL的电平将被解释为逻辑“0”,介于VOH和VOL之间的电平属于非法逻辑电平;对于输入电平来说,大于VIH的电平将被解释为逻辑“1”,小于VIL的电平将被解释为逻辑“0”,介于VIH和VIL之间的电平属于非法逻辑电平。显然无论输入电压还是输出电压,进行电平切换的时候,都将经历这段短暂的非法逻辑电平时间。以单触发器为例,发生亚稳态的触发器的输出情况可能有3种:(1)超过正常传播延迟但是没有超过一个时钟周期,输出稳定的逻辑值“1”,虽然可能与前级的输入值(2)超过正常传播延迟但是没有超过一个时钟周期,输出稳定的逻辑值“0”,虽然可能与前级的输入值(3)在本次触发后的整整一个时钟周期都处于非法逻辑电平,直到下一次稳定的触发后进入稳态。这3种情况对系统产生的影响正是本文讨论的内容,显然如果在由组合电路构成的反馈电路中出现了亚稳态,那么很容易波及到整个系统。2.3RS锁存器通过分析双稳态电路中最简单的单元:RS锁存器,可以很容易理解亚稳态发生的原因。RS锁存器是构成各种功能锁存器或触发器的基本单元,它可以用两个与非门或两个或非门交叉耦合构成。图2.5所示为用两个与非门搭建的RS锁存器,它有两个互补输出端和,用端的逻辑值来表示锁存器的状态。=1,=0时,称锁存器处于1状态;=0,=1时,称锁存器处于0状态。R、S为锁存器的两个输入端(或称激励端),R被称为清零端,S被称为置位端,均为低电平有效。当输入信号R、S保持为1不变化时,该锁存器必定处于=1或=0的某一状态保持不变,所以它是具有两个稳定状态的双稳态锁存器。表2.2所示为RS锁存器的真值表。表2.2RS锁存器的真值表RS00110101101011保持保持图2.5与非门搭建的RS锁存器PAGE14第二章亚稳态发生的根源当R为低电平,S为高电平的时候,和分别为低电平和高电平;当R为高电平,S为低电平的时候,和分别为高电平和低电平;当R和S均为低电平的时候,和全部变为高电平,此时如果R先于S变高,那么仍然为高电平,变为低电平,如果S先于R变高,那么情况相反。但是当R和S同时变高,情况就变的复杂起来,图2.6所示为RS锁存器的波形图,图中的t7时刻就表示了这个时刻。下面将分析在这个时刻,RS锁存器究竟发生了什么。图2.6RS锁存器的波形图由与非门的特性可知,当RS锁存器的两个输入端口的任何一个为低电平时,输出端的状态就能够唯一确定,而当两个输入端均为高电平时,RS锁存器就进入反馈状态,这时输出端和的值就由反馈建立之前的值来决定,这是因为A&1=A所以建立反馈后的电路等效于两个反向器串联,如图2.7所示。图2.7RS锁存器进入反馈状态的等效电路图2.8和的变化曲线由于反向器头尾相接,所以和的变化趋势正好相反,此时和的变化曲线如图2.8所示,横坐标表示时间,纵坐标表示电压,粗线表示电压由高电平变为低电平,细线表示电压由低电平变到高电平,两条曲线的交点就是亚稳态点。显然对于上图所示的等效电路来说,如果将或者的电压置为亚稳态点,并且没有外界的干扰,那么整个反馈系统就永远的停留在这个电压上。实际工作中,可以通过调整R端和S端的时序达到这种效果。如果R端或者S端由高电平变化为低电平,那么即使在变化的过程中输出端出现了毛刺,RS锁存器的输出终将是稳定的。但是如果R端和S端同时由低电平向高电平变化(也就意味着正在建立反馈,锁存器开始由开环状态变为闭环状态),那么和的电压就会同时开始下降,从图2.9可以看出,在同时下降到亚稳态点时,反馈环路已经建立起来,根据前面介绍的等效电路的分析可知,此时和将停止变化,如图2.9所示。图2.9R端和S端同时变高对输出的影响示意图如果R端和S端同时由高电平变为低电平,则不会发生上述现象。因为当R端和S端为低电平时,就会强迫和进入稳态高电平,所以和将最终稳定在高电平状态。但是如果R端和S端变化的时刻很接近,就可能在输出端产生毛刺。出现毛刺就意味着在输入变化之前和之后,输出值都应该处于相同的电平,只是在输入端变化的过程中,输出端出现了短暂的相反电平,如图2.10所示。图2.10毛刺的产生示意图图2.11毛刺的传递示意图图中,R端和S端在t0时刻都为高电平,且端为低电平,端为高电平。t1时刻,S端开始由高电平变为低电平,导致端由低电平变为高电平,t2时刻,R端开始由高电平变为低电平(△t=t2-t1),那么在t1时刻之后的某个时刻,与非门将R端和端都识别为高电平,于是端开始下降,但是因为R端电压在逐渐变低,所以与非门终将R端识别为低电平,所以端电压在经过短暂的下降后又被抬高,恢复成高电平,于是在端出现了一个毛刺。上面讨论的都是输入波形完整时,由于时序的问题导致RS锁存器输出出现毛刺的情况,假如由于前端的原因在输入端出现了毛刺,那么RS锁存器会将毛刺传播下去,如图2.11所示。图中,S端和R端在t0时刻分别为高电平和低电平,端为低电平,端为高电平。t1时刻,S端出现了一个毛刺导致端电压上升,在S端电压恢复为高电平后,端电压也恢复到低电平,这样在端就出现了一个毛刺。由于R端一直为低电平,所以端锁定在高电平不变。这就说明,在使用RS锁存器的时候,一定要保证R和S具有足够的变化时间间隔△t,在FPGA中禁止使用RS锁存器就是这个道理,通常FPGA内部如果使用了RS锁存器,且R和S端信号都走数据线,由于数据线的延迟相当大(ns级),所以,即使在产生R和S信号的时候保证了足够的时间余量,也不能保证在到达RS锁存器端口的时候,仍然有足够的时间间隔,这也是组合逻辑固有的弊病。从上面的分析可以确知,对于与非门来说,当两个端口同时发生变化的时候,与非门的判断就出现困难,导致发生判断错误或者进入亚稳态。但是只要保证同一时刻对于与非门的两个输入端,只有一个端口变化,另一个端口稳定就可以保证与非门输出稳定。假设与非门的传播延迟为,那么保证RS锁存器正常工作的条件就是R和S的变化间隔△t大于,即△t>。比如S端发生的变化导致变化,那么在稳定之前(需要时间),R端不能发生变化。2.4D触发器2.4.1D触发器亚稳态分析有了RS锁存器的基础知识,就可以理解D触发器会发生亚稳态的原因。图2.12所示为D触发器的原理图。D是数据输入端口,CP是时钟,和是两个输出端口。图2.12D触发器的原理图简单的讲,D触发器在CP为低电平的时候将输出与输入隔离,输出端不会因为输入端的变化而变化,在CP为高电平的时候,D触发器依靠内部信号对输入端的反馈,保证输出端数据的稳定,输出端的变化仅仅依赖于CP触发沿的一瞬间输入的数据,所以D触发器比锁存器提供了更高的可靠性。但是如果在时钟触发的时刻,输入端的数据出现变化,仍然会将D触发器带入亚稳态。下面将讨论在这一瞬间,D触发器究竟发生了什么。分两种情况进行讨论:(1)D端由高电平变为低电平;(2)D端由低电平变为高电平。为了便于理解,假设所有分析的时间起点均为CP为低电平,这并不会影响分析的合理性。(1)首先考虑D端由高电平变为低电平的情况,如图2.13所示。因为此时W1为高电平,所以W4开始从低电平变化为高电平,但是如果W4和CP同时由低电平变为高电平,那么就有这种可能,G3和G5组成的RS锁存器进入了亚稳态。因为W4和CP都将没有额外延迟的变为高电平,所以对于G4来说,决定其状态的只有W3,假如W3进入亚稳态,那么显然G4也将进入亚稳态,根据与非门的传播路径G4→G6→G5→G3,所有的与非门都进入亚稳态,同时由G2和G1组成的RS锁存器也进入了亚稳态,并导致和也进入亚稳态,图中红色部分所示为亚稳态发生的起源。图2.13D触发器亚稳态的发生示意图一图2.14D触发器亚稳态的发生示意图二(2)考虑D端由低电平变到高电平的情况,如图2.14所示。如果D和CP同时由低电平变为高电平,由于G6、G5和G3的传播延迟,W3会保持的高电平,那么在这段时间,就有这种可能,G4和G6组成的RS锁存器进入了亚稳态。根据与非门的传播路径G4→G6→G5→G3,所有的与非门都进入亚稳态,同时G2和G1组成的RS锁存器也进入了亚稳态,并导致和也进入亚稳态,同样图中红线部分所示为亚稳态发生的起点。根据上面的分析,为了确保D触发器正常工作,在CP变化的瞬间之前,必须保持稳定,即必须提前一个保持稳定(因为也就是输出电压变化所需要的时间,所以如果要求在t时刻输出电压稳定,就必须要求在t-时刻输入电压稳定,或者说,如果输入电压发生变化,那么输出电压在接下来的这段时间内都是不稳定的),那么D就必须提前CP两个保持稳定,这就对CP触发沿到来前,D端变化的时间区域提出了要求。同样在CP变化后,并且W1的反馈建立完成前,D不能发生变化,可以看到反馈的完成时间是一个,所以在CP触发沿到来后,对D变化的时间区域同样提出了要求。这两个要求对应D触发器的两个技术指标:建立时间和保持时间。2.4.2静态时序分析(STA)有了D触发器的建立时间和保持时间的概念,就可以引出在FPGA的设计中最重要的环节之一:STA(StaticTimingAnalysis),即静态时序分析。虽然STA不能检查出逻辑设计错误,但是它能够很大程度上诊断设计的可靠性。图2.15所示为两级触发器级联,以下的所有的STA均基于两级触发器级联的模型。图2.15两级触发器示意图为了保证结果的可靠性,所有的分析都是在最恶劣的情况(worst-case)下进行的,分析结果如下:(2-1)(2-2)其中,:触发器要求的建立时间:触发器要求的保持时间:系统时钟周期:组合电路最大延迟:组合电路最小延迟:触发器最大传播延迟,也就是从时钟触发沿开始到数据稳定的出现在输出端的最大延迟。:触发器最小传播延迟,也就是从时钟触发沿开始到数据稳定的出现在输出端的最小延迟。:时钟偏斜,这里定义skew=t2–t1,t2和t1如图2.15中所示,它们的含义分别是时钟沿到达两个触发器的时刻。对(2-1)式的说明:为便于分析,先假定时钟skew为0,当前时钟触发沿结束后,第一级触发器的D端数据最长需要经过时间到达第二级触发器的D端,然后还必须等待,才能允许下一个时钟沿的到来。所以是这条路径上的最小时钟周期,这也就限制了这条路径上的最快的时钟速度。对(2-2)式的说明:当前时钟触发沿结束后,第一级触发器的D端数据最短需要经过时间到达第二级触发器的D端,这也是第一级触发器的D端旧数据能够保持的时间,所以一定要大于才可以。由上面的公式,很容易得到时钟skew对建立和保持时间的影响:skew改善了建立时间的余量,但是恶化了保持时间的余量。下面通过图2.16所示的两级触发器的时序图来解释skew对建立和保持时间的影响(为简化起见,图中所示的“建立时间”和“保持时间”,表示的是留给触发器的建立时间、保持时间余量,而不是触发器规定的建立时间、保持时间指标),由于和触发器之间的组合逻辑延迟,第一级触发器的输出信号不会马上反应到第二级触发器的输入端,从图中可以看出在CLK2逐渐落后CLK1的过程中(也就是skew逐渐增大的过程),整个系统的建立时间余量逐渐变大,但是保持时间余量逐渐变小。如果由于skew过大导致违背触发器的建立保持时间指标,触发器就可能出现亚稳态现象。在异步传输中,由于CLK1和CLK2属于两个不同的时钟,没有任何联系,所以CLK1端输出的数据可以在相对于CLK2触发沿的任何位置出现,所以如果不采取特殊的方法,整个系统是无法工作的。图2.16两级触发器的时序图在设计后期,为了改善FPGA中某一条路径的建立保持时间余量,但又不希望牵扯其它逻辑的时候,可以调节触发器之间的组合逻辑的延迟以及进入第二级触发器时钟的相位。改变组合逻辑延迟可以通过改写代码或者对综合工具进行设置实现,改变时钟的相位可以通过PLL实现。PAGE22第三章亚稳态对故障率的影响

第三章亚稳态对故障率的影响3.1触发器响应曲线图第二章最后一节的分析指出保证触发器的工作正常就必须保证输入数据满足触发器的建立和保持时间要求,但是这并不意味着一旦输入数据违背的建立和保持时间要求就必然出现亚稳态,也并不意味着一旦出现亚稳态就必然使系统出现故障。为了解释这里面的原因,继续沿用上一小节的双触发器结构,但是为了简便起见,省略掉了触发器之间的组合逻辑延迟和时钟skew,这并不会影响分析的有效性。图3.1触发器响应曲线图图3.1所示为触发器响应曲线图[20],横坐标表示输入数据到达时刻,纵坐标表示触发器的传播延迟时间。图中,为触发器的正常传播延迟,其含义是在正常情况下,即输入信号满足触发器的建立时间和保持时间的情况下,信号从触发器的输入端到达输出端所需的平均时间。是触发器所能允许的最大传播延迟时间,如果传播延迟超过了,就认为触发器发生了亚稳态,表示导致发生亚稳态的输入数据到达时刻的时间区域,在内触发器的传播延迟时间呈指数倍的增加。假设触发器的时钟周期为,如果第一级触发器发生了亚稳态,那么它的输出值更新的时间就超过了(时间与器件的生产工艺有关,它是一个变量,在触发器的数据手册中提供的实际上为,但是更多工作情况下器件的为,也就是说实际中的应该小于,厂家提供的产品指标留有余量。为简单起见,后面将不予区分,统一用表示,这并不影响分析的有效性)。将从结束时刻开始到触发器实际输出最终恢复到正常逻辑电平的这段额外延迟时间称为,将系统允许的最大额外传播延迟称为,根据上一节的知识,显然可以得到,表示一个时钟周期中除去必须的和所剩下的时间,显然越长就越长。正常触发情况下的为零,亚稳态会导致增加,但是只要,那么对于下一级触发器来说,输入数据就是安全的,也就是说第二级触发器就一定不会出现故障。但是如果,第一级触发器的输出在下一个时钟触发沿的建立和保持时间窗中仍然不稳定,那么第二级触发器就有可能继续发生亚稳态,这就是亚稳态的传播。这里,表示了一个时间界限,如果触发器的响应时间超过这个界限,则可能将亚稳态传递到下一级,且可能会引发系统的故障(在后面的章节会介绍专门的参数来表征故障率的大小),将由这个界限确定的输入数据的到达时刻的时间区域称为亚稳态窗,显然如果取(此时触发器工作在最高速度),那么亚稳态窗就是。3.2亚稳态窗图3.2所示为亚稳态窗与时钟周期、建立时间及保持时间等之间的关系。结合上一节的触发器响应曲线图,下面将对亚稳态窗展开详细的讨论。图3.2亚稳态窗示意图由一些理论研究和经验[21,22,23]可以得出亚稳态窗口的宽度为,如果传播延迟超过了,就认为出现了亚稳态的传播(即第一级触发器未能成功阻止亚稳态的传播)。显然是时的亚稳态窗口宽度的特例。其中和是触发器的常数参量,由生产厂家的工艺和器件的工作环境(电压、温度)决定,所以采用相同工艺的器件在相同的工作环境中通常都有类似的参数和(精确获知需要测量),表3.1所示为不同型号的器件的和[24]。下面的章节将详细阐述确定和的方法。表3.1SN74ABT7819和SN74ACT7807的和参数的值[24]SN74ABT7819SN74ACT780725摄氏度4.5V0.3316.90.501.135V0.3070.402.055.5V0.2328.80.309.40如图3.1和图3.2所示,在建立保持时间窗口中,如果输入数据的到达时刻没有落入,那么传播延迟为,如果数据落入了,那么传播延迟就超过了,数据变化时刻离窗口的中心越近,输出的传播延迟就越大,当数据变化时刻落入亚稳态窗口的时候,额外输出延迟就超过了,这时对于第二级触发器来说接收到的数据就不满足建立和保持时间,有可能使第二级触发器发生亚稳态。从上面的分析可以看出,如果要求“保证”输出数据的正确,输入数据必须满足建立和保持时间的要求,但是实际上即使输入数据违背了建立或者保持时间,也并不意味着一定会发生亚稳态,只有落入了才会发生亚稳态,建立和保持时间界定的窗口中还存在着一个亚稳态窗,只有输入数据落入了亚稳态窗,才认为触发器发生了故障。显然触发器的工作时钟越快,便越小,亚稳态窗口的宽度就越宽,触发器也越容易发生故障。亚稳态窗是一个真实的窗口,在文献[20]中介绍了一种实际中测量亚稳态窗的办法(实际上是测量)。亚稳态窗非常窄(宽度在皮秒级),是由确定的常量,但是亚稳态窗的位置却会随着时间、温度、供电电压、系统噪声以及其他一些因素的变化而变化,也就是说亚稳态窗的位置是漂移的,无法精确的确定窗口的位置,这也就解释了为什么无法预测亚稳态的脱离时间。但是在下面的章节将发现,实际上亚稳态窗口的位置并不重要,因为它不会跨出建立和保持时间界定的窗口。亚稳态窗口的宽度和的长度由生产厂家的工业水平和器件的工作环境决定。通常情况下,触发器都会立即回到稳定的逻辑电平,虽然可能与期望值相反(比如输入数据为“0”,并且变化时刻落入亚稳态窗口内,触发器在进入亚稳态后由于各种干扰又马上恢复到稳态,但是输出值却是“1”)。下一节将介绍MTBF的概念,将看到亚稳态窗口越窄,就越不容易进入亚稳态,而且触发器的MTBF就越大,但是无论亚稳态窗如何变化,的上界永远是无限大的,此时触发器处于亚稳态点,见图2.8所示。亚稳态并不一定造成不可预测的系统故障。如果等待时间足够长,那么实际中的触发器终将进入稳态,在这个时候对触发器的输出进行采样,就不会造成亚稳态的传播。另外,如果第二级触发器能够成功的阻止亚稳态的传播,那么即使两级触发器的第一次判断错误,只要输入数据保证足够长的有效时间,那么在下一个时钟周期两级触发器必然会做出正确的判断,这样情况仅仅造成了系统响应延缓了一个时钟周期而已,通常并不会对系统的功能造成什么影响,当然这需要针对当前设计进行仔细分析。3.3平均无故障时间(MTBF)3.3.1浴缸曲线(TheBathtubCruve)在开始对MTBF(MeanTimeBetweenFailure)介绍之前,首先引入“浴缸曲线”[25]的概念,这是一个和产品的故障率相关的概念。如果对一批产品的故障率进行研究,将发现产品故障率并不是一个常量,而是随时间的推移而变化的。通常来说,产品生命周期分3个阶段。在故障率的第一个阶段,故障率相对较高,但是随着时间的推移有下降的趋势,这个阶段称之为“早期故障期”(earlylifeperiod)。第二个阶段故障率很低并且几乎是个常数,这个阶段称为“常数故障率期”。第三个阶段故障率又开始增加,而且通常非常的迅速,这个阶段称为“损耗期”。当将故障率的函数画出图来后,就会发现原来是一个类似浴缸的形状,如图3.3所示,称之为“浴缸曲线”。电子产品制造商一般通过测试、筛选等手段将早期的故障尽量剔除,然后提供给客户使用。当使用期将尽,产品也将进入故障高峰期,需要报废或者更新换代了。而在文章中提到的故障率实际上只和“常数故障率期”有关,也就是说关注的只是“常数故障率期”的MTBF。图3.3“浴缸曲线”的示意图3.3.2MTBF含义及计算MTBF(MeanTimeBetweenFailure)是评估故障率的一个指标,而故障率,其含义就是发生故障的平均概率,下面将针对一级触发器结构讨论如何计算MTBF。由于异步输入数据和本地时钟没有任何关系,所以可以认为异步输入数据可能出现在时钟周期中的任何位置,并且服从均匀分布,但是一旦异步输入数据落入了亚稳态窗,那么数据的传播延迟就会超过,也就是说发生了故障,所以系统发生故障的概率就是,其中TC表示触发器的时钟周期。设异步输入信号的变化率为(是信号频率的两倍,因为不论信号从高电平切换到低电平还是从低电平切换到高电平,只要条件合适,都能够引发亚稳态,所以在评估故障率的时候必须要考虑信号的变化率),那么在单位时间内(比如这3个参数的单位都基于秒,那么这里所谓的单位时间就是每秒),触发器出故障的次数为,的倒数就表示发生故障的平均时间间隔,称为MTBF:(3-1)上面的计算对象是一个触发器,但是在实际中不是使用这个公式计算出MTBF,而是厂家先通过特殊的测试手段得到产品的MTBF,然后再确定出公式中的参数指标向外发布,用户便可以根据这些参数指标定量的控制当前设计的可靠性,这就是上述分析的实际意义。MTBF虽然拥有时间的单位,但只有概率的意义,并且MTBF是相对于群体的特征,而不是针对个体的特征。它由大量的采样样本统计得出,所以也只能反映大量样本的统计特性,而不是单个样本的特性。下面讨论确定和的方法,对MTBF公式两边同时取对数后,可以得到的表达式:(3-2)通过测试在不同的下对应的MTBF,可以得到与MTBF的关系图。如果x轴表示,y轴表示,根据上面的公式,将出现一条直线,由于直线斜率的倒数就是,随意任取直线上两点就可求出。根据MTBF的公式,很容易得到的表达式:(3-3)现在、和都已知,再任取一组和MTBF带入上式,即可求出。3.3.3MTBF的改善从MTBF的公式可以看出,如果要提高MTBF,只要增大或者减小、,但是增大意味着降低系统的工作频率,这是设计者最不愿意看到的结果。减小、就意味着更换更先进的触发器,但是同一种FPGA内部的触发器全部属于同一个型号。然而有一种方法简单而且有效,那就是使用两级触发器代替一级触发器。后面的章节将从系统的角度阐述两级触发器对可靠性的改善,这里仅仅从MTBF的角度进行分析。如果第一级触发器成功的阻止了亚稳态的传播,那么它的输出已经属于本地时钟域,也就是说,对于第二级触发器来说接收到的是同步信号,在这种情况下,电路功能完全正常。如果第一级触发器没能阻止亚稳态的传播,导致,那么这时第一级触发器的输出便不能满足第二级触发器的建立和保持时间的要求,所以对于第二级触发器来说,第一级触发器的输出信号仍然属于异步信号,且异步信号的到达时间可能出现在相对于时钟触发沿的任何时候,因此对于第二级触发器来说,异步信号的变化率是第一级触发器MTBF的倒数,显然由于增加了一个时钟周期的等待时间,使得进入第二级触发器输入端的异步信号的变化率要远远小于进入第一级触发器输入端的异步信号变化率,这也就减小了出故障的概率。(3-4)其中:进入第一级触发器输入端的异步信号的变化率:进入第二级触发器输入端的异步信号的变化率那么将带入MTBF公式中,就得到两级触发器的MTBF公式:(3-5)由于对于整个系统来讲就是,就是,所以将两个参量替代后,得到最终公式:(3-6)从上式可以看出MTBF的分子和分母都出现平方,可能还不能直观的看出MTBF的变化趋势,但是只要举一个实际例子就可以展现出两级触发器的威力。这里引用Cypress在文献[26]中使用的MTBF的公式:(3-7)其中等同于本文中的,W等同于本文中的。Cypress在测试PALC22V10(最高工作频率41.6MHz)中,设计了这样的工作环境:ps;ps;=41.6MHz;=20MHz由于当前工作在最高频率,所以那么此时的MTBF为:(s)初看起来这是个失败的设计,其实不是这样的,因为在计算MTBF的时候,是假设输入信号为异步信号时,考察发生亚稳态的概率,如果在这种情况下不为器件留出额外的分辨时间(resolvingtiming),任何厂家的产品都不可能有好的表现。如果为触发器提供额外的1.6ns延迟,那么时钟工作频率就为39MHz,现在得到(s)还是不太好,那么将两个触发器级联,得到:(s)相当于1376年,与一级触发器的MTBF形成了巨大的反差,但这是以降低时钟工作频率为代价的。MTBF计算公式的意义就在于在预先设定的可容忍的故障率条件(MTBF)下,能够确定设计中的工作频率。

PAGE52第四章克服亚稳态的方法第四章克服亚稳态的方法由前面的分析可知,在FPGA的设计过程中,异步信号引起的亚稳态现象是不可能根除的,设计者所能做的只能是尽量减小亚稳态发生的概率或者通过特殊的处理手段使得亚稳态不会导致系统发生功能性故障。实际中处理亚稳态的方法有多种,本文将其分为四类,第一类是两级触发器级联,它是构成实际当中各种同步器的基本单元;第二类是采用握手协议,握手协议是利用请求和应答信号实现对异步信号的正确接收的方式;第三类是开环控制,所谓开环控制,其实就是发送方和接收方之间没有明显的用于双方通讯的握手信号,只适用于特殊情况下的异步信号的正确接收,由于没有完整的请求和应答信号,理论上讲开环控制的可靠性要弱于握手协议,但是控制速度也高于握手协议;第四类是双口RAM,它实际上是一种特殊的握手协议,是对FIFO在某些情况下的改进方法,但它比FIFO要灵活很多(实际上FIFO也是亚稳态的处理方法之一,由于它比较常用,且在许多文献中详细介绍过,本文就不过多的赘述)。这四种方法各有自己的应用场合,下面的章节将结合具体项目实例对这几种方法进行详细的介绍。4.1最常用的同步器:两级触发器两级触发器级联是最简单,也是最常用的处理亚稳态的方法。图4.1所示为两级触发器级联的原理图。由第二章的STA小节以及第三章的分析可以看出两级触发器级联并不能彻底解决亚稳态的问题,但是它可以大大降低系统发生故障的概率,这是因为如果第一级触发器判断失败,未能阻止亚稳态的传播,那么第二级触发器可以再次进行判断,所以可以进一步减小故障率。图4.1两级触发器级联的示意图第三章已经从概率的角度解释了两级触发器级联对MTBF的改善,但是这种方法并不是在任何情况下都适用,如果输入信号的长度小于接收时钟的一个周期,那么就可能没有被本地时钟采集到,如图4.2所示。图中信号A为高有效,由于有效时间太短导致接收方没有响应。图4.2两级触发器级联的失效示意图在这种情况下,只要把信号A适当延长,就可以保证接收成功。但是有的时候,信号A的长度不可变,本地接收时钟周期也不可变。为了避免这种情况的发生,可以使用图4.3所示的脉冲触发电路[27]。图4.3脉冲触发电路示意图[27]在这个电路中,将外界输入的异步信号连接到第一个触发器的时钟输入端,这样不论异步信号和本地接收时钟的关系如何,第一个触发器都能够捕获到异步信号的变化。假设所有触发器输出端的初始状态都为低电平,在异步信号的上升沿到来的时候,信号A就发生一次翻转,在接下来的每个CLK上升沿到来的时候,都会将新值传播到下一级触发器,当传播到信号C的位置后,异或门将检测到信号C和信号D的不同,于是输出一个接收时钟周期的高电平表示检测到新的信号输入。在下一个时钟周期,信号C和信号D都将是新值,所以异或门又重新回到低电平,如图4.4所示。图4.4脉冲触发电路的时序图这里需要注意的一点是,即使异步信号高电平的长度超过两个时钟周期,但是在最终的输出端仍然只是出现一个时钟周期宽的脉冲,所以设计者需要保证这种情况不会对系统功能产生影响,如图4.5所示。图4.5脉冲触发电路的失效示意图一脉冲触发电路的另一个缺点是,如果输入两次的异步信号间隔太小,那么传给下一级触发器的信号就太过接近,导致最终输出同步信号脉宽超过一个时钟周期,如图4.6所示。图4.6脉冲触发电路的失效示意图二如果间隔更小,那么信号A对于后级触发器来说就跟毛刺一般,最终什么也检测不到,如图4.7所示。图4.7脉冲触发电路的失效示意图三由此可以看出,如果要避免上面这三种情况,信号A的长度一定要大于两个时钟周期。如果没有对异步信号的波形进行约束,仅仅根据最终输出端的结果是不能确保已经正常捕获异步信号的。在传输并行数据的时候,有的设计者使用两级触发器对所有的数据位进行同步,他们认为只要打两拍就能降低故障率,其实这种做法提高了故障率。以传输3位数组为例,如图4.8所示。假设异步数据由全0变为全1,这就意味着每一位都发生了变化,这在异步传输中是最容易出故障的情况,如图4.9所示。图4.8两级触发器级联传输并行数据示意图因为异步信号与本地时钟没有任何联系,所以异步信号Asy[2:0]的变换沿到达时刻有可能违背了触发器对建立或者保持时间的要求,考虑最坏的情况,当Asy[2:0]从全“0”变为全“1”的时刻被本地时钟采样,那么两级触发器同步后的结果就有可能是Asy[2:0]所能表示数据范围的任何值。如果这个被错误识别的并行数据属于状态机的合法的状态编码,将造成系统状态切换故障,如果属于非法的状态编码,通常程序会自动将非法状态引到初始状态,但是显然如果发生了这种情况,对系统来说就意味着发生了故障,进行中的处理流程就此中断,重新回到了处理起点。如果这个并行数据是数据处理信号,那么对于处理模块来说就属于异常数据,即使设置了滤波模块,但是多次的数据异常最终将导致处理错误。从MTBF的角度考虑,对于同一种触发器,如果传输一位数据在单位时间内出故障的次数是n次,那么同时传输m位数据,在单位时间内出故障的次数就变为n*m次,也就是说MTBF下降到了原来的m分之一。如果并行数据是连续递增或者递减的规律数据,那么可以通过转换为格雷码传输缓解出现亚稳态故障,但是这就增加了资源开销,而且对于前后值没有确定关系的并行数据来说,格雷码也无能为力。图4.9两级触发器级联传输并行数据发生亚稳态时序图即使在本地时钟触发时,输入数据满足了建立和保持时间的要求,也不能完全相信接收下来的数据是正确的。这是因为虽然数据在发出端口是完全对齐的(显然是相对于发送时钟),由于数据传输线的延迟,在输入端也不可能对齐。仍然举上面的例子,Asy[2:0]在发出时,3位的变化沿全部对齐,但是在传输到接收端的时候,各位之间就出现了偏差,于是接收端出现错误。如图4.10所示。图4.10两级触发器级联传输并行数据发生错误时序图使用两级触发器的时候,还有一点需要注意,在跨时钟域的通道上,也就是发送寄存器和接收寄存器之间不能有任何组合逻辑,如图4.11所示。数据传输很重要的一点就是进入接收时钟域中第一级触发器的输入信号不能出现毛刺。因为在接收端的时钟可能在输入信号的任何位置采样,所以可能采到毛刺。比如图4.11中的组合逻辑在变化的时候就会不可避免的出现毛刺,那么就可能被接收端捕获,这样即使满足了建立保持时间的要求,捕获的数据也是错误的。在第二章的STA小节中,还没有考虑时间,但是根据第三章MTBF章节的知识,可以很容易得出,其中为从第一级触发器输出时刻开始到遇到的第一个第二级触发器采样时刻的间隔,显然增加的组合逻辑会减少时间,并且指数倍的降低可靠性。在FPGA程序的顶层文件中,连接两个模块的组合逻辑称为gluelogic,这样做使得工具在做综合优化时发生困难,因此同样是禁止的。图4.11两级触发器级联电路中存在组合电路示意图从以上分析可以看出,两级触发器并不能解决所有的异步问题,它只适用于同步一位异步信号的情况,而且必须保证异步信号有效的时间足够长,这样即使第一次判定失败,但是第二次也一定判断成功,所以在这种情况下亚稳态对系统的影响仅仅是处理时间延长了一个周期,通常这并不会造成系统的功能故障,另外即使是传输1位数据,也应避免在传输路径上出现组合逻辑。4.2握手协议在跨时钟域传输数据时,为了降低系统故障率就需要尽量减少跨时钟域的信号数目。而使用握手协议,可以仅仅对请求信号REQ和应答信号ACK进行同步,在REQ有效的时间内,由发送端保证数据不变,所以握手协议能够满足并行数据传输安全的需要。握手协议最大的缺点就是每传输一次数据就要对所有的控制信号操作一遍,造成传输速度下降。为简化起见,在本文中提到的握手协议都是单向握手协议。完整的单向握手协议流程是:发送端将并行数据放到数据线上,同时发出一个“数据有效”的请求信号REQ,当本地时钟识别到REQ有效后就开始接收这组数据,接收完成后便向发送端返回一个应答信号ACK。当发送端识别到这个应答信号ACK后就撤销请求信号REQ,最后接收端检测到请求信号REQ无效后,也就撤销了应答信号ACK。发送端检测到应答信号ACK无效后便可以开始新一轮的请求。假设CLK_R表示接收时钟,CLK_T表示发送时钟,如图4.12所示。图4.12握手协议的流程示意图可见,每完成一次传输,需要6个发送时钟周期和6个接收时钟周期,这就是完整的握手协议,足够的耗时保证了足够的可靠。实际当中握手协议的实现电路可能有多种,下面介绍两种实现握手协议的经典电路。第一种是Xilinx在其TechXclusives[28]中提供的实现此握手协议的FPGA逻辑电路,如下图所示:图4.13握手协议的第一种实现电路[28]图中两个触发器的清零端均为异步高电平清零。发送端先将并行数据放置在总线上,然后通过给触发器A触发来表示数据准备好了,它的输出将使收发双方监控的标记(Flag)线置为高电平。一旦标记为高,发送端就必须在总线上保持数据以便接收端读取。接收端读完数据后,就触发触发器B,用它的输出作为确认。然后触发器A就被清零,标记被拉为低电平,这样就导致触发器B也被清零。文中称此电路的这个握手协议的过程本身是没有危险的,不论发送时钟和接收时钟以及它们的时序之间是任意的关系还是没有关系,这个设计都能够可靠的工作。但是这个电路仍然存在问题,首先这两个触发器的复位(清零)信号都来自异步时钟域,使用的时候却没有进行同步,这样做会违背触发器的recoverytime(即从复位信号的释放时刻到其之后遇到的第一个时钟触发沿的最小时间间隔)和removaltime(即从复位信号的释放时刻到其之前遇到的第一个时钟触发沿的最小时间间隔),造成设计的稳定性问题。正确的处理方法是在外界的复位信号进入本地时钟域的时候进行两级触发器同步,如果不希望复位延迟,可以添加逻辑门实现,如果是高复位,则使用或门,如图4.14所示;如果是低复位,则使用与门,实现同步释放。图4.14第一种复位信号的同步电路示意图图4.15所示为另一种复位信号的同步电路,这个电路不论复位信号的脉宽和接收时钟的周期如何都能够确保稳定复位。图4.15第二种复位信号的同步电路示意图图中,DFF1为异步高电平复位,正常情况下所有触发器的输出和异步复位信号都停留在低电平,所以DFF1的清零端为低电平,当异步复位信号的高电平来临的时候,就引起DFF1的一次触发,逻辑“1”将最终传输到DFF3的输出端,如果此时异步复位信号已经返回低电平,那么与门将输出一个高电平,因为DFF2和DFF3的两级延迟,所以异步复位信号的高电平持续的时间为两个时钟周期,然后同时变为低电平。如果当逻辑“1”最终传输到DFF3的输出端时,异步复位信号仍然处于高电平,那么与门将继续保持低电平,直到异步复位信号变为低电平引发第一级触发器复位,再经过两个时钟周期将DFF3的输出端置为低电平,与门输出低电平,解除复位。第二种握手协议的实现电路来自文献[29],如图4.16所示。图中,当发送端有数据要发送时,就将数据放到数据线上,同时将REQ信号置高,通过接收端的两级触发器同步后,接收端开始接收数据线上的数据,并将同步后的REQ信号作为ACK信号返回给发送端,发送端接收到ACK信号先将其同步,然后将REQ信号置低,并撤消掉数据线上的数据,这样就完成了一次数据的传递。因为输出的ACK就是同步后的REQ,所以能够节省一个CLK2周期。图4.16握手协议的第二种实现电路[29]4.3开环控制如果异步信号变化的频率很慢,也就是说异步信号的周期相当长,那么也可以不需要这么复杂的握手协议,Xilinx在其TechXclusives[28]中提供了一种简化方案,如图4.17所示。图4.17握手协议的简化方案[28]此方案中,发送端将N-1位数据和一个额外的用于指示新的数据字变换状态的比特组合成N位数据,然后将这N位数据通过本地触发器后写入接收端的两级触发器。接收端的两个触发器的输出接到一个一致性比较器上,只有两个触发器的输出一致的时候才认为数据是有效的,这样可以有效的避免亚稳态的传递。这里值得注意的是,发送端的那个额外的比特可以用以接收器区别一连串相同的字,但也可能是不必要的,这取决于系统的要求。从原理上讲,这个电路没有问题,有的代码会使用更多级的同步寄存器,实际上这种方法是一种延时去抖,但是如果并行数据极其庞大,那么接收寄存器和比较器也将极其庞大,由于耗费了大量的系统资源,并且在识别“数据有效”信号的时候也需要一个触发器,那么显然比较器所在的这条路径的时钟速度不会太快。所以大型逻辑设计不会使用这种方法。下面介绍文献[30]中提出的两种情况下(从快时钟域到慢时钟域和从慢时钟域到快时钟域)的开环控制电路,它们没有握手协议那么复杂,发送方和接收方之间没有显式的请求和应答等握手信号,只是通过特殊的电路设计以确保异步信号的正确接收。首先介绍第一种开环控制电路,其电路示意图以及发送端和接收端收发数据的时序图分别如图4.18和4.19所示。图中,发送端的时钟ClockS比较慢,接收端的时钟ClockF比较快。ClockF将ClockS通过三级触发器打3拍,当ClockF检测到SyncSignal为高电平时,将外界信号DataS读入本地寄存器DataSinkS,完成了异步信号的同步。文中还强调在跨时钟域的传输路径上的组合逻辑延迟要小于n倍的ClcokF周期,即其实为了保证稳定,应该是保证在ClockF采集到SyncSignal有效的时候,DataS满足接受端触发器的建立时间和保持时间,显然当前已知的条件太少了,上式只不过是保证稳定的必要条件。图4.18第一种开环控制电路的电路示意图[30]图4.19第一种开环控制电路的时序图[30]从原理上讲,如果传输路径上的组合逻辑延迟足够小(实际上不应当存在组合逻辑,理由见第一节),就可以满足接收端的建立时间,如果ClockS足够慢也可以满足接收端的保持时间,其实是将ClockS做为数据有效的控制信号,但是如果在FPGA内实现这种电路,是不推荐的。这是因为FPGA芯片内部设计了专门的高扇出、低偏斜(low-skew)的时钟网络,在综合的时候会自动将接在触发器时钟端的信号连接到这个网络中,但是如果设计者又将时钟信号连接到其它触发器的数据输入端口,一些以前系列的芯片(比如FLEX和ACEX)就不再允许这个信号使用时钟网络,由此造成的高skew对设计来说将是灾难性的。即使是使用当今的芯片,厂家也不建议用户这样设计。另外,工具也不再将此设计视为同步设计,造成STA复杂而且困难。如果真的想实现这样的效果,在FPGA中正确的做法应该是,先产生与ClockS形状一样的数据信号,然后将其送给ClockF。具体做法为:首先将ClockS两分频得到ClockS_div2_1,然后用下降沿打一次得到ClockS_div2_2,然后将这两个信号异或,就得到了ClockS_o,最后将其送给ClockF,如图4.20所示。图4.20对开环控制电路的时钟信号的改进下面介绍文献[30]中的第二种情况下的开环控制电路,其电路示意图和时序图分别如图4.21和4.22所示。发送端的时钟ClockF比较快,接收端的时钟ClockS比较慢,ClockF将ClockS打3拍输出SyncSignal,在SyncSignal为低电平期间,就将头一个DataF的数值锁定在DataFlocked中,提供给ClockS稳定的采样。图4.21第二种开环控制电路的电路示意图[30]图4.22第二种开环控制电路的时序图[30]这个电路除了上面提到的两个问题外,从功能上就值得怀疑。首先发送端向接收端提供的数值应该是确定的,而这个电路提供的数值实际上是由ClockS和ClockF的相位关系决定,由于两个时钟没有任何关系,所以提供的数值到底是DataF中的哪一个也不能预先确定,即使DataFlocked能够在ClockS的触发沿处保持稳定,这个电路也没有实际意义。实际上,如果如上图所示的那样,快时钟ClockF的每一个时钟周期都输出一个新数值,那么慢时钟ClockS必然无法采集到每个变化值。正确的做法是ClockF时钟域在需要发送数据的时刻,将当前DataF存入数据总线,并提供给ClockS时钟域一个有效控制信号,表示数据此时已经稳定,只要保证控制信号有效的长度,并进行两级同步,就能实现传输数据的确定性和稳定性。前面介绍的跨时钟域控制信号(称为开环控制是因为发送端不需要应答信号进行确认)仅有1位。如果开环控制电路的控制信号超过了1位,情况就变得复杂起来。在文献[29]中提供了一个具有两个控制信号的开环控制电路,如图4.23中(a)所示。接收端需要等待发送端发出的load信号和enable信号同时有效的时候,才会接收数据。但是即使在发送这两个控制信号时没有偏差,但是经过传输后,还是会出现微小的偏差,结果造成了传输失败,如图4.23中(b)所示。对这种传输错误的解决方法就是将两个信号load和enable合并为一个信号传输,如图4.24(a)所示,图4.24(b)显示传输成功。其实图4.23最大的问题不是两个信号的时间偏移,而是信号有效的时间太短了,即使采用第二个图,也只能保证两个信号同时被采集到或者同时没有采集到。实际中,为了保证接收端采集控制信号的可靠,通常会将控制信号拉长,所以即使采集两个信号也可以保证稳定。图4.23具有两控制信号的开环控制电路及信号传输示意图[29]图4.24两控制信号的开环控制电路的改进[29]在实际应用中,有时发送端的控制信号不可能合并为一个,比如双向传输过程,主控制器连接了不同的外围器件,同这些外围器件通信全靠片选和地址线区分,读操作和写操作也各需要一个控制信号:读使能和写使能。如果控制器不可编程,即使只向单一器件单向传输,设计者也不可能要求控制器将多个控制信号合并为一个。4.4双口RAM处理跨时钟域的常用方法是使用FIFO[31,32,33,34],FIFO的一个特点就是读写操作的地址指针顺序变化,这种方式提高了FIFO的工作速度,但是也造成了对FIFO控制的僵化。在需要对事先存储数据进行精确寻址(回读)的时候,就需要使用双口RAM。双口RAM作为一种性能优越的快速通信器件,适用于高速数字系统的设计中,它的优点是:提供了两路完全独立的端口,每路端口都有完整的地址线、数据线和控制线,允许对双端口存储器的不同单元进行同时存取。4.5克服亚稳态的FPGA设计实例本章的前4节分析了同步电路能够克服亚稳态的原理,但是这对于解决亚稳态还远远不够,因为实际中由亚稳态引发的故障现象千奇百怪,这需要设计者能够透过表象快速找到故障根源。下面将以工程实际为例,介绍处理亚稳态的软件设计技巧和硬件调试技巧。4.5.1软件锁相中的亚稳态处理在某项目中,基带处理板向射频板输出频率准确的时钟,但是由于传输链路带来的干扰增加了时钟的相噪,所以射频板没有直接使用这个外界时钟作为本板的工作时钟,而是在射频板上使用了普通的VCXO(),为了最终达到两板之间的时钟同步,射频板上的FPGA和CPU合作实现了利用外界时钟对本板工作时钟的实时校准功能。图4.25所示为软件锁相的结构框图,其中鉴相功能和对DA的控制在FPGA内部实现,锁相控制算法在BSP中实现。鉴相的基本思路是:如果本板VCXO非常准确,那么每隔固定时间,两个时钟的上升沿必然会对齐一次。也就是说满足(其中和分别为两个时钟的周期,和分别为两个时钟周期的计数值),如图2.26所示。在选取参数的时候,为了提高最小鉴相精度,在FPGA内部对进行了4倍频处理,倍频后的时钟作为鉴相时钟,为了增大累积相差,在FPGA内部对进行分频处理,分频后的时钟为,设定分频后的时钟周期为,显然如果VCXO频率准确,那么在一个中用计数结果应当是一个可预知的常量,但是如果VCXO频率偏移,那么计数值也会偏移,CPU根据FPGA输出的计数值(鉴相值)的偏移方向就可以推断出VCXO频率偏移的趋势,然后CPU根据锁相算法输出一个控制DA电压值返回给FPGA,FPGA模拟DA的时序将此控压值输出到DA的控制接口,每次调整的结果都是将VCXO的频率向理想的时钟频率方向移动,这样就实现了整个闭环锁相流程。图4.25软件锁相的结构框图图2.26时钟关系图在鉴相过程中,由于两个时钟和不相关,如何识别就成为设计中需要注意的问题。实际设计中解决方法是对原始的先进行同步处理然后再对同步后的进行取上升沿操作,这样就同时解决了异步时钟域的隔离和识别的问题。如图4.27所示,整个处理流程都工作在下,显然如此设计属于同步设计,然后在同步器中实现同步和取沿操作。图4.28显示了同步器的设计,前面两级触发器实现了对异步信号的同步功能,后面两级触发器和异或门实现了取沿操作,当然后面的两级触发器的使用同样也降低了亚稳态发生的概率。图4.29清晰的显示了同步器电路的时序图。图4.27鉴相流程图2.28同步电路图图4.29同步电路时序图鉴相器模块的功能是在每个周期开始的时刻计数,在每个周期结束的时刻将计数值送给控制DA模块,同时将计数值清零,也就是说FPGA上报鉴相值的周期是,由于晶振的漂移效应,刚刚上电时的鉴相值相比理想值会偏离很远,但是经过几分钟的调整后,鉴相值的抖动便限制在偏离理想值正负5之内,如果BSP将鉴相值打印出来,那么从超级终端中看到的现象就是鉴相值快速的向理想值收敛,同时抖动范围也迅速减小。设计中遇到另一个会引发亚稳态故障的设计部分来自控制DA模块,控制DA的时钟由输入到FPGA内部的CPU时钟CLK_CPU计数产生,之所以使用计数产生是因为在FPGA内部对CPU时钟进行降频后产生信号送给外界的芯片作为工作时钟使用,所以不必使用FPGA内部的PLL产生,这样设计唯一需要保证的就是接口的时序关系必须完全符合芯片手册对建立保持时间和时钟最高速度的要求。由于CLK_CPU比CLK_DA快的多,所以如果CLK_DA直接对CPU发出的中断信号进行采样就不能保证每次都能够成功采到,解决这个问题的方法就是在CPU模块中将接收下来的中断信号进行延拓,延拓的结果要求保证超过两个CLK_DA的长度,这样CLK_DA就能够准确采集到控压值,具体流程如图4.30所示。图4.30控制DA流程但是如此设计会引发另外一个问题,如果控制DA模块直接使用CLK_DA作为模块的工作时钟,实验表明很容易引发输出信号线DATA_DA的紊乱。原因很简单,CLK_DA由CLK_CPU计数产生,由于FPGA内部数据线的巨大延迟,根本无法保证CLK_DA能够准确的采集到来自CLK_CPU时钟域的控压值(虽然用modelsim进行功能仿真的时候很正常),既然采集到的控压值不正确,那么对其进行并串转换后的输出结果DATA_DA必然也不正常。由于CLK_CPU和CLK_DA存在整数倍关系,所以解决这个问题最简单的方法就是控制DA模块不使用CLK_DA作为工作时钟(虽然从外界看上去工作频率是CLK_DA),而是利用触发器的EN端,将所有触发器的工作时钟均设定为CLK_CPU,只是在每个CLK_DA周期的开始将EN端置一个CLK_CPU周期的高电平有效,这样虽然触发器的工作时钟是CLK_CPU,但是由于EN端的有效控制使得输出DATA_DA的工作频率是CLK_DA。当中断信号有效的时候就将控压值读入,然后经过并串转换依次送出到DATA_DA。如此一来,整个设计便全部工作在同一个时钟域中,如图4.31所示。具体实现代码如下:always@(posedgeCLK_CPUornegedgereset_n)if(!reset_n)DA_shiftreg16<=16'b0;elseif(CLK_DA_edge)…图4.31并转串模块4.5.2电平标准不匹配引发亚稳态某单板在常温下测试48小时没有出现误码,在进行高低温试验中,多次出现上行光口信号突然丢失的现象,如果重新插拔光纤,上行光口信号又恢复正常。更奇怪的是虽然上行光口经常出现故障,但是下行光口信号无论在常温还是在高低温测试的时候均工作正常。单板光口通信部分的原理图如下,PMC7832是一款支持CPRI协议的芯片,RBI接口的上行工作时钟和下行工作时钟均为122.88MHz,只是相位相反,数据位宽为10位。SERDES接口的上行工作时钟和下行工作时钟均为1.2288GHz,位宽为1位。图4.32光口通信原理图由于进行高低温试验不能使用示波器,所以只能在常温测试时进行故障排除。先从接口时序进行分析,由于SERDES接口的工作频率太高,基于先易后难的原则,首先对RBI接口的上行链路时序进行测量,结果如下,其中绿线表示时钟,黄线表示数据。测试结果为时钟和数据的时序关系满足手册中定义的建立和保持时间要求。图4.33常温下的RBI接口时序图本来测量RBI时序到此就结束了,但是在后续版本更新中,出现了一个在常温下也会造成上行光信号丢失的FPGA版本,于是在此版本基础上继续用示波器测量RBI时钟,得到如下波形。时钟的峰峰值仅有500mV左右,并且整个时钟信号抬高了1V,显然FPGA送出的RBI工作时钟出现了问题。图4.34不正常的RBI接口时钟首先怀疑的是FPGA管脚速度太慢或者是驱动能力不足,于是将管脚约束改为FAST。再次测量,得到如下的波形,时钟信号的峰峰值变为1.5V左右,整个信号抬高幅度降低到500mV左右,稍有改善,但是仍然不正常。图4.35管脚约束为FAST后的RBI接口时钟接下来将FPGA管脚驱动电流加大,再次测量时钟信号,得到如下波形,此时的时钟信号已经有了明显的改善,而且无论是常温测试还是高低温测试,光口链路均工作正常。图4.36增加驱动电流后的RBI接口时钟到此问题已经解决,但是后来经过仔细研究PMC7832的芯片手册,发现PMC7832的RBI接口电平标准是SSTL2,而FPGA管脚电平标准采用的是默认的LVCOMS25,两个器件接口电平标准不匹配。于是修改FPGA接口管脚电平标准为SSTL2,将管脚驱动电流恢复为默认设置,再次测量,得到如下波形,时钟完全恢复正常。图4.37匹配接口电平标准后的RBI接口时钟经过这样修改后再次进行长时间的常温测试和高低温测试,没有出现上行信号丢失的问题。设计人员往往只是关注接口时序,忽略了选择合适的电平标准和不同电平标准的兼容性问题。在低速信号设计中,低速TTL和低速CMOS电平对接,似乎没有问题,但是对于122.88MHz的高速信号,电平标准不兼容和驱动能力不足的矛盾就凸现出来,并最终导致光口的可靠性降低。这就提示设计人员设计电路时,特别是高速电路设计,要注意选择合适的电平标准,并注意不同电平标准的兼容性问题。4.5.3阻抗不匹配引发亚稳态基站的下行链路如下图所示,FPGA发出IQ数据送给DAC,然后经过IQ调制器和功放发射出去。图4.38基站的下行链路在后期用频谱仪测试的时候发现射频指标不合格,由于整个射频链路即DAC后端的链路已经调试正常,所有性能指标均合格,所以首先怀疑FPGA和DAC之间的时序关系不正确。用示波器测量DAC接口,结果如下图所示,其中黄线是FPGA输出给DAC的数据信号DATA_DA,绿线是FPGA输出给DA的时钟信号CLK_DA,从图中可以看出在时钟的上升沿(触发沿)采集到了数据线的两次下降沿,也就是说在这两个时间点没有满足建立保持时间的要求,显然DA时序错误导致出现误码,从而射频指标变差。图4.39DAC接口时序图仔细分析图中的时序关系发现,无论时钟信号还是数据信号的下降沿都非常缓慢,数据信号的下降沿达到了10ns左右,而时钟周期仅有16ns左右(时钟频率为61.44MHz),而且时钟信号抬起了大约300mV。基于以上现象的分析,可以怀疑是FPGA输出管脚的驱动能力过小和接口电平标准不匹配造成的。DAC的电平标准是LVTTL3.3V,而FPGA管脚的默认电平标准是LVCMOS25,所以先将FPGA管脚的电平标准改为LVCOMS33,同时将管脚的驱动电流增加,再次测量后得到如下波形:图4.40匹配接口电平标准并且增加驱动电流后的DAC时序图这时虽然时钟的触发沿避开了数据的下降沿,但是时序并没有完全的改善,同时数据信号的上冲变大。仔细观察时钟信号可以发现,时钟的占空比明显偏离了50%,也就是说时钟信号的波形是不正确的。因为这个时钟是由FPGA内部的DCM(数字时钟管理模块)产生,所以首先怀疑DCM的输出是否就出现了占空比恶化的情况。恰好本板的硬件锁相环输出了一个与CLK_DA同频的时钟,所以先测量这两个时钟的关系,测量结果如下图所示,其中绿线是硬件锁相环输出时钟,黄线为CLK_DA。.图4.41硬件锁相环和DCM输出时钟的比较从图中可以确定CLK_DA的占空比相对于正常的时钟波形确实出现了明显的恶化,于是就将问题转移到了如何解决占空比方面。首先考虑时钟方案,设计中使用的全局时钟方案是IBUFG+DCM+BUFG模式,框图如下:图4.42时钟方案示意图可以看出这种时钟方案是合理的,于是就将排查重点放在了DCM核上面,但是在生成DCM的时候已经设置了占空比校准,所以核的生成过程也不存在问题,如下图所示:图4.43DCM核设置示意图于是又怀疑是否由于DCM没有锁定导致输出时钟占空比变差,于是将DCM的锁定信号分配到测试管脚上测量,引脚电平为高电平,表示DCM已经锁定。既然DCM的逻辑应该不会有问题,于是可以认定是由于FPGA与DAC接口的阻抗不匹配导致的信号质量恶化。对单板的匹配电阻更换后,时钟信号的质量有了很大的改善,测试结果如下图所示,其中黄线表示时钟信号,绿线表示数据信号。图4.44经过管脚约束后的DAC时序图在数字系统设计中,FPGA设计者往往只关心逻辑功能是否正确,又缺乏信号完整性的相关知识,造成了调试困难。其实在遇到这类故障时,如果首先将DA断开测量,就可以很容易的判断出是由于单板阻抗不匹配造成的DA时序错误。在通常的项目中,FPGA都处于比较核心的位置,与之相连的外围器件非常多,这就要求设计者对每一个与FPGA相连的芯片和接口十分了解,对于接口时序关系要非常重视,因为无论前仿真正确还是后仿真正确,都不代表FPGA的实际工作情况正确。影响信号完整性的因素很多,FPGA设计者不但要了解逻辑设计而且要了解板级和系统级的知识,这样设计出来的产品才会更加稳定。4.5.4CPU与FPGA之间的安全通信某项目使用了芯片厂商freescale生产的专用通信处理器系列中的一款CPU,它具有低价格,高集成度的特点,被广泛应用于路由器,工业控制和电子测量等领域。此CPU属于PowerQUICCtm家族,拥有更高的性能,更多的功能和更快的接口速度,在产品上市速度,价格,功耗和封装方面具有明显的优势。芯片中包含一个e300c2PowerPC核,属于MPC603e(使用在早期的Power QUICCⅡ处理器当中)的升级版本。升级的功能包括集成奇偶校验,双整数单元。CPU核心与MPC603e在软件方面兼容,属于32bits的PowerPC架构,提供了32bits宽的地址线和可选择的数据宽度类型(8,16或者32bits),但是并不支持浮点运算。CPU内部集成了5个执行单元:两个整数单元(IU1和IU2),包含了完整的乘法器和除法器,一个分支处理单元(BPU)进行静态分支预测,一个装载/存储单元(LSU)用于数据传输,一个系统寄存器单元(SRU)。e300c核心可以实现5条指令并行执行。

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论