• 方案介绍
  • 附件下载
  • 相关推荐
申请入驻 产业图谱

共阴数码管显示设计VHDL代码Quartus仿真

05/16 10:50
1274
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

2-250513192S3205.doc

共1个文件

名称:利用VHDL语言,实现0~8090任意进制8421BCD计数译码显示电路,并将计数器输出的8421BCD进行共阴数码管显示设计VHDL代码Quartus仿真

软件:Quartus

语言:VHDL

代码功能:

1、计数器具有同步置数功能、异步清零功能,用VHD实现计数逻辑,并阐述设计原理,给出关键block diagram设计框图。

2、8421BCD码7段译码部分可以参见74LS48功能,用VHDL实现译码逻辑,并阐述设计原理,给出关键 block diagram设计框图。

3、译码输岀后驱动的数码管为共阴极数码管,阐述电路原理,给出相应编码方式。

报告要求

(1)按要求的格式书写,所有内容一律打印、封面要求统一。

(2)报告内容包括设计过程、软件仿真的结果及分析。

(3)报告中要有整体电路原理图、各模块原理图。

(4)软件仿真包括各个模块的仿真和整体电路的仿真。

FPGA代码Verilog/VHDL代码资源下载:www.hdlcode.com

设计文档:

任意进制8421BCD计数译码显示

1、课题任务及要求

1.1课题任务

利用VHDL语言,实现0~8090任意进制8421BCD计数译码显示电路,并将计数器输出的8421BCD进行共阴极数码管显示。要求:

1. 计数器具有同步置数功能、异步清零功能,利用VHDL实现计数逻辑,并阐述设计原理,给出关键block diagram设计框图。

2. 8421BCD码译码部分可以参见74LS48功能,用VHDL实现译码逻辑,并阐述设计原理,给出关键block diagram设计框图。

3. 译码输出后驱动的数码管为共阴极数码管,阐述电路原理,给出响应的编码方式。

1.2课题要求

课题设计实现的功能指标为。

●设计指标一:计数器具有同步置数功能、异步清零功能

●设计指标二:使用8421BCD计数器

●设计指标三:译码输出后驱动的数码管为共阴极数码管

2、设计内容

系统总体设计思路为采用分模块设计,模块分为计数模块、数码管显示模块及顶层模块,具体模块功能具体介绍如下。

2.1 设计总体功能简介

系统总体设计思路为采用分模块设计,模块分为计数模块、数码管显示模块及顶层模块,采用自顶向下的设计思想。总体功能为实现0~8090任意进制8421BCD计数译码显示电路,并将计数器输出的8421BCD进行共阴极数码管显示

2.2 顶层模块功能

顶层模块实现将计数模块和显示模块连接的功能,顶层模块如下图所示

上图中,bcd_counter为计数模块,display为显示模块。顶层输入端口有:

Clk:时钟信号

Rst_p:系统复位信号高电平有效

Load:同步置数使能信号

Data_in[15:0]:同步置数的数据,采用8421BCD编码

顶层输出端口为4个7段数码管信号:

HEX0[6..0]:数码管0

HEX1[6..0]:数码管1

HEX2[6..0]:数码管2

HEX3[6..0]:数码管3

2.3 计数模块功能

计数模块如下图所示:

输入端口有:

Clk:时钟信号

Rst_p:系统复位信号,高电平有效

Load:同步置数使能信号

Data_in[15:0]:同步置数的数据,采用8421BCD编码

输出端口为计数值:

Data_out[15..0]:计数值输出采用8421BCD编码

该模块实现0~8090任意进制8421BCD计数器的功能,计数器具有同步置数功能、异步清零功能

2.4 显示模块功能

显示模块如下图所示:

输入端口有:

Clk:时钟信号

Data[15:0]:计数值,采用8421BCD编码

输出端口为4个7段数码管信号:

HEX0[6..0]:数码管0

HEX1[6..0]:数码管1

HEX2[6..0]:数码管2

HEX3[6..0]:数码管3

该模块实现8421BCD码译码功能,译码输出后驱动的数码管为共阴极数码管。

3、设计及实现方法

3.1 计时模块设计方法

计时模块实现0~8090任意进制8421BCD计数器的功能,计数器具有同步置数功能、异步清零功能。主要代码如下:

上述代码中,为实现任意进制的功能,定义了一个信号MOD_NUM信号,将该值设置为多少就是多少进制。下面process进制实现具体任意进制BCD码计数器的功能,定义了一个BCD编码的信号为count。

首先,实现异步清零的功能,当rst信号为1时,输出count为0,然后实现同步置数功能,当load信号为1时,将输入的data_in赋值给count。

最后就是实现BCD码计数器功能,首先判断是否计数到999,若是,则千位加1,否则继续判断是否计数到99,若是,则百位加1;否则继续判断是否计数到9,若是,则十位加1。否则只需要个位加1。

Count为BCD编码,其15~12位表示千位,11~8表示百位,7~4表示十位,3~0表示个位。

3.2 显示模块设计方法

显示模块实现8421BCD码译码功能,译码输出后驱动的数码管为共阴极数码管。其中单个数码管显示代码如下:

数码管显示模块用于控制数码管将计数值显示出来。使用7段数码管显示,每个数码管输入为7位,对应下图中的abcdefg7段,数码管为共阴极,当输入1时对应的段点亮,当输入为0时,对应的段灭。

