FPGA学习日记(6)同步复位与异步复位

该博客介绍了同步复位和异步复位的概念及其在FPGA设计中的实现。同步复位只在时钟上升沿有效,确保了数据在稳定时钟边沿转换,而异步复位则在复位信号下降沿即生效,不受时钟控制,可用于快速响应系统复位需求。文中通过Verilog代码示例展示了两种复位方式如何影响信号延迟和系统状态。
摘要由CSDN通过智能技术生成

同步复位就是指复位信号只有在时钟上升沿到来时,才能有效

module flip_flop
(   input wire sys_clk,
    input wire sys_rset_n,
    input wire key_in,
    
    output reg led_out

);

always@(posedge sys_clk )//上升沿,同步复位
    if(sys_rset_n == 1'b0)
        led_out<= 1'b0;
    else 
        led_out<= key_in;
endmodule

仅在时钟信号的上升沿时刻  led_out=key_in  延迟一个单位

测试文件

`timescale 1ns/1ns 
module tb_flip_flop();
reg sys_clk;
reg sys_rset_n;
reg key_in;

wire led_out;

initial 
    begin
        sys_clk=1'b1;
        sys_rset_n<=1'b0;
        key_in=1'b0;
        #20
        sys_rset_n<=1'b1;
        #210
        sys_rset_n<=1'b0;
        #40
        sys_rset_n<=1'b1;
    end

always #10 sys_clk=~sys_clk;

always #20 key_in<={$random}%2;

initial 
    begin
        $timeformat(-9,0,"ns",6);  //时间尺度10e-9ns,小数点后位数0,   打印的最小数字字符
        $monitor("@time %t:key_in=%b led_out=%b ",$time,key_in,led_out);
    end
    
flip_flop flip_flop_inst
(
    .sys_clk(sys_clk),
    .sys_rset_n(sys_rset_n),
    .key_in(key_in),
    
    .led_out(led_out)
);


endmodule

异步复位是指无论时钟沿是否到来,只要复位信号有效,就对系统进行复位。

module flip_flop
(   input wire sys_clk,
    input wire sys_rset_n,
    input wire key_in,
    
    output reg led_out

);

always@(posedge sys_clk or negedge sys_rset_n)//时钟上升沿或者复位信号的下降沿执行,异步复位
    if(sys_rset_n == 1'b0)
        led_out<= 1'b0;
    else 
        led_out<= key_in;
endmodule

寄存器一次延迟

led_out 为key_in延迟一次,在复位信号有效时,上升沿到来,led_out=key_in,并延迟一个单位,在复位信号的下降沿,led_out=key_in,为低电平。

直到复位信号再次变为高电平后,等待时钟信号的上升沿时刻,led_out=key_in,延迟一个时间单位并保持。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值