VHDL语言四人抢答器.docx

上传人:b****7 文档编号:16751694 上传时间:2023-07-17 格式:DOCX 页数:19 大小:440.86KB
下载 相关 举报
VHDL语言四人抢答器.docx_第1页
第1页 / 共19页
VHDL语言四人抢答器.docx_第2页
第2页 / 共19页
VHDL语言四人抢答器.docx_第3页
第3页 / 共19页
VHDL语言四人抢答器.docx_第4页
第4页 / 共19页
VHDL语言四人抢答器.docx_第5页
第5页 / 共19页
VHDL语言四人抢答器.docx_第6页
第6页 / 共19页
VHDL语言四人抢答器.docx_第7页
第7页 / 共19页
VHDL语言四人抢答器.docx_第8页
第8页 / 共19页
VHDL语言四人抢答器.docx_第9页
第9页 / 共19页
VHDL语言四人抢答器.docx_第10页
第10页 / 共19页
VHDL语言四人抢答器.docx_第11页
第11页 / 共19页
VHDL语言四人抢答器.docx_第12页
第12页 / 共19页
VHDL语言四人抢答器.docx_第13页
第13页 / 共19页
VHDL语言四人抢答器.docx_第14页
第14页 / 共19页
VHDL语言四人抢答器.docx_第15页
第15页 / 共19页
VHDL语言四人抢答器.docx_第16页
第16页 / 共19页
VHDL语言四人抢答器.docx_第17页
第17页 / 共19页
VHDL语言四人抢答器.docx_第18页
第18页 / 共19页
VHDL语言四人抢答器.docx_第19页
第19页 / 共19页
亲,该文档总共19页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

VHDL语言四人抢答器.docx

《VHDL语言四人抢答器.docx》由会员分享,可在线阅读,更多相关《VHDL语言四人抢答器.docx(19页珍藏版)》请在冰点文库上搜索。

VHDL语言四人抢答器.docx

VHDL语言四人抢答器

中南林业科技大学

课程设计报告

设计名称:

基于VHDL语言的四人抢答器

姓名:

杜涵学号:

20134491

专业班级:

电子信息工程一班

院(系):

计算机与信息工程学院

设计时间:

2015年12月8日

设计地点:

东园22栋201

一、设计题目………………………………………………

二、设计要求………………………………………………

三、设计目的………………………………………………

四、设计背景………………………………………………

五、使用工具………………………………………………

六、设计原理………………………………………………

七、设计结构………………………………………………

八、原理图…………………………………………………

九、模块程序………………………………………………

十、引脚分配………………………………………………

十一、设计结果验证………………………………………

十二、总结…………………………………………………

 

一、设计题目:

基于VHDL语言的四路抢答器

二丶设计要求:

1、设计制作一个竞赛抢答器,每组受控于一个抢答开关,分别为S1,S2,S3,S4。

2、控制键K,用于控制整个系统清零,K=0,系统清零;抬起复位键时,K=1,抢答开始。

3、每答对一题计十分,每次答题时间不能超过60秒。

4、第一抢答者按下抢答按钮,对应的led灯点亮,同时数码管显示是第几位抢答者,并封锁其他各组的按钮,即其他任何一组按键都不会再使电路响应。

与此同时,数码管开始显示60秒的倒计时。

通过K键复位,开始下一轮抢答。

三、设计目的

1.通过设计竞赛抢答器的实例来体会设计实际产品的过程,在学好理论的基础上,提高动手实践能力。

2.学习怎样用vhdl语言来描述自己的设计思路,调试硬件后,能够使产品实现功能。

3.进一步掌握用vhdl语言编写数字电路。

4.在做课题过程中,掌握多位共阴极扫描显示数码管的驱动及编码,学会使用和调试硬件。

 

四、设计背景

现代电子产品几乎渗透了社会的各个领域EDA技术是电子设计的发展趋势, EDA工具从数字系统设计的单一领域,应用范围己涉及模拟、微波等多个领域,可实现各个领域电子系统设计的测试、设计仿真和布局布线等。

