FPGA四路电子抢答器设计.docx
- 文档编号:23134580
- 上传时间:2023-05-08
- 格式:DOCX
- 页数:12
- 大小:19.66KB
FPGA四路电子抢答器设计.docx
《FPGA四路电子抢答器设计.docx》由会员分享,可在线阅读,更多相关《FPGA四路电子抢答器设计.docx(12页珍藏版)》请在冰豆网上搜索。
FPGA四路电子抢答器设计
CompanyDocumentnumber:
WTUT-WT88Y-W8BBGB-BWYTT-19998
FPGA四路电子抢答器设计
课程设计报告
专业班级
课程FPGA/CPLD原理及应用
题目四路电子抢答器设计
学号
姓名
同组人
成绩
2013年5月
1、设计目的
1.进一步掌握QUARTUSⅡ软件的使用方法;
2.会使用VHDL语言设计小型数字电路系统;
3.掌握应用QUARTUSⅡ软件设计电路的流程;
4.掌握电子抢答器的设计方法。
二、设计要求
1.系统总体设计
(1)设计一个可以容纳四组参赛队进行比赛的电子抢答器。
(2)具有第一抢答信号的鉴别和锁存功能。
在主持人发出抢答指令后,若有参赛者按抢答器按钮,则该组指示灯亮,显示器显示出抢答者的组别。
同时,电路处于自锁存状态,使其他组的抢答器按钮不起作用。
(3)具有计时功能。
在初始状态时,主持人可以设置答题时间的初始值。
在主持人对抢答组别进行确认,并给出倒计时记数开始信号以后,抢答者开始回答问题。
此时,显示器从初始值开始倒计时,计到0时停止计数,同时扬声器发出超时警报信号。
若参赛者在规定的时间内回答完问题,主持人可以给出计时停止信号,以免扬声器鸣叫。
(4)具有计分功能。
在初始状态时,主持人可以给每组设置初始分值。
每组抢答完毕后,由主持人打分,答对一次加1分,答错一次减1分。
(5)设置一个系统清除开关,该开关由主持人控制。
(6)具有犯规设置电路。
超时抢答者,给予鸣喇叭警示,并显示规范组别。
2.设计方案
系统的输入信号有:
各组的抢答按钮A、B、C、D,系统允许抢答信号STA,系统清零信号RST,计分时钟信号CLK,加分按钮端ADD、en,减分端SUB、sta,计时使能端en时钟信号clk,复位rst;系统的输出信号有:
四个组抢答成功与否的指示灯控制信号输出口可用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;
useqdjbis
port(STA,RST:
instd_logic;
A,B,C,D:
instd_logic;
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<='1';
A1<='0';B1<='0';C1<='0';D1<='0';START<='0';STATES<="0000";
elsiftmp='1'then
ifSTA='1'then
START<='1';
if(A='1'ANDB='0'ANDC='0'ANDD='0')then
A1<='1';B1<='0';C1<='0';D1<='0';STATES<="0001";tmp<='0';
ELSIF(A='0'ANDB='1'ANDC='0'ANDD='0')THEN
A1<='0';B1<='1';C1<='0';D1<='0';STATES<="0010";tmp<='0';
ELSIF(A='0'ANDB='0'ANDC='1'ANDD='0')THEN
A1<='0';B1<='0';C1<='1';D1<='0';STATES<="0011";tmp<='0';
ELSIF(A='0'ANDB='0'ANDC='0'ANDD='1')THEN
A1<='0';B1<='0';C1<='0';D1<='1';STATES<="0100";tmp<='0';
elsetmp<='1';STATES<="0000";
endif;
ELSESTART<='0';
ENDIF;
endif;
endprocess;
endone;
(二)计分模块
在计分器电路的设计中,按照一般的设计原则,按一定数进制进行加减即可,但是随着计数数目的增加,但由于实验板上数码管数目的限制在,每组都猜用十进制数计分,这种电路连线简单方便。
clr为复位端,将计分起始分数设为3。
CHOS[3..0]端功能是锁存已抢答成功的组别序号,当接加分按钮ADD后,将给CHOS[3..0]所存的组别加分。
每按一次加1分,每组的分数将在对应的数码管上显示。
计分模块
1、计分模块源程序
LIBRARYIEEE;
USEjfIS
PORT(chos:
inSTD_LOGIC_VECTOR(3downto0);
CLK:
INSTD_LOGIC;
en:
INSTD_LOGIC;
sta:
INSTD_LOGIC;
ADD:
INSTD_LOGIC;
SUB:
INSTD_LOGIC;
A:
OUTSTD_LOGIC_VECTOR(3DOWNTO0);
B:
OUTSTD_LOGIC_VECTOR(3DOWNTO0);
C:
OUTSTD_LOGIC_VECTOR(3DOWNTO0);
D:
OUTSTD_LOGIC_VECTOR(3DOWNTO0)
);
ENDjf;
ARCHITECTUREARTOFjfIS
SIGNALAA:
STD_LOGIC_VECTOR(3DOWNTO0);--SIGNAL
SIGNALBB:
STD_LOGIC_VECTOR(3DOWNTO0);
SIGNALCC:
STD_LOGIC_VECTOR(3DOWNTO0);
SIGNALDD:
STD_LOGIC_VECTOR(3DOWNTO0);
signalq0:
std_logic;
signaln:
integerrange0to3;
signali:
std_logic;
BEGIN
POR1:
PROCESS(ADD,SUB)
BEGIN
i<=addorsub;
ifclk'eventandclk='1'
then
ifi='0'thenq0<='0';
n<=0;
elsifn<=3andi='1'then
q0<=notq0;
n<=n+1;
elseq0<='0';
endif;
endif;
IF(q0'EVENTANDq0='1')THEN
IF(ADD='1'ANDSUB='1')THEN
AA<="0101";BB<="0101";CC<="0101";DD<="0101";--赋初值均为5
ELSIF(ADD='1'ANDSUB='0')THEN
ifen='1'then
IF(chos="1000")THEN
AA<=AA+"0001";BB<=BB;CC<=CC;DD<=DD;
ELSIF(chos="0100")THEN
AA<=AA;BB<=BB+"0001";CC<=CC;DD<=DD;
ELSIF(chos="0010")THEN
AA<=AA;BB<=BB;CC<=CC+"0001";DD<=DD;
ELSIF(chos="0001")THEN
AA<=AA;BB<=BB;CC<=CC;DD<=DD+"0001";
ELSE
AA<=AA;BB<=BB;CC<=CC;DD<=DD;
ENDIF;
endif;--加分程序
elsIF(SUB='1'ANDADD='0')THEN
ifsta='1'then
IF(chos="1000")THEN
AA<=AA-"0001";BB<=BB;CC<=CC;DD<=DD;
ELSIF(chos="0100")THEN
AA<=AA;BB<=BB-"0001";CC<=CC;DD<=DD;
ELSIF(chos="0010")THEN
AA<=AA;BB<=BB;CC<=CC-"0001";DD<=DD;
ELSIF(chos="0001")THEN
AA<=AA;BB<=BB;CC<=CC;DD<=DD-"0001";
ELSE
AA<=AA;BB<=BB;CC<=CC;DD<=DD;
ENDIF;
endif;
ELSE
AA<=AA;BB<=BB;CC<=CC;DD<=DD;
ENDIF;
ELSE
AA<=AA;BB<=BB;CC<=CC;DD<=DD;
ENDIF;
A<=AA;B<=BB;C<=CC;D<=DD;
ENDPROCESS;
ENDARCHITECTUREART;
(三)计时模块
本系统中的计时器电路既有计时初始值的预置功能,又有减计数功能,功能比较齐全。
其中将初始值设置为9秒,clk为时钟信号,EN端为高电平后开始计时,rst为复位端,操作简洁。
其模块如下:
计时模块
1.计时源程序
libraryieee;
usecntis
port(clk,en,rst:
instd_logic;
ring:
outstd_logic;
data:
outstd_logic_vector(3downto0));
endcnt;
architecturebhvofcntis
signala:
std_logic_vector(3downto0);
begin
process(clk)
begin
ifrst='1'then
a<="1001";ring<='0';
elsifclk'eventandclk='1'then
ifen='1'then
a<="1001";a<=a-1;
ifa="0000"then
a<="0000";ring<='1';
endif;
endif;
endif;
endprocess;
data<=a;
endbhv;
(四)位选显示模块
用于将抢答鉴别模块抢答成功的组别和计时器的时间进行显示,。
其模块如下:
1.位选模块源程序
libraryieee;
useseltimeis
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;
begin
process(clk)
begin
if(clr='1')then
daout<="0000";
sel<="000";
temp<=0;
elsif(clk='1'andclk'event)then
iftemp=5thentemp<=0;
elsetemp<=temp+1;
endif;
casetempis
when0=>sel<="000";daout<=dain0;
when1=>sel<="001";daout<=dain1;
when2=>sel<="010";daout<=dain2;
when3=>sel<="011";daout<=dain3;
when4=>sel<="100";daout<=dain4;
when5=>sel<="101";daout<=dain5;
endcase;
endif;
endprocess;
enda;
2.显示模块源程序
libraryieee;
use
entitydeledis
port(num:
instd_logic_vector(3downto0);
led:
outstd_logic_vector(6downto0));
enddeled;
architectureaofdeledis
begin
process(num)
begin
casenumis
when"0000"=>led<="0111111";-----------3FH
when"0001"=>led<="0000110";-----------06H
when"0010"=>led<="1011011";-----------5BH
when"0011"=>led<="1001111";-----------4FH
when"0100"=>led<="1100110";-----------66H
when"0101"=>led<="1101101";-----------6DH
when"0110"=>led<="1111101";-----------7DH
when"0111"=>led<="0100111";-----------27H
when"1000"=>led<="1111111";-----------7FH
when"1001"=>led<="1101111";-----------6FH
whenothers=>led<="0000000";-----------00H
endcase;
endprocess;
enda;
4、仿真分析
1.抢答鉴别及锁存波形仿真:
2.计分模块波形仿真:
3.计时模块波形仿真:
4、实习总结
通过对Quartus软件仿真,证明了本产品在实际运用中的正确性,完全可以实现预期任务的要求,在有一组信号抢答成功后数码管显示相应的组别,在两组或两组以上信号同时抢答时视抢答无效。
且计分器在实现计分功能时能够准确记录每组的成绩并将分数通过对应的数码管呈一位数显示,计时器在按下计时开始按钮后可以从9秒倒计时并通过译码器实时显示计时结果。
如果在9秒时间内无人抢答,系统将发出警报,由小灯显示。
但是该设计仍有需要改进的地方:
1.在抢答鉴别模块中,只有当主持人按下抢答信号时,各小组才能开始抢答,并显示组号及对应的小灯。
而当主持人没有按下抢答信号时,各组抢答无效,因此需要完善。
2.在计分模块中,只有当每组抢答正确时加一分,而抢答错误时,没进行设计减分功能,这是我们在这次设计中最大的不足,因此需要改进。
五、实习心得与体会
经过二周的EDA实验,我们通过不懈努力,成功地设计出了四路电子抢答器。
因为对EDA技术及Quartus软件的相关知识知道的不够深入,在设计过程中我们遇到了很多困难,但通过我们从网上,图书馆找一些相关资料及根据自己的能力,我们最终完成了设计任务。
是我们在这次实习的过程中都受益匪浅。
我们根据自己的设计思路,采用层次化结构化设计,将此项设计任务分成若干模块,规定每一模块的功能和各模块之间的接口,然后再将各模块合起来进行调试,虽然与设计要求有点区别,但终于调试成功。
在这次设计中,应该说从功能的实现到流程图的绘制,从程序的编写到程序的检查,从程序的调试到实验报告的写作,其间每一个过程都凝聚着我们的辛苦和汗水。
课程设计虽然结束了,但是我们还有很多的事情要做,对仍然不熟悉或不了解的知识点我们要尽快的去学习了解,对课程设计中出现的问题我们还要去认真的分析研究。
还有我们还需要去增强自己的动手能力,去不断的锻炼,只有这样该课程设计才能发挥最大的作用。
这次实验使我们对VHDL语言编程和QuartusII的使用有了更深层次的感性和理性认识;培养和锻炼我们的实际动手设计的能力。
使我们的理论知识与实践充分地结合,作到不仅具有专业知识,而且还具有较强的实践动手能力,能分析问题和解决问题的高素质人才,为以后的顺利就业作好准备。
经过这次实验,我们有了很深刻的体会。
首先,要学好书本上的基本知识,掌握常用编程语句,这样在设计中才会游刃有余,得心应手。
其次,在遇到困难时要勇于面对,不会时请教老师和同学,其实只要有耐心,细心操作,一切困难都将迎刃而解。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- FPGA 四路 电子 抢答 设计