异步复位、同步释放


👉注:更多精彩请看: 面试常问的verilog代码汇总 一文


1.同步复位的优缺点

同步复位是指只有当时钟有效边沿到来时,才能进行复位。如下,verilog描述为:

always@(posedge clk)begin
  if(!rst_n)
   ...
end

使用限制

  • 复位信号的有效周期必须要大于一个时钟周期;
  • 复位电路还要考虑所有相关的组合逻辑电路的延时,加上时钟布线产生的时钟偏斜(clock skew);

2.异步复位的优缺点

异步复位是指无论是否时钟有效边沿到来,只要复位信号有效,就进行复位。如下,verilog描述为:

always@(posedge clk or negedge rst_n)begin
  if(!rst_n)
   ...
end

优点

  • 大多数的DFF都有异步复位端,因此直接采用异步复位可以节省资源。
  • 设计相对比较简单。

缺点

  • 如果异步复位信号在释放时(即撤销复位信号),刚好发生在时钟有效沿附近,就容易使寄存器输出出现亚稳态;如下图所示:
  • 复位信号容易受毛刺的影响。
    在这里插入图片描述

3.异步复位、同步释放

为了避免异步复位出现亚稳态,同时发挥异步复位的优点,弥补它的缺点,一般采用异步复位、同步释放的方式。

  • 异步复位的方式复位电路;
  • 但复位信号释放时(取消)时,必须跟时钟同步。

电路图如下所示:
在这里插入图片描述

解释上图:

  • 当异步复位(rst_i)无效,即为高电平时,同步后的复位信号 rst_o 也为高电平;
  • 当异步复位有效时,同步后的复位信号立刻为低电平( 0),即实现了“异步复位”;
  • 信号释放时,会在时钟上升沿来临时,才可以恢复为 高电平(1),实现“同步释放”;

verilog描述如下:

module asr_rstn(clk,rst_i);
  input clk,rst_i;
  reg rst_d1,rst_d2 ;
  always @ (posedge clk or negedge rst_i) begin 
    if(!rst_i)  {rst_d1,rst_d2} = 0;
    else        {rst_d2,rst_d1} <= {rst_n_1,1};
  end 
  assign rst_o = rst_d2; 
endmodule

Ps:给出一道例题:
(22届紫光秋招)假定时钟毛毛刺,异步复位可以不管时钟,只要复位满足就对电路复位。判断是否正确?如果不正确请给出理由?

不正确。影响异步复位信号能否安全复位的因素除了时钟产生的毛刺,另外一点很重要的原因就是:当异步复位信号在释放时,如果刚好发生在时钟有效边沿的附近,那么有可能会产生亚稳态,而导致电路复位失败。

  • 31
    点赞
  • 153
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小小verifier

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值