1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > 两种异步时钟同步化区别分析

两种异步时钟同步化区别分析

时间:2018-11-12 13:58:17

相关推荐

两种异步时钟同步化区别分析

今天面试被问到异步复位同步释放和异步复位打两拍有什么区别,没回答上来,主要忘记了异步复位同步释放的实现方式,回来查了一下资料,觉得复位还是值得写一写的。

在FPGA或者数字IC设计中肯定会涉及到同步和异步复位的问题,首先介绍一下同步复位和异步复位。

同步复位:顾名思义,同步复位就是指复位信号只有在时钟上升沿到来时,才能有效。否则,无法完成对系统的复位工作。用Verilog描述如下:

always @ (posedge clk) begin

if (!Rst_n)

end

同步复位的优点:

有利于仿真器的仿真。可以使所设计的系统成为100%的同步时序电路,这便大大有利于时序分析,而且综合出来的fmax一般较高。因为他只有在时钟有效电平到来时才有效,所以可以滤除高于时钟频率的毛刺。

同步复位的缺点:

复位信号的有效时长必须大于时钟周期,才能真正被系统识别并完成复位任务。同时还要考虑,诸如:clk skew,组合逻辑路径延时,复位延时等因素。由于大多数的逻辑器件的目标库内的DFF都只有异步复位端口,所以,倘若采用同步复位的话,综合器就会在寄存器的数据输入端口插入组合逻辑,这样就会耗费较多的逻辑资源。

异步复位:它是指无论时钟沿是否到来,只要复位信号有效,就对系统进行复位。用Verilog描述如下:

always @ (posedge clk,negedge Rst_n) begin

if (!Rst_n)

end

异步复位的优点:

大多数目标器件库的dff都有异步复位端口,因此采用异步复位可以节省资源。设计相对简单。异步复位信号识别方便,而且可以很方便的使用FPGA的全局复位端口GSR。

异步复位的缺点:

在复位信号释放(release)的时候容易出现问题。具体就是说:倘若复位释放时恰恰在时钟有效沿附近,就很容易使寄存器输出出现亚稳态,从而导致亚稳态。复位信号容易受到毛刺的影响。

为什么会产生亚稳态呢,这里就需要明确两个概念removal time 和recovery time。

Removal timing check

Removal time是指在时钟有效沿来临之后,异步复位信号需要继续保持有效的最短时间。满足这个最短时间才能确保对寄存器进行正常的复位。Removal time check的波形图如下图所示。Removal timing check与hold time check类似。

Recovery timing check

Recovery time是指在时钟有效沿到来之前,复位信号保持高电平的最短时间。即复位信号变到非复位状态的电平必须在clk之前一定的时间到达。满足这个Recovery time,可以确保在时钟有效沿来临时,异步复位信号处于无效状态,从而确保正常的数据采样。

从Removal 和Recovery time的定义知道,只要DFF的复位信号不在时钟有效沿附近变化(复位信号远离时钟有效沿),就可以保证电路的正常复位和撤销。

下面举例说明异步复位的亚稳态产生,当触发器的复位和解复位都是异步的,与时钟的边沿无关时称之为完全异步复位。如下图所示,图中触发器DFF的复位信号由复位控制电路给出,复位控制电路与触发器的时钟没有任何关系。

触发器解复位与解复位后与下一个时钟有效沿之间必须保持的最小时间称之为复位恢复时间(reset recovery time)也就是上面介绍的recovery time。下图是复位恢复时间违规时序图,当异步复位释放点不满足复位恢复时间时,会导致输出不定态或亚稳态,使系统功能出现异常。

结论:

为了避免纯粹的同步复位和纯粹异步复位的问题,可以使用一种叫做同步化的异步复位,我们称其为第三类复位。这种复位完全结合了异步复位和同步复位的优势,我们知道异步复位的优势是不参与数据路径,所以不影响数据路径速度,而复位几乎是瞬间起作用;而同步复位的优势是百分百地同步时序分析且具有抗噪声性能。这种复位其实就是通常我们所说的异步复位同步释放。就如同我之前讨论的那样,异步地进入复位是最好的,只是异步地退出复位会导致一些类似亚稳态和由同步电路参与反馈而引起不想要的状态之类的危害等问题。

异步复位同步化

啰嗦的一大堆终于进入正题了。

异步复位同步化的方式有两种,一种是同步化的异步复位,另外一种是大名鼎鼎的异步复位同步释放。

首先介绍第一种同步化的异步复位。

同步寄存器(Synchronizer Register)像同步复位那样被使用,不过被同步后的异步复位和原始异步复位经过门控以后用来异步地复位后续寄存器。这个电路中异步复位信号异步地复位后续电路,并且复位是异步地释放。它的缺点就是复位路径上引入了门电路的延迟。

其实简单的理解就是异步复位信号打两拍进行同步化,因此增加了复位电路的延时。

为了解决上述电路复位路径上门电路延迟。异步复位输入直接连接到同步寄存器(Synchronizer Register)的CLRN端口上,这样复位立即生效。当复位撤除(释放)时,一个逻辑“1”从同步器(Synchronizer)被时钟打出用来同步地释放后续寄存器的复位,也就是异步复位同步释放。

注意

当有PLL涉及时,有些特殊情况需要考虑。比如我们来如图19所示的电路。需要同步的复位跟之前一样直接接到了同步器中寄存器的CLRN端口,而同步后的寄存器也同样接到了reg1和reg2的CLRN端口,同时也被接到PLL的areset端口。所有寄存器包括同步器中的寄存器的驱动时钟来自PLL的输出时钟。虽然看起来PLL使用了同步后的复位,实际上这是行不通的。当PLL处于复位状态时,PLL的c0是没有时钟输出的,因此同步器中的寄存器将无法清除复位(意思是复位无法得到释放)。结果是,这个电路将永远无法跳出复位。

RDC(Reset Domain Crossing)跨复位域

这里顺便提一下RDC,当前复杂FPGA或者数字IC设计除了包含多个时钟域外还包含了多个异步复位域,检测人员对CDC跨时钟域处理已经有了足够的重视,而实际上,如果设计种存在跨异步复位域时同样会经常会遇到亚稳态的问题。 具体而言,对于有多个异步复位域的设计,如果某个异步复位在复位时,其复位的信号可能正好落在接受域时钟的建立和保持时间窗口内,这会造成接受端采样到发送端信号复位前后或复位后的值,从而造成仿真行为和FPGA真实行为的不一致。因此,需要不同异步复位域之间需要进行有效隔离或同步,或者提前指定异步复位的先后顺序,以确保设计可以可靠复位,避免由于跨异步复位域而引起的亚稳态问题。

当一个复位域的异步复位边沿太接近另一个复位域的触发器的时钟边缘或不复位时,就会发生亚稳态,导致触发器的值不确定,并在整个设计中传播,从而导致功能故障。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。