对异步复位同步释放的理解

前言

有关同步复位、异步复位以及异步复位同步释放的区别和verilog实现,这篇博客链接: link.介绍的非常详细了,有需要的可以参考下,这里着重讲解对于异步复位同步释放的理解。

一、Removal Timing Check与Recovery Timing Check的定义

在理解异步复位同步释放原理之前,先明确两个概念:

1.Removal Timing Check

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

2.Recovery Timing Check

Recovery Time指在时钟有效沿到来之前,复位信号保持高电平的最短时间。即复位信号变到非复位状态的电平必须在clk之前一定的时间到达,并满足这个Recovery Time,可以确保在时钟有效沿来临时,异步复位信号处于无效状态,确保正常的数据采样。
Recovery Timing Check
从Removal 和Recovery time的定义知道,只要复位信号不在时钟有效沿附近变化(即复位信号远离时钟有效沿),可以保证电路的正常复位和撤销。

二、异步复位同步释放的原理

异步复位指无论时钟沿是否到来,只要复位信号有效就进行复位,而同步释放是在时钟沿到来时释放复位信号。

1.Verilog代码实现

always @ (posedge clk, negedge rst_async_n)
    if (!rst_async_n) begin
        rst_s1 <= 1'b0;
        rst_s2 <= 1'b0;
    end
    else begin
        rst_s1 <= 1'b1;
        rst_s2 <= rst_s1;
    end
    assign rst_sync_n = rst_s2;
endmodule

2.逻辑电路图

异步复位同步释放逻辑电路图
方框1中的电路图是实现异步复位同步释放的关键
(1)异步复位操作
当rst_async_n有效时,第一个D触发器的输出是低电平,第二个D触发器的输出rst_sync_n也是低电平,方框2中的异步复位端口有效,输出被复位。
(2)同步释放操作
假设rst_async_n释放发生在clk上升沿时,如果不加方框1的电路,则可能发生亚稳态事件。但是加上此电路以后,假设第一级D触发器clk上升沿时rst_async_n正好释放,则D触发器1可能输出高电平“1”,也可能输出亚稳态“x”。但此时第二级触发器不会立刻更新输出,第二级触发器输出值为前一级触发器Q1的输出状态。显然Q1之前为低电平,故第二级触发器输出保持复位低电平。直到下一个时钟有效沿到来之后,才随着变为高电平,即实现同步释放。

总结

在实际的设计中,比如有的模块是先复位再给模块供应时钟,即保证了复位信号与时钟在时间上是错开的,这种流程可以保证不会出现Recovery和Removal的问题,因为复位置起撤销时都没有时钟。即使操作流程保证不了,出现Recovery和Removal违例,由于模块此时都不会工作,也没什么问题。并且在数字后端实现时,如果发现第一级寄存器的异步复位端存在Removal和Recovery的Timing violation,我们可以不用管。因为这一级只是作为过渡。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值