【基础知识】~ 异步复位同步释放

名词解释

先了解一下什么是 同步复位/异步复位,请移步到这里

为什么要异步复位同步释放?这个功能有什么用?这八个字包含两个步骤,异步复位,同步释放

异步复位的意思是复位信号rstn和clk信号不是同时到来的,在always语句块中表现为:

always @(posedge clk or negedge rstn) begin
    if(!rstn)
        reg _1   <= 1'b0;
end

异步复位信号到来时,寄存器 reg_1 会被直接拉低,这是不会产生问题的,当rstn下降沿和clk上升沿同时到来时,如果rstn比clk先到来一瞬间,且原来的reg_1信号为1,reg_1会被拉低为0,后一瞬间,clk来了,因为前一瞬间的reg_1值被拉低了,所以在clk到来时,一定有set_up不满足要求…但是!一进always 语句块后,由于rstn是0,所以reg_1会被赋值为0,还是0。也就是说不管我reg_1的set_up / hold满不满足要求,reg_1都会被重置到0,不会有任何问题,如图所示:
在这里插入图片描述
综上所述,异步复位信号是不会产生问题的,但是为什么要同步释放?是释放信号会出问题吗?

答:是的,当rstn释放的时候(从0变1)时,如果rstn释放边沿和clk释放边沿很接近,那么就会出现亚稳态,而亚稳态在电路里面是非常致命的,在亚稳态采样到的数据是不准确的,而电路中一个不准确的值,会导致这后面的所有值都不准确。
在这里插入图片描述
当rstn释放的时候,寄存器的输入端D可能因为某个组合逻辑电路和rstn有关系,导致D随rstn同步拉高。那在clk上升沿到来的时候,就会有D的set_up不满足,出现亚稳态,边沿采样的时候,输出reg_1不知道该采D=0的信号还是D=1的信号,所以不妨打两拍,不着急在rstn释放的时候采样,用两个寄存器来延迟两个周期,等到数据D稳定了之后再同步拉高rstn采样

总结:异步复位为0 的时候不做处理,当rstn从0变1的时候,打两拍随clk同步拉高,此时寄存器输入的D已经稳定很长时间,可以避免亚稳态的发生。

参考文献:看这里

牛刀小试

题目:请你用verilog,设计一个电路实现异步复位同步释放功能。

代码如下:

module Sys_Rst(
	input 	clk		,
	input 	rst_n	,
	output 	sys_rst	
);
reg rst_r0;
reg rst_r1;
always @(posedge clk or negedge rst_n)begin
	if(!rst_n)begin
		rst_r0 <= 1'b0;
		rst_r1 <= 1'b0;
	end
	else begin
		rst_r0 <= 1'b1;
		rst_r1 <= rst_r0;
	end
end
assign sys_rst = rst_r1;
endmodule

电路图

在这里插入图片描述

声明

本人所有系列的文章,仅供学习,不可商用,如有侵权,请告知,立删!!!

本人主要是记录学习过程,以供自己回头复习,再就是提供给后人参考,不喜勿喷!!!

如果觉得对你有用的话,记得点赞+收藏+评论!!!

下期预告

大家有想看的吗?可以告诉我。

全网各平台同名===> “IC二舅”

下一期如果有大家想看的或者哪块不懂想学习的,可以私聊或在群里提问都可以,“二舅”肯定是知无不言言无不尽!!!

“二舅”博客:

https://blog.csdn.net/qq_40549426?spm=1019.2139.3001.5343

“二舅”精神内耗学习群
878501676

  • 1
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值