verilog计数器
1. 实验目的
(1)深入了解计数器原理
(2)学习使用Verilog实现同步计数器(模八)
2.实验内容
(1)原理描述
计数器的功能是记忆脉冲个数,它是数字系统中应用最为广泛的时序逻辑构件。
下图为设计
计数器从0开始每隔25_000_000个时钟周期(0.25秒)数码管末位显示加一,最大值为7,7后复0值
(2)Verilog HDL设计源代码描述(要求:注释)
module Counter8(input wire Clk,//时钟信号E3input 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 beginoQ[3:0] = 4'b0000;cnt=25'b0;an[7:0]=8'b11111110;//控制最后一位数码管亮,其他位数码管不亮endalways@(posedge Clk)beginif(Clk==1'b0)cnt<=1'b0;else if(cnt==COUNT)//当第8隔0.25秒后计数器重新记数cnt<=25'b0;elsecnt<=cnt+1'b1;endalways@(posedge Clk) beginif(rst_n)oQ<=4'b0000;elseif(oQ == 4'b1000)oQ<=4'b0000;else if(cnt==COUNT)//判断计数器是否加一oQ<=oQ+1'b1;endalways@(*)case(oQ)4'b0000:oDisplay[6:0]=7'b1000000;//数码管显示04'b0001:oDisplay[6:0]=7'b1111001;//数码管显示14'b0010:oDisplay[6:0]=7'b0100100;//数码管显示24'b0011:oDisplay[6:0]=7'b0110000;//数码管显示34'b0100:oDisplay[6:0]=7'b0011001;//数码管显示44'b0101:oDisplay[6:0]=7'b0010010;//数码管显示54'b0110:oDisplay[6:0]=7'b0000010;//数码管显示64'b0111:oDisplay[6:0]=7'b1111000;//数码管显示7default:oDisplay[6:0]=7'b1111111;//其他情况不亮endcaseendmodule
说明:
这是一个 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 beginClk=0;rst_n=0;count = 0;endalways #10 Clk=~Clk;always #10 count=~count;endmodule
说明:
这是一个 Counter8
模块的测试台。它创建了一个时钟信号 Clk
和一个复位信号 rst_n
,并用 count
的值驱动 Counter8
模块的 count
输入。它还将 Counter8
模块的输出 oQ
和 oDisplay
连接到测试台上。
initial
块将 Clk
、rst_n
和 count
的初始值都设置为 0。两个 always
块通过每隔 10 个时间单位就交替改变 Clk
的值来创建时钟信号,并且每隔 10 个时间单位就切换 count
的值。
你可以通过运行模拟并观察模拟过程中输出 oQ
和 oDisplay
的值来使用这个测试台来测试 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
模块的输入 Clk
和 rst_n
,以及输出 oQ
分配给封装引脚 E3、M18、H17、K15 和 J13,并将这些引脚的 I/O 标准设置为 LVCMOS33。
(5)下板测试
演示视频
https://www.bilibili.com/video/BV1144y1D7GZ/?vd_source=e40d8b41352b267106c91fbabf8bba0e
复位调零
verilog计数器相关推荐
- verilog 计数器_HDLBits: 在线学习 Verilog ()
本系列文章将向大家推荐一个学习 Verilog 的好去处:HDLBits. HDLBits 在提供 Verilog 基础语法教程的同时,还能够在线仿真你的 Verilog 模块,将你的输出与正确的时序 ...
- verilog计数器分频
直接上源码: //计数器分频 module clk_gen(input clk,//50MHZinput rst_n,//清零output reg clk_1khz);reg [31:0] cnt;a ...
- Verilog计数器0~9999
题目: Build a 4-digit BCD (binary-coded decimal) counter. Each decimal digit is encoded using 4 bits: ...
- HDLBits答案(11)_Verilog计数器
Verilog计数器 HDLBits链接 前言 今天更新一个小节内容:计数器.计数器可以说是我们接触数字电路以后用的最频繁的模块之一了,无论是项目.应聘还是将来的工作,计数器都无处不在. 题库 题目描 ...
- VCS建立仿真生成DVE波形
一.环境与文件 Linux平台 csh环境 VCS 64bit 代码文件请参考<一个简单的Verilog计数器模型> 二.开始仿真 1.compiler 首先在testbench中加入如下 ...
- [文档].艾米电子 - 二进制计数器及其变体,Verilog
对读者的假设 已经掌握: 可编程逻辑基础 Verilog HDL基础 使用Verilog设计的Quartus II入门指南 使用Verilog设计的ModelSIm入门指南 内容 1 free-run ...
- 【Verilog HDL 训练】第 08 天(二进制、Johnson、环形计数器)
5月6日 计数器 1. 用verilog实现一个4bit二进制计数器. a) 异步复位 b) 同步复位 input clk, rst_n; output [3:0] o_cnt; Verilog实现代 ...
- 模24的8421BCD码计数器(Verilog HDL语言描述)(仿真与综合)
目录 前言 原理 Verilog HDL程序设计 测试代码 仿真波形图 ISE综合后 RTL Schematic Technology Schematic 前言 本博文用Verilog HDL语言描述 ...
- 级联模60计数器(Verilog HDL语言描述)(仿真与综合)
目录 前言 模60计数器 Verilog HDL语言描述 测试文件 仿真波形 RTL Schematic Technology Schematic 前言 看这篇文章前,推荐先看看模10计数器和模6计数 ...
最新文章
- 关于Iframe之间以及与父窗体的值传递
- python软件是免费的吗-谁说程序员不懂浪漫?用Python每天自动给女朋友免费发短信...
- Linux 定时任务crontab_014
- HDU - 5306 Gorgeous Sequence(吉司机线段树)
- 那些读博的女生,怎样通过“九九八十一关”?
- 程序员探案之 Python 和 Redis 的“第三者”
- [转载] Java默认构造方法
- 如何在传统 ASP 和 ASP.NET 之间共享会话状态
- Android 系统javadoc符 注释/**@hide*/
- Linux系统glibc库版本信息查看
- empty string什么错误_go语言的interface为什么好用?
- python opencv 找到圆点标定板所有点后通过距离找两个角点4
- 关于android中的armeabi、armeabi-v7a、arm64-v8a及x86等用splits用指定打包
- win7系统安装打印机驱动报错:Windows无法连接到打印机
- CDN技术详解之引言
- 阴阳日历转换 公历日期转农历 八字排日柱算法
- oracle 列转行
- html+css+js 简易笔记
- deepstream6.1-YOLOv5部署
- 算法复杂度/大O方法/渐近分析法