时序逻辑学习——流水灯(计数器)

功能分析

//时序逻辑  
//以1s频率闪烁的led灯,亮灭各500ms

设计输入



module led_flash(
    Clk,
    Reset_n,
    Led
);

    input Clk;
    input Reset_n;
    output reg Led;
    
    
    reg [24:0]counter;
    //计数器计数半个周期,即500ms,500_000_000ns/20ns=25_000_000次
    
    always@(posedge Clk or negedge Reset_n)
    if(!Reset_n)
        counter<=0;
    //else if (counter == 24999999)
    else if (counter == 24999)//为了便于仿真,缩短仿真时间
        counter <= 0;
    else
         counter <= counter + 1'd1;
    
    always@(posedge Clk or negedge Reset_n)
    if(!Reset_n)
       Led <= 0;
    //else if(counter==24999999)
    else if (counter == 24999)
        Led<=!Led;
    else 
        Led=Led;    
    
endmodule

功能仿真代码

`timescale 1ns/1ns

module led_flash_tb;

    reg Clk;
    reg Reset_n;
    wire Led;
    
    led_flash led_flash(
        .Clk(Clk),
        .Reset_n(Reset_n),
        .Led(Led)
    );
    
    initial Clk=1;
    always #10 Clk=!Clk;
    
    initial begin
        Reset_n=0;
        #201;
        Reset_n=1;
        #2000000000;
        $stop;
    end

endmodule

功能仿真结果

小结

计数器问题:

若要计数500ms,即500_000_000ns/20ns=25_000_000次;

则需要设置计数器计数次数为25_000_000 - 1次

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值