verilog计数器

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

1. 实验目的

(1)深入了解计数器原理

(2)学习使用Verilog实现同步计数器(模八)

2.实验内容

(1)原理描述

计数器的功能是记忆脉冲个数,它是数字系统中应用最为广泛的时序逻辑构件。

下图为设计

计数器从0开始每隔25_000_000个时钟周期(0.25秒)数码管末位显示加一,最大值为7,7后复0值

verilog计数器

 


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

(2)Verilog HDL设计源代码描述(要求:注释)

module Counter8(

input wire Clk,//时钟信号E3

input wire rst_n,//复位信号 置零

output reg [3:0] oQ,

output reg [6:0] oDisplay,//控制数码管亮段

output reg [7:0] an//控制数码管位数

// input wire count

);



parameter COUNT = 25'd24_999_999;//每隔0.25秒计数器加一

reg[24:0] cnt;//计数

initial begin

oQ[3:0] = 4'b0000;

cnt=25'b0;

an[7:0]=8'b11111110;//控制最后一位数码管亮,其他位数码管不亮

end



always@(posedge Clk)begin

if(Clk==1'b0)

cnt<=1'b0;

else if(cnt==COUNT)//当第8隔0.25秒后计数器重新记数

cnt<=25'b0;

else

cnt<=cnt+1'b1;

end



always@(posedge Clk) begin

if(rst_n)

oQ<=4'b0000;

else

if(oQ == 4'b1000)

oQ<=4'b0000;

else if(cnt==COUNT)//判断计数器是否加一

oQ<=oQ+1'b1;

end

always@(*)

case(oQ)

4'b0000:oDisplay[6:0]=7'b1000000;//数码管显示0

4'b0001:oDisplay[6:0]=7'b1111001;//数码管显示1

4'b0010:oDisplay[6:0]=7'b0100100;//数码管显示2

4'b0011:oDisplay[6:0]=7'b0110000;//数码管显示3

4'b0100:oDisplay[6:0]=7'b0011001;//数码管显示4

4'b0101:oDisplay[6:0]=7'b0010010;//数码管显示5

4'b0110:oDisplay[6:0]=7'b0000010;//数码管显示6

4'b0111:oDisplay[6:0]=7'b1111000;//数码管显示7

default:

oDisplay[6:0]=7'b1111111;//其他情况不亮

endcase

endmodule

说明:

        

这是一个 Verilog 模块,它实现了一个从 0 到 8 的数字计数器,并将计数显示在七段数码管上。计数器每隔 0.25 秒就会自动增加 1,这一点由参数 COUNT 确定。

输入 Clk 是时钟信号,输入 rst_n 是复位信号。当 rst_n 为低电平时,计数器会被重置为 0。输出 oQ 是一个 4 位的向量,保存当前计数值。输出 oDisplay 是一个 7 位的向量,控制七段数码管的各个段来显示计数值。输出 an 是一个 8 位的向量,控制哪个七段数码管的数字位应该被打开。

在这个模块中有两个 always 块。第一个块在时钟信号 Clk 上升沿触发,更新计数器 cnt 的值。如果计数器已经到达最大值 COUNT,它就会被重置为 0。否则,它就会增加 1。第二个 always 块也在时钟信号 Clk 上升沿触发,更新输出 oQ 的值。如果复位信号 rst_n 为高电平,输出就会被重置为 0。否则,如果输出 oQ 已经到达最大值 9,它就会被重置为 0。否则,如果计数器 cnt 已经到达最大值 COUNT,输出 oQ 就会增加 1。

还有一个 case 语句,根据输出 oQ 的值为输出 oDisplay 赋值。每个 oQ 的值对应着七段数码管上特定的一组亮段模式,用于显示一个特定的数字。如果 oQ 有任何其他值,所有的段都会被关闭。

(3)TestBeach仿真代码及仿真结果        

module test();

reg Clk;

reg rst_n;

reg count;

wire [2:0] oQ;

wire [6:0] oDisplay;

Counter8 counter(.Clk(Clk),

.oDisplay(oDisplay),

.rst_n(rst_n),

.oQ(oQ),

.count(count)

);

initial begin

Clk=0;

rst_n=0;

count = 0;

end

always #10 Clk=~Clk;

always #10 count=~count;

endmodule


verilog计数器

说明:

这是一个 Counter8 模块的测试台。它创建了一个时钟信号 Clk 和一个复位信号 rst_n,并用 count 的值驱动 Counter8 模块的 count 输入。它还将 Counter8 模块的输出 oQoDisplay 连接到测试台上。

initial 块将 Clkrst_ncount 的初始值都设置为 0。两个 always 块通过每隔 10 个时间单位就交替改变 Clk 的值来创建时钟信号,并且每隔 10 个时间单位就切换 count 的值。

你可以通过运行模拟并观察模拟过程中输出 oQoDisplay 的值来使用这个测试台来测试 Counter8 模块的行为。

 

(4)XDC文件配置

set_property PACKAGE_PIN L18 [get_ports {oDisplay[6]}]

set_property PACKAGE_PIN T11 [get_ports {oDisplay[5]}]

set_property PACKAGE_PIN P15 [get_ports {oDisplay[4]}]

set_property PACKAGE_PIN K13 [get_ports {oDisplay[3]}]

set_property PACKAGE_PIN K16 [get_ports {oDisplay[2]}]

set_property PACKAGE_PIN R10 [get_ports {oDisplay[1]}]

set_property PACKAGE_PIN T10 [get_ports {oDisplay[0]}]

set_property IOSTANDARD LVCMOS33 [get_ports {oDisplay[6]}]

set_property IOSTANDARD LVCMOS33 [get_ports {oDisplay[5]}]

set_property IOSTANDARD LVCMOS33 [get_ports {oDisplay[4]}]

set_property IOSTANDARD LVCMOS33 [get_ports {oDisplay[3]}]

set_property IOSTANDARD LVCMOS33 [get_ports {oDisplay[2]}]

set_property IOSTANDARD LVCMOS33 [get_ports {oDisplay[1]}]

set_property IOSTANDARD LVCMOS33 [get_ports {oDisplay[0]}]

set_property IOSTANDARD LVCMOS33 [get_ports {oQ[2]}]

set_property IOSTANDARD LVCMOS33 [get_ports {oQ[1]}]

set_property IOSTANDARD LVCMOS33 [get_ports {oQ[0]}]

set_property IOSTANDARD LVCMOS33 [get_ports Clk]

set_property IOSTANDARD LVCMOS33 [get_ports rst_n]

set_property PACKAGE_PIN E3 [get_ports Clk]

set_property PACKAGE_PIN M18 [get_ports rst_n]

set_property PACKAGE_PIN H17 [get_ports {oQ[0]}]

set_property PACKAGE_PIN K15 [get_ports {oQ[1]}]

set_property PACKAGE_PIN J13 [get_ports {oQ[2]}]

 说明

这是一系列 Xilinx 工具链中的命令,它们将 FPGA 的物理封装引脚分配给 Counter8 模块的输入和输出端口。前七个命令分别将 Counter8 模块的输出 oDisplay 分配给封装引脚 L18、T11、P15、K13、K16、R10 和 T10。接下来的七个命令将这些引脚的 I/O 标准设置为 LVCMOS33。最后的五个命令分别将 Counter8 模块的输入 Clkrst_n,以及输出 oQ 分配给封装引脚 E3、M18、H17、K15 和 J13,并将这些引脚的 I/O 标准设置为 LVCMOS33。

(5)下板测试

演示视频

https://www.bilibili.com/video/BV1144y1D7GZ/?vd_source=e40d8b41352b267106c91fbabf8bba0e


 


verilog计数器


 

复位调零

verilog计数器


 


 

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

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

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

相关文章

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

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

    2024年02月05日
    浏览(39)
  • 北邮22级信通院数电:Verilog-FPGA(11)第十一周实验(1)用JK触发器实现8421码十进制计数器

    北邮22信通一枚~ 跟随课程进度更新北邮信通院数字系统设计的笔记、代码和文章 持续关注作者 迎接数电实验学习~ 获取更多文章,请访问专栏: 北邮22级信通院数电实验_青山如墨雨如画的博客-CSDN博客 目录 一.代码部分 1.1  JK_8421.v 1.2  JK_ff.v 1.3  debounce.v 二.管脚分配 三.实

    2024年02月05日
    浏览(37)
  • verilog计数器

    (1) 深入了解计数器原理 (2) 学习使用 Verilog 实现同步计数器 ( 模八) 计数器的功能是记忆脉冲个数,它是数字系统中应用最为广泛的时序逻辑构件。 下图为设计 计数器从0开始每隔25_000_000个时钟周期(0.25秒)数码管末位显示加一,最大值为7,7后复0值              这

    2024年02月05日
    浏览(52)
  • Verilog实现按键计数器

    一、简介 计数器我们都知道,这里我们旨在使用Verilog HDL 来实现按键计数器的操作,功能有: 1、按下一个键,计数加一(+1); 2、按下另一个键,计数减一(-1); 3、按下复位键,则计数清零。 4、最多计数60次。 二、 代码实现 我们使用了两个模块,第一个是按键消抖模

    2024年02月04日
    浏览(27)
  • 【Verilog基础】7.计数器

    如果是电平触发的话,只需要把posedge clk 换成reset or clk 就可以了; Johnson 计数器是一种数字电路, 具有以反馈方式连接的一系列触发器。 如果位数为N,则Verilog Johnson计数器是对2N个状态进行计数的计数器。 该电路是一种特殊类型的移位寄存器, 中最后一个触发 器的补码输出

    2024年02月13日
    浏览(35)
  • verilog手撕代码5——计数器(置位、加减、环形、扭环形、格雷码计数器实现)

    2023.5.12 编写一个十六进制计数器模块,计数器输出信号递增每次到达0,给出指示信号 zero ,当置位信号 set 有效时,将当前输出置为输入的数值 set_num 。 注意 :这里zero=1和num=0是同一拍输出的,按道理如果根据num=0,然后去输出zero=1应该延迟一拍。所以这里考虑将number延迟一

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

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

    2024年02月02日
    浏览(47)
  • 【Verilog异步清零计数器】

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 本人只是初学,代码经过实验验证,仅供参考 我自己查找模仿编写运行的代码,如有侵权,联系删除。 这是异步清零+控制加减法+进位指示灯的计数器 代码如下(示例): 这个程序适合已经了解书本例

    2024年02月11日
    浏览(34)
  • Verilog基础之十、计数器实现

    目录 一、前言 二、工程设计 2.1 设计代码 2.2 综合结果 ​2.3 仿真结果     计数器是较为基础的逻辑,很多其他逻辑可依靠计数器实现,如控制器,分频。原理为通过统计时钟脉冲的个数来输出计数值。 工程设计以计数20的计数器为例 测试代码 综合后的网表可知,6位的计

    2024年02月09日
    浏览(37)
  • 任意进制计数器12进制计数数码管显示verilog代码

    名称:任意进制计数器12进制计数数码管显示verilog代码 软件:VIVADO 语言:Verilog 代码功能: 设计一个12进制计数器,计数值00-11需要在数码管上显示, 时钟脉冲通过按键开关设计。 电路的输入信号en进行清零。 本代码可以修改为任意进制计数器,即修改计数控制模块的红框

    2024年02月04日
    浏览(42)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包