基于VHDL语言的FPGA智能抢答器设计论文.docx
《基于VHDL语言的FPGA智能抢答器设计论文.docx》由会员分享,可在线阅读,更多相关《基于VHDL语言的FPGA智能抢答器设计论文.docx(45页珍藏版)》请在冰豆网上搜索。
基于VHDL语言的FPGA智能抢答器设计论文
电子科技大学光电信息学院
课程设计论文
课程名称现代电子技术综合实验
题目名称基于VHDL语言的FPGA智能抢答器设计论文
摘要
智力抢答器作为一种快速准确判断选手抢答先后的比赛工具,现如今经常出现各类智力抢答,竞猜类比赛中。
本文利用FPGA开发平台为基础,以VHDL语言进行编程,在ISE软件上进行开发,实现电视中比赛选手抢答器的各项功能。
其中,第二章简单介绍FPGA开发平台的特点、VHDL语言的特点,以及大体的开发流程。
第三章主要介绍了开发软件ISE和仿真软件ModelSim的使用。
第四章主要介绍智力抢答器的具体设计过程、原理设计、模块化设计。
第五章主要对各个模块进行仿真测试,以及对最后的整个系统进行仿真测试。
最后第六章,在基于整个系统仿真无误的前提下进行硬件编程下载,在实验硬件平台上测试设计结果和智力抢答器的实用性。
并对这次试验进行总结。
一、实验目的
二、实验任务与要求
三、实验原理、设计思路与方案
四、单元模块设计与仿真
模块功能、模块符号及端口说明、模块程序、仿真程序、仿真波形
五、系统模块设计
顶层模块设计、系统管脚适配表、编程文件、下载成功标志、硬件调试说明
六、结论
1、实验目的
在许多比赛活动中,为了准确、公正、直观地判断出第一抢答者,通常设置一台抢答器。
通过抢答器的数显,灯光和音响等手段指示出第一抢答者。
同时还可以设置定时、记分犯规及奖惩等多种功能。
本设计采用手动抢答的方式,有人抢答后,系统自动封锁其他人的抢答按钮,使其不能再抢答,从而实现抢答功能。
2、实验任务与要求
1.基本要求
(1)、编号1~6号的选手在规定的时间内按键抢答
(2)、抢中编号锁定显示,其他无效
(3)、主持按键控制清零和开始
(4)、具有报警提示功能,分别提示抢答开始,有人抢答,定时时间到
2.参数要求
(1)、显示组数:
6组
(2)、报警延时:
300ms
(3)、抢答时间:
20s
3、实验原理、设计思路与方案
抢答信号输入系统后,系统必须对最先抢到的选手进行编码,而后锁存这个编码,并将这个编码显示输出,所以需要用到编码器、锁存器和译码显示电路。
而选手抢答的有效时间为20s,而且系统在有人抢中,主持人按下开关以及20s计时到但无人抢答时这三种情况下要发出警报,且警报时间延迟300ms后自动停止,故需定时电路来确定这些时限,报警电路产生时延,并用时序控制电路来协调各个部分的工作,计时时间也要显示出来。
当主持人按键为启动开始状态时,警报器发出警报,抢答编码电路进入工作状态,选手可以进行抢答。
同时抢答定时电路开始从20s递减,显示器显示递减,显示器显示递减的时间,当时间未减少到0s时,有选手抢答,报警电路发出警报,显示器显示选手编号,并锁存该选手的号码直到主持人清零为止,此时抢答器的时间不再递减;当时间减到0s时,无选手抢答,报警电路发出警报,提示选手不能再抢答,显示器显示抢答时间0s不动,选手号码为无效号码或者F。
当主持人按下清零信号,系统显示为初始状态。
四、单元模块设计与仿真
1.单元电路的划分
根据抢答器所需要实现的功能,将整体电路划分为:
编码锁存电路(BMSC)、抢答定时电路(DSQ)、报警器电路(BJQ)、扫描显示电路(SCAN)、译码电路(YMQ)和按键消抖(XD)六个单元电路。
2.1编码锁存电路(BMSC):
(1)该电路主要实现的功能是:
当主持人启动开始键,系统进入工作状态,同时48MHz时钟上升沿持续扫描6个选手的按键端口。
当倒计时未到0,有选手抢答时,则对该选手的按键进行编码,并锁存该选手编码并将其输出,同时其他选手的按键抢答无效。
若无选手抢答,则持续扫描,直至下一轮抢答开始。
本电路共有6个端口。
4个输入端口:
系统时钟、开始按键信号、定时时间到信号、选手抢答按键信号。
2个输出端口:
选手按键编码信号、有选手抢中信号。
(2)模块程序:
libraryIEEE;
useIEEE.STD_LOGIC_1164.ALL;
useIEEE.STD_LOGIC_ARITH.ALL;
useIEEE.STD_LOGIC_UNSIGNED.ALL;
----Uncommentthefollowinglibrarydeclarationifinstantiating
----anyXilinxprimitivesinthiscode.
--libraryUNISIM;
--useUNISIM.VComponents.all;
entityBMSCis
Port(CLK:
inSTD_LOGIC;
START:
inSTD_LOGIC;
SJD:
inSTD_LOGIC;
XS:
inSTD_LOGIC_VECTOR(5downto0);
S:
outSTD_LOGIC_VECTOR(3downto0);
QZ:
outSTD_LOGIC
);
endBMSC;
architectureBehavioralofBMSCis
SIGNALQ_Z:
STD_LOGIC;
SIGNALEN:
STD_LOGIC:
='0';
SIGNALQ:
STD_LOGIC_VECTOR(3DOWNTO0):
="0000";
BEGIN
STATE:
PROCESS(START)
BEGIN
IFSTART'EVENTANDSTART='0'THEN
EN<=NOTEN;
ENDIF;
ENDPROCESS;
BM_SC:
PROCESS(CLK,EN,SJD,XS)
BEGIN
IFCLK'EVENTANDCLK='1'THEN
IFEN='1'ANDSJD='1'THEN
IFQ_Z='1'THEN
CASEXSIS
WHEN"111110"=>Q<="0001";Q_Z<='0';
WHEN"111101"=>Q<="0010";Q_Z<='0';
WHEN"111011"=>Q<="0011";Q_Z<='0';
WHEN"110111"=>Q<="0100";Q_Z<='0';
WHEN"101111"=>Q<="0101";Q_Z<='0';
WHEN"011111"=>Q<="0110";Q_Z<='0';
WHENOTHERS=>Q<="0000";
ENDCASE;
ENDIF;
ELSE
Q<="0000";Q_Z<='1';
ENDIF;
ENDIF;
ENDPROCESS;
S<=Q;
QZ<=Q_Z;
endBehavioral;
(3)仿真程序及波形:
--------------------------------------------------------------------------------
--Company:
--Engineer:
--
--CreateDate:
10:
39:
4211/14/2013
--DesignName:
BMSC
--ModuleName:
E:
/2010054020020/mentalgrab0020/TEST_BMSC.vhd
--ProjectName:
mentalgrab0020
--TargetDevice:
--Toolversions:
--Description:
--
--VHDLTestBenchCreatedbyISEformodule:
BMSC
--
--Dependencies:
--
--Revision:
--Revision0.01-FileCreated
--AdditionalComments:
--
--Notes:
--Thistestbenchhasbeenautomaticallygeneratedusingtypesstd_logicand
--std_logic_vectorfortheportsoftheunitundertest.Xilinxrecommends
--thatthesetypesalwaysbeusedforthetop-levelI/Oofadesigninorder
--toguaranteethatthetestbenchwillbindcorrectlytothepost-implementation
--simulationmodel.
--------------------------------------------------------------------------------
LIBRARYieee;
USEieee.std_logic_1164.ALL;
USEieee.std_logic_unsigned.all;
USEieee.numeric_std.ALL;
ENTITYTEST_BMSC_vhdIS
ENDTEST_BMSC_vhd;
ARCHITECTUREbehaviorOFTEST_BMSC_vhdIS
--ComponentDeclarationfortheUnitUnderTest(UUT)
COMPONENTBMSC
PORT(
CLK:
INstd_logic;
START:
INstd_logic;
SJD:
INstd_logic;
XS:
INstd_logic_vector(5downto0);
S:
OUTstd_logic_vector(3downto0);
QZ:
OUTstd_logic
);
ENDCOMPONENT;
--Inputs
SIGNALCLK:
std_logic:
='0';
SIGNALSTART:
std_logic:
='0';
SIGNALSJD:
std_logic:
='0';
SIGNALXS:
std_logic_vector(5downto0):
=(others=>'0');
--Outputs
SIGNALS:
std_logic_vector(3downto0);
SIGNALQZ:
std_logic;
BEGIN
--InstantiatetheUnitUnderTest(UUT)
uut:
BMSCPORTMAP(
CLK=>CLK,
START=>START,
SJD=>SJD,
XS=>XS,
S=>S,
QZ=>QZ
);
tb:
PROCESS
BEGIN
CLK<='0';WAITFOR100PS;
CLK<='1';WAITFOR100PS;
ENDPROCESS;
STM:
PROCESS
BEGIN
START<='1';XS<="111111";SJD<='1';
WAITFOR50NS;
START<='0';WAITFOR100NS;
START<='1';WAITFOR200NS;
XS<="111101";WAITFOR200NS;
XS<="110111";WAITFOR300NS;
START<='0';WAITFOR100NS;
START<='1';XS<="111111";
WAITFOR500NS;
START<='0';WAITFOR200NS;
START<='1';WAITFOR100NS;
SJD<='0';WAITFOR300NS;
XS<="011111";WAITFOR200NS;
ENDPROCESS;
END;
BMSC仿真波形
2.2定时电路(DSQ)
(1)该电路主要实现的功能是:
规定20秒倒计时时间。
本模块共有5个端口,3个输入端口:
基准时间源,开始键信号,选手抢中信号;两个输出端口:
时间到报警信号和实时计数输出端口。
为了实现按秒计时,首先要设计一个分频器来计算1Hz的标准时间信号。
(2)模块程序
----------------------------------------------------------------------------------
--Company:
--Engineer:
--
--CreateDate:
20:
53:
2411/13/2013
--DesignName:
--ModuleName:
DSP-Behavioral
--ProjectName:
--TargetDevices:
--Toolversions:
--Description:
--
--Dependencies:
--
--Revision:
--Revision0.01-FileCreated
--AdditionalComments:
--
----------------------------------------------------------------------------------
libraryIEEE;
useIEEE.STD_LOGIC_1164.ALL;
useIEEE.STD_LOGIC_ARITH.ALL;
useIEEE.STD_LOGIC_UNSIGNED.ALL;
----Uncommentthefollowinglibrarydeclarationifinstantiating
----anyXilinxprimitivesinthiscode.
--libraryUNISIM;
--useUNISIM.VComponents.all;
entityDSPis
PORT(CLK:
INSTD_LOGIC;
QZ:
INSTD_LOGIC;
START:
INSTD_LOGIC;
SJD:
OUTSTD_LOGIC;
T10:
OUTSTD_LOGIC_VECTOR(3DOWNTO0);
T0:
OUTSTD_LOGIC_VECTOR(3DOWNTO0)
);
endDSP;
architectureBehavioralofDSPis
SIGNALCNT:
INTEGERRANGE1TO24000000:
=1;
SIGNALCLK_1HZ:
STD_LOGIC:
='1';
SIGNALEN:
STD_LOGIC:
='0';
SIGNALM10,M0:
STD_LOGIC_VECTOR(3DOWNTO0);
BEGIN
FP:
PROCESS(CLK)IS
BEGIN
IFCLK'EVENTANDCLK='1'THEN
IFCNT=24000000THEN
CNT<=1;
CLK_1HZ<=NOTCLK_1HZ;
ELSE
CNT<=CNT+1;
ENDIF;
ENDIF;
ENDPROCESS;
STATE:
PROCESS(START)
BEGIN
IFSTART'EVENTANDSTART='0'THEN
EN<=NOTEN;
ENDIF;
ENDPROCESS;
JSQ:
PROCESS(EN,QZ,CLK_1HZ)IS
BEGIN
IFEN='0'THEN
M10<="0010";M0<="0000";
SJD<='1';
ELSIFCLK_1HZ'EVENTANDCLK_1HZ='1'THEN
IFQZ='1'THEN
IFM10=0ANDM0=0THEN
M10<="0000";M0<="0000";
SJD<='0';
ELSE
IFM0=0ANDM10/=0THEN
M0<="1001";M10<=M10-1;
ELSE
M0<=M0-1;
ENDIF;
ENDIF;
ENDIF;
ENDIF;
ENDPROCESS;
T0<=M0;
T10<=M10;
endBehavioral;
(3)仿真程序及波形
--------------------------------------------------------------------------------
--Company:
--Engineer:
--
--CreateDate:
10:
51:
3811/14/2013
--DesignName:
DSP
--ModuleName:
E:
/2010054020020/mentalgrab0020/TEST_DSP.vhd
--ProjectName:
mentalgrab0020
--TargetDevice:
--Toolversions:
--Description:
--
--VHDLTestBenchCreatedbyISEformodule:
DSP
--
--Dependencies:
--
--Revision:
--Revision0.01-FileCreated
--AdditionalComments:
--
--Notes:
--Thistestbenchhasbeenautomaticallygeneratedusingtypesstd_logicand
--std_logic_vectorfortheportsoftheunitundertest.Xilinxrecommends
--thatthesetypesalwaysbeusedforthetop-levelI/Oofadesigninorder
--toguaranteethatthetestbenchwillbindcorrectlytothepost-implementation
--simulationmodel.
--------------------------------------------------------------------------------
LIBRARYieee;
USEieee.std_logic_1164.ALL;
USEieee.std_logic_unsigned.all;
USEieee.numeric_std.ALL;
ENTITYTEST_DSP_vhdIS
ENDTEST_DSP_vhd;
ARCHITECTUREbehaviorOFTEST_DSP_vhdIS
--ComponentDeclarationfortheUnitUnderTest(UUT)
COMPONENTDSP
PORT(
CLK:
INstd_logic;
QZ:
INstd_logic;
START:
INstd_logic;
SJD:
OUTstd_logic;
T10:
OUTstd_logic_vector(3downto0);
T0:
OUTstd_logic_vector(3downto0)
);
ENDCOMPONENT;
--Inputs
SIGNALCLK:
std_logic:
='0';
SIGNALQZ:
std_logic:
='0';
SIGNALSTART:
std_logic:
='0';
--Outputs
SIGNALSJD:
std_logic;
SIGNALT10:
std_logic_vector(3downto0);
SIGNALT0:
std_logic_vector(3downto0);
BEGIN
--InstantiatetheUnitUnderTest(UUT)
uut:
DSPPORTMAP(
CLK=>CLK,
QZ=>QZ,
START=>START,
SJD=>SJD,
T10=>T10,
T0=>T0
);
tb:
PROCESS
BEGIN
CLK<='0';WAITFOR10NS;
CLK<='1';WAITFOR10NS;
ENDPROCESS;
STIM:
PROCESS
BEGIN
START<='1';QZ<='1';WAITFOR100NS;
START<='0';WAITFOR100NS;
START<='1';WAITFOR1100US;
START<='0';WAITFOR100NS;
START<='1';WAITFOR100US;
START<='0';WAITFOR100NS;
START<='1';WAITFOR200US;
QZ<='0';WAITFOR100US;
START<='0';WAITFOR100NS;
START<='1';WAITFOR100US;
ENDPROCESS;
END;
DSQ仿真波形
2.3报警电路(BJQ)
(1)该电路主要实现的功能是:
在开始键按下、有选手抢答、计时时间到这三种情况下,报警器发出警报,警报延时(学号+300)ms后结束。
本电路共有5个端口。
4个输入端口:
基准时间源信号、开始键信号、选手抢中信号、时间到信号。
1个输出端口:
报警信号。
三路报警触发信号最终要通过一个与门来进行整合。
(2)模块程序
--------------------------------------------------------------------------------
--Company:
--Engineer:
--
--CreateDate:
20:
55:
3711/13/2013