一个数码管有九个引脚,控制八段二极管的亮灭,用以显示需要的数字。

当有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实现(参考小梅哥教程)(视觉暂留)的更多相关文章

  1. 10-8位7段数码管驱动实验——小梅哥FPGA设计思想与验证方法视频教程配套文档

    芯航线--普利斯队长精心奉献   实验目的: 1.实现FPGA驱动数码管动态显示: 2.使用In system sources and probes editor工具,输入需要显示在数码管上的的数据, ...

  2. 【小梅哥FPGA进阶教程】串口发送图片数据到SRAM在TFT屏上显示

    十五.串口发送图片数据到SRAM在TFT屏上显示 之前分享过rom存储图片数据在TFT屏上显示,该方法只能显示小点的图片,如果想显示TFT屏幕大小的图片上述方法rom内存大小不够.小梅哥给了个方案,利 ...

  3. 【小梅哥FPGA进阶教程】第十二章 数字密码锁设计

    十二.数字密码锁设计 本文由山东大学研友袁卓贡献,特此感谢 实验目的 实现数字密码锁设计,要求矩阵按键输出且数码管显示输入密码,密码输入正确与否均会有相应标志信号产生. 实验平台 芯航线FPGA核心板 ...

  4. 【小梅哥FPGA进阶教程】MC8051软核在FPGA上的使用

    十.MC8051软核在FPGA上的使用 本教程内容力求以详细的步骤和讲解让读者以最快的方式学会 MC8051 IP core 的应用以及相关设计软件的使用,并激起读者对 SOPC 技术的兴趣.本实验重 ...

  5. 小梅哥FPGA数字逻辑设计教程——基于线性序列机的TLC5620型DAC驱动设计

    基于线性序列机的TLC5620型DAC驱动设计 目录 TLC5620型DAC芯片概述:    2 TLC5620型DAC芯片引脚说明:    2 TLC5620型DAC芯片详细介绍:    3 TLC ...

  6. 【小梅哥FPGA进阶教程】第九章 基于串口猎人软件的串口示波器

    九.基于串口猎人软件的串口示波器 1.实验介绍 本实验,为芯航线开发板的综合实验,该实验利用芯航线开发板上的ADC.独立按键.UART等外设,搭建了一个具备丰富功能的数据采集卡,芯航线开发板负责进行数 ...

  7. 【小梅哥SOPC学习笔记】SOPC开发常见问题及解决办法集锦

    SOPC开发常见问题及解决办法集锦 一.Symbol 'NULL' could not be resolved 近期在评估使用NIOS II处理器进行项目的开发,我使用的软件是Quartus II 1 ...

  8. 【小梅哥SOPC学习笔记】NIOS II处理器运行UC/OS II

    SOPC开发流程之NIOS II 处理器运行 UC/OS II 这里以在芯航线FPGA学习套件的核心板上搭建 NIOS II 软核并运行 UCOS II操作系统为例介绍SOPC的开发流程. 第一步:建 ...

  9. 【小梅哥FPGA进阶教程】第十四章 TFT屏显示图片

    十四.TFT屏显示图片 本文由杭电网友曾凯峰贡献,特此感谢 学习了小梅哥的TFT显示屏驱动设计后,想着在此基础上通过TFT屏显示一张图片,有了这个想法就开始动工了.首先想到是利用FPGA内部ROM存储 ...

随机推荐

  1. Linux编译安装-软件

    编译源码的项目工具 C.C++的源码编译:使用make项目管理器 configure脚本 --> Makefile.in --> Makefile 相关开发工具: autoconf: 生成 ...

  2. 一文了解RPC框架原理

    点击上方"开源Linux",选择"设为星标" 回复"学习"获取独家整理的学习资料! 1.RPC框架的概念 RPC(Remote Proced ...

  3. 百度SEO算法技术的局限性,怎么做才能有收益

    不知道大家有没有发现,我们使用百度的频率在减少,就算有时遇到一些问题,需要用百度来寻找答案,也会经常遇到搜索不到答案的情况.到底是出了什么问题?难道网络上的资源不够丰富了?浩如烟海的互联网,居然搜索不 ...

  4. SpringMVC乱码解决

    解决需要四个步骤:1.jsp页面编码   2.tomcat server.xml编码  3.使用filter对编码进行过滤  4.数据库编码设置 说明:四个地方的编码需要一致:本文使用gbk 1.js ...

  5. 205. Isomorphic Strings - LeetCode

    Question 205. Isomorphic Strings Solution 题目大意:判断两个字符串是否具有相同的结构 思路:构造一个map,存储每个字符的差,遍历字符串,判断两个两个字符串中 ...

  6. 解决 AMD 笔记本不插电源时屏幕偏暗的问题

    办法:关掉显卡设置里的 Vari-Bright 选项 最近换了锐龙版的笔记本,用着还不错,就是不插电源时看屏幕亮度不太适应,整体偏暗,有点费眼,差点就觉得 AMD 不 Yes 了.然后网上一顿找,发现 ...

  7. 测试平台系列(94) 前置条件该怎么支持Python呢

    回顾 上一节我们狠狠操练了一番oss,但我们的任务还很长久,所以我们需要继续打磨我们的功能. 那今天就让我们来思考下,如何在前置条件支持python脚本,多的不说,我们也暂时不考虑其他语言,因为光考虑 ...

  8. 在Rally上,上传测试报告(文件)到每个Test Case方法

    本文链接: https://www.cnblogs.com/hchengmx/p/how-to-upload-test-result-to-test-case-result-in-rally.html ...

  9. WinForms获得已打开窗体的引用

    更新记录 本文迁移自Panda666原博客,原发布时间:2021年7月6日. 对于已经打开的窗口,可以通过Application.OpenForms属性进行获得.该属性是一个FormCollectio ...

  10. Elasticsearch学习系列二(基础操作)

    本文将分为3块讲解Es的基础操作.分别为:索引(index).映射(mapping).文档(document). 索引操作 创建索引库 语法: PUT /索引名称{ "settings&qu ...