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

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

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,延迟一个时间单位并保持。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值