• 计数器设计与应用


    计数器设计验证方案

    LED每500ms状态翻转一次。

    系统时钟位50MHZ,对应周期即为20ns,

    因为需要500ms翻转一次,即需要500_000_000/20次计数。

    新建工程

    设计输入

    module counter(clk50m,rst_n,led);
    input clk50m,rst_n;//系统时钟与全局复位
    output reg led;
    reg[24:0]cnt;//定义计数寄存器

    always@(posedge clk50m or negedge rst_n)//3-8译码器是组合逻辑,计数器是时序逻辑。
    //计数器计数进程
    if(rst_n==1'b0)
    cnt<=25'd0;
    else if (cnt==25'd24_999_999)//(500_000_000/20) -1的结果。
    cnt<=25'd0;
    else
    cnt<=cnt+1'b1;


    //led显示状态

    always@(posedge clk50m or negedge rst_n)
    if (rst_n==1'b0)
    led <=1'b1; //复位键按下去的时候灯保持常亮
    else if (cnt==25'd24_999_999)
    led <=~led;
    else
    led<=led;


    endmodule

     

    编写testbench

    `timescale 1ns/1ns
    `define clock_period 20
    module counter_tb;
    reg clk;
    reg rst_n;

    wire led;

    counter counter0(
    .clk50m(clk),
    .rst_n(rst_n),
    .led(led)
    );

    initial clk = 1;
    always #(`clock_period/2) clk = ~clk;

    initial begin
    rst_n = 1'b0;
    #(`clock_period *200);
    rst_n = 1'b1;
    #2000000000;
    $stop;
    end

    endmodule

     

    链接testbench 文件

    前仿结果:可以看出每隔500ms,LED又一次跳变。

    后仿结果也相似。

     分配管脚:

     

    程序烧写完毕。

    实验现象:开发板LED灯以1s为周期闪烁,按下按键,LED灯常亮。

     

  • 相关阅读:
    Zabbix——1
    Hive 基础知识——01
    Vim快捷命令
    Shell——2
    Shell——6
    Shell——4
    Shell——3
    Shell——1
    Hive 安装和配置以及基本语法——02
    Shell——5
  • 原文地址:https://www.cnblogs.com/noticeable/p/7191249.html
Copyright © 2020-2023  润新知