根据上图可以观察到,若要显示数字0,G灭,ABCDEF亮,如果是共阳极数码管也就是对应编码为“1000000”,共阴极数码管则正好相反,故可以写成not “1000000”,也就是“0111111”,其中从左到右依次对应GFEDCBA。以此类推可以得到0~9的所有编码。

4、调试及运行结果

4.1 计时模块调试及运行结果

对计时模块进行单独仿真,仿真图如下图所示(为便于观察,设置进制为34)。

上图中,rst为异步清零信号,图中可以看到,当rst信号为1时,输出data_out立马清零。图中load为置位信号,图中可以看到,load信号为高时,输出data_out为data_in得值。

当rst和load信号均无效时,计数器按时钟正常计数,可以看到,当计数到34后,计数器清零,重新开始计数,故进制正确。

4.2 显示模块调试及运行结果

对显示模块进行单独仿真,仿真图如下图所示(为便于观察,设置计数器计数0~9)。

上图中,计数值输入为0000~0009,其中HEX0显示个位,也就是0~9,HEX1~3均显示0。根据前面关于数码管的介绍可知,0对应的编码为0111111,1对应的编码为0000110,以此类推可以做到仿真图0~9编码具正确。

4.3 系统总体调试及运行结果

对系统进行总体仿真,仿真图如下图所示:

上图可以看到,整体仿真图的仿真结果相当于将计数模块和显示模块进行合并显示,最终输出为HEX0~3的编码值。可以看到,当异步清零时,输出的编码值为0000,当同步置数时,输出的编码值为0034,其他情况下为递增计数。

5、设计总结

5.1设计中的问题、原因分析及解决方法

设计中一开始没有正确理解BCD编码的含义,导致使用了通常的二进制编码,这种编码的优点是代码简单,计数器较容易实现,但是缺点是不能直接按位分离出千位,百位,十位个位,导致时数码管显示不正确,后续改进为8421BCD编码,虽然计数器代码设计相对复杂一点,但是对于数码管显示部分就可以按位分离出千位,百位,十位和个位。

5.2设计方案的优缺点

本设计方案的优点是结构清晰,采用分模块设计方法,各个模块功能比较明确,可以分模块仿真,易于调试;缺点的话在于任意进制的设计在计数模块内通过一个参数进行定义,当要修改进制时,需要修改该模块内的参数,不是很灵活。

5.3心得体会

通过这次设计,我加深了对VHDL代码的理解,熟悉了quartus软件的编码和仿真操作,并且对8421BCD码的作用也有了更深刻的认识。通过这次实验,我对我使用VHDL和EDA工具有了一定的提高,后续有其他功能设计的话可以更加容易的上手,也锻炼了自己发现问题和解决问题的能力,为今后打下坚固基础。

部分代码展示:

LIBRARY?ieee;
???USE?ieee.std_logic_1164.all;
ENTITY?display?IS
???PORT?(
??????clk???:?IN?STD_LOGIC;
??????data??:?IN?STD_LOGIC_VECTOR(15?DOWNTO?0);
??????HEX0??:?OUT?STD_LOGIC_VECTOR(6?DOWNTO?0);
??????HEX1??:?OUT?STD_LOGIC_VECTOR(6?DOWNTO?0);
??????HEX2??:?OUT?STD_LOGIC_VECTOR(6?DOWNTO?0);
??????HEX3??:?OUT?STD_LOGIC_VECTOR(6?DOWNTO?0)
???);
END?display;
ARCHITECTURE?RTL?OF?display?IS
BEGIN
???
???PROCESS?(clk)
???BEGIN
??????IF?(clk'EVENT?AND?clk?=?'1')?THEN
?????????CASE?data(3?DOWNTO?0)?IS
????????????WHEN?"0000"?=>
???????????????HEX0?
???????????????HEX0?
???????????????HEX0?
???????????????HEX0?
???????????????HEX0?
???????????????HEX0?
???????????????HEX0?
???????????????HEX0?
???????????????HEX0?
???????????????HEX0?
?????????END?CASE;
??????END?IF;
???END?PROCESS;
???
???
???PROCESS?(clk)
???BEGIN
??????IF?(clk'EVENT?AND?clk?=?'1')?THEN
?????????CASE?data(7?DOWNTO?4)?IS
????????????WHEN?"0000"?=>
???????????????HEX1?
???????????????HEX1?
???????????????HEX1?
???????????????HEX1?
???????????????HEX1?
???????????????HEX1?
???????????????HEX1?
???????????????HEX1?
???????????????HEX1?
???????????????HEX1?
?????????END?CASE;
??????END?IF;
???END?PROCESS;
???
???
???PROCESS?(clk)
???BEGIN
??????IF?(clk'EVENT?AND?clk?=?'1')?THEN
?????????CASE?data(11?DOWNTO?8)?IS
????????????WHEN?"0000"?=>
???????????????HEX2?
???????????????HEX2?
???????????????HEX2?
???????????????HEX2?
???????????????HEX2?
???????????????HEX2?
???????????????HEX2?
???????????????HEX2?
???????????????HEX2?
???????????????HEX2?
?????????END?CASE;
??????END?IF;
???END?PROCESS;

点击链接获取代码文件:http://www.hdlcode.com/index.php?m=home&c=View&a=index&aid=1518

  • 2-250513192S3205.doc
    下载

相关推荐