【时序设计】异步设计的亚稳态产生及信号的同步化

亚稳态的产生

      当有两个时钟时,第二个时钟对第一个时钟控制的触发器输出值进行采样时,有可能在输出的值还不稳定时便采样,造成该时钟的采样会有一段时间的不稳定,并且最后可能是任意值。如图

     该图显示了当在一个时钟域中生成的信号被采样得太接近来自另一个时钟域的时钟信号的上升沿时发生的同步故障。 同步失败是由输出变为亚稳态引起的,并且在输出必须再次采样时不会收敛到合法稳定状态。

    该图在输出还未稳定时候再次采样,会导致整个不稳定的值一直传递下去 。

同步化

    双寄存器同步假定信号不稳定周期小于一个周期,这样第二个寄存器采样到的信号就是稳定的信号。第一个触发器将异步输入信号采样到新的时钟域,并等待一个完整的时钟周期,以允许第一级输出信号上的任何亚稳态衰减,然后通过相同的时钟将第一级信号采样到 第二级触发器,其目标是第2级信号现在是一个稳定且有效的信号,同步到新的时钟域。

   如果不稳定时间超过一个周期, 那么应当用三级寄存器同步化。注意同步化不能保证数据的准确性,只能保证数据的稳定性

解决方法 

1.控制信号

    由于信号在跨时钟域改变时有可能会稳定到任意值,因此改变的信号越少越好,所以跨时钟域的控制信号推荐使用格雷码,每个控制状态只改变一位的值。

2.数据传输

(1)使用握手信号

    可以使用两个或三个握手控制信号在时钟域之间传递数据,具体取决于应用程序和设计工程师的喜好。
在握手时,使用的控制信号越多,将数据从一个时钟域传递到另一个时钟域的延迟就越长。 使用握手的最大缺点是传递和识别传输的每个数据字的所有握手信号所需的延迟。
    对于许多开放式数据传递应用程序,简单的双线握手序列就足够了。发送方将数据放入数据总线,然后将“data_valid”信号同步到接收时钟域。当在新时钟域中识别出“data_valid”信号时,接收器将数据计时到新时钟域中的寄存器(数据应该在发送时钟域中至少两个上升时钟沿稳定)然后通过通过同步器向发送方发出“确认”信号。当发送方识别出同步的“确认”信号时,发送方可以将被驱动的值改变为数据总线。
在某些情况下,使用通过同步器从接收器发送到发送器的第三控制信号“就绪”可能是有用的,以指示接收器确实“准备好”接收数据。当“data_valid”信号为真时,不应声明“就绪”信号。当“data_valid”信号被解除断言时,“就绪”信号可以传递给发送者。当然,随着增加的握手信号,同步和识别第三控制信号的延迟更长。

(2)使用异步FIFO

     将数据从一个时钟域传递到另一个时钟域是在时钟域之间传递多个随机变化的信号时候,使用同步器来处理数据传递通常是不可接受的。 因为使用同步器对多位数据更改进行错误采样的机会太多了。

    

 

 

 

 

 

 

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值