您的位置 首页 报告

根据FPGA的跨时钟域信号处理——亚稳态

在特权的上篇博文《基于FPGA的跨时钟域信号处理——专用握手信号》中提出了使用专门的握手信号达到异步时钟域数据的可靠传输。列举了一个简单的由请求信号req、数据信号data

  在特权的上篇博文《根据FPGA的跨时钟域信号处理——专用握手信号》中提出了运用专门的握手信号抵达异步时钟域数据的牢靠传输。列举了一个简略的由恳求信号req、数据信号data、应对信号ack组成的简略握手机制。riple兄更是提出了req和ack这两个直接的跨时钟域信号在被另一个时钟域的寄存器同步时的亚稳态问题。这个问题估量是整个异步通讯中最值得谈论和重视的。

  很走运,特权同学找到了很官方的说法——《Application Note42:Metastability in Altera Devices》,一口气读完全文,有一个单词送给这篇文章很适宜——“nice”。特权同学曩昔的一切疑问都在文章中找到了答案,尽管altera在文章的终究仅仅尽心竭力的在吹捧自己的好。

  假如你E文还不错(该不会比我这个4次都没过掉4级考试的家伙差吧,~_~),那么去享用原文吧。或许你能够考虑看看特权同学的翻译水平,哈哈……

  什么是亚稳态?

  一切数字器材(例如FPGA)的信号传输都会有必定的时序要求,然后确保每个寄存器将捕获的输入信号正确输出。为了确保牢靠的操作,输入寄存器的信号有必要在时钟沿的某段时刻(寄存器的树立时刻Tsu)之前坚持安稳,而且持续到时钟沿之后的某段时刻(寄存器的坚持时刻Th)之后才干改动。而该寄存器的输入反映到输出则需求经过必定的延时(时钟到输出的时刻Tco)。假如数据信号的改动违背了Tsu后者Th的要求,那么寄存器的输出就会处于亚稳态。此刻,寄存器的输出会在高电平1和低电平0之间回旋扭转一段时刻,这也意味着寄存器的输出抵达一个安稳的高或许低电平的状况所需求的时刻会大于Tco。

  在同步体系中,输入信号总是能够抵达寄存器的时序要求,所以亚稳态不会产生。亚稳态问题一般产生在一些跨时钟域信号的传输上。由于数据信号可能在任何时刻抵达异步时钟域的意图寄存器,所以规划者无法确保满意Tsu和Th的要求。可是,并非一切违背寄存器的Tsu或Th要求的信号会导致输出亚稳态。某个寄存器进入了亚稳态后从头回到安稳状况的时刻取决于器材的制作工艺及作业环境。在大多数状况下,寄存器将会快速的回来安稳状况。

  寄存器在时钟沿采样数据信号比如一个球从小山的一侧抛到另一侧。如图1所示,小山的两边代表数据的安稳状况——旧的数据值或许新的数据值;山顶代表亚稳态。假如球被抛到山顶上,它可能会停在山顶上,但实际上它只需略微有些动态就会滚落到山底。在必定时刻内,球滚的越远,它抵达安稳状况的时刻也就越短。

  假如数据信号的改动产生在时钟沿的某段时刻之后(Th),就如同球下跌到了小山的“old data value”一侧,输出信号依然坚持时钟改动前的值不变。假如数据信号的改动产生在时钟沿的某段时刻(Tsu)之前,而且持续到时钟沿之后的某段时刻(Th)都不再改动,那就如同球下跌到了小山的“new data value”一侧,输出数据抵达安稳状况的时刻为Tco。可是,当一个寄存器的输入数据违背了Tsu或许Th,就像球被抛到了山顶。假如球在山顶逗留的越久,那么它抵达山底的时刻也就越长,这就相应的延伸了从时钟改动到输出数据抵达安稳状况的时刻(Tco)。

  

