目录

一、数码管工作原理

二、Verilog模块设计

1、原理

(1)动态扫描的优点:

(2)动态扫描原理简介:

2、Verilog模块的设计

(1)分频器:

2、译码器模块:

3、动态扫描模块:

4、顶层模块:

三、写在最后:


在大二下学期学习《Verilog与FPGA实现》的时候鲲鲲给我们布置了课程实验,有许多实验需要用到数码管作为输出。本文旨在用模块化的思想向大家介绍笔者的通用的数码管显示模块。

一、数码管工作原理

数码管事常见的显示装置,通常由7段或8段LED组成,根据公共端连接方式分为:共阳极数码管、共阴极数码管。

顾名思义,共阴极数码管的所有LED的阴极是接在一块的,当通入高电平数码管才点亮;共阳极数码管的所有LED是阳极接在一起,输入低电平点亮,段选码如下图所示

我们用的Basys2的数码管为共阳极数码管,因此本次设计采用共阳极段码表。

二、Verilog模块设计

1、原理

为了节省管脚,Basys2开发板采用的是动态扫描的方式来进行数码管显示,具体如下:

(1)动态扫描的优点:

管脚对芯片来说是非常宝贵的资源,对于我们的板子来说,用到了4个8段数码管,如果用管脚直接控制LED的亮灭的话,总共需要用到4*(8+2)=40个管脚(8是abcdefg段选,2是两个共阳极),一共用到32个管脚作为控制端;而用动态扫描的方式来进行显示的话需要4个位选(选择四个数码管中的哪一个)和8个段选(abcdefg中的哪一段,当然还有两个共阳极),一共用到12个管脚作为控制端,高下立判。

(2)动态扫描原理简介:

要实现动态扫描,最常用的是数据锁存器和移位寄存器,在某一时刻输入位选选中要显示的数码管,同时送上相应的段选码,下一时刻选中下一个数码管同时送上对应的段选码,只要扫描的频率足够快,人眼就会因为视觉暂留效应而看到的4个数码管显示不同的数字。常用的刷新频率在1KHz到60Hz,太快就会亮度不够,太慢就会闪烁。

2、Verilog模块的设计

设计的模块会将输入的4个二进制码显示在4个位的数码管上,因而需要模块:分频器(将板子50MHz时钟分频为1KHz时钟)、译码模块(二进制码转为共阳极数码管段选码)、动态扫描模块(在特定时刻选中位并送上对应的段选码)、top(顶层封装),具体代码如下:

(1)分频器:

计数分频,通过计算,输入的50MHz时钟分频为1KHz时钟,需要计数50000次,为了节省资源,计数器位宽为16位刚好满足2^16<50000<2^17。

module clk_div(input clk,output reg clk_div);//输入板子50MHz时钟,输出1KHz时钟//计数分频:50000次reg [15:0]cnt = 16'd0;always@(posedge clk)beginif(cnt == 16'd50000)begincnt <= 16'd0;endelsebegincnt <= cnt + 16'd1;endend//输出时钟控制always@(posedge clk)beginif(cnt <= 16'd24999)beginclk_div <= 1'b1;endelsebeginclk_div <= 1'b0;endendendmodule

2、译码器模块:

一个很简单的case分支实现译码,输入4位二进制编码,输出对应的8位段选码。

module wei_encoder(input [3:0]hex_number,output reg [7:0]display_code);//将输入的十六进制代码转换为共阳极数码管段选编码并输出always@(*)begincase(hex_number)4'b0000:display_code = 8'hc0;//04'b0001:display_code = 8'hf9;//14'b0010:display_code = 8'ha4;//24'b0011:display_code = 8'hb0;//34'b0100:display_code = 8'h99;//44'b0101:display_code = 8'h92;//54'b0110:display_code = 8'h82;//64'b0111:display_code = 8'hf8;//74'b1000:display_code = 8'h80;//84'b1001:display_code = 8'h90;//94'b1010:display_code = 8'h88;//A4'b1011:display_code = 8'h83;//B4'b1100:display_code = 8'hc6;//C4'b1101:display_code = 8'ha1;//D4'b1110:display_code = 8'h86;//E4'b1111:display_code = 8'h8e;//Fdefault:display_code = 8'hff;//无endcaseend
endmodule

3、动态扫描模块:

