0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Verilog实现计数器在某个区间内循环计数,递增递减

邹逸谦 来源:邹逸谦 作者:邹逸谦 2022-04-07 17:33 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

有时候在复杂系统设计的时候会用遇到让“计数器在某个区间内来回不停递增递减”的问题。

话不多说,我们直接上代码。

以0-10的循环计数为例。

工具:Modelsim, VScode

1.准备工作

首先在电脑上新建三个文件夹,SRC、TB以及SIM,用来放置源代码、仿真文件以及仿真工程文件。

一定不要怕麻烦,特别是新手一定要注意代码的分类工作!良好的分类能够大大的提高工作效率。

刚接触代码量小,几十行代码一个文件就搞定了。但是随着从业时间的增加,工作复杂度的提升,代码的难度也会随之提升,如果不做好分类管理,面对几十个源代码,十几个仿真文件……崩溃是必然的。

请注意:一定不能有中文路径!!

poYBAGJOrDmARXC8AAA2ZMhSnLM789.png这样是错误的

pYYBAGJOrI6AVnMiAAA4VSHNhEg615.png应该这样修改

2.工程建立

  • 在src文件中添加一个.v文件,名字自拟,最好能够体现出文件的特性。
module test (
    input   sys_clk,
    input   rst_n,
   
);
    
    

    reg  flag;
    reg [7:0]  adc_data;
    
    always @(posedge sys_clk or negedge rst_n) begin
        if (~rst_n) 
            flag  <=  1'd0;
        else 
            case (flag)
                1'd0:
                    if (adc_data == 8'd9) // -1
                        flag  <=  1'd1;
                    else
                        flag  <=  1'd0;
                1'd1:
                    if (adc_data == 8'd1) // +1
                        flag  <=  1'd0;
                    else
                        flag  <=  1'd1;
                default: flag  <=  flag;
            endcase
    end

    always @(posedge sys_clk or negedge rst_n) begin
        if (~rst_n) begin
            adc_data  <=  8'd0;
        end
        else if (flag == 1'd0)
            adc_data  <=  adc_data + 8'd1;
        else if (flag == 1'd1)
            adc_data  <=  adc_data - 8'd1;
        else
            adc_data  <=  adc_data;
    end

    

endmodule 
  • 在tb文件夹中新建文件,给出仿真所需要的激励。我们此次所需的只有时钟和复位。时钟设置为50Mhz,复位1000ns。
`timescale 1 ns /1 ps
module tb_test;
reg  sys_clk;
reg  rst_n;


test  u_tb_test(
    
    .sys_clk    (sys_clk),
    .rst_n      (rst_n)
    
);
  
   initial begin
   
     sys_clk  = 0;
   
     rst_n    = 0;
    #1000;
    rst_n  =  1;
    #20000;
   end
  always  #10  sys_clk = ~ sys_clk;

endmodule
  • 在sim文件夹中新建一个Modelsim仿真工程,添加src,tb中的文件,此过程不再展示。

3.仿真验证

仿真1us,观察波形。实现了0-10直接的循环计数,设计成功。

poYBAGJOr5qAFlL0AACTavGPYfo707.png

审核编辑:符乾江

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • FPGA
    +关注

    关注

    1655

    文章

    22287

    浏览量

    630311
  • 仿真分析
    +关注

    关注

    3

    文章

    112

    浏览量

    34139
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    国产频率计数器vs进口频率计数器

    计数器
    西安同步电子科技有限公司
    发布于 :2025年11月04日 17:55:01

    频率计数器/定时 时间间隔计数器的应用领域和范围的深度解析 频率计数器模块

    精密电子测量、科研实验、工业控制等领域,时间间隔的精准测量是保障系统性能与数据可靠性的关键环节。 SYN5620A时间间隔计数器模块 作为一款集成化、高性能的测量单元,凭借其高精度、宽量程、高
    的头像 发表于 10-30 11:22 419次阅读
    频率<b class='flag-5'>计数器</b>/定时<b class='flag-5'>器</b> 时间间隔<b class='flag-5'>计数器</b>的应用领域和范围的深度解析 频率<b class='flag-5'>计数器</b>模块

    如何利用Verilog HDLFPGA上实现SRAM的读写测试

    本篇将详细介绍如何利用Verilog HDLFPGA上实现SRAM的读写测试。SRAM是一种非易失性存储,具有高速读取和写入的特点。F
    的头像 发表于 10-22 17:21 3958次阅读
    如何利用<b class='flag-5'>Verilog</b> HDL<b class='flag-5'>在</b>FPGA上<b class='flag-5'>实现</b>SRAM的读写测试

    SysTick系统滴答定时简介

    SysTick—系统定时是属于CM33内核中的一个外设,内嵌NVIC中。系统定时是一个24bit的向下递减计数器
    的头像 发表于 09-23 09:50 1335次阅读
    SysTick系统滴答定时<b class='flag-5'>器</b>简介

    雷击计数器的种类和综合选型部署解决方案

    一、雷击计数器的定义与作用 雷击计数器(Lightning Counter,又称雷电计数器、雷击记录仪)是安装在避雷针、接闪杆、SPD(浪涌保护)或下引线回路中,用于记录雷击或浪涌事
    的头像 发表于 09-11 15:28 567次阅读
    雷击<b class='flag-5'>计数器</b>的种类和综合选型部署解决方案

    Texas Instruments CD74HC4040/CD74HCT4040 12级二进制计数器数据手册

    Texas Instruments CD74HC4040/CD74HCT4040 12级二进制计数器是控制触发的高速计数器级。每个输入
    的头像 发表于 07-03 11:05 685次阅读
    Texas Instruments CD74HC4040/CD74HCT4040 12级二进制<b class='flag-5'>计数器</b>数据手册

    雷电(雷击)计数器的原理、作用及行业应用解决方案

    安全事故。雷电(雷击)计数器作为防雷系统中的重要组成部分,扮演着“记录雷击事件、辅助安全运维”的关键角色,已经成为智能防雷系统中不可或缺的一环。 二、雷电(雷击)计数器的原理 1. 工作原理 雷电计数器主要依靠电磁
    的头像 发表于 06-12 15:14 773次阅读
    雷电(雷击)<b class='flag-5'>计数器</b>的原理、作用及行业应用解决方案

    MCU定时/计数器

    RISC-V核低功耗MCU通过灵活的定时架构、低功耗模式适配及硬件级中断优化,工业控制、智能家居等场景中实现高精度计时与能耗控制的协同设计,满足复杂任务调度与实时响应的双重需求‌。 一、‌硬件
    的头像 发表于 04-27 13:54 592次阅读

    数字电路—24、计数器

    在数字电路中,能够记忆输入脉冲个数的电路称为计数器
    发表于 03-26 15:13

    KEYSIGHT是德科技53220A台式频率计计数器原安捷伦

    KEYSIGHT TECHNOLOGIES 53220A 频率计数器/定时, 350MHz 12位 100PS 53220A 350MHz通用频率计数器/计时是一款双通道频率
    的头像 发表于 02-12 17:15 798次阅读
    KEYSIGHT是德科技53220A台式频率计<b class='flag-5'>计数器</b>原安捷伦

    ‌尘埃粒子计数器有什么特点

    在当今对空气质量要求日益严苛的时代,尘埃粒子计数器作为一种高效、准确的检测工具,正逐渐成为众多领域重要的得力助手。它采用激光散射原理,以稳定的气流流速对空气进行采样,当空气中的微粒通过内部光敏
    的头像 发表于 01-24 11:44 690次阅读

    AN-831: 使用ADuC702x系列实现计数器

    电子发烧友网站提供《AN-831: 使用ADuC702x系列实现计数器.pdf》资料免费下载
    发表于 01-14 16:28 0次下载
    AN-831: 使用ADuC702x系列<b class='flag-5'>实现</b><b class='flag-5'>计数器</b>

    UC-018:时间间隔计数器的用途

    电子发烧友网站提供《UC-018:时间间隔计数器的用途.pdf》资料免费下载
    发表于 01-13 17:02 0次下载
    UC-018:时间间隔<b class='flag-5'>计数器</b>的用途

    用ADS1234作了一个4通道输入的AD,数据持续递增递减的原因是什么?

    14860开始递减递减到14830的时候又开始递增,发现了一会递增一会递减的最后除了256 还是不怎么稳定 只能求助下看看怎么回事了。之前
    发表于 12-31 07:26

    智能雷击计数器的综合行业解决方案

    智能雷击计数器 是一种用于记录雷击事件发生次数的高科技装置,广泛应用于防雷系统中。与传统的机械式雷击计数器相比,智能雷击计数器不仅能够精确记录雷击次数,还能对雷电参数进行分析,并通过智能通信模块
    的头像 发表于 12-20 10:50 861次阅读
    智能雷击<b class='flag-5'>计数器</b>的综合行业解决方案