FPGA之异步复位同步释放信号产生(综合同步复位和异步复位的优点)

​1.同步复位:只有在时钟上升沿来的时候,复位信号才有有效。(当时钟上升沿以外的时刻都检查不到复位信号)表示:always @(posedge clk)

异步复位:无论时钟上升沿是否到来,复位信号都有效。(当时钟上升沿或者复位信号有效时,都可以判断是否复位)表示:always @(posedge clk or negedge rst)

2.同步复位:他只在时钟上升沿去判断是否复位,所以降低了亚稳态出现的概率,但会消耗FPGA更多的资源

异步复位:因为FPGA有自带的异步复位专用端口,所以节约资源。但是当时钟上升沿和复位信号一起到时,就不知道采集到的数据到底是1还是0

3.异步复位同步释放电路图

点击此处添加图片说明文字

当reset_n为0时,它连接的是reg3和reg4的清零端,所以两个输出为0,又因为它的输出连得是reg1和reg2的清零端,所以系统输出out_a和out_b为0,从而实现了复位清零的效果

当reset_n由0变为1时,在第一个时钟周期时,vcc会输入reg3,reg4保持0,第二个时钟周期时reg3和4都会变为1,所以输出就可以跳出复位信号

4.电路的代码如图所示:

代码如下:

module sync_async_rst(
    input clk,
    input rst,
    input data_a,
    input data_b,
    output out_a,
    output out_b

    
);

reg reg1,reg2;
reg reg3,reg4;
wire arst;

assign out_a = reg1;
assign out_b = reg2;
assign arst = reg4;

always @(posedge clk or negedge rst)
begin
    if(!rst)
        begin
            reg3 <= 0;
            reg4 <= 0;
        end
    else
         begin
            reg3 <= 1;
            reg4 <= reg3;
        endA
    
end

always @(posedge clk or negedge arst)
begin
    if(!arst)
        begin
            reg1 <= 0;
            reg2 <= 0;
        end
    else
         begin
            reg1 <= data_a;
            reg2 <= data_b;
        end
    
end
endmodule

5.测试文件:

`timescale 1 ns/ 1 ps
module rst_tb();
/********************系统输入**********************/
reg clk;
reg rst;
reg data_a;
reg data_b;
wire out_a;   
wire out_b;   
                                       
            

initial 
begin                                                  
    clk = 1'b1;
	rst = 1'b0; 
    data_a = 0; 
    data_b = 0; A
    #100 rst = 1'b1;
    #100 data_a = 1; 
    #100 data_b = 1;
    #100 data_a = 0; 
    #100 data_b = 1;
    #100 data_a = 1; 
    #100 data_b = 0;
    $stop;  	                 
end                                                                                                 

always #10 clk = ~clk;
 sync_async_rst sync_async_rst(
    .clk(clk),
    .rst(rst),
    .data_a(data_a),
    .data_b(data_b),
    .out_a(out_a),
    .out_b(out_b)
);                             
endmodule

 

仿真图:

点击此处添加图片说明文字

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值