显示电路设计VHDL编程.docx

上传人:b****0 文档编号:9595389 上传时间:2023-05-20 格式:DOCX 页数:14 大小:83KB
下载 相关 举报
显示电路设计VHDL编程.docx_第1页
第1页 / 共14页
显示电路设计VHDL编程.docx_第2页
第2页 / 共14页
显示电路设计VHDL编程.docx_第3页
第3页 / 共14页
显示电路设计VHDL编程.docx_第4页
第4页 / 共14页
显示电路设计VHDL编程.docx_第5页
第5页 / 共14页
显示电路设计VHDL编程.docx_第6页
第6页 / 共14页
显示电路设计VHDL编程.docx_第7页
第7页 / 共14页
显示电路设计VHDL编程.docx_第8页
第8页 / 共14页
显示电路设计VHDL编程.docx_第9页
第9页 / 共14页
显示电路设计VHDL编程.docx_第10页
第10页 / 共14页
显示电路设计VHDL编程.docx_第11页
第11页 / 共14页
显示电路设计VHDL编程.docx_第12页
第12页 / 共14页
显示电路设计VHDL编程.docx_第13页
第13页 / 共14页
显示电路设计VHDL编程.docx_第14页
第14页 / 共14页
亲,该文档总共14页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

显示电路设计VHDL编程.docx

《显示电路设计VHDL编程.docx》由会员分享,可在线阅读,更多相关《显示电路设计VHDL编程.docx(14页珍藏版)》请在冰点文库上搜索。

显示电路设计VHDL编程.docx

显示电路设计VHDL编程

第9章显示电路设计

本章重点讨论输出结果在数码管上的显示。

电子线路输出一般都是用灯的亮与不亮来表示输出的高低电平,这种显示不直观。

数码管显示能够更加直观、形象的描述现象。

9.1两输入或门输出显示

两输入或门是数字逻辑电路中最基本的门电路,电路图如下:

值表:

a

b

y

0

0

0

0

1

1

1

0

1

1

1

1

两输入或门的程序设计可以有多种方式设计。

输出结果主要通过38译码器译码转换为7段显示码的输入,其电路程序设计如下:

libraryieee;useieee.stdJogic_1164.all;

useieee.std」ogic_unsigned.all;

*****************************************

ENTITYor1IS

PORT(a,b:

INSTD_LOGIC;

out_c:

outstd」ogic_vector(7downto0);

out_38:

outstd_logic_vector(2downto0)

);

ENDorl;

*******************************************architecturertlOFor1ISsignaly:

std」ogic;

begin

y<=aORb;

out_38<=”000”;

out_c<=”00111111nwheny='O*else

”00000110”;

ENDrtl;

9.23进制计数器

上一章讲到过3进制计数器的设计原理,按照一般的显示需要两个灯显示结果,在这里我们用一个数码管显示。

让读者能够更加直观的理解3进制计数器的记数过程。

其程序设计如下:

顶层文件设计:

LIBRARYIEEE;

USEIEEE.STDLOGIC1164.ALL;

ENTITYdsp3IS

PORT(enable:

INSTD_LOGIC;

clk:

INSTD_LOGIC;

out_38:

outstd_logic_vector(2downto0);

segment:

OUTSTD_LOGIC_VECTOR(6DOWNTO0));

ENDdsp3;

ARCHITECTURErt1OFdsp3IS

COMPONENTcount3

PORT(enable:

INSTD_LOGIC;

clk:

INSTD_LOGIC;

q:

OUTSTD_LOGIC_VECTOR(1DOWNTO0));

ENDCOMPONENT;

SIGNALq:

STD_LOGIC_VECTOR(1DOWNTO0);

BEGIN

U0:

count3PORTMAP(enable,clk,q);

out_38<=”000”;

segment<=”00111111"whenq=H00Helse

H00000110Hwhenq=H01”else

ENDrt1;

再该程序中用COMPONENT命令调用了3进制计数器的设计程序,

其程序如下:

LIBRARYIEEE;

USEIEEE.STDLOGIC1164.ALL;

USEIEEE.STDLOGICUNSIGNED.ALL;

ENTITYcount3IS

PORT(enable:

INSTD_LOGIC;clk:

INSTD_LOGIC;q:

OUTSTD_LOGIC_VECTOR(1DOWNTO0));

ENDcount3;

ARCHITECTURErt1OFcount3IS

SIGNALq_tmp:

STD_LOGIC_VECTOR(1DOWNTO0);

BEGINprocess(clk)begin

IF(clk'eventandclk=T)then

if(enable=,1,)then

if(q_tmp=n10n)then

q_tmp<=(others=>,0,);

else

q_tmpv二q_tmp+1;

endif;

endif;

endif;

9.324进制计数器

24进制计数器显示和3进制计数器的显示思路一样。

不同之处在于前者需要两个数码管,在设计时必须考虑选择数码管。

在任何自顶向下的VHDL设计描述中,设计人员常常将整个设计的系统划分为几个模块,然后采用结构描述方式对整个系统进行描述。

9.3.1顶层结构体的VHDL源代码

24进制计数器显示程序设计过程中就包含了记数部分'显示部分。

另外为了使记数准确,我们必须要获得稳定的频率,即还包括稳定的频率源

部分。

下面我们给出顶层结构体的VHDL源代码。

其中3个模块以元件的形

式给出,首先在结构体的说明部分进行元件说明,然后在结构体中进行例化调用。

同时在结构体的说明部分定义了中间信号,主要用来在模块之间传递

信息。

LIBRARYIEEE;

USEIEEE.STDLOGIC1164.ALL;

USEIEEE.STDLOGICUNSIGNED.ALL;

ENTITYclockIS

PORT(

clk:

INSTD_LOGIC;

enable:

INSTD_LOGIC;

sel:

OUTSTD_LOGIC_VECTOR(2DOWNTO0);

segment:

OUTSTD_LOGIC_VECTOR(6DOWNTO0));

ENDclock;

ARCHITECTURErt1OFclockIS

COMPONENTclk_div1000

PORT(clk:

INSTD_LOGIC;

clk_div:

outSTD_LOGIC);

endcomponent;

componentcount24

PORT(

enable:

INSTD_LOGIC;

clkO:

INSTD_LOGIC;

qh:

OUTSTD_LOGIC_VECTOR(3DOWNTO0);ql:

OUT

STD_LOGIC_VECTOR(3DOWNTO0));

endcomponent;

componentdisplay

PORT(

clk:

INSTD_LOGIC;

qh:

INSTD_LOGIC_VECTOR(3DOWNTO0);

ql:

INSTD_LOGIC_VECTOR(3DOWNTO0);sekout

STD_LOGIC_VECTOR(2DOWNTO0);

segment:

OUTSTD_LOGIC_VECTOR(6DOWNTO0));endcomponent;

signalqh:

STD_LOGIC_VECTOR(3DOWNTO0);signalql:

STD_LOGIC_VECTOR(3DOWNTO0);

signalclkO:

STD_LOGIC;

begin

u0:

clk_div1000PORTMAP(clk,clkO);

u1:

count24PORTMAP(enable,clkO5qh,ql);

u2:

displayPORTMAP(clk,qh,ql,sei,segment);

endrt1;

9.3.2频率源VHDL源代码

为了获得的稳定的频率源,我们才用1000赫兹频率作为输入,用1000进

制计数器分频得到1赫兹频率。

其程序如下:

LIBRARYIEEE;

USEIEEE.STDLOGIC1164.ALL;

USEIEEE.STDLOGICUNSIGNED.ALL;

ENTITYclk_div1OOOIS

PORT(clk:

INSTD_LOGIC;

clk_div:

outSTD_LOGIC);

ENDclk_div1OOO;

ARCHITECTURErt1OFclk_div1OOOIS

SIGNALq_tmp:

integerrange0to999;

BEGIN

process(clk)

begin

IF(clk'eventandclk=T)then

if(q_tmp=999)then

q_tmp<=0;

else

q_tmp<=q_tmp+1;

endif;

endif;endprocess;process(clk)

begin

IF(clk*eventandclk=T)then

if(q_tmp=999)then

clk_div<=T;

else

clk_div<=0,;

endif;

endif;

endprocess;

endrt1;

9.3.3计数部分VHDL源代码

24进制计数器的计数主要是24进制,在这里我们把24分为个位和十位设计。

其VHDL源代码如下:

LIBRARYIEEE;

USEIEEE.STDLOGIC1164.ALL;

USEIEEE.STDLOGICUNSIGNED.ALL;

ENTITYcount24IS

PORT(

enable:

INSTD_LOGIC;

clkO:

INSTD_LOGIC;

-cout:

outSTD_LOGIC;

qh:

OUTSTD_LOGIC_VECTOR(3DOWNTO0);

ql:

OUTSTD_LOGIC_VECTOR(3DOWNTO0));

ENDcount24;

ARCHITECTURErt1OFcount24IS

SIGNALqh_temp3ql_temp:

STD_LOGIC_VECTOR(3DOWNTO0);

BEGINprocess(clkO)begin

IF(clkO*eventandclkO=T)then

if(enable=*r)then

if(qh_temp=H0010nandql_temp=n0011n)thenqh_temp<=HOOOOH;

ql_temp<=nOOOOn;

else

if(ql_temp=H1001H)thenql_temp<=HOOOOH;qh_tempv=qh_teinp+1;

else

ql_temp<=ql_temp+1;

endif;

endif;

endif;

endif;

qhV二qh_temp;qlv二ql_temp;endprocess;

endrt1;

934显示模块VHDL源代码

显示模块的输入信号主要来自于计数部分的输出信息。

在输出信号

中,我们采用循环点亮两个LED七段显示数码管显示输出。

我们通过信号来

进行2个LED七段显示数码的选择,从而将输出信号送到相应的LED七段显示数码上完成24进制计数器的结果显示。

模块框图如下:

电路、七段显示译码电路。

在外部时钟信号elk的作用下,8进制计数器的输出从000到111按顺序循环变化,输出信号为se。

信号sei作为计时位选择电路的选择信号,用来选择对应位的数据并将其转换为四位位矢量。

最后将计时位选择电路的输出信号q送到七段显示译码电路的输入端口,将其转换成用来点燃LED七段显示数码管的segment信号。

下面描述显示模块中的四个子电路,然后描述其总体功能。

8进制计数

器VHDL源代码:

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

USEIEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITYcount8IS

PORT(

clk:

INSTD_LOGIC;

sekOUTSTD_LOGIC_VECTOR(2DOWNTO0));

ENDcount8;

ARCHITECTURErt1OFcount8IS

SIGNALsel_tmp:

STD_LOGIC_VECTOR(2DOWNTO0);

BEGIN

process(clk)

begin

IF(clk'eventandclk=T)then

if(sel_tmp=n111H)then

sel_tmp<=(others=>,0,);

else

sel_tmp<=sel_tmp+1;

endif;

endif;

sel<=sel_tmp;

endprocess;

endrt1;

计时位选择电路的功能是根据8进制计数器的计数输出的选择信号来选择对应计时显示位的计时数据,作为送致七段显示译码电路的输入数据。

在计时位选择电路中我们要将输入数据都转化成4位宽度的数据。

其VHDL源代码如下:

LIBRARYIEEE;

USEIEEE.STDLOGIC1164.ALL;

ENTITYtime_chooseIS

PORT(sel:

INSTD_LOGIC_VECTOR(2DOWNTO0);

qh:

INSTD_LOGIC_VECTOR(3DOWNTO0);

ql:

INSTD_LOGIC_VECTOR(3DOWNTO0);

q:

OUTSTD_LOGIC_VECTOR(3DOWNTO0));

ENDtime_choose;

ARCHITECTURErt1OFtime_chooseIS

BEGIN

PROCESS(sel,qh,ql)

BEGIN

CASEseiIS

WHENnOOOH=>q<=ql;

WHENH001n=>q<=qh;

WHENOTHERS=>q<=HXXXXH;

ENDCASE;

ENDPROCESS;

ENDrt1;

七段显示译码电路的功能是将显示的数据转换成用来点燃

LED七段显示数码管的segment信号。

其VHDL源代码如下:

LIBRARYIEEE;

USEIEEE.STDLOGIC1164.ALL;

ENTITYseg7IS

PORT(q:

INSTD_LOGIC_VECTOR(3DOWNTO0);segment:

OUTSTD_LOGIC_VECTOR(6DOWNTO0));

ENDseg7;

ARCHITECTURErt1OFseg7IS

BEGIN

PROCESS(q)

BEGIN

CASEqIS

WHENH0000H=>segment<=H01

WHENH0001H=>segment<=H0000110H;

WHENH0010H=>segment<=H1011011H;

WHEN”0011H=>segment<=H1001111H;

WHENH0100H=>segment<=H1100110n;

WHENH0101H=>segment<=H1101101”;

WHENH0110H=>segment<=H1

WHENH0111H=>segment<=H0100111H;

WHENH1000H=>segment<=H1

WHENH1001n=>segment<=H1

WHENOTHERS=>segment<=HXXXXXXXM;

ENDCASE;

ENDPROCESS;

ENDrt1;

下面对24进制计数器显示模块总体功能描述。

在描述24进制计数器显示模块时,我们以引用元件的形式来调用以上描述的子电路。

其VHDL源代码如下:

LIBRARYIEEE;

USEIEEE.STDLOGIC1164.ALL;

ENTITYdisplayIS

PORT(

clk:

INSTD_LOGIC;

qh:

INSTD_LOGIC_VECTOR(3DOWNTO0);

ql:

INSTD_LOGIC_VECTOR(3DOWNTO0);sel:

OUT

STD_LOGIC_VECTOR(2DOWNTO0);segment:

OUT

STD_LOGIC_VECTOR(6DOWNTO0));

ENDdisplay;

ARCHITECTURErt1OFdisplayIS

COMPONENTcount8

PORT(clk:

INSTD_LOGIC;

sel:

OUTSTD_LOGIC_VECTOR(2DOWNTO0));

ENDCOMPONENT;

COMPONENTtime_choose

PORT(sel:

INSTD_LOGIC_VECTOR(2DOWNTO0);qh:

IN

STD_LOGIC_VECTOR(3DOWNTO0);ql:

IN

STD_LOGIC_VECTOR(3DOWNTO0);q:

OUT

STD_LOGIC_VECTOR(3DOWNTO0));

ENDCOMPONENT;

COMPONENTseg7

PORT(q:

INSTD_LOGIC_VECTOR(3DOWNTO0);segment:

OUT

STD_LOGIC_VECTOR(6DOWNTO0));

ENDCOMPONENT;

SIGNALsel_tmp:

STD_LOGIC_VECTOR(2DOWNTO0);

SIGNALq:

STD_LOGIC_VECTOR(3DOWNTO0);

SIGNALsegment_tmp:

STD_LOGIC_VECTOR(6DOWNTO0);

BEGIN

U0:

count8PORTMAP(clk,sel_tmp);sel<=sel_tmp;

U2:

time_choosePORTMAP(sel_tmp,qh,ql,q);

U3:

seg7PORTMAP(q,segment_tmp);segment<=segment_tmp;

ENDrt1;

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 外语学习 > 其它语言学习

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2