ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

常见计数器

2021-07-11 16:35:04  阅读:204  来源: 互联网

标签:count 仿真 cnt clk 常见 计数器 rst


这篇博客来介绍一些常见的计数器。话不多少,直接上代码。

第一种:

rtl可综合电路

//**************************************************************************
// *** 名称 : count.v
// *** 作者 : 南明离火hk
// *** 博客 : https://www.cnblogs.com/jing-shui-liu-shen/
// *** 日期 : 2021-07-08
// *** 描述 : 计数器模块
//**************************************************************************

module count (clk,rst_n,led)    ;
    input               clk     ;                    //输入50M的时钟
    input               rst_n   ;                    //输入复位信号
    output  reg        led     ;                    //输出ied信号

    reg     [1:0]    cnt        ;                    //定义变量cnt的数据类型和数据位

//--------------------------------------------------------------- 
//                      计数模块
//---------------------------------------------------------------
always@(posedge clk or negedge rst_n) begin
    if(!rst_n)                                       //复位信号拉低
      cnt <= 2'b0;                                  //复位时,变量cnt置为0
    else if(cnt==3)                                  //当变量cnt为3时
        cnt <= 2'b0;                                 //变量cnt置为0
    else                                             //其它情况
        cnt <= cnt + 2'b1;                           //变量cnt+1
end

//--------------------------------------------------------------- 
//                      led模块
//---------------------------------------------------------------
always@(posedge clk or negedge rst_n) begin
    if(!rst_n)                                       //复位信号拉低
        led <= 1'b0;                                 //复位时,变量led置为0
    else if(cnt==2'd3)                               //当变量cnt为3时
        led <= 1'b1;                                 //变量led置为1
    else                                             //其它情况
        led <= 1'b0;                                 //变量led置为1
end

endmodule 

 

testbench

//**************************************************************************
// *** 名称 : count_tb.v
// *** 作者 : 南明离火hk
// *** 博客 : https://www.cnblogs.com/jing-shui-liu-shen/
// *** 日期 : 2021-07-08
// *** 描述 : 计数器仿真模块
//**************************************************************************

`timescale 1ns/1ps            //·timescale 定义仿真时间单位与精度,1ns是时间单位,即在仿真中用#10表示延迟10ns
                              //1ps表示时间精度,比如你写 #3.5547968525 a <= 1;c <= 1;,那么它时间精度也只会有1ps(即在3.555ns时赋值语句便生效)。
`define clock_period 20       //时钟周期为20ns,也就是频率为50MHz

module count_tb;              //在testbench中,输入都是要自己定义的,所以输入信号都是reg,而输出则是wire信号

    reg clk;                  //定义reg型的clk
    reg rst_n;                //定义reg型的rst_n
    
    wire led;                 //定义wire型的rst_n

    count u_count(            //把写好的计数器模块例化进来
        .clk(clk),
        .rst_n(rst_n),
        .led(led)
    );
    
    initial clk = 1;                         //定义clk信号的初始值为1
    always #(`clock_period/2) clk = ~clk;    //每隔半个时钟周期,clk的值变化一次
    
    initial begin
        rst_n = 1'b0;                        //一开始,令复位信号rst_n拉低,表示复位状态有效
        #(`clock_period *10);                //经过10个时钟周期之后
        rst_n = 1'b1;                        //令复位信号rst_n拉高,表示复位状态无效
        #(`clock_period *10);                //经过10个时钟周期之后
        $stop;                               //停止
    end
    
endmodule

 

标签:count,仿真,cnt,clk,常见,计数器,rst
来源: https://www.cnblogs.com/jing-shui-liu-shen/p/14998822.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有