FPGA 异步复位同步释放 详解

上次芯动面试官问到了这个问题,回答的比较草率,这次把这个问题总结一下

首先分析一下什么是异步复位,同步复位

同步复位:只有在时钟沿到来时复位信号才起作用。

缺点是复位信号持续的时间应该超过一个时钟周期才能保证系统复位

异步复位:复位信号与时钟沿是否到来无关。

缺点是复位信号容易受到毛刺的影响。并且如果复位结束时刻恰在亚稳态窗口内时,就无法正常复位

所以为了避免同步复位和异步复位的缺点,就产生了一种“异步复位同步释放”的复位方式

异步复位同步释放:

当异步复位有效时,复位信号立刻复位

信号释放时,会在时钟上升沿来临时,才可以恢复

用一个例题来看看代码实现:使用异步复位同步释放来将输入数据a存储到寄存器中

 

clk为时钟,rst_n为低电平复位,d信号输入,dout信号输出

步骤是:

(1)设计2个复位寄存器rst0,rst1

(2)当有复位信号的时候,rst=1,rst=0需要在clk上升沿,再把rst0赋给rst1(打拍避免亚稳态)

(2)数据输出时复位信号选择rst1

代码如下:

`timescale 1ns/1ns


module ali16(
input  wire clk,
input  wire rst_n,
input  wire d,
output reg dout
 );
 
reg rst0,rst1;//定义2个复位信号寄存器

always @ (posedge clk or negedge rst_n) begin
	if (!rst_n) begin
		rst0 <= 0;
	    rst1 <= 0;
	end
	else begin
		rst0 <= 1;    //异步复位
		rst1 <= rst0; //同步释放
	end
end
 
            
always @ (posedge clk or negedge rst1)begin//数据输出的时候用新的复位信号
        if(!rst1) begin
			dout <= 1'b0;
		end
        else begin 
 			dout <= d; 
		end		 
end            

            
endmodule 

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值