【verilog】计数器
理论学习
计数器实现的是计数,计数是一种最简单基本的运算。计数器在数字系统中主要是对脉冲的个数进行计数,以实现测量、计数、控制的功能,同时兼有分频功能。
计数器是FPGA设计中最常用的一种时序逻辑,根据计数器的计数值我们可以精确计算出FPGA内部各种信号之间的时间关系,每个信号何时拉高、何时拉低、拉低需要多久、拉高需要多久,都可以比较精准的控制具体需要计数的时间。计数器一般是从0开始计数,计数到我们需要的值或者计数满溢出后清零,并可以进行不断的循环,3位数的十进制计数器可最大计数到999,4位数的最大可以计数到9999;3位数的二进制计数器最大可以计数到111(7),4位数的最大可以计数到1111(15)。
实验目标
本例让计数器1s时间间隔,来实现led灯每隔1s闪烁一次的效果。
设计
这里设计一个不带标志信号(cnt_flag)的计数器。
=============================================================
对于计数器的设计要控制好两个问题:
什么时候开始计数
这个系统除了时钟和复位没有外界的其他输入了,所以只要复位一撤销,时钟沿来到就可以立即进行计数,所以对于计数开始的条件,也可以默认为没有条件。
什么时候清零
计算1s需要计数器计数多少个数。此处计数的时钟就用系统时钟50MHz,换算成时间是0.000_000_02s,计数1s的时间需要50_000_000个。所以计数器要在50MHz的时钟下计50_000_000个数才可以。因为是从0开始计数,所以在50MHz频率下计数1s的最终计数值是49_999_999。
我们实现的是在1s内led灯的闪烁,所以在1s的时间内,亮0.5s,熄0.5s这样的观赏效果最佳。计数到49_999_999需要26位宽的寄存器。为了节省资源,led的电平为高为低交替进行,每隔0.5s取反即可,计数器的值变为0~24_999_999。需要25位寄存器。
counter.v
//counter.v
module counter
#(
parameter CNT_MAX = 25'd24_999_999
)
(
input wire sys_clk,
input wire sys_rst_n,
output reg led_out
);
//parameter CNT_MAX = 25'd24_999_999;
reg[24:0] cnt;//计数器变量 位宽25
//计数器的赋值
always@(posedge sys_clk or negedge sys_rst_n) beginif(sys_rst_n == 1'b0)begincnt <= 25'd0;end else if(cnt == CNT_MAX) begincnt <= 25'd0;end else begincnt <= cnt +25'd1;end
end
//输出信号的赋值
always@(posedge sys_clk or negedge sys_rst_n)beginif(sys_rst_n == 1'b0)beginled_out <= 1'b0;end else if(cnt == CNT_MAX)beginled_out <= ~led_out;end else begin //如果复位信号无效 且计数器未达到最大值led_out <= led_out;end
end
endmodule
counter_tb.v
//counter_tb.v
`timescale 1ns/1ns
module counter_tb();
reg sys_clk;
reg sys_rst_n;
wire led_out;
//赋初值
initial
beginsys_clk = 1'b1;sys_rst_n <= 1'b0;#20sys_rst_n <= 1'b1;
end
//产生时钟信号
always #10 sys_clk = ~sys_clk;
counter //counter_inst
#(
.CNT_MAX(25'd24)
)
counter_inst
(
.sys_clk(sys_clk),
.sys_rst_n(sys_rst_n),
.led_out(led_out)
);
endmodule
仿真结果
【verilog】计数器相关推荐
- verilog 计数器_HDLBits: 在线学习 Verilog ()
本系列文章将向大家推荐一个学习 Verilog 的好去处:HDLBits. HDLBits 在提供 Verilog 基础语法教程的同时,还能够在线仿真你的 Verilog 模块,将你的输出与正确的时序 ...
- verilog计数器
1. 实验目的 (1)深入了解计数器原理 (2)学习使用Verilog实现同步计数器(模八) 2.实验内容 (1)原理描述 计数器的功能是记忆脉冲个数,它是数字系统中应用最为广泛的时序逻辑构件. 下图 ...
- 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计数 ...
最新文章
- 自研芯片架构 ,这家中国公司发布DPU芯片计划
- 向函数传递一维数组和已知大小的二维数组
- python求n项多项式的和_Python:创建n次多项式
- BugkuCTF-MISC题神奇宝贝
- 基于Carbide.C++ 的Symbian开发环境搭建
- linux命令行快捷命令及vim常用快捷命令
- HOWTO: Create and submit your first Linux kernel patch using GIT
- 特斯拉将国产Model 3和Model Y后轮驱动版价格上调4752元
- 2018-2019-2 20175215 实验五《网络编程与安全》实验报告
- css元素居中的几种方式
- 一文带你详细了解机房搬迁工作步骤及方案,强烈建议收藏备用!
- 视频内容理解相关方法
- PCB生成BOM表、网络表添加logo并且输出为Gerber文件
- opencv区域提取
- RTF转换为HTML格式(java)
- 排序法学习之插入排序(python3实现)
- 海康威视启用码流加密_如何在Windows 10上启用全盘加密
- 第十四章第四节:Java集合框架之二叉树
- 皮尔森(Pearson correlation coefficient)相关系数—统计学三大相关系数之一
- 2013年中国500强排行榜(zz)