数字电路基础知识(一) 复位设计-同步复位与异步复位

基于D触发器介绍复位设计思想。

一、 同步复位

同步复位,指的是同步复位信号就是复位信号只在所需时钟边沿到来时才有效,其他时刻则无效,一般复位信号持续时间大于一个时钟周期。
verilog代码实现:

module d_ff_1(
input clk_i,rst_n_i,D,
output Q_o
    );

reg Q;
//module d_ff
always@(posedge clk_i)      //only one sensitive clk  signal to realize synchronize
begin
    if (! rst_n_i)
            Q <= 1'b0;
    else
            Q <= D;
end

assign Q_o = Q;
endmodule

测试代码testbench:

module tb_test(

    );
reg clk_i, rst_n_i,D;
wire Q;

//模块例化
d_ff_1 u1(
.clk_i(clk_i),
.rst_n_i(rst_n_i),
.D(D),
.Q_o(Q)
);

//initial
initial begin
clk_i = 0;
rst_n_i =0;
D = 1;
#18
repeat(10)
#20 rst_n_i = ~ rst_n_i;
end

always #5 clk_i = ~clk_i;
endmodule

RTL电路图:
数字电路基础知识(一) 复位设计-同步复位与异步复位_第1张图片
仿真结果:
在这里插入图片描述
可以看到在每个上升沿到来时,复位端信号置0时,输出Q都会复位置0。置位信号无效后(由0变为1),输出q只能在下一个时钟上升沿到来后,才能停止复位。

二、 异步复位

异步复位,即无论时钟边沿到来与否,只要复位信号有效输出就会被复位
verilog 代码实现:

always @ (posedge clk or negedge rst_n_i)
  if (!rst_n_i) 
  		Q <= 1'b0;
  else  
        Q <= D; 

RTL电路图:
数字电路基础知识(一) 复位设计-同步复位与异步复位_第2张图片
仿真结果:
在这里插入图片描述
可以看到 异步复位信号只要有效(由1变为0),输出q立即复位。

三、同步复位和异步复位

下面是 同步复位和异步复位比较 :
数字电路基础知识(一) 复位设计-同步复位与异步复位_第3张图片

由上表知道,同步复位中,时钟可以起到了过滤复位信号小毛刺的作用。然而,同步复位需要一个脉宽沿展器来保证复位信号有一定脉冲宽度,以确保时钟的有效沿能采样到。并且又要消耗更多的逻辑资源。而这些又可以采用异步复位解决,但是异步复位最严重的问题,如果异步复位信号在触发器时钟有效沿附近“释放”(复位信号从有效变为无效)的话,可能会导致触发器输出的亚稳态

关于亚稳态的介绍的异步复位带来的亚稳态问题解决在下一篇博客中介绍。

参考博客:https://blog.csdn.net/kobesdu/article/details/16356997

你可能感兴趣的:(数字电路基础)