FPGA四路电子抢答器设计文档格式.docx
《FPGA四路电子抢答器设计文档格式.docx》由会员分享,可在线阅读,更多相关《FPGA四路电子抢答器设计文档格式.docx(13页珍藏版)》请在冰豆网上搜索。
系统的输出信号有:
四个组抢答成功与否的指示灯控制信号输出口可用a1、b1、c1、d1表示,四个组抢答时的计时数码显示控制信号,抢答成功组别显示的控制信号,各组计分显示的控制信号。
整个系统至少有三个主要模块:
抢答鉴别模块;
抢答计时模块;
抢答计分模块,其他功能模块(输出显示模块)。
3.如图为流程图:
开始→抢答→抢答鉴别→回答→加减分数→显示
↑↑
倒计时倒计时
犯规抢答或抢答后答题时间超时鸣喇叭警告。
4.抢答器的顶层原理图设计:
三、详细设计
(一)抢答鉴别与锁存模块
抢答队伍共分为四组A,B,C,D。
当主持人按下STA键后,对应的start指示灯亮,四组队伍才可以按抢答键抢答,即抢答信号A,B,C,D输入电路中后,通过判断是哪个信号最先为‘1’得出抢答成功的组别1,2,3或4组,将组别号输出到相应端A1,B1,C1,D1,并将组别序号换算为四位二进制信号输出到STATES[3..0]端锁存,等待输出到计分和显示单元。
同时RING端在有成功抢答的情况下发出警报。
其模块如下:
抢答鉴别模块
1抢答鉴别与锁存源程序
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entityqdjbis
port(STA,RST:
instd_logic;
A,B,C,D:
A1,B1,C1,D1,START:
outstd_logic;
STATES:
outstd_logic_vector(3downto0));
endqdjb;
architectureoneofqdjbis
signalsinor,ringf,tmp,two:
std_logic;
begin
sinor<
=(AXORB)XOR(CXORD);
two<
=AandB;
process(A,B,C,D,RST,tmp)
begin
ifRST='
1'
then
tmp<
='
;
A1<
0'
B1<
C1<
D1<
START<
STATES<
="
0000"
elsiftmp='
then
ifSTA='
START<
if(A='
ANDB='
ANDC='
ANDD='
)then
STATES<
0001"
ELSIF(A='
)THEN
0010"
tmp<
0011"
0100"
elsetmp<
endif;
ELSESTART<
ENDIF;
endif;
endprocess;
endone;
(二)计分模块
在计分器电路的设计中,按照一般的设计原则,按一定数进制进行加减即可,但是随着计数数目的增加,但由于实验板上数码管数目的限制在,每组都猜用十进制数计分,这种电路连线简单方便。
clr为复位端,将计分起始分数设为3。
CHOS[3..0]端功能是锁存已抢答成功的组别序号,当接加分按钮ADD后,将给CHOS[3..0]所存的组别加分。
每按一次加1分,每组的分数将在对应的数码管上显示。
计分模块
1、计分模块源程序
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_ARITH.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYjfIS
PORT(chos:
inSTD_LOGIC_VECTOR(3downto0);
CLK:
INSTD_LOGIC;
en:
sta:
ADD:
SUB:
A:
OUTSTD_LOGIC_VECTOR(3DOWNTO0);
B:
C:
D:
OUTSTD_LOGIC_VECTOR(3DOWNTO0)
);
ENDjf;
ARCHITECTUREARTOFjfIS
SIGNALAA:
STD_LOGIC_VECTOR(3DOWNTO0);
--SIGNAL
SIGNALBB:
SIGNALCC:
SIGNALDD:
signalq0:
signaln:
integerrange0to3;
signali:
BEGIN
POR1:
PROCESS(ADD,SUB)
i<
=addorsub;
ifclk'
eventandclk='
then
ifi='
thenq0<
n<
=0;
elsifn<
=3andi='
q0<
=notq0;
=n+1;
elseq0<
endif;
IF(q0'
EVENTANDq0='
)THEN
IF(ADD='
ANDSUB='
AA<
0101"
BB<
CC<
DD<
--赋初值均为5
ELSIF(ADD='
ifen='
IF(chos="
1000"
AA<
=AA+"
=BB;
=CC;
=DD;
ELSIF(chos="
=AA;
=BB+"
=CC+"
=DD+"
ELSE
ENDIF;
endif;
--加分程序
elsIF(SUB='
ANDADD='
ifsta='
=AA-"
=BB-"
=CC-"
=DD-"
ELSE
ENDIF;
ELSE
ENDIF;
A<
B<
C<
D<
ENDPROCESS;
ENDARCHITECTUREART;
(三)计时模块
本系统中的计时器电路既有计时初始值的预置功能,又有减计数功能,功能比较齐全。
其中将初始值设置为9秒,clk为时钟信号,EN端为高电平后开始计时,rst为复位端,操作简洁。
计时模块
1.计时源程序
libraryieee;
entitytis
port(clk,en,rst:
ring:
data:
endt;
architecturebhvoftis
signala:
std_logic_vector(3downto0);
process(clk)
ifrst='
a<
1001"
ring<
elsifclk'
ifen='
=a-1;
ifa="
data<
=a;
endbhv;
(四)位选显示模块
用于将抢答鉴别模块抢答成功的组别和计时器的时间进行显示,。
1.位选模块源程序
USEieee.std_logic_UNSIGNED.all;
entityseltimeis
port(clr,clk:
instd_logic;
dain0,dain1,dain2,dain3,dain4,dain5:
instd_logic_vector(3downto0);
sel:
outstd_logic_vector(2downto0);
daout:
outstd_logic_vector(3downto
0));
endseltime;
architectureaofseltimeis
signaltemp:
integerrange0to5;
process(clk)
if(clr='
)then
daout<
sel<
000"
temp<
elsif(clk='
andclk'
event)then
iftemp=5thentemp<
elsetemp<
=temp+1;
casetempis
when0=>
sel<
daout<
=dain0;
when1=>
001"
=dain1;
when2=>
010"
=dain2;
when3=>
011"
=dain3;
when4=>
100"
=dain4;
when5=>
101"
=dain5;
endcase;
endprocess;
enda;
2.显示模块源程序
entitydeledis
port(num:
instd_logic_vector(3downto0);
led:
outstd_logic_vector(6downto0));
enddeled;
architectureaofdeledis
begin
process(num)
begin
casenumis
when"
=>
led<
0111111"
-----------3FH
0000110"
-----------06H
1011011"
-----------5BH
1001111"
-----------4FH
1100110"
-----------66H
1101101"
-----------6DH
0110"
1111101"
-----------7DH
0111"
0100111"
-----------27H
1111111"
-----------7FH
1101111"
-----------6FH
whenothers=>
0000000"
-----------00H
四、仿真分析
1.抢答鉴别与锁存波形仿真:
2.计分模块波形仿真:
3.计时模块波形仿真:
四、实习总结
通过对Quartus软件仿真,证明了本产品在实际运用中的正确性,完全可以实现预期任务的要求,在有一组信号抢答成功后数码管显示相应的组别,在两组或两组以上信号同时抢答时视抢答无效。
且计分器在实现计分功能时能够准确记录每组的成绩并将分数通过对应的数码管呈一位数显示,计时器在按下计时开始按钮后可以从9秒倒计时并通过译码器实时显示计时结果。
如果在9秒时间无人抢答,系统将发出警报,由小灯显示。
但是该设计仍有需要改进的地方:
1.在抢答鉴别模块中,只有当主持人按下抢答信号时,各小组才能开始抢答,并显示组号与对应的小灯。
而当主持人没有按下抢答信号时,各组抢答无效,因此需要完善。
2.在计分模块中,只有当每组抢答正确时加一分,而抢答错误时,没进行设计减分功能,这是我们在这次设计中最大的不足,因此需要改进。
五、实习心得与体会
经过二周的EDA实验,我们通过不懈努力,成功地设计出了四路电子抢答器。
因为对EDA技术与Quartus软件的相关知识知道的不够深入,在设计过程中我们遇到了很多困难,但通过我们从网上,图书馆找一些相关资料与根据自己的能力,我们最终完成了设计任务。
是我们在这次实习的过程中都受益匪浅。
我们根据自己的设计思路,采用层次化结构化设计,将此项设计任务分成若干模块,规定每一模块的功能和各模块之间的接口,然后再将各模块合起来进行调试,虽然与设计要求有点区别,但终于调试成功。
在这次设计中,应该说从功能的实现到流程图的绘制,从程序的编写到程序的检查,从程序的调试到实验报告的写作,其间每一个过程都凝聚着我们的辛苦和汗水。
课程设计虽然完毕了,但是我们还有很多的事情要做,对仍然不熟悉或不了解的知识点我们要尽快的去学习了解,对课程设计中出现的问题我们还要去认真的分析研究。
还有我们还需要去增强自己的动手能力,去不断的锻炼,只有这样该课程设计才能发挥最大的作用。
这次实验使我们对VHDL语言编程和QuartusII的使用有了更深层次的感性和理性认识;
培养和锻炼我们的实际动手设计的能力。
使我们的理论知识与实践充分地结合,作到不仅具有专业知识,而且还具有较强的实践动手能力,能分析问题和解决问题的高素质人才,为以后的顺利就业作好准备。
经过这次实验,我们有了很深刻的体会。
首先,要学好书本上的基本知识,掌握常用编程语句,这样在设计中才会游刃有余,得心应手。
其次,在遇到困难时要勇于面对,不会时请教老师和同学,其实只要有耐心,细心操作,一切困难都将迎刃而解。