数码管动态显示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存储 ...
随机推荐
- 超清晰的 DNS 原理入门指南,看这一篇就够了~
点击上方"开源Linux",选择"设为星标" 回复"学习"获取独家整理的学习资料! DNS 是互联网核心协议之一.不管是上网浏览,还是编程开 ...
- 文件传输协议:FTP、TFTP、SFTP有什么区别?
一个执着于技术的公众号 FTP 提供一种在服务器和客户机之间上传和下载文件的有效方式:是基于TCP的传输,FTP采用双TCP连接方式:支持授权与认证机制,提供目录列表功能. ---控制连接使用TCP端 ...
- NLTK基础学习
学习视频来自:Youtube 学习文档来自:简书 NLTK:自然语言工具包 目的:将段落拆分为句子.拆分词语,识别这些词语的词性,高亮主题,帮助机器了解文本关于什么.这个小节将解决意见挖掘或情感分析的 ...
- 忽略https域名校验不通过
curl curl 报错: curl: (51) Unable to communicate securely with peer: requested domain name does not ma ...
- 152-技巧-Power Query 快速合并文件夹中表格之自定义函数 TableXlsxCsv
152-技巧-Power Query 快速合并文件夹中表格之自定义函数 TableXlsxCsv 附件下载地址:https://jiaopengzi.com/2602.html 一.背景 在我们使用 ...
- 关于加密通道规范,你真正用的是TLS,而非SSL
摘要:事实上我们现在用的都是TLS,但因为历史上习惯了SSL这个称呼,平常还是以SSL为多. 本文分享自华为云社区<SSL和TLS的联系及区别>,作者: HZDX. TLS/SSL是一种加 ...
- Pandas 分组聚合 :分组、分组对象操作
1.概述 1.1 group语法 df.groupby(self, by=None, axis=0, level=None, as_index: bool=True, sort: bool=True, ...
- 构建第一个模型:KNN算法(Iris_dataset)
利用鸢尾花数据集完成一个简单的机器学习应用~万丈高楼平地起,虽然很基础,但是还是跟着书敲了一遍代码. 一.模型构建流程 1.获取数据 本次实验的Iris数据集来自skicit-learn的datase ...
- React简单教程-4.1-hook
前言 虽然我们简单感受了一下 useState 的用法,但我想你还是对 React 里的 hook 迷迷糊糊的.本文我们将明确下 React 的概念. HOOK 前生今世 在我示例中,写的 React ...
- VSCode 安装以及初步使用教程
老样子先介绍一下VSCode(是什么?干什么?有什么用?好处是什么?等) VisualStudioCode(简称VSCode)是Microsoft开发的代码编辑器,它支持Windows,Linux和m ...