点击看大图

 

  图1

  图2很好的阐释了亚稳态信号。在时钟改动的一起,寄存器的输入数据信号也处于从低电平到高电平的改动状况,这就违背了寄存器的Tsu要求。图中的输出信号从低电平改动到亚稳态,即回旋扭转于凹凸电平之间的一个状况。信号输出A终究抵达输入信号的新状况值1,信号输出B却回来了输入信号的旧状况值0。在这两种状况下,信号输出改动安稳在固定的1或许0状况的时刻远超过了寄存器的固有Tco。

  

点击看大图

 

  图2

  假如输出信号鄙人一个寄存器捕获数据前(下一个时钟锁存沿的Tsu时刻前)处于一个安稳的有用状况,那么亚稳态信号不会对该体系照成影响。可是假如亚稳态信号鄙人一个寄存器捕获数据时依然回旋扭转于高或许低电平之间,那将会对体系的后续电路产生影响。持续谈论球和小山的比方,当球抵达山底的时刻(处于安稳的逻辑值0或1)超过了扣除寄存器Tco以外的余量时刻,那么问题就跟着而来。

  同步寄存器

  当信号改动处于一个不相关的电路或许以不时钟域,它在被运用前就需求先被同步到新的时钟域中。新的时钟域中的榜首个寄存器将扮演同步寄存器的人物。

  为了尽可能削减异步信号传输中由于亚稳态引发的问题,规划者一般在意图时钟域中运用一串接连的寄存器(同步寄存器链或许同步设备)将信号同步到新的时钟域中。这些寄存器有额定的时刻用于信号在被运用前从亚稳态抵达安稳值。同步寄存器到寄存器途径的时序余量,也便是亚稳态信号抵达安稳的最大时刻,也被认为是亚稳态持续时刻。

  同步寄存器链,或许同步设备,被界说为一串抵达以下要求的接连寄存器:

  ■ 链中的寄存器都由相同的时钟或许相位相关的时钟触发;

  ■ 链中的榜首个寄存器由不相关时钟域或许是异步的时钟来触发;

  ■ 每个寄存器的扇出值都为1,链中的终究一个寄存器能够破例。

  同步寄存器链的长度便是抵达以上要求的同步时钟域的寄存器数量,图3是一个两级的同步寄存器链,

  

