计数器设计——verilog学习3

设计一个以疫苗频率闪烁的LED灯(亮灭各500ms),clk频率50MHz(20ns)

计数器:500ms\20ns=25M 换算成二进制是25位(即[24:0])

module led_flash(clk,reset,led);
    
    input clk;
    input reset;
    output reg led;
    
    reg [24:0]counter;
        
    always@(posedge clk,negedge reset)    
    if(!reset)
        counter<=0;          //非阻塞赋值 
    else if(counter==24999999) 
        counter<=0;
    else
        counter<=counter+1'd1;
     
    always@(posedge clk,negedge reset)
    if(!reset) 
        led<=0;
    else if(counter==24999999) 
        led<=!led;

//等同于下述代码
//    always@(posedge clk,negedge reset)
//    if(!reset) begin
//        counter=0;
//        led<=0;
//    end
//    else if(counter==24999999) begin
//        led<=!led;
//        counter=0;
//    end
//    else
//      counter=counter+1'd1;

endmodule

仿真验证代码

`timescale 1ns/1ns

module led_flash_tb;

    reg clk;
    reg reset;
    wire led;
    
    led_flash led_flash(
        .clk(clk),
        .reset(reset),
        .led(led)
    );
    
    initial clk=1;
    always #10 clk=!clk;
    
    initial begin
        reset=0;
        #205;
        reset=1;
        #2000000000;
        $stop;
        
    end
    
endmodule    

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值