Verilog HDL**两位数码管计数器,关于reg位数的问题
- 顶层原理图
/ - count.v
module count(input sys_clk,input sys_rst_n,output reg [7:0] data); //累加数parameter MAX_TIME = 25'd25000_000; //25M频率1s
parameter MAX_NUM = 99; //最大计数到99
reg [25:0] cnt; //计数
reg [7:0] data_tmp;
reg [7:0] point_tmp;
reg flag; //计数周期标志,1s产生一个脉冲//分频得出1s
always @(posedge sys_clk or negedge sys_rst_n) beginif(!sys_rst_n) begincnt <= 25'd0;flag <= 1'b0;endelse if(cnt < MAX_TIME) begincnt <= cnt+1'b1;flag <= 1'b0;endelse beginflag <= 1'b1;cnt <= 25'd0;end
end//data 自加
always @(posedge sys_clk or negedge sys_rst_n) beginif(!sys_rst_n) begindata_tmp <= 12'd0;point_tmp<= 2'd0;endelse if(flag) beginif(data_tmp < MAX_NUM)data_tmp <= data_tmp + 1;elsedata_tmp <= 12'd0;endelsedata_tmp <= data_tmp;data <= data_tmp;
endendmodule
//
3. seg_led_set.v
module seg_led_set(input sys_clk,input sys_rst_n,input [7:0] data,output reg [1:0] sel,output reg [7:0] led);
//
parameter TIME_1ms = 15_000; //数码管1ms循环闪烁reg [3:0] num_dis; //当前显示的数
reg [1:0] sel_dis; //当前显示的位
reg clk_div; //1ms 分频
reg [14:0] clk_cnt; //1ms 分频 计数器 15000是14位,但是clk_cnt不能定义为reg[13:0],这是为何?wire [3:0] data0; //个位
wire [3:0] data1; //十位 assign data0 = data%10;
assign data1 = data/10%10;//分频得出1ms翻转一次的clk_div
always @(posedge sys_clk or negedge sys_rst_n) beginif(!sys_rst_n) beginclk_cnt <= 14'd0;clk_div <= 1'b0;endelse if(clk_cnt < TIME_1ms)clk_cnt <= clk_cnt + 1'b1;else beginclk_cnt <= 14'd0;clk_div <= ~clk_div;end
end //根据clk_div的状态选择点亮十位或者各位的数码管
always @(posedge sys_clk or negedge sys_rst_n) beginif(!sys_rst_n) beginnum_dis <= 4'd0;sel <= 2'd0;endelse if(clk_div) beginsel <= 2'b10;num_dis <= data1;endelse beginsel <= 2'b01;num_dis <= data0;end
end//译码输出
always @(posedge sys_clk or negedge sys_rst_n) beginif(!sys_rst_n)led <= 8'hff;else begincase (num_dis)4'h0: led <= 8'b0011_1111;4'h1: led <= 8'b0000_0110;4'h2: led <= 8'b0101_1011;4'h3: led <= 8'b0100_1111;4'h4: led <= 8'b0110_0110;4'h5: led <= 8'b0110_1101;4'h6: led <= 8'b0111_1101;4'h7: led <= 8'b0000_0111;4'h8: led <= 8'b0111_1111;4'h9: led <= 8'b0110_0111;4'ha: led <= 8'b0111_0111;4'hb: led <= 8'b0111_1100;4'hc: led <= 8'b0011_1001;4'hd: led <= 8'b0101_1110;4'he: led <= 8'b0111_1001;4'hf: led <= 8'b0111_0001;default : led <= 8'b0011_1111;endcaseend
end
endmodule
实现两位数码管显示从00累加到99的秒计时器,遗留问题是cnt计1ms时在15M晶振频率下要记到15000,15000是14位,在seg_led_set.v中,cnt如果定义为reg [13:0],则无法计到15000,目前尚未查出原因。
Verilog HDL**两位数码管计数器,关于reg位数的问题相关推荐
- 两位数码管秒表c语言,两位数码管显示计时器.doc
两位数码管显示计时器 一.题目 用定时0的方式1实现数码管两位59S循环计时(计时器) 二.思路方案 本实验利用单片机的定时器/计数器定时和计数的原理,通过proteus 仿真软件来实现模拟实现.模拟 ...
- protues用一片74hc595控制两位数码管
前面的博文中我们介绍了一个arduino中用一片595来控制一位数码管,这里我们介绍一个595来控制两位数码管.两位数码管是应用最广泛的,如交通灯倒计时,计数器等都将用到两位数码管. 两位数码管的动态 ...
- 定时器中断实验 编写程序使定时器0或者定时器1工作在方式2,自动重装载模式,定时500ms使两位数码管从00、01、02……98、99每间隔500ms加1显示。
编写程序使定时器0或者定时器1工作在方式2,自动重装载模式,定时500ms使两位数码管从00.01.02--98.99每间隔500ms加1显示. 程序: #include <reg51.h> ...
- 定时器中断实验 编写程序使定时器0或者定时器1工作在方式1,定时500ms使两位数码管从00、01、02……98、99每间隔500ms加1显示。
编写程序使定时器0或者定时器1工作在方式1,定时500ms使两位数码管从00.01.02--98.99每间隔500ms加1显示. 程序: #include <reg51.h> #defin ...
- (32)Verilog HDL按位运算
(32)Verilog HDL按位运算 1.1 目录 1)目录 2)FPGA简介 3)Verilog HDL简介 4)Verilog HDL按位运算 5)结语 1.2 FPGA简介 FPGA(Fiel ...
- proteus仿真arduino控制两位数码管
前面我们用arduino控制一位数码管,知道了控制数码管的原理.这里我们增加了一位,其显示的原理基本一样.只不过本质上不是两位同时点亮,而是轮换点亮.下面是原理图: 我们来看看代码的实现: int P ...
- Arduino实验之两位数码管实验报告
第一种方案 从1-12引脚分别如图所示这样接 下面五个脚从左到右分别是1 2 3 4 5,上面六个脚从右到左分别是7 8 9 10 11 12,13是LED灯 实现方案一:将数码管从1变成99 两位数 ...
- FPGA初探(五)之两位数码管显示
两位数码管显示 目标: 共阳极数码管实现动态显示 实现过程规划(功能分解,分步实现): 取得两位数0~99, 第一步,分成个位十位, 第二步,将个位十位转换为数码管编码, 第三步,数码管显示模块: 1 ...
- 【单片机仿真项目】外部中断0和1控制两位数码管进行计数
目录 1.外部中断0和1控制两位数码管进行计数 keil 代码 2.proteus 原理图 3.gif 动态图
最新文章
- java php mysql_系统学习javaweb13----MYSQL学习(使用PHP、SQL)1
- JVM(Java虚拟机)优化大全和案例实战
- spark rdd map java_如何在spark RDD(JavaRDD)中获取记录的文件名
- SpringBoot整合Security安全框架、控制权限
- 搜索关键字高亮_Django Haystack 全文检索与关键词高亮
- 二柱子2.0编程总结
- 稳定高效大型系统架构---集群中间件开发
- 优酷的多页画在同一窗口打开效果。
- 这两年亚马逊创业都是一个非常火热的话题
- 优化理论13----黄金分割法、单峰函数、python实现及验证
- PS/PR/AE全套插件一键安装包无需注册码
- 这是我看过把Spring Cloud核心组件讲的最明白的一个故事了
- 一种提取HTML网页正文的方法
- 3名院士被处理,院士改革确实动真格了!
- matplotlib 绘图 中文乱码 0.5
- U盘安装Linux系统教程
- kernel 选项详解(stlinux2.3)
- 记录一次 Liferay 7.X 中弹出窗口的简单使用
- 电路原理入门书籍推荐
- 克鲁斯卡尔算法与普里姆算法详解