点击看大图

 

  图3

  传输在不相关时钟域的信号,都有可能在相关于捕获寄存器时钟沿的任何时刻点改动。因而,规划者无法猜测信号改动的次序或许说信号两次改动间经过了几个锁存时钟周期。例如,一条异步总线的各个数据信号可能在不同的时钟沿改动,成果接纳到的数据值可能是过错的。

  规划者有必要考虑到电路的这些状况,而运用双时钟FIFO(DCFIFO)传输信号或许运用握手信号进行操控。FIFO运用同步设备处理来自不一起钟域的操控信号,数据的读写运用两套独立的总线。此外,假如异步信号作为两个时钟域的握手逻辑,这些操控信号就需求用于指示何时数据信号能够被接纳时钟域锁存。如此一来,就能够运用同步寄存器确保亚稳态不会影响操控信号的传输,然后确保数据在运用前有足够的时刻等候亚稳态抵达安稳。

  文章其实还没有完毕,只不过altera在后面很官方的提出了所谓的MTBF(mean time between failures)的概念,即所谓的均匀无故障时刻的概念。列了个公式,剖析了各个参数,当然也不忘提他们的器材参数关于这个MTBF做了多大的奉献。然后也提出了它们是怎么进行该公式参数的推导。

  咱们仍是回到主题,在清晰了这些根本的概念和根本的办法后,就要学以致用。在上篇博文没有解决的一个要害问题在于怎么最有用的进行握手信号req、ack的采样。这个问题咱们能够先以altera提出的MTBF推导公式的各个参数下手剖析。

  

 

  在这个公式中,Tmet便是指寄存器从时钟上升沿触发后的时序余量时刻,Fclk是接纳时钟域的时钟频率,Fdata是数据的改动频率,而C1、C2则是与器材有关的参数,关于用户是一个固定值。由此看来,规划者只能经过改动Tmet、Fclk、Fdata来进步MTBF值。MTBF值越大,阐明呈现亚稳态的几率越小。要增大MTBF值,能够延伸Tmet、也能够下降Fclk和Fdata这两个频率。

  首要咱们看看怎么延伸Tmet时刻。

  Tmet时刻 = 采样时钟周期时刻 – 输出信号正常的Tco时刻 – 数据抵达下一级寄存器的输入端口的其它延时时刻Tdata – 下一级寄存器Tsu时刻。

  

 

  图4

  从严厉意义上来说,Tmet时刻还应该加上时钟网络延时时刻(Tclk2-Tclk1)。总归,这个Tmet时刻是指正常没有亚稳态状况下,寄存器输出信号从源寄存器到意图寄存器的树立时刻余量。由于决议Tmet取值的参数中Tco和Tsu都是由FPGA器材自身的工艺以及作业环境决议的,设置时钟网络延时参数也很大程度上由器材决议,所以,假如在时钟频率Fclk和数据改动率Fdata固定的状况下,要增大Tmet值,那么规划者要做的只能是减小Tdata值。而这个Tdata是指两个寄存器间的逻辑延时以及走线延时之和,要最大程度的减小它,估量也只能是不在连个寄存器间增加任何逻辑罢了,正如咱们的实例中也只要简略的input=output。

  再看Fclk,它是接纳域的采样时钟,便是异步信号需求被同步到的那个时钟域,它的频率是越小越好。当然了,事物都其两面性,这个频率小到影响体系正常作业可就不行了。规划者需求从各个方面考虑来决议这个频率,不会仅仅为了下降亚稳态产生的概率而无约束的下降体系的时钟频率。如此剖析,发现这个Fclk根本也是一个比较固定的值,不是能够随意说降就降的。下降Fclk其实也便是在增大Tmet时刻,由于它是Tmet公式核算中的被减数,哈哈,如同是一环扣一环。别的,在不下降采样频率Fclk的状况下,经过运用使能信号的办法得到一个二分频时钟去采样信号也能够抵达降频的意图,只不过这样会多消耗几个时钟周期用于同步,可是有时也能够显着改进功能。

  特权同学的二分频采样思路如图5所示,前两级采样电路都做了2分频,然后第三级运用本来时钟进行采样。它的优点在于给榜首级和第二级同步寄存器更多的Tmet时刻,将亚稳态按捺在第二级寄存器输入之前,然后确保第三级寄存器的牢靠采样。尽管它在一、二级寄存器的输入端增加了一些逻辑,可能会增大Tdata,可是比较于这个采样时钟的一半将额,它的改动是能够忽略不计的。

  

点击看大图

 

  图5

  另一种办法是在不下降每级寄存器的采样频率的状况下选用更多的同步寄存器,尽量去运用后级的寄存器,这也是一个笨办法。Altera的笔记里打了一个比方,假如一个规划你运用了9级的同步寄存器,那么MTBF是100年,而当你运用了10级的同步寄存器,那么MTBF是1000年。这个办法其实有点相似冗余,这是一切人都知道的能够进步牢靠性的原始办法。这种思路的坏处和前面说到的办法相同,需求支付多个时钟周期为价值。

  终究看这个Fdata,这个是发送时钟域的数据改动率,好像也是由体系决议的,规划者也无法做太多改动。

  其实关于一般的使用,假如体系的时钟频率不太高,器材的特性还算能够(仅仅一些泛泛的说法,具体问题要具体剖析),特权同学觉得上篇博文提出的握手信号同步办法就足以敷衍亚稳态问题。假如到高频领域来谈论亚稳态,那将会是一项更有挑战性的使命,只可惜特权同学现在触摸的最高频也只不过100MHz罢了。特权同学自觉孤陋寡闻,布鼓雷门了。

  无独有偶,特权同学这篇博文行将收官之际,无意中看到船长的博客中《了解FPGAs中的亚稳态》一文也触及到了altera的这篇笔记,也做了一下翻译,好像比特权同学翻译的好。不过在此做个声明,特权同学的博文一向坚持原创,即使参阅其它材料,也大都有所提及,而且有自己的谈论和考虑,这应该是每位电子工程师应该有的谨慎和仔细的情绪。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/ceping/baogao/116897.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部