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 模块的输出 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计数器相关推荐

  1. verilog 计数器_HDLBits: 在线学习 Verilog ()

    本系列文章将向大家推荐一个学习 Verilog 的好去处:HDLBits. HDLBits 在提供 Verilog 基础语法教程的同时,还能够在线仿真你的 Verilog 模块,将你的输出与正确的时序 ...

  2. verilog计数器分频

    直接上源码: //计数器分频 module clk_gen(input clk,//50MHZinput rst_n,//清零output reg clk_1khz);reg [31:0] cnt;a ...

  3. Verilog计数器0~9999

    题目: Build a 4-digit BCD (binary-coded decimal) counter. Each decimal digit is encoded using 4 bits: ...

  4. HDLBits答案(11)_Verilog计数器

    Verilog计数器 HDLBits链接 前言 今天更新一个小节内容:计数器.计数器可以说是我们接触数字电路以后用的最频繁的模块之一了,无论是项目.应聘还是将来的工作,计数器都无处不在. 题库 题目描 ...

  5. VCS建立仿真生成DVE波形

    一.环境与文件 Linux平台 csh环境 VCS 64bit 代码文件请参考<一个简单的Verilog计数器模型> 二.开始仿真 1.compiler 首先在testbench中加入如下 ...

  6. [文档].艾米电子 - 二进制计数器及其变体,Verilog

    对读者的假设 已经掌握: 可编程逻辑基础 Verilog HDL基础 使用Verilog设计的Quartus II入门指南 使用Verilog设计的ModelSIm入门指南 内容 1 free-run ...

  7. 【Verilog HDL 训练】第 08 天(二进制、Johnson、环形计数器)

    5月6日 计数器 1. 用verilog实现一个4bit二进制计数器. a) 异步复位 b) 同步复位 input clk, rst_n; output [3:0] o_cnt; Verilog实现代 ...

  8. 模24的8421BCD码计数器(Verilog HDL语言描述)(仿真与综合)

    目录 前言 原理 Verilog HDL程序设计 测试代码 仿真波形图 ISE综合后 RTL Schematic Technology Schematic 前言 本博文用Verilog HDL语言描述 ...

  9. 级联模60计数器(Verilog HDL语言描述)(仿真与综合)

    目录 前言 模60计数器 Verilog HDL语言描述 测试文件 仿真波形 RTL Schematic Technology Schematic 前言 看这篇文章前,推荐先看看模10计数器和模6计数 ...

最新文章

  1. 关于Iframe之间以及与父窗体的值传递
  2. python软件是免费的吗-谁说程序员不懂浪漫?用Python每天自动给女朋友免费发短信...
  3. Linux 定时任务crontab_014
  4. HDU - 5306 Gorgeous Sequence(吉司机线段树)
  5. 那些读博的女生,怎样通过“九九八十一关”?
  6. 程序员探案之 Python 和 Redis 的“第三者”
  7. [转载] Java默认构造方法
  8. 如何在传统 ASP 和 ASP.NET 之间共享会话状态
  9. Android 系统javadoc符 注释/**@hide*/
  10. Linux系统glibc库版本信息查看
  11. empty string什么错误_go语言的interface为什么好用?
  12. python opencv 找到圆点标定板所有点后通过距离找两个角点4
  13. 关于android中的armeabi、armeabi-v7a、arm64-v8a及x86等用splits用指定打包
  14. win7系统安装打印机驱动报错:Windows无法连接到打印机
  15. CDN技术详解之引言
  16. 阴阳日历转换 公历日期转农历 八字排日柱算法
  17. oracle 列转行
  18. html+css+js 简易笔记
  19. deepstream6.1-YOLOv5部署
  20. 算法复杂度/大O方法/渐近分析法

热门文章

  1. 2.3 二进制乘法运算(定点原码两位乘)
  2. WordPress美女写真源码 带搭建和采集教程
  3. 麻烦攻克食材串味难题!保姆级除味妙招请查收
  4. 云栖大会人脸识别闸机【技术亮点篇7】--人脸识别闸机可挑战12万组人脸数据
  5. Intercultural Communication 跨文化交际_摘要
  6. 剑指Offer——顺时针遍历矩阵
  7. 【调度】经典作业车间调度问题VS柔性作业车间调度问题
  8. 温习翻阅必备---java筑基期知识大全--“基础不牢,地动山摇”
  9. ffmpeg工具的简单使用
  10. C++ 队列(queue)简介