数码管动态显示Verilog实现(参考小梅哥教程)(视觉暂留)
一个数码管有九个引脚,控制八段二极管的亮灭,用以显示需要的数字。
当有N个数码管时,一个一个控制的话需要N x 9 个引脚,消耗资源较多。
因此可以利用动态显示的方案通过人眼的视觉暂留特性达到静态显示的效果(动态显示周期<20ms),只需N+8个引脚。节省了大量资源。(动态静显)
数码管动态显示的逻辑电路如下:
Verilog设计代码如下:
- module digital_tube(//八个数码管显示
- clk,
- reset,
- disp_num_all,
- dg_tube,
- tube_part
- );
- input clk ;
- input reset ;
- input [31:0]disp_num_all ;
- output [7:0]dg_tube ;
- output [7:0]tube_part ;
- parameter one_dis_t = 25'd1_000_000 ;//每个晶体管显示时间(计数)
- reg [16:0]counter1 ;
- reg [2:0] counter2 ;
- always @ ( posedge clk or negedge reset )//分频
- begin
- if (! reset )
- counter1 <= 17'd0 ;
- else if ( (one_dis_t-1) <= counter1 )
- counter1 <= 17'd0 ;
- else
- counter1 <= counter1 +1'b1 ;
- end
- always @ ( posedge clk or negedge reset )//循环
- begin
- if (! reset )
- counter2 <= 3'd0 ;
- else if ( (one_dis_t-1) <= counter1 )
- counter2 <= counter2 +1'b1 ;
- end
- wire [3:0]disp_num_one ;
- //3-8译码器 控制哪个数码管显示
- decoder_3_8 tube_select(//控制
- .a(counter2[2] ),
- .b(counter2[1]),
- .c(counter2[0]),
- .out(dg_tube)
- );
- //需要一个八选一选通器,对应哪个数码管显示什么内容
- mux8 tube_display(//选通
- .sel(counter2),
- .data(disp_num_all),
- .out(disp_num_one)
- );
- //真值表对应显示数字
- LUT_truth translator(//控制
- .num(disp_num_one),
- .out(tube_part)
- );
- endmodule
- module decoder_3_8(
- a,
- b,
- c,
- out
- );
- input a;
- input b;
- input c;
- output reg [7:0]out;
- always@(*)begin//等价于always({a,b,c})a是高位,c是低位
- case({a,b,c})
- 3'b000:out=8'b0000_0001;
- 3'b001:out=8'b0000_0010;
- 3'b010:out=8'b0000_0100;
- 3'b011:out=8'b0000_1000;
- 3'b100:out=8'b0001_0000;
- 3'b101:out=8'b0010_0000;
- 3'b110:out=8'b0100_0000;
- 3'b111:out=8'b1000_0000;
- endcase
- end
- endmodule
- module mux8(
- sel,
- data,
- out
- );
- input [2:0]sel ;
- input [31:0]data ;
- output reg [3:0]out ;
- always@(*)
- begin
- case(sel)
- 3'b000 : out = data[3:0] ;
- 3'b001 : out = data[7:4] ;
- 3'b010 : out = data[11:8] ;
- 3'b011 : out = data[15:12] ;
- 3'b100 : out = data[19:16] ;
- 3'b101 : out = data[23:20] ;
- 3'b110 : out = data[27:24] ;
- 3'b111 : out = data[31:28] ;
- endcase
- end
- endmodule
- module LUT_truth(
- num,
- out
- );
- input [3:0]num ;
- output reg [7:0]out ;
- always@(num)
- begin
- case(num)
- 4'h0 : out = 8'hc0 ;
- 4'h1 : out = 8'hf9 ;
- 4'h2 : out = 8'ha4 ;
- 4'h3 : out = 8'hb0 ;
- 4'h4 : out = 8'h99 ;
- 4'h5 : out = 8'h92 ;
- 4'h6 : out = 8'h82 ;
- 4'h7 : out = 8'hf8 ;
- 4'h8 : out = 8'h80 ;
- 4'h9 : out = 8'h90 ;
- 4'ha : out = 8'h88 ;
- 4'hb : out = 8'h83 ;
- 4'hc : out = 8'hc6 ;
- 4'hd : out = 8'ha1 ;
- 4'he : out = 8'h86 ;
- 4'hf : out = 8'h8e ;
- endcase
- end
- endmodule
- `timescale 1ns / 1ns
- module digital_tube_tb();
- reg clk ;
- reg reset ;
- reg [31:0]disp_num_all;
- wire [7:0]dg_tube ;
- wire [7:0]tube_part ;
- digital_tube
- #(
- .one_dis_t( 100 )
- )
- digital_tube_im(//八个数码管显示
- clk,
- reset,
- disp_num_all,
- dg_tube,
- tube_part
- );
- initial clk = 1 ;
- always #10 clk = ! clk ;
- initial
- begin
- reset = 0 ;
- disp_num_all = 32'd0 ;
- #201 ;
- reset = 1 ;
- #200 ;
- disp_num_all = 32'habb02525 ;
- #20000;
- disp_num_all = 32'h52520bba ;
- #30000;
- $stop;
- end
- endmodule
数码管动态显示Verilog实现(参考小梅哥教程)(视觉暂留)的更多相关文章
- 10-8位7段数码管驱动实验——小梅哥FPGA设计思想与验证方法视频教程配套文档
芯航线--普利斯队长精心奉献 实验目的: 1.实现FPGA驱动数码管动态显示: 2.使用In system sources and probes editor工具,输入需要显示在数码管上的的数据, ...
- 【小梅哥FPGA进阶教程】串口发送图片数据到SRAM在TFT屏上显示
十五.串口发送图片数据到SRAM在TFT屏上显示 之前分享过rom存储图片数据在TFT屏上显示,该方法只能显示小点的图片,如果想显示TFT屏幕大小的图片上述方法rom内存大小不够.小梅哥给了个方案,利 ...
- 【小梅哥FPGA进阶教程】第十二章 数字密码锁设计
十二.数字密码锁设计 本文由山东大学研友袁卓贡献,特此感谢 实验目的 实现数字密码锁设计,要求矩阵按键输出且数码管显示输入密码,密码输入正确与否均会有相应标志信号产生. 实验平台 芯航线FPGA核心板 ...
- 【小梅哥FPGA进阶教程】MC8051软核在FPGA上的使用
十.MC8051软核在FPGA上的使用 本教程内容力求以详细的步骤和讲解让读者以最快的方式学会 MC8051 IP core 的应用以及相关设计软件的使用,并激起读者对 SOPC 技术的兴趣.本实验重 ...
- 小梅哥FPGA数字逻辑设计教程——基于线性序列机的TLC5620型DAC驱动设计
基于线性序列机的TLC5620型DAC驱动设计 目录 TLC5620型DAC芯片概述: 2 TLC5620型DAC芯片引脚说明: 2 TLC5620型DAC芯片详细介绍: 3 TLC ...
- 【小梅哥FPGA进阶教程】第九章 基于串口猎人软件的串口示波器
九.基于串口猎人软件的串口示波器 1.实验介绍 本实验,为芯航线开发板的综合实验,该实验利用芯航线开发板上的ADC.独立按键.UART等外设,搭建了一个具备丰富功能的数据采集卡,芯航线开发板负责进行数 ...
- 【小梅哥SOPC学习笔记】SOPC开发常见问题及解决办法集锦
SOPC开发常见问题及解决办法集锦 一.Symbol 'NULL' could not be resolved 近期在评估使用NIOS II处理器进行项目的开发,我使用的软件是Quartus II 1 ...
- 【小梅哥SOPC学习笔记】NIOS II处理器运行UC/OS II
SOPC开发流程之NIOS II 处理器运行 UC/OS II 这里以在芯航线FPGA学习套件的核心板上搭建 NIOS II 软核并运行 UCOS II操作系统为例介绍SOPC的开发流程. 第一步:建 ...
- 【小梅哥FPGA进阶教程】第十四章 TFT屏显示图片
十四.TFT屏显示图片 本文由杭电网友曾凯峰贡献,特此感谢 学习了小梅哥的TFT显示屏驱动设计后,想着在此基础上通过TFT屏显示一张图片,有了这个想法就开始动工了.首先想到是利用FPGA内部ROM存储 ...
随机推荐
- 数据结构_C语言_二叉树先序、中序、后序遍历
# include <stdio.h> # include <stdlib.h> typedef struct BiTreeNode { char data; struct B ...
- Hadoop(四)C#操作Hbase
Hbase Hbase是一种NoSql模式的数据库,采用了列式存储.而采用了列存储天然具备以下优势: 可只查涉及的列,且列可作为索引,相对高效 针对某一列的聚合及其方便 同一列的数据类型一致,方便压缩 ...
- HTML语言的简要学习
什么是HTML? HTML 是用来描述网页的一种语言. l HTML 指的是超文本标记语言 (Hyper Text Markup Language) l HTML 不是一种编程语言,而是一种标记语 ...
- 多线程05:unique_lock详解
unique_lock详解 一.unique_lock取代lock_guard unique_lock是个类模板,实际应用中,一般lock_guard(推荐使用):lock_guard取代了mutex ...
- 【多线程】线程同步 synchronized
由于同一进程的多个线程共享同一块存储空间 , 在带来方便的同时,也带来了访问 冲突问题 , 为了保证数据在方法中被访问时的正确性 , 在访问时加入 锁机制synchronized , 当一个线程获得对 ...
- django请求生命周期流程与路由层相关知识
目录 请求生命周期流程图 路由层之路由匹配 无名有名分组 反向解析 无名有名分组反向解析 路由分发 名称空间 请求生命周期流程图 django请求生命周期流程图 路由层之路由匹配 我们都知道,路由层是 ...
- 选择器补充与CSS属性
目录 伪元素选择器 选择器优先级 CSS属性 宽和高 字体样式 文字属性 背景属性 边框属性 display属性 盒子模型 浮动(float) 清除浮动 伪元素选择器 伪元素选择器可以通过CSS操作文 ...
- 安装Siege到Linux(源码)
运行环境 系统版本:CentOS Linux release 7.3.1611 (Core) 软件版本:siege-4.0.4 硬件要求:无 安装过程 1.安装依赖 [root@localhost ~ ...
- 解放双手!推荐一款 GitHub 星标 8.2k+的命令行软件管理器,非常酷炫!
小二是公司新来的实习生,之前面试的过程中对答如流,所以我非常看好他.第一天,我给他了一台新电脑,要他先在本地搭建个 Java 开发环境. 二话不说,他就开始马不停蹄地行动了.真没想到,他竟然是通过命令 ...
- 基于PYQT5的截图翻译工具
基于PYQT5的截图翻译工具 功能介绍 翻译功能 截图功能(快捷键 + 截图存储到剪切板中) 文字识别OCR(基于百度API的文字识别) UI 界面 截图 截图可以使用第三方截图 或 使用PyQt5截 ...