我是靠谱客的博主 有魅力雪糕,最近开发中收集的这篇文章主要介绍数字电路基础知识(三) 复位设计-异步复位,同步释放,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

数字电路基础知识(三) 复位设计-异步复位,同步释放

一、基本电路原理

同步电路中的亚稳态完全可以避免。异步电路中的亚稳态无法回避,只能力求将影响降到可容忍的范围内。
所以基于之前基于亚稳态采用异步置位同步释放的实现如下(网络图片,侵删)
在这里插入图片描述
下面分析此电路如何实现异步复位和同步释放的

异步复位:显而易见,rst_async_n异步复位后,rst_sync_n将拉低,即实现异步复位。

同步释放:这个是关键,看如何实现同步释放,即当复位信号rst_async_n撤除时,由于双缓冲电路的作用,rst_sync_n复位信号不会随着rst_async_n的撤除而撤除。

假设rst_async_n撤除时发生在clk上升沿,如果不加此电路则可能发生亚稳态事件。但是加上此电路以后,假设第一级D触发器clk上升沿时rst_async_n正好撤除,则D1触发器输出高电平“1”,此时第二级触发器也会更新输出,但是输出值为前一级触发器次clk来之前时的Q1输出状态。显然Q1之前为低电平,顾第二级触发器输出保持复位低电平,直到下一个clk来之后,才随着变为高电平。即同步释放。

二、vivado用verilog实现

  1. verilog实现:
//Asynchronous reset, synchronous release 
module d_ff_syncro(
input clk_i,rst_n_i,
output rst_o);   
reg reg_1;
reg reg_2;

//module d_ff
always@(posedge clk_i or negedge rst_n_i)      //only clk signal synchronizing 
begin
    if (! rst_n_i)
    begin
            reg_1 <= 1'b0;
            reg_2 <= 1'b0;
    end
    else
    begin
            reg_1 <= 1'b1;  			//high level, two dff
            reg_2 <= reg_1;
    end
end
assign rst_o = reg_2;
endmodule
  1. RTL电路实现如下:
    在这里插入图片描述

  2. 在异步复位中的同步释放电路
    在这里插入图片描述

  3. RTL电路实现简单的电路
    在这里插入图片描述
    利用前面两级触发器实现。需要注意的地方有如下几点:
    1.第一级触发器的数据端口是接电源,即高电平1’b1
    2.第一级触发器的输出,不能使用,因为仍存在亚稳态的危险。两级触发器做同步,是非总线信号的最常见异步处理方法。总线信号的异步处理方法,常见的是异步FIFO实现。第一级触发器的输出,永远存在亚稳态的可能。 当第一级触发器采样异步输入之后,允许输出出现的亚稳态可以长达一个周期,在这个周期内,亚稳态特性减弱。在第二个时钟沿到来时,第二级同步器采样,之后才把该信号传递到内部逻辑中去。第二级输出是稳定且已被同步了的。如果在第二级采样时保持时间不够,第一级的输出仍然处于很强的亚稳态,将会导致第二级同步器也进入亚稳态,但这种故障出现的概率比较小。
    3. 采用两级的触发器设计并不能完全消除亚稳态,知识大大降低出现亚稳态的概率,通常来说,两级的触发器设计能够满足设计的要求。
    参考博文:https://blog.csdn.net/dongdongnihao_/article/details/79827076

最后

以上就是有魅力雪糕为你收集整理的数字电路基础知识(三) 复位设计-异步复位,同步释放的全部内容,希望文章能够帮你解决数字电路基础知识(三) 复位设计-异步复位,同步释放所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(60)

评论列表共有 0 条评论

立即
投稿
返回
顶部