输入分频后的1KHz时钟作为位选信号的扫描频率,通过计数器的数值case输出位选和相应的段选信号。

module Display(input clk_div,input [7:0]Out_number_1,//第一位数字对应的段选码input [7:0]Out_number_2,//第二位数字对应的段选码input [7:0]Out_number_3,//第三位数字对应的段选码input [7:0]Out_number_4,//第四位数字对应的段选码output reg [7:0]duan_code,output reg [3:0]wei_code);//将输入的十六进制代码转换为共阳极数码管段选码动态扫描输出reg [2:0]sel_cnt;//扫描计数器//动态扫描always@(posedge clk_div)beginif(sel_cnt == 3'd4)beginsel_cnt <= 3'd0;endelsebeginsel_cnt <= sel_cnt + 3'd1;endendalways@(posedge clk_div)begincase(sel_cnt)3'd0:beginwei_code <= 4'b0001;duan_code <= Out_number_1;end3'd1:beginwei_code <= 4'b0010;duan_code <= Out_number_2;end3'd2:beginwei_code <= 4'b0100;duan_code <= Out_number_3;end3'd3:beginwei_code <= 4'b1000;duan_code <= Out_number_4;enddefault:beginwei_code <= 4'b0000;duan_code <= 8'hff;endendcaseendendmodule

4、顶层模块:

在顶层中例化上述三个模块,封装为一个模块,方便实例化调用,具体流程:分频器将输入的clk(50MHz)分频为clk_div(1KHz),送往Display用于扫描计数器的动态扫描,wei_encoder将输入的二进制数转化为共阳极数码管对应的段选码,送往Display模块扫描输出。

module SEG_display(input clk,input [7:0]number1,input [7:0]number2,output [3:0]wei_code,output [7:0]duan_code);//声明内部信号线wire [7:0]Out_number_1;//将要输出的段选码wire [7:0]Out_number_2;wire [7:0]Out_number_3;wire [7:0]Out_number_4;wire clk_div;//分频后的时钟//模块实例化//时钟分频,用于数码管计数扫描clk_div div(.clk(clk),.clk_div(clk_div));//将将要输出的数转化为段选码wei_encoder encoder1(.hex_number(number1[3:0]),.display_code(Out_number_1));wei_encoder encoder2(.hex_number(number1[7:4]),.display_code(Out_number_2));wei_encoder encoder3(.hex_number(number2[3:0]),.display_code(Out_number_3));wei_encoder encoder4(.hex_number(number2[7:4]),.display_code(Out_number_4));//数码管动态扫描显示Display display(.clk_div(clk_div),.Out_number_1(Out_number_1),.Out_number_2(Out_number_2),.Out_number_3(Out_number_3),.Out_number_4(Out_number_4),.duan_code(duan_code),.wei_code(wei_code));
endmodule

三、写在最后:

这个Verilog数码管动态扫描模块可以适用于Basys2几乎所有的项目,今后我将陆续更新鲲鲲的《Verilog与FPGA实现》 给我们布置的八个实验,一方面巩固自己的知识,另一方面有助于学弟学妹们学习。笔者不才,如有疏漏,欢迎各位网友批评指正。

基于Basys2的数码管动态扫描module(verilog)的模块化设计相关推荐

  1. 实验三 基于FPGA的数码管动态扫描电路设计 quartus/数码管/电路模块设计

    实验三 基于FPGA的数码管动态扫描电路设计 源文件的链接放在最后啦 实验目的: (1) 熟悉7段数码管显示译码电路的设计. (2) 掌握数码管显示原理及静态.动态扫描电路的设计. 实验任务: (1) ...

  2. 基于fpga的数码管动态扫描电路设计_【至简设计案例系列】基于FPGA的密码锁设计(altera版)...

    秦红凯 明德扬FPGA科教 一.项目背景概述 随着生活质量的不断提高,加强家庭防盗安全变得非常重要,但传统机械锁的构造过于简单,很容易被打开,从而降低了安全性.数字密码锁因为它的保密性很高,安全系数也 ...

  3. 基于FPGA的数码管动态扫描显示(含代码)

    数码管的显示有静态显示和动态扫描显示.一个数码管通常有8个段码,当要控制数码管的数量在两个及以上时,动态扫描无疑是一个最好的选择,可以大量节约IO资源. 静态显示很好理解,8个段码拼成了数字8.,当我 ...

  4. 基于fpga的数码管动态扫描电路设计_FPGA是什么?里面有什么?能做什么?

    本文由硬禾学堂创始人苏公雨首发于微信公众号电路设计技能. 今天在群里有工程师问我,怎么才叫学会了FPGA,怎么才叫学好了FPGA?我相信有很多朋友有类似的问题,因为在多数人的潜意识里,FPGA是非常高 ...

  5. FPGA项目五:数码管动态扫描

    文章目录 第五章 数码管动态扫描 第 1 节 项目背景 第 2 节 设计目标 第 3 节 设计实现 3.1 顶层信号 3.2 信号设计 3.3 信号定义 第四节 综合和上板 4.1 新建工程 4.2 ...

  6. 51单片机使用定时器进行数码管动态扫描程序

    数码管是51单片机学习中比较基础的一个模块,为简化电路连接,提高系统可靠性,降低制造成本,多位数码管广泛采用动态扫描的方式进行显示.如果程序编写不当,数码管动态扫描容易出现亮度不均匀.亮度过低.重影等 ...

  7. c语言数码管流动显示一个数,51单片机数码管动态显示 - 数码管动态扫描显示01234567程序(三种方案)...

    数码管动态扫描显示01234567程序二--51单片机动态显示共阳数码管01234567 原理图 c语言程序 程序如下: #include #define uint unsigned int #def ...

  8. 【Proteus仿真】8位数码管动态扫描显示变化数据

    [Proteus仿真]8位数码管动态扫描显示变化数据 Proteus仿真 示例代码 /*-----------------------------------------------名称:8位数码管动 ...

  9. 【萌新向】STC8A8K64S4A12开发学习(三)——数码管动态扫描

    数码管动态扫描 一.多位一体数码管 开发板上使用的是两个四位一体数码管,并且带有小数点,一个四位一体数码管共有12个引脚,各个位数码管共用一组a,b,c,d,e,f,g,dp引脚,通过另外4个引脚进行 ...

  10. linux 动态扫描 数码管,数码管动态扫描显示01234567程序(三种方案) - 全文

    数码管由于价格便宜,使用简单,在电器特别是家电领域(比如空调.热水器和冰箱等)得到了极为广泛的应用.在高校电子信息类专业单片机的教学过程中,数码管动态显示及实现方法是学生普遍反映较难掌握的内容.鉴于此 ...

最新文章

  1. 不懂 Zookeeper?没关系,看这篇就够了!
  2. UT斯达康XV6700应用及常见问题
  3. 二十四、深入Java抽象类,抽象方法和接口
  4. Activity小技巧
  5. @keyframes—定义动画关键帧
  6. P2486 [SDOI2011]染色(树链剖分+线段树)
  7. 建立代理,而不是框架
  8. 关于K8s技术架构的几个问题
  9. android windows 上JNI编程
  10. cvc-complex-type.2.4.c: The matching wildcard is strict, but no declaration
  11. 1007. 素数对猜想 (20)-PAT乙级真题
  12. 传统的 IT 销售渠道将会走向末路?
  13. 认识了解WMV 9 视频编解码器
  14. springboot+easypoi excel表格多个sheet导出
  15. html5文本框获取焦点,CSS3实现文本输入框获取焦点高亮显示
  16. [计算机网络]第二章——应用层
  17. BOJ 427. 学姐逗学弟
  18. JMS介绍:我对JMS的理解和认识
  19. [Tensorflow2] 梯度反转层(GRL)与域对抗训练神经网络(DANN)的实现
  20. python入门学习笔记——详细基础知识篇(第10章 正则表达式(重点)与JSON)

热门文章

  1. WebStorm 2019.1.1 最新注册码
  2. 【毕业设计】基于单片机的智能饮水控制系统 - 物联网 嵌入式 stm32 c51
  3. Facebook母公司:混合现实走向市场还需要数年时间
  4. Word插入脚注只占左下角一栏的方法
  5. 飞机选座——附:东航320选坐攻略
  6. 揭秘!飞机上不为人知的六大“怪事”
  7. 退欧令英国科技业措手不及,可能不再享受多项利好政策
  8. android图标分组名称唯美简单可复制,分组名称唯美简单四字
  9. 高德地图应用:接口调用权限安全升级( web端API接口加密)(文档篇)
  10. 大数据方面核心技术有哪些