基于FPGA的数字抢答器的设计.docx
《基于FPGA的数字抢答器的设计.docx》由会员分享,可在线阅读,更多相关《基于FPGA的数字抢答器的设计.docx(15页珍藏版)》请在冰豆网上搜索。
基于FPGA的数字抢答器的设计
摘要
EDA技术作为现代电子设计最新技术的结晶,其广阔的应用前景和深远的影响已毋庸置疑,它在信息工程类专业中的基础地位和核心作用也逐渐被人们所认识。
许多高等学校开设了相应的课程,并为学生提供了课程设计、综合实践、电子设计竞赛、毕业设计、科学研究和产品开发等EDA技术的综合应用实践环节。
相关的工程技术人员也特别重视学习EDA技术,并渴望提高其工程应用能力。
对于迅猛发展的EDA技术的综合应用,从EDA技术的综合应用系统的深度来分,可分为3个层次:
①功能电路模块的设计;②算法实现电路模块的设计;③片上系统/嵌入式系统/现代DSP系统的设计。
从EDA技术的综合应用系统的最终主要硬件构成来分,已出现6种形式:
①CPLD/FPGA系统;②"CPLD/FPGA+MCU"系统;③"CPLD/FPGA+专用DSP处理器"系统;④基于FPGA实现的现代DSP系统;⑤基于FPGA实现的SOC片上系统;⑥基于FPGA实现的嵌入式系统。
从EDA技术的综合应用系统的完善层次来分,可分为3个层次:
①"EDA综合系统"主体电路的设计、仿真及硬件验证;②"EDA综合系统"主体电路的设计、仿真、硬件验证+系统外围电路PCB的设计与制作;③"EDA综合系统"主体电路的设计、仿真、硬件验证+系统整体电路PCB的设计与制作及系统的组装、调试。
一、系统设计要求
在许多比赛活动中,为了准确、公正、直观地判断出第一抢答者,通常设置一台抢答器,通过数显、灯光及音响等各种手段批示出第一抢答者。
同时,还可以设置计分、犯规及奖惩记录等各种功能。
本设计的具体要求是:
1.设计制作一个可容纳四组参赛者的数字智力抢答器,每组设置一个抢答按钮供抢答者使用。
2.电路具有第一抢答信号的鉴别和锁存功能。
在主持人交系统复位并发出抢答指令后,若抢答开关,则该组指示灯亮并用组别显示电路显示抢答者的组别,同时扬声器发出“嘀嘟”的双音音响,且持续2~3秒。
此时,电路应具备自锁功能,使别组的抢答开关不起作用。
3.设置计分电路。
每组在开始时预置成100分,抢答后由诗人计分,答对一次加10分,否则减10分。
4.设置犯规电路。
对提前抢答和超时抢答的组别鸣喇叭示警,并由组别显示电路显示出犯规组别。
二、系统设计方案
根据系统设计要求可知,系统的输入信号有:
各组的抢答按钮A、B、C、D,系统清零信号CLR,系统时钟信号CLK,计分复位端RST,加分按钮端ADD,计时预置控制端LDN,计时使能端EN,计时预置数据调整按钮TA、TB;系统的输出信号有:
四个组抢答成功与否的指示灯控制信号输出口LEDA、LESB、LEDC、LEDD,四个组抢答时的计时数码显示控制信号若干,抢答成功组别显示的控制信号若干,各组计分动态显示的控制信号若干。
本系统应具有的功能有:
第一抢答信号的鉴别和锁存功能;抢答计时功能;各组得分的累加和动态显示功能;抢答犯规记录功能。
根据以上的分析,我们可将整个系统分为三个主要模块:
抢鉴别模块QDJB;抢答计时模块JSQ;抢答计分模块JFQ;对于需显示的信息,需增加或外接译码器,进行显示译码。
考虑到FPGA、CPLD的可用接口及一般EDA实验开发系统的输出显示资源的限制,这里我们将组别显示和计时显示的译码器内设,而将各组的计分显示的译码器外接。
整个系统的组成框图如图1所示:
图1智力抢答器的组成框图
系统的工作原理如下:
当主持人按下使能端EN时,抢答器开始工作,A、B、C、D四个抢答者谁最先抢答成功则此选手的台号灯(LEDA—LEDD)将点亮,并且主持人前的组别显示数码将显示出抢答成功者的台号;接下来主持人提问,若回答正确,主持人按加分按钮ADD,抢答计分模块JFQ将给对应的组加分,并将该组的总分显示在对应的选手计分数码管JF2_A~JF0_A、JF2_B~JF0_B、JF2_C~JF0_C、JF2_D~JF0_D、上。
在此过程中,主持人可以采用计时手段(JSQ),打开计时器使计时预置控制端LDN有效,输入限制的时间,使计时使能端EN有效,开始计时。
完成第一轮抢答后,主持人清零,接着重新开始,步骤如上。
三、主要VHDL源程序与系统模块
1.抢答鉴别电路QDJB的VHDL源程序和模块
--QDJB.VHD
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中所用的框图
注:
由于集成板的差别,该框图与原来设计的框图有一定的出入
图5智力抢答器在设计中所用的框图
注:
图中的引脚号是本次在CYCLONE的EP1C12Q240C8中所用的引脚接口
四、系统仿真
1、系统的有关仿真
系统仿真后的结果分别如图6、图7、图8、图9所示。
图6抢答鉴别电路QDJB仿真图
图7计分器电路JFQ仿真图
图8计时器电路JSQ仿真图
图9译码器电路YMQ仿真图
五、设计技巧分析
1.在抢答鉴别电路设计中,A、B、C、D四组抢答,理论上应该有16种可能情况,但实际上由于芯片反应速度快到一定程度时,两组以上同时抢答成功的可能性非常不,因此我们可设计成只有四种情况,这大大简化了电路的设计复杂性。
2.在计分器电路的设计中,按照一般的设计原则,按一定数进制进行加减即可,但是随着计数数目的增加,要将计数数目分解成十进制并进行译码显示分变得越来越麻烦。
因此为了减少译码显示的麻烦,一般是将一个大的进制数分解成数个十进制以内的时制数,计数器串级连接。
但随着位数的增加,电路的接口增加因此本设计采用IF语句从低往高判断是否有进位,以采取相应的操作,既减少了接口,又大大地简化了设计。
3.本系统中的计时器电路既有计时初始值的预置功能,又有减计数功能,功能比较齐全。
其中初始值的预置功能是将两位数分解成两个数分别进行预置,每个数的预置则采用高电平计数的方式进行。
减计数的功能与上述的加法计数类似,非常简洁。
六、系统扩展思路
1.设计外围电路:
系统用方波信号源、直流工作电源。
2.可将系统扩展为8组抢答器,同时当抢答错误时,具备扣分功能。
3.若为课程设计,除可要求设计调试程序、外围电路外,还可要求设计制作整个系统,包括PCB的制作。
七、设计心得
在这次设计中,我花了不少的时间,其中有苦也有泪。
苦的是我付出了不少的汗水,乐的是在付出的过程中我得到了许多,也学会了许多。
因为一个人的能力毕竟有限,在设计方面难免会出现这样那样的错误,但正是这些错误促进了我的进步。
根据电路的特点,我用层次化结构化设计概念,将此项设计任务分成若干模块,规定每一模块的功能和各模块之间的接口,然后再将各模块合起来联试,这培养了我们合作的精神,同时加深了层次化设计的概念。
在这次课程设计中,我真正体会到了知识的重要性。
在设计的过程中,遇到问题我会先独立思考,到自己不能解决的时候我就会和同学讨论,实在解决不了我就会向指导老师请教,应该说从功能的实现到流程图的绘制,从程序的编写到程序的检查,从程序的调试到实验报告的写作,其间每一个过程都凝聚着大家对我的帮助。
最后,在设计的过程中我进一步养成了软件设计的方法,完成一个项目的的程序,进一步了解了设计的步骤,进一步加深了对《EDA技术实用教程》这门课的理解,增强了以后学习的兴趣,为以后的工作积累了一定的经验,感谢石老师给我们提供这次设计的机会。
参考文献:
[1]沈明山. EDA技术及可编程器件应用实训. 科学出版社
[2]曾繁泰,陈美金. VHDL程序设计. 北京:
清华大学出版社
[3]谭会生,张昌凡. EDA技术及应用. 西安:
西安电子科技大学出版社
[4]李国丽,朱维勇. EDA与数字系统设计. 北京:
机械工业出版社
[5]苏光大. 图像并行处理技术. 北京:
清华大学出版社