FPGA学习—数码管显示

2023-10-27

FPGA学习——数码管显示



结构框架

数码管动态显示采用了人眼暂存的原理,即时分复用,在数码管实现动态显示。
整个实验设计流程框架如下图所示:
在这里插入图片描述


一、硬件设计

开发板采用共阳极数码管,即低电平点亮。
在这里插入图片描述

二、verilog编写

1.计数器

本实验准备设计一个定时器,6为数码管显示24小时制的时间,所以编写一个计数模块。

module counter_10
#(
  parameter	COUNT = 4'd9
	)
(
  input             clk,
  input             rst_n,
  input             en,
  input             clr,
  
  output  reg[3:0]  count,
  output  reg       t
  );
  
always@(posedge clk or negedge rst_n)
begin 
 if(rst_n == 1'b0)
  begin
	count <= 4'd0;
	t <= 1'b0;
  end
 else if(clr == 1'b1)
  begin
	count <= 4'd0;
	t <= 1'b0;
  end 
 else if(en== 1'b1)
  if(count == COUNT)
    begin
	  count <= 4'd0;
	  t <= 1'b1;
    end 
  else
	begin
	  count <= count + 4'd1;
	  t <= 1'b0;
    end
 else
	begin
	 count <= count;
	 t <= 1'b0;
  end 
		
end
	
endmodule
	

改变变量COUNT的数值,可实现不同模的计数器。

2.译码模块

module seg_decoder
(
	input		[3:0]	bin_data,
	output	reg	[7:0]	seg_data
);

always@(*)
begin
	case(bin_data)
		4'd0:seg_data <= 8'b1100_0000;
		4'd1:seg_data <= 8'b1111_1001;
		4'd2:seg_data <= 8'b1010_0100;
		4'd3:seg_data <= 8'b1011_0000;
		4'd4:seg_data <= 8'b1001_1001;
		4'd5:seg_data <= 8'b1001_0010;
		4'd6:seg_data <= 8'b1000_0010;
		4'd7:seg_data <= 8'b1111_1000;
		4'd8:seg_data <= 8'b1000_0000;
		4'd9:seg_data <= 8'b1001_0000;
		4'ha:seg_data <= 8'b1000_1000;
		4'hb:seg_data <= 8'b1000_0011;
		4'hc:seg_data <= 8'b1100_0110;
		4'hd:seg_data <= 8'b1010_0001;
		4'he:seg_data <= 8'b1000_0110;
		4'hf:seg_data <= 8'b1000_1110;
		default:seg_data <= 8'b1111_1111;
	endcase
end

endmodule

将计数器的十进制数按照译码准则转换为8位二进制,控制数码管的段选位。

3.数码管扫描模块

module seg_scan
#(
	parameter SCAN = 13'd4999,
	parameter SEG  = 3'd5)
(
	input				clk,
	input				rst_n,
	input		[7:0]	seg_data0,
	input		[7:0]	seg_data1,
	input		[7:0]	seg_data2,
	input		[7:0]	seg_data3,
	input		[7:0]	seg_data4,
	input		[7:0]	seg_data5,
	
	output	reg[5:0]	seg_sel,
	output	reg[7:0]	seg_data
	);
reg [12:0]	timer;
reg [2:0]	seg;
	
always@(posedge clk or negedge rst_n)
if(rst_n == 1'b0)
	timer <= 13'd0;
else if(timer == SCAN)
	timer <= 13'd0;
else
	timer <= timer + 13'd1;
	
always@(posedge clk or negedge rst_n)
if(rst_n == 1'b0)
	seg <= 3'd0;
else if(seg == SEG && timer == SCAN)
	seg <= 3'd0;
else if(timer == SCAN)
	seg <= seg + 3'd1;
	
always@(posedge clk or negedge rst_n)
if(rst_n == 1'b0)
	begin
		seg_sel <= 6'b0000_00;
		seg_data <= 8'b0000_0000;
	end
else 
	case(seg)
		3'd0:
			begin 
				seg_sel <= 6'b0111_11;
				seg_data <= seg_data0;
			end
		3'd1:
			begin 
				seg_sel <= 6'b1011_11;
				seg_data <= seg_data1;
			end
		3'd2:
			begin 
				seg_sel <= 6'b1101_11;
				seg_data <= seg_data2;
			end
		3'd3:
			begin 
				seg_sel <= 6'b1110_11;
				seg_data <= seg_data3;
			end
		3'd4:
			begin 
				seg_sel <= 6'b1111_01;
				seg_data <= seg_data4;
			end
		3'd5:
			begin 
				seg_sel <= 6'b1111_10;
				seg_data <= seg_data5;
			end
		default:
			begin
				seg_sel <= 6'b1111_11;
				seg_data <= 8'b1111_1111;
			end
	endcase
	
endmodule
		

扫描时间间隔设为0.01ms,人眼无法捕捉0.01ms的变化,进而实现6位数码管”同时“显示。

4.顶层模块

module seg_test
#(
	parameter	SCAN = 13'd4999,
	parameter   SEG = 3'd5,
	parameter	BAUD = 32'd49999999
)
(
	input				clk,
	input				rst_n,
	
	output	[5:0]	seg_sel,
	output	[7:0]	seg_data
);

wire 		t0,t1,t2,t3,t4,t5;
wire[3:0]	count0,count1,count2,count3,count4,count5;
wire[7:0]	seg_data0,seg_data1,seg_data2,seg_data3,seg_data4,seg_data5;

reg t;
reg[25:0]	timer;

always@(posedge clk or negedge rst_n)
	if(rst_n == 1'b0)
	begin
		timer <= 26'd0;
		t <= 1'b0;
	end
	else if(timer == BAUD)
	begin
		timer <= 26'd0;
		t <= 1'b1;
	end
	else
	begin
		timer <= timer + 1'd1;
		t <= 1'b0;
	end			

counter_10
#(
  .COUNT(9)
	)counter_10_0
(
  .clk		(clk),
  .rst_n	(rst_n),
  .en		(t),
  .clr		(1'b0),
            
  .count	(count0),
  .t		(t0)
  );
  
counter_10
#(
  .COUNT(5)
	)counter_10_1
(
  .clk		(clk),
  .rst_n	(rst_n),
  .en		(t0),
  .clr		(1'b0),
            
  .count	(count1),
  .t		(t1)
  );
  
counter_10
#(
  .COUNT(9)
	)counter_10_2
(
  .clk		(clk),
  .rst_n	(rst_n),
  .en		(t1),
  .clr		(1'b0),
            
  .count	(count2),
  .t		(t2)
  );
  
 counter_10
#(
  .COUNT(5)
	)counter_10_3
(
  .clk		(clk),
  .rst_n	(rst_n),
  .en		(t2),
  .clr		(1'b0),
            
  .count	(count3),
  .t		(t3)
  );
  
 counter_10
#(
  .COUNT(3)
	)counter_10_4
(
  .clk		(clk),
  .rst_n	(rst_n),
  .en		(t3),
  .clr		(1'b0),
            
  .count	(count4),
  .t		(t4)
  );
  
   counter_10
#(
  .COUNT(2)
	)counter_10_5
(
  .clk		(clk),
  .rst_n	(rst_n),
  .en		(t4),
  .clr		(1'b0),
            
  .count	(count5),
  .t		(t5)
  );
  
seg_decoder	seg_decoder_0
(
	.bin_data(count0),
	.seg_data(seg_data0)
);
seg_decoder	seg_decoder_1
(
	.bin_data(count1),
	.seg_data(seg_data1)
);
seg_decoder	seg_decoder_2
(
	.bin_data(count2),
	.seg_data(seg_data2)
);
seg_decoder	seg_decoder_3
(
	.bin_data(count3),
	.seg_data(seg_data3)
);
seg_decoder	seg_decoder_4
(
	.bin_data(count4),
	.seg_data(seg_data4)
);
seg_decoder	seg_decoder_5
(
	.bin_data(count5),
	.seg_data(seg_data5)
);

seg_scan
#(
	.SCAN(SCAN),
	.SEG (SEG)
)seg_scan
(
	.clk		(clk),
	.rst_n		(rst_n),
	.seg_data0	(seg_data0),
	.seg_data1	(seg_data1),
	.seg_data2	(seg_data2),
	.seg_data3	(seg_data3),
	.seg_data4	(seg_data4),
	.seg_data5	(seg_data5),
	
	.seg_sel	(seg_sel),
	.seg_data	(seg_data)
	);
	
endmodule

实验结果

在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

FPGA学习—数码管显示 的相关文章

  • 监控流媒体服务器的搭建和使用

    需求的提出 海康 大华 宇视等视频监控系统 都有自己的流媒体服务器平台 为什么要还需要通用的流媒体服务器产品呢 这个问题可以从几个方面回答 1 经济性 传统监控厂商的流媒体服务器 由于主要面向城市建设和大型安防项目 往往造价和报价相对较高
  • Android pm 命令详解

    一 pm命令介绍与包名信息查询 1 pm命令介绍 pm工具为包管理 package manager 的简称 可以使用pm工具来执行应用的安装和查询应用宝的信息 系统权限 控制应用 pm工具是Android开发与测试过程中必不可少的工具 sh
  • QT QString与char *之间的转换

    1 QString转char 先将QString转换为QByteArray 再将QByteArray转换为char QString str hello QString转char QByteArray ba str toLatin1 char
  • 启动过滤器异常

    org apache catalina core StandardContext filterStart 启动过滤器异常 org apache catalina core StandardContext filterStart 启动过滤器异
  • 【转载】自监督学习详细介绍(学习笔记)

    原文链接 https blog csdn net Cloris Sue article details 105343762 一 相关文献 fast ai上面关于自监督学习的资料 Self supervised learning and co

随机推荐

  • 云原生之使用docker部署ZPan个人网盘系统

    云原生之使用docker部署ZPan个人网盘系统 一 ZPan介绍 1 ZPan简介 2 ZPan特点 二 检查本地docker环境 1 检查系统版本 2 检查docker版本 3 检查docker服务状态 三 下载ZPan镜像 四 部署Z
  • MySQL根据某个字段判断新增或更新

    有一个 USER表 字段有 id username password email phone 我们需要开发一个创建用户接口 username唯一 判断username是否存在 如果存在 就更新 不存在 就新增 看一下正常代码 创建用户 pu
  • 动态数码管实验

    多位数码管简介 多位数码管 即两个或两个以上单个数码管并列集中在一起形成一体的数码管 当多位一体时 其内部的公共端是独立的 而负责显示什么数字的段线 a dp 全部是连接在一起的 独立的公共端可以控制多位一体中的哪一位数码管点亮 而连接在一
  • 1.linux系统基础笔记(互斥量、信号量)

    操作系统是很多人每天必须打交道的东西 因为在你打开电脑的一刹那 随着bios自检结束 你的windows系统已经开始运行了 如果问大家操作系统是什么 可能有的人会说操作系统就是windows 就是那些可以放大 缩小 移动的窗口 对曾经是计算
  • Jenkins & Harbor

    Harbor 环境搭建 https github com goharbor harbor releases tag v2 5 6 点击下载地址安装包 安装 解压安装包 root localhost tar zxvf harbor offli
  • #if、#else、#endif、#elif、#ifdef、#ifndef的区别和使用

    常用的条件编译 if elif else endif ifdef ifndef 看名字就知道 跟我们平时用的if elseif else是 一样的 不同的是这里一定要记得 endif if 条件 1 代码 1 elif 条件 2 代码 2
  • HashMap底层原理:数据结构+put()流程+2的n次方+死循环+数据覆盖问题

    导航 Java笔记 踩坑汇总 Java基础 进阶 JavaWeb SSM SpringBoot 瑞吉外卖 SpringCloud 黑马旅游 谷粒商城 学成在线 MySQL高级篇 设计模式 常见面试题 源码 vincewm的博客 CSDN博客
  • 聊聊 220V交流 过零检测

    聊聊过零检测 以及如何实现过零检测 by 矜辰所致 增加测试结果 2023 6 20 目录 前言 一 什么是过零检测 1 1 为何需要过零检测 二 如何做过零检测 2 1 光耦 2 2 比较器 运放 2 3 三极管 MOS管 2 4 过零检
  • 利用哈弗曼编码

    1 课本教材习题5 18 a 根据字母及空格出现的频率 可构造哈夫曼树 1 根据字母及空格出现的频率 可构造哈夫曼树 如下图 利用哈夫曼编码定义 可得出哈夫曼编码为 z 1111011000 q 1111011001 x 111101101
  • python回文字符串编程_Python刷题:最长回文子串(字符串)

    题目描述 给定一个仅包含小写字母的字符串 求它的最长回文子串的长度 所谓回文串 指左右对称的字符串 解题思路 当字符串不为空时 回文子串最少也是一个字符 即初始长度为1 当回文子串更长时 就可能有两种情况 例如 aa 或 aba 即长度 1
  • 支持Blazor的保护!代码保护工具.NET Reactor v6.3.0.0全新出发

    NET Reactor是一个功能强大的代码保护和软件许可系统 适用于为 NET Framework编写的软件 并支持生成 NET程序集的所有语言 NET Reactor迎来了久违的版本更新 进入v6 3 0 0全新时代 支持Blazor保护
  • 【Vue】v-for循环图片绝对路径,图片无法显示

    1 src 和 src
  • 微信扫码跳转小程序并传参

    1 打开微信公众平台 微信公众平台 扫码登录小程序的后台 开发 开发管理 开发设置 扫普通链接二维码打开小程序 添加 2 输入业务域名 3 下载校验文件 这里我用一个aa txt来替代 把他放到test文件夹下 3 修改nginx的配置文件
  • 27岁活的像个废物一样,没技术没学历,现在学习软件测试还来得及吗?

    为什么会学习软件测试 27岁了 算一下8年了 工作了一年 就没去工作就一 直在家 家里固定每个月给2000 偶尔一个月有四千 但依旧没钱 家里给了一套房子 出门200米就是地铁站 三室 厅住7楼 自己一个人住 属于没有钱 却又饿不死的状态
  • Klokki Mac版常见问题解答

    Klokki Slim Mac破解版是Mac平台上的一款任务管理应用 Klokki Slim Mac版直接从菜单栏提供了一种强大而漂亮的时间跟踪方法 专注于你的工作 享受一种高效的方式来跟踪你在项目上的时间 Klokki 和Klokki S
  • 分类算法原理及python实现(一)

    文章目录 一 分类算法的概念 1 概念 2 应用 3 统计学分类与机器学习分类的区别 4 概率模型与非概率模型基本思想 二 分类算法 1 逻辑回归 2 朴素贝叶斯 3 K近邻 一 分类算法的概念 1 概念 输出变量Y为有限个离散值的预测问题
  • WSL2中设置DNS后重启终端又失效的解决方法

    转载地址 https www xieshasha love wsldns iiMemory WSL2 用着是挺好的 就是发现了一个问题 郁闷了好久 修改 etc resolv conf可以自己设置 dns 但重启 WSL 以后 手动设置的
  • Linux系统与管理 - (四)VIM编辑器

    目录 自说 学习路径 工作模式 基本操作 自说 vim在以前unix系统中叫做VI编辑器 不过现在我们用到vim编辑器较多 它们之间最大的区别在于 vim编辑器具备有编程的能力 并且文字有各种颜色方便我们辨别 设计 vim其实类似于我们Wi
  • [附源码]计算机毕业设计Python+uniapp基于小程序的得物的租借平台se5eb(程序+lw+远程部署)

    附源码 计算机毕业设计Python uniapp基于小程序的得物的租借平台se5eb 程序 lw 远程部署 该项目含有源码 文档 程序 数据库 配套开发软件 软件安装教程 项目运行环境配置 Python3 7 7 Django Mysql5
  • FPGA学习—数码管显示

    FPGA学习 数码管显示 文章目录 FPGA学习 数码管显示 结构框架 一 硬件设计 二 verilog编写 1 计数器 2 译码模块 3 数码管扫描模块 4 顶层模块 实验结果 结构框架 数码管动态显示采用了人眼暂存的原理 即时分复用 在