首先,本人查找了异步复位同步释放原理网络相关资料。大都没有讲清楚相关原理性的东西,令人困恼。

现花了一天时间进行原理性的解答:理解为什么异步复位、同步释放能够实现?

首先要知道复位D触发器的工作原理,复位信号作用于最后端口也作用于触发器逻辑中间。

当复位端有效时(一般为1),复位信号直接作用于最后一级的SR锁存器(需要知道锁存器的原理以及触发器的原理,这个是电子的基础),此时触发器直接输出q为0。

当复位信号无效时(为0时),复位信号为0,不能驱动最后一级SR锁存器,此时输出q=输入的d,其中由时钟信号与复位信号共同进行控制数据的变化,使q=d。

该图为set,clr都为复位端的图,我们理解时,使用单独set进行理解。

异步复位、同步释放。

module code ( clk,rst_n,rst_n_out);
input clk;
input rst_n;
output rst_n_out;

//wire rst_n_out_n;   //输入输出没定义类型,默认是wire型
reg rst_n1;
reg rst_n2;

always @(posedge clk or negedge rst_n)
begin
    if(!rst_n)
       begin
     rst_n1 <= 1'b0;
     rst_n2 <= 1'b0;
       end
     else
       begin
       rst_n1 <= 1'b1;
       rst_n2 <= rst_n1;
        end
end

assign rst_n_out = rst_n2;

endmodule

关于异步复位同步释放原理的详细解答-LMLPHP

先以rst_n为0,复位端即为1(将此时为复位状态作起点),此时q1与q2同时由复位信号rst_n控制,直接输出为0。

当rst_n从0变为1过程中时,此时复位端变为0,将无法直接作用与触发器的输出端。此时的状态,q1由d1决定,q2由d2确定。此时由于q1有时钟上升沿与复位信号共同作用与第一触发器

,由于d1为,q1输出将根据clk来决定,而此时由于时钟与复位信号已经作用与第二触发器,此时d2为之前q1=0的状态,由于d2为0,根据D触发器的原理,无论clk为什么,q2=0,于是q2继续输出为0。

当第一触发器不满足复位信号与时钟信号的恢复时间时,即不满足第一级触发器内部延时,这个时候,第一级触发器将发生亚稳态状态,而此时第二级触发器已经上升沿完毕,

需要等下一个上升沿才能继续改变q2数据。

当亚稳态时间过去之后(亚稳态时间不会超过一个周期,超过一个周期仍然会影响到第二级触发器),下一个周期时钟来临时,此时第一触发器已经能够正常的输出为1,而第二触发器也能够直接等于d2,这时输出rst_n_out = 1,完成复位。

也就是说异步复位、同步释放的本质就是,将原本由异步复位信号在有效时能直接作用于输出端,改为延后一个周期通过在复位信号无效时进行时钟控制,即同步释放。

08-03 22:58