设计者只要完成对电子系统的功能描述,就可利用计算机和EDA工具,进行设计处理,最终得到设计结果。

 随着大规模集成电路技术和计算机技术的不断发展,即使是普通的电子产品的开发,EDA技术常常使一些原来的技术瓶颈得以轻松突破,从而使产品的开发周期大为缩短、性能价格比大幅提高。

不言而喻,EDA技术将迅速成为电子设计领域中的极其重要的组成部分。

从目前的EDA技术来看,其发展趋势是政府重视、使用普及、应用文泛、工具多样、软件功能强大。

抢答器是一种应用非常广泛的设备,在各种竞猜、抢答场合中,它能迅速、客观地分辨出最先获得发言权的选手。

早期的抢答器只由几个三极管可控硅、发光管等组成,能通过发光管的指示辨认出选手。

现在大多数抢答器均使用单片机和数字集成电路,并增加了许多新的功能,如选手号码显示、抢按器或抢按后的计时、选手得分显示等功能。

 

五、使用工具:

装有QuartusII软件的PC、Cyclone系列FPGA开发板(ep2c5t144c8)

六、设计原理

根据设计要求,我们经过分析应用分模块的方式比较容易设计该抢答器,我们底层应用VHDL语言,顶层应用原理图的方式进行设计,然后通过仿真验证并不断修改完善设计。

模块:

(1)四人按键抢答模块:

设计为五个输入按键,其实S键为主持人控制抢答过程的按键,当有选手抢答后使其他人的按键无效。

然后根据抢答成功者的编号使对应LED灯点亮,同时输出一个状态让数码管显示抢答者编号。

主持人S键复位,开始下一轮抢答。

(2)计时模块:

在有人抢答后开始一个60秒的倒计时,并输出道数码管显示,CLK来自1HZ分频模块。

(3)计分模块:

在选手答题正确后通过外接ADD键给该选手加分,每次加十分,并输出到数码管显示,CLEAR键为清空所有选手分数。

(4)译码模块:

讲选手序号,倒计时以及选手分数显示出来,CLK由1KHz分频模块提供。

(5)1HZ与1KHz分频模块:

程序由FPGA板的50MHz频率编写。

 

七、设计结构

 

 

八、原理图:

 

 

九、模块程序

1、抢答模块

程序:

Libraryieee;

Useieee.std_logic_1164.all;

Useieee.std_logic_unsigned.all;

Useieee.std_logic_arith.all;

EntityQDis

Port(

s,clk:

instd_logic;

s0,s1,s2,s3:

instd_logic;

states:

bufferstd_logic_vector(3downto0);

T:

outstd_logic;

LIANG:

bufferstd_logic_vector(3downto0);

XI:

bufferstd_logic_vector(3downto0));

EndQD;

ArchitectureaaofQDis

signals_0,s_1,s_2,s_3,l_1,l_2,l_3,l_4:

std_logic;

begin

process(s0,s1,s2,s3,s,clk)

begin

XI<="1111";

if(s='0')thens_0<='0';s_1<='0';s_2<='0';s_3<='0';LIANG<="1111";

elsif(clk'eventandclk='1')then

if(s_0='1'ors_1='1'ors_2='1'ors_3='1')

thennull;

elsifs0='0'thens_0<='1';states<="0001";LIANG<="1110";

elsifs1='0'thens_1<='1';states<="0010";LIANG<="1101";

elsifs2='0'thens_2<='1';states<="0011";LIANG<="1011";

elsifs3='0'thens_3<='1';states<="0100";LIANG<="0111";

elsestates<="0000";

endif;

endif;

T<=s_0ors_1ors_2ors_3;

endprocess;

endaa;

说明:

S为主持人复位键;

S0,S1,S2,S3:

四个抢答选手;

STATES:

抢答组号输出

T:

在S按下后使倒计时停止;

LIANG:

控制四个LED灯,点亮选手对应LED灯;

XI:

使另外四个LED灯熄灭;

2、计时模块

程序:

libraryieee;

useieee.std_logic_arith.all;

useieee.std_logic_unsigned.all;

useieee.std_logic_1164.all;

entityJSis

port(clk,s,T:

instd_logic;

sw,gw:

bufferstd_logic_vector(3downto0));

endJS;

architectureaaofJSis

begin

process(clk,s,T)

begin

if(s='0')thensw<="0110";gw<="0000";

elsif(clk'eventandclk='1')then

if(T='0')thengw<=gw;sw<=sw;

elsif(gw="0000")thengw<="1001";

if(sw="0000")thensw<="0000";

elsesw<=sw-1;

endif;

else

gw<=gw-1;

endif;

if(sw=0andgw=0)thensw<="0000";gw<="0000";

endif;

endif;

endprocess;

endaa;

说明:

S:

按下后倒计时开始;

SW:

输出倒计时十位数;

GW:

输出倒计时百位数

3、计分模块

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

USEIEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITYJFQIS

PORT(RST:

INSTD_LOGIC;

ADD:

INSTD_LOGIC;

CHOS:

INSTD_LOGIC_VECTOR(3DOWNTO0);

OUT1:

OUTSTD_LOGIC_VECTOR(3DOWNTO0));

ENDENTITYJFQ;

ARCHITECTUREARTOFJFQIS

BEGIN

PROCESS(RST,ADD,CHOS)IS

VARIABLEPOINTS_A0:

STD_LOGIC_VECTOR(3DOWNTO0);

VARIABLEPOINTS_B0:

STD_LOGIC_VECTOR(3DOWNTO0);

VARIABLEPOINTS_C0:

STD_LOGIC_VECTOR(3DOWNTO0);

VARIABLEPOINTS_D0:

STD_LOGIC_VECTOR(3DOWNTO0);

BEGIN

IFRST='1'THEN

POINTS_A0:

="0000";

POINTS_B0:

="0000";

POINTS_C0:

="0000";

POINTS_D0:

="0000";

ELSIF(ADD'EVENTANDADD='0')THEN

IFCHOS="0001"THEN

IFPOINTS_A0="1001"THEN

POINTS_A0:

="0000";

ELSE

POINTS_A0:

=POINTS_A0+1;

ENDIF;

ENDIF;

IFCHOS="0010"THEN

IFPOINTS_B0="1001"THEN

POINTS_B0:

="0000";

ELSE

POINTS_B0:

=POINTS_B0+1;

ENDIF;

ENDIF;

IFCHOS="0011"THEN

IFPOINTS_C0="1001"THEN

POINTS_C0:

="0000";

ELSE

POINTS_C0:

=POINTS_C0+1;

ENDIF;

ENDIF;

IFCHOS="0100"THEN

IFPOINTS_D0="1001"THEN

POINTS_D0:

="0000";

ELSE

POINTS_D0:

=POINTS_D0+1;

ENDIF;

ENDIF;

ENDIF;

IFchos="0001"thenout1<=POINTS_a0;

ELSIFchos="0010"thenout1<=POINTS_b0;

ELSIFchos="0011"thenout1<=POINTS_c0;

ELSIFchos="0100"thenout1<=POINTS_D0;

ELSIFchos="0000"thenout1<="0000";

ENDIF;

ENDPROCESS;

ENDARCHITECTUREART;

说明:

RST:

分数清零按键;

ADD:

加分按键;

CHOS=STATES:

输入选手组号;

OUT1:

输出分数;

4、译码显示模块

程序:

libraryieee;

useieee.std_logic_1164.all;

useieee.std_logic_arith.all;

useieee.std_logic_unsigned.all;

entityYMis

port(a:

instd_logic_vector(3downto0);

b:

instd_logic_vector(3downto0);

c:

instd_logic_vector(3downto0);

clk1:

instd_logic;

Y:

instd_logic_vector(3downto0);

adres:

outstd_logic_vector(7downto0);

led7s:

outstd_logic_vector(7downto0));

endYM;

ARCHITECTUREsegledofYMis

signalS:

integerrange0to12;

signalD:

std_logic_vector(3downto0);

signalzero:

std_logic_vector(3downto0);

begin

P1:

process(clk1)

begin

zero<="0000";

ifclk1'eventandclk1='1'then

ifS<5then

S<=S+1;

else

S<=1;

endif;

endif;

endprocessP1;

P2:

process(S)

begin

caseSis

when1=>D<=a;adres<="01111111";

when2=>D<=b;adres<="11011111";

when3=>D<=c;adres<="11101111";

when4=>D<=Y;adres<="11111101";

when5=>D<=zero;adres<="11111110";

whenothers=>null;

endcase;

endprocessP2;

P3:

process(D)

begin

caseDis

when"0000"=>led7s<="11000000";--0

when"0001"=>led7s<="11111001";--1

when"0010"=>led7s<="10100100";--2

when"0011"=>led7s<="10110000";--3

when"0100"=>led7s<="10011001";--4

when"0101"=>led7s<="10010010";--5

when"0110"=>led7s<="10000010";--6

when"0111"=>led7s<="11111000";--7

when"1000"=>led7s<="10000000";--8

when"1001"=>led7s<="10011000";--9

whenothers=>null;

endcase;

endprocessP3;

endsegled;

说明:

A:

输入选手组号;

B:

倒计时十位;

C:

倒计时个位;

Y:

选手分数;

ADRES:

控制数码管位选;

LED7S:

控制数码管段选;

5、分频模块

程序:

libraryieee;

useieee.std_logic_1164.all;

useieee.std_logic_arith.all;

useieee.std_logic_unsigned.all;

entityFPis

port(clk:

inSTD_LOGIC;clk1Hz:

outstd_logic);

endFP;

ARCHITECTUREsegledofFPis

begin

PROCESS(clk)

VARIABLEcount:

INTEGERRANGE0TO49999999;

BEGIN

IFclk'EVENTANDclk='1'THEN

IFcount<=24999999THEN

clk1Hz<='0';count<=24999999时divls=0并且count加1

count:

=count+1;

ELSIFcount>=24999999ANDcount<=49999999THEN

clk1Hz<='1';

count:

=count+1;

ELSEcount:

=0;

ENDIF;

ENDIF;

ENDPROCESS;

ENDARCHITECTUREsegled;

(分频1HZ时将其中的数去掉三个9)

6、计分器ADD加分输入消抖模块

程序:

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

USEIEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITYXIAODIS

PORT(CLK,ADD:

INSTD_LOGIC;

ADD_EN:

OUTSTD_LOGIC);

ENDENTITY;

ARCHITECTUREBHVOFXIAODIS

BEGIN

PROCESS(CLK,ADD)

VARIABLECOUNT1:

INTEGERRANGE0TO100000;

BEGIN

IFADD='0'THEN

IFRISING_EDGE(CLK)THEN

IFCOUNT1<100000THENCOUNT1:

=COUNT1+1;

ELSECOUNT1:

=COUNT1;ENDIF;

IFCOUNT1=99999THENADD_EN<='1';

ELSEADD_EN<='0';ENDIF;

ENDIF;

ELSECOUNT1:

=0;

ENDIF;

ENDPROCESS;

END;

十:

引脚分配

十一、设计结果验证

编译成功后下载到FPGA板上进行结果验证:

数码管显示06000;

按下S后,显示05900;

S0抢答后,显示1倒计时停止按下ADD显示10第一个LED灯点亮;

S1抢答后,显示2倒计时停止按下ADD显示10第二个LED灯点亮;

S2抢答后,显示3倒计时停止按下ADD显示10第三个LED灯点亮;

S3抢答后,显示4倒计时停止按下ADD显示10第四个LED灯点亮;

若按下RST键,所有选手得分清零。

十二:

总结

在这次的课程设计中,我对VHDL语言以及QUARTUSII软件的应用有了更深刻的认识。

一个个程序的编写及模块的生成锻炼了我的思维,让我对每个模块的功能、每段程序的作用有了更多的了解。

通过不断的思考,总的原理图才能够完成。

通过不断的出错与修改、完善,最终才能在FPGA上应用,我感觉付出都是值得的。

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

当前位置:首页 > 高等教育 > 院校资料

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

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