FPGA-计数器的实现

这篇具有很好参考价值的文章主要介绍了FPGA-计数器的实现。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

  • 计数器是依托时钟实现的,在时钟沿(一般在上升沿)进行检测,实现计数加1;
  • 计数是从0开始计数的,所以计数值为(M-1),其中M为计数的值。比如计数到10,我们实现时到9即可;
  • 这里为计数器的第一种实现方法,该方法非最优方法,我们只需要了解即可,后续我们会介绍另一种方法,可以将两种方案作对比学习。
  • 实验:
    • 依托板子上的LED灯为例进行讲解,RTL代码都是一样的,针对具体的开发板只需要进行引脚的配置,注意时钟晶振的差别。
    • 实验要求:LED灯亮0.5s,灭0.5s,循环操作。
  • 波形绘制FPGA-计数器的实现,FPGA,fpga开发
  • RTL代码
    //计数器 
    
    module counter
    #(
    parameter CNT_MAX = 25'd24_999_999//可以作为实例化中参数传递的接口
    )
    (
        input wire Sys_Clk,
        input wire Sys_Rst_n,
        
        output reg Led_out
    );
    
    //参数定义
    //parameter既可以使用在模块内部,还可以写在模块的开始
    //parameter CNT_MAX = 25'd24_999_999; //0.5秒的计时需要的时钟周期个数(时钟从0开始计数)
    //localparam CNT_MAX = 25'd24_999_999;//只能使用在模块内部
    
    reg [24:0] Cnt;
    
    always@(posedge Sys_Clk or negedge Sys_Rst_n)
        if(Sys_Rst_n == 1'b0)
                Cnt <= 25'd0;
        else if(Cnt == CNT_MAX)
                Cnt <= 25'd0;
        else
           Cnt <= Cnt +25'd1; 
        
    always@(posedge Sys_Clk or negedge Sys_Rst_n)
        if(Sys_Rst_n == 1'b0)
            Led_out <= 1'b0;
        else if(Cnt == CNT_MAX)
            Led_out <= ~Led_out;
        else
            Led_out <= Led_out;
    
    /* module Counter
    #(
        .CNT_MAX(100),//具体这里传进去的为准,原来的和默认参数类似
    )
    (
        .Sys_Clk    (Sys_Clk),
        .Sys_Rst_n  (Sys_Rst_n),
        .Led_out    (Led_out)
    ); */
    
    endmodule
  • 仿真代码
    `timescale 1ns / 1ns
    
    module counter_tb();
    
    
    reg sys_clk;
    reg sys_rst_n;
    
    wire led_out;
    
    initial
        begin
            sys_clk <= 1'b1;
            sys_rst_n <= 1'b0;
            #20
            sys_rst_n <= 1'b1;
        end
    always #10 sys_clk = ~sys_clk;
    
    counter 
    #(
        .CNT_MAX(25'd24)//可以作为实例化中参数传递的接口
    )
    counter_inst //注意这里的实例化模块名放在parameter参数后面写
    (
        .Sys_Clk    (sys_clk),
        .Sys_Rst_n  (sys_rst_n),
                    
        .Led_out    (led_out)
    );
    
    endmodule

---------------------------------------------------------------------------------------------------------------------------------文章来源地址https://www.toymoban.com/news/detail-761201.html

  •  第二种方法实现计数器(推荐使用)
    • 绘制波形FPGA-计数器的实现,FPGA,fpga开发
    • RTL代码
      //计数器 
      
      module counter
      #(
      parameter CNT_MAX = 25'd24_999_999//可以作为实例化中参数传递的接口
      )
      (
          input wire Sys_Clk,
          input wire Sys_Rst_n,
          
          output reg Led_out
      );
      
      //参数定义
      //parameter既可以使用在模块内部,还可以写在模块的开始
      //parameter CNT_MAX = 25'd24_999_999; //0.5秒的计时需要的时钟周期个数(时钟从0开始计数)
      //localparam CNT_MAX = 25'd24_999_999;//只能使用在模块内部
      
      reg [24:0] Cnt;
      reg cnt_flag;
      
      always@(posedge Sys_Clk or negedge Sys_Rst_n)
          if(Sys_Rst_n == 1'b0)
                  Cnt <= 25'd0;
          else if(Cnt == CNT_MAX)
                  Cnt <= 25'd0;
          else
             Cnt <= Cnt +25'd1; 
      	   
      always@(posedge Sys_Clk or negedge Sys_Rst_n)
      	if(!Sys_Rst_n)
      		cnt_flag <= 1'b0;
      	else if(cnt == (CNT_MAX - 25'd1))
      		cnt_flag <= 1'b1;
      	else
      		cnt_flag < 1'b0;
          
      always@(posedge Sys_Clk or negedge Sys_Rst_n)
          if(Sys_Rst_n == 1'b0)
              Led_out <= 1'b0;
          else if(cnt_flag == 1'b1)
              Led_out <= ~Led_out;
          else
              Led_out <= Led_out;
      
      /* module Counter
      #(
          .CNT_MAX(100),//具体这里传进去的为准,原来的和默认参数类似
      )
      (
          .Sys_Clk    (Sys_Clk),
          .Sys_Rst_n  (Sys_Rst_n),
          .Led_out    (Led_out)
      ); */
      
      endmodule
    • RTL仿真代码同第一种方法。
    • Modsim仿真波形FPGA-计数器的实现,FPGA,fpga开发

到了这里,关于FPGA-计数器的实现的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • 【FPGA】Verilog:升降计数器 | 波纹计数器 | 约翰逊计数器 | 实现 4-bit 升降计数器的 UP/DOWN

    【FPGA】Verilog:升降计数器 | 波纹计数器 | 约翰逊计数器 | 实现 4-bit 升降计数器的 UP/DOWN

    目录 Ⅰ. 理论部分 0x00 升降计数器(UP DOWN Counter) 0x01 波纹计数器(Ripple Counter)

    2024年02月05日
    浏览(16)
  • 实现十进制计数器EDA|FPGA

    实现十进制计数器EDA|FPGA

    实验内容 有限状态机设计:实现十进制计数器 实验目的 有限状态机设计:实现十进制计数器 软件流程(硬件连接) ①新建工程 ②创建半加器原理图 ③将设计项目设置成可调用的元件 ④尝试运行代码 ⑤新建文件输出代码的波形  四、代码  五、实验结果及分析  

    2024年02月03日
    浏览(6)
  • Verilog语言实现FPGA上的计数器

    Verilog语言实现FPGA上的计数器 计数器是数字电路中经常使用的基本元素之一,它用于生成指定脉冲数量或者指定计数范围内的计数信号。在现代数字电路设计中,FPGA(Field Programmable Gate Array)作为一种可编程逻辑器件被广泛应用,可以通过Verilog语言来实现计数器模块。 在V

    2024年02月05日
    浏览(6)
  • FPGA设计开发(基础课题):74LS160计数器芯片设计

    FPGA设计开发(基础课题):74LS160计数器芯片设计

    一、设计目的 1、学会用HDL语言设计时序电路; 2、用HDL语言设计74LS160计数器芯片的数字功能。 二、设计原理 计数器是最常用的寄存器逻辑电路,从微处理器的地址发生器到频率计都需要用到计数器。一般计数器可以分为两类:加法计数器和减法计数器。加法计数器每来一个

    2024年02月08日
    浏览(7)
  • 【LabVIEW FPGA入门】使用数字IO卡实现计数器输入功能

    【LabVIEW FPGA入门】使用数字IO卡实现计数器输入功能

            1.首先需要用一个数字IO的输入FPGA端口,并将其拖入程序框图中,同时创建一个循环。                  2.如果想要在循环中实现累加功能,就可以使用移位寄存器。         数字输入的当前值和历史值进行比较,用于一个判断大于,来确定是否出现了上升沿

    2024年01月20日
    浏览(8)
  • 【FPGA】时序逻辑电路——基于计数器实现一个以1秒频率闪烁的LED灯

    【FPGA】时序逻辑电路——基于计数器实现一个以1秒频率闪烁的LED灯

    1 D触发器 分析: 特性:输出端Q只在CK处于上升沿的时候变化 图中波形的形成过程: 当D处于高电平时,CK未处于上升沿时,Q仍处于低电平 当CK来到上升沿,Q需要根据D发生变化,由于D是高电平,所以Q要从低电平变化成高电平 D从高电平变化成低电平,但是此时CK未来到上升沿

    2024年02月09日
    浏览(8)
  • FPGA拾忆_(3):调用IP 计数器&BCD计数器

    FPGA拾忆_(3):调用IP 计数器&BCD计数器

    调用IP计数器: 每来一个cin(进位输入)信号,计数器输出值加一,当计数值为9且cin为1时,输出一个时钟长度的cout(进位输出)信号。 首先采用调用quartus种IP的方式,具体步骤: Tools----IP Catalog: 然后会调出IP目录窗口: 通过搜索counter来添加计数器模块,需要设置的内容

    2024年02月03日
    浏览(10)
  • fpga[1]计数器(附源码)

    fpga[1]计数器(附源码)

    计数器电路是在数字电子技术中应用的最多的时序逻辑电路。计数器不仅能用于对时钟脉冲计数,还可以用于分频、定时、产生节拍脉冲和脉冲序列以及进行数字运算等。 在许多大型电路中必然有计数器电路的身影,可以说了解并掌握计数器的设计方法是学习fpga的第一步。

    2023年04月25日
    浏览(6)
  • FPGA实验二:模可变计数器设计

    目录 一、实验目的 二、实验要求 三、实验代码 1.实验源码

    2024年02月12日
    浏览(27)
  • 【FPGA】Verilog:时序电路设计 | 二进制计数器 | 计数器 | 分频器 | 时序约束

    【FPGA】Verilog:时序电路设计 | 二进制计数器 | 计数器 | 分频器 | 时序约束

    前言: 本章内容主要是演示Vivado下利用Verilog语言进行电路设计、仿真、综合和下载 示例:计数器与分频器   ​​ 功能特性: 采用 Xilinx Artix-7 XC7A35T芯片  配置方式:USB-JTAG/SPI Flash 高达100MHz 的内部时钟速度  存储器:2Mbit SRAM   N25Q064A SPI Flash(样图旧款为N25Q032A) 通用

    2024年02月02日
    浏览(15)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包