FPGA智力抢答器设计.docx
- 文档编号:1414672
- 上传时间:2023-04-30
- 格式:DOCX
- 页数:14
- 大小:614.67KB
FPGA智力抢答器设计.docx
《FPGA智力抢答器设计.docx》由会员分享,可在线阅读,更多相关《FPGA智力抢答器设计.docx(14页珍藏版)》请在冰点文库上搜索。
FPGA智力抢答器设计
FPGA智力抢答器设计
一、设计内容及要求
1、设计内容
设计一台供4名选手参加比赛的数字抢答器
2、设计要求
(1)、抢答器同时供4名选手比赛,分别用4个按钮S0~S3表示。
(2)、设置一个系统清除和抢答控制开关S,该开关由主持人控制。
(3)、抢答器具有锁存与显示功能。
即选手按动按钮,锁存相应的编号,并在LED数码管上显示,同时扬声器发出报警声响提示。
选手抢答实行优先锁存,优先抢答选手的编号一直保持到主持人将系统清除为止。
(4)、抢答器具有定时抢答功能,且一次抢答的时间由主持人设定。
当主持人启动“开始”键后,定时器进行减计时,同时扬声器发出短暂的声响。
(5)、参赛选手在设定的时间内进行抢答,抢答有效,定时器停止工作,显示器上显示选手的编号和抢答的时间,并保持到主持人将系统清除为止。
(6)、如果定时时间已到,无人抢答,本次抢答无效,系统报警并禁止抢答,定时显示器上显示0。
二、抢答器设计方案
1、设计方案
抢答器具有锁存、定时、显示和报警功能。
即当抢答开始后,选手抢答按动按钮,锁存器锁存相应的选手编码,同时用LED数码管把选手的编码显示出来,并且开始抢答时间的倒计时,同时用LED数码管把选手的所剩抢答时间显示出来。
而在选手按键抢答以及抢答时间倒计时到时的时候都有报警以提醒主持人和选手。
抢答时间可设定(0~9秒),报警响声持续1秒。
接通电源后,主持人将开关拨到“清除”状态,抢答器处于禁止状态,编号显示器灭灯,定时器显示设定时间;主持人将开关置“开始”状态,宣布“开始”抢答器工作。
定时器倒计时,扬声器给出声响提示。
选手在定时时间内抢答时,抢答器完成:
优先判断、编号锁存、编号显示、扬声器提示。
当一轮抢答之后,定时器停止、禁止二次抢答、定时器显示剩余时间。
如果再次抢答必须由主持人再次操作“清除”和“开始”状态开关。
三、主要VHDL源程序与系统模块
1.抢答鉴别电路QDJB的VHDL源程序和模块
--QDJB.VHDL
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
ENTITYQDJBIS
PORT(CLR:
INSTD_LOGIC;
A,B,C,D:
INSTD_LOGIC;
A1,B1,C1,D1:
OUTSTD_LOGIC;
STATES:
OUTSTD_LOGIC_VECTOR(3DOWNTO0));
ENDENTITYQDJB;
ARCHITECTUREARTOFQDJBIS
CONSTANTW1:
STD_LOGIC_VECTOR:
="0001";
CONSTANTW2:
STD_LOGIC_VECTOR:
="0010";
CONSTANTW3:
STD_LOGIC_VECTOR:
="0100";
CONSTANTW4:
STD_LOGIC_VECTOR:
="1000";
BEGIN
PROCESS(CLR,A,B,C,D)IS
BEGIN
IFCLR='1'THENSTATES<="0000";
ELSIF(A='1'ANDB='0'ANDC='0'ANDD='0')THEN
A1<='1';B1<='0';C1<='0';D1<='0';STATES<=W1;
ELSIF(A='0'ANDB='1'ANDC='0'ANDD='0')THEN
A1<='0';B1<='1';C1<='0';D1<='0';STATES<=W2;
ELSIF(A='0'ANDB='0'ANDC='1'ANDD='0')THEN
A1<='1';B1<='0';C1<='1';D1<='0';STATES<=W3;
ELSIF(A='0'ANDB='0'ANDC='0'ANDD='1')THEN
A1<='0';B1<='0';C1<='0';D1<='1';STATES<=W4;
ENDIF;
ENDPROCESS;
ENDARCHITECTUREART;
图2抢答鉴别电路的模块
2.计分器电路JFQ的VHDL源程序
--JFQ.VHD
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYJFQIS
PORT(RST:
INSTD_LOGIC;
ADD:
INSTD_LOGIC;
CHOS:
INSTD_LOGIC_VECTOR(3DOWNTO0);
AA2,AA1,AA0,BB2,BB1,BB0:
OUTSTD_LOGIC_VECTOR(3DOWNTO0);
CC2,CC1,CC0,DD2,DD1,DD0:
OUTSTD_LOGIC_VECTOR(3DOWNTO0));
ENDENTITYJFQ;
ARCHITECTUREARTOFJFQIS
BEGIN
PROCESS(RST,ADD,CHOS)IS
VARIABLEPOINTS_A2,POINTS_A1:
STD_LOGIC_VECTOR(3DOWNTO0);
VARIABLEPOINTS_B2,POINTS_B1:
STD_LOGIC_VECTOR(3DOWNTO0);
VARIABLEPOINTS_C2,POINTS_C1:
STD_LOGIC_VECTOR(3DOWNTO0);
VARIABLEPOINTS_D2,POINTS_D1:
STD_LOGIC_VECTOR(3DOWNTO0);
BEGIN
IF(ADD'EVENTANDADD='1')THEN
IFRST='1'THEN
POINTS_A2:
="0001";POINTS_A1:
="0000";
POINTS_B2:
="0001";POINTS_B1:
="0000";
POINTS_C2:
="0001";POINTS_C1:
="0000";
POINTS_D2:
="0001";POINTS_D1:
="0000";
ELSIFCHOS="0001"THEN
IFPOINTS_A1="1001"THEN
POINTS_A1:
="0000";
IFPOINTS_A2="1001"THEN
POINTS_A2:
="0000";
ELSE
POINTS_A2:
=POINTS_A2+'1';
ENDIF;
ELSE
POINTS_A1:
=POINTS_A1+'1';
ENDIF;
ELSIFCHOS="0010"THEN
IFPOINTS_B1="1001"THEN
POINTS_B1:
="0000";
IFPOINTS_B2="1001"THEN
POINTS_B2:
="0000";
ELSE
POINTS_B2:
=POINTS_B2+'1';
ENDIF;
ELSE
POINTS_B1:
=POINTS_B1+'1';
ENDIF;
ELSIFCHOS="0100"THEN
IFPOINTS_C1="1001"THEN
POINTS_C1:
="0000";
IFPOINTS_C2="1001"THEN
POINTS_C2:
="0000";
ELSE
POINTS_C2:
=POINTS_C2+'1';
ENDIF;
ELSE
POINTS_C1:
=POINTS_C1+'1';
ENDIF;
ELSIFCHOS="1000"THEN
IFPOINTS_D1="1001"THEN
POINTS_D1:
="0000";
IFPOINTS_D2="1001"THEN
POINTS_D2:
="0000";
ELSE
POINTS_D2:
=POINTS_D2+'1';
ENDIF;
ELSE
POINTS_D1:
=POINTS_D1+'1';
ENDIF;
ENDIF;
ENDIF;
AA2<=POINTS_A2;AA1<=POINTS_A1;AA0<="0000";
BB2<=POINTS_B2;BB1<=POINTS_B1;BB0<="0000";
CC2<=POINTS_C2;CC1<=POINTS_C1;CC0<="0000";
DD2<=POINTS_D2;DD1<=POINTS_D1;DD0<="0000";
ENDPROCESS;
ENDARCHITECTUREART;
图3计分器电路JFQ的模块
3.计时器电路JSQ的VHDL源程序
--JSQ.VHD
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYJSQIS
PORT(CLR,LDN,EN,CLK:
INSTD_LOGIC;
TA,TB:
INSTD_LOGIC;
QA:
OUTSTD_LOGIC_VECTOR(3DOWNTO0);
QB:
OUTSTD_LOGIC_VECTOR(3DOWNTO0));
ENDENTITYJSQ;
ARCHITECTUREARTOFJSQIS
SIGNALDA:
STD_LOGIC_VECTOR(3DOWNTO0);
SIGNALDB:
STD_LOGIC_VECTOR(3DOWNTO0);
BEGIN
PROCESS(TA,TB,CLR)IS
BEGIN
IFCLR='1'THEN
DA<="0000";
DB<="0000";
ELSE
IFTA='1'THEN
DA<=DA+'1';
ENDIF;
IFTB='1'THEN
DB<=DB+'1';
ENDIF;
ENDIF;
ENDPROCESS;
PROCESS(CLK)IS
VARIABLETMPA:
STD_LOGIC_VECTOR(3DOWNTO0);
VARIABLETMPB:
STD_LOGIC_VECTOR(3DOWNTO0);
BEGIN
IFCLR='1'THENTMPA:
="0000";TMPB:
="0110";
ELSIFCLK'EVENTANDCLK='1'THEN
IFLDN='1'THENTMPA:
=DA;TMPB:
=DB;
ELSIFEN='1'THEN
IFTMPA="0000"THEN
TMPA:
="1001";
IFTMPB="0000"THENTMPB:
="0110";
ELSETMPB:
=TMPB-1;
ENDIF;
ELSETMPA:
=TMPA-1;
ENDIF;
ENDIF;
ENDIF;
QA<=TMPA;QB<=TMPB;
ENDPROCESS;
ENDARCHITECTUREART;
图4计时器电路JSQ的模块
4.译码器电路YMQ的VHDL源程序
--YMQ.VHD
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYYMQIS
PORT(AIN4:
INSTD_LOGIC_VECTOR(3DOWNTO0);
DOUT7:
OUTSTD_LOGIC_VECTOR(6DOWNTO0));
ENDYMQ;
ARCHITECTUREARTOFYMQIS
BEGIN
PROCESS(AIN4)
BEGIN
CASEAIN4IS
WHEN"0000"=>DOUT7<="0111111";--0
WHEN"0001"=>DOUT7<="0000110";--1
WHEN"0010"=>DOUT7<="1011011";--2
WHEN"0011"=>DOUT7<="1001111";--3
WHEN"0100"=>DOUT7<="1100110";--4
WHEN"0101"=>DOUT7<="1101101";--5
WHEN"0110"=>DOUT7<="1111101";--6
WHEN"0111"=>DOUT7<="0000111";--7
WHEN"1000"=>DOUT7<="1111111";--8
WHEN"1001"=>DOUT7<="1101111";--9
WHENOTHERS=>DOUT7<="0000000";
ENDCASE;
ENDPROCESS;
ENDARCHITECTUREART;
图5译码器电路YMQ的模块
5.智力抢答器在CYCLONE中所用的框图
图6智力抢答器在设计中所用的框图
注:
图中的引脚号是本次在CYCLONE的EP1C12Q240C8中所用的引脚接口
四、4路抢答器总电路图及系统仿真
1总电路图
(2)系统仿真
抢答鉴别电路仿真图
计分器电路仿真图
计时器电路仿真图
译码器电路仿真图
五、设计技巧分析
1.在抢答鉴别电路设计中,A、B、C、D四组抢答,理论上应该有16种可能情况,但实际上由于芯片反应速度快到一定程度时,两组以上同时抢答成功的可能性非常不,因此我们可设计成只有四种情况,这大大简化了电路的设计复杂性。
2.在计分器电路的设计中,按照一般的设计原则,按一定数进制进行加减即可,但是随着计数数目的增加,要将计数数目分解成十进制并进行译码显示分变得越来越麻烦。
因此为了减少译码显示的麻烦,一般是将一个大的进制数分解成数个十进制以内的时制数,计数器串级连接。
但随着位数的增加,电路的接口增加因此本设计采用IF语句从低往高判断是否有进位,以采取相应的操作,既减少了接口,又大大地简化了设计。
3.本系统中的计时器电路既有计时初始值的预置功能,又有减计数功能,功能比较齐全。
其中初始值的预置功能是将两位数分解成两个数分别进行预置,每个数的预置则采用高电平计数的方式进行。
减计数的功能与上述的加法计数类似,非常简洁。
六、参考文献
[1]赵淑范王宪伟,电子技术实验与课程设计
[2]高吉祥,电子技术基础实验与课程设计.电子工业出版社
[3]吕思忠,数子电路实验与课程设计.哈尔滨工业大学出版社
[4]郑家龙,《集成电子技术基础教程》北京:
高等教育出版社
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- FPGA 智力 抢答 设计