VHDL四人抢答器Word下载.docx
《VHDL四人抢答器Word下载.docx》由会员分享,可在线阅读,更多相关《VHDL四人抢答器Word下载.docx(8页珍藏版)》请在冰豆网上搜索。
当20秒倒计时后无人抢答显示超时,并报警。
系统设计框图如图1所示。
图1整体设计框图
三、VHDL程序实现
1、正常抢答程序及仿真
此模块包括正常抢答第一信号鉴别与显示抢答台号,并发生声音提示。
其中S1,S2,S3,S4为抢答按钮,当对应的按钮信号为0时表示有抢答信号;
K为主持人按钮,按下复位键K时,K=0,系统清零;
G为报警信号。
其VHDL源程序如下:
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_arith.all;
useieee.std_logic_unsigned.all;
entityqiangdais
port(S1,S2,S3,S4:
instd_logic;
--输入:
表示4个人,为0表示有抢答
K:
--主持人抢答开始键
G:
outstd_logic;
--报警信号
ledag:
outstd_logic_vector(6downto0);
Dout:
outstd_logic_vector(3downto0));
--抢答结果显示
endqiangda;
architecturebehaveofqiangdais
signalEnable_Flag:
std_logic;
--允许抢答控制变量,为1表示允许抢答
signalS:
std_logic_vector(3downto0);
signalD:
begin
process(S1,S2,S3,S4,K)--允许抢答控制
begin
S<
=S1&
S2&
S3&
S4;
If(K='
1'
)then
Enable_Flag<
='
;
elsif(S/="
1111"
0'
endif;
endprocess;
process(S1,S2,S3,S4,K)--抢答结果显示
if(K='
)then
D<
="
0000"
Elsif(Enable_Flag='
if(S1='
D(0)<
G<
elsif(S2='
D
(1)<
elsif(S3='
D
(2)<
elsif(S4='
D(3)<
dout<
=d;
process(d)--显示抢答成功者号码
casedis
when"
=>
ledag<
0111111"
0001"
0000110"
0010"
1011011"
0100"
1001111"
1000"
1100110"
whenothers=>
0000000"
endcase;
endbehave;
以上VHDL程序的系统框图如图2所示。
图2抢答部分框图
通过MAX+PLUSⅡ软件仿真结果如图3所示。
从图中可看出S1与S2选手抢答情况,在K为高电平时,S1选手为低电平,抢答成功,报警信号G为低电平,给出报警信号,同时七段数码管译码为06H,显示1。
图3抢答部分仿真图
2、抢答倒计时程序
此模块为抢答20s倒计时程序,在主持人按下按钮K后此模块即开始工作,在20s倒计时完后会有声音提示,G为声音报警信号。
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYCOUNTIS
PORT(CLK,Enable_Flag:
INSTD_LOGIC;
H,L:
OUTSTD_LOGIC_VECTOR(3DOWNTO0);
G:
OUTSTD_LOGIC);
--声音报警
ENDCOUNT;
ARCHITECTURECOUNT_ARCOFCOUNTIS
BEGIN
PROCESS(CLK,Enable_Flag)
VARIABLEHH,LL:
STD_LOGIC_VECTOR(3DOWNTO0);
IFCLK'
EVENTANDCLK='
THEN
IFEnable_Flag='
IFLL=0ANDHH=0THEN
ELSIFLL=0THEN
LL:
="
1001"
HH:
=HH-1;
ELSE
=LL-1;
ENDIF;
ELSE
G<
H<
=HH;
L<
=LL;
ENDPROCESS;
ENDCOUNT_ARC;
其模块结构图如图4所示:
图4倒计时结构图
3、超前犯规抢答程序及仿真
此模块为违规电路。
当抢答者在主持人复位系统之前就已按下抢答按钮,即当RESET=0时,有抢答信号出现,则Y=11表示某组违规,当RESET=1时,显示违规组别。
其中K为主持人按钮,S1,S2,S3,S4为抢答按钮,R1,R2,R3,R4为对应组别犯规红色显示灯。
其VHDL源程序如下:
LIBRARYieee;
useieee.std_logic_unsigned.all;
ENTITYwgIS
PORT(K:
INstd_logic;
S1,S2,S3,S4:
R1,R2,R3,R4:
OUTstd_logic;
--红色灯指示超前抢答台号
y:
OUTstd_logic_VECTOR(1DOWNTO0));
ENDwg;
ARCHITECTUREaOFwgIS
SIGNALTEMP1:
STD_LOGIC;
SIGNALTEMP2:
STD_LOGIC_VECTOR(1DOWNTO0);
TEMP1<
=S1ORS2ORS3ORS4;
TEMP2<
=K&
TEMP1;
process(TEMP2)--显示抢答成功者号码
caseTEMP2is
01"
Y<
11"
10"
00"
when"
endcase;
if(K<
if(S1='
R1<
R2<
R3<
R4<
ENDa;
通过VHDL程序可生成其对应的框图如图5所示:
图5犯规部分框图
同样在MAX+PLUSⅡ环境下可得到其对应的仿真分析图如图6所示。
从仿真分析可看出在为高电平前,S1按钮有超前抢答低电平出现,故Y=11表示有超前抢答产生,同时R1为低电平,对应S1选手的红灯亮,指示其违规抢答。
图6犯规模块仿真图
四、总结
由以上描述及仿真结果可知,本次抢答器的设计在理论上基本上满足了设计任务的要求。
通过这次课程设计的实践,弥补了平时仅仅学习理论知识的不足,在实践中发现了许多问题,这些问题的解决,加深了对所学知识的理解,收获颇丰。
在FPGA试验箱上下载运行了正常抢答部分程序,能够正常抢答与显示报警功能。
此部分的引脚分配图如图7所示:
由于是我的第一次系统设计电路,虽然参照了一些电路程序,毕竟掌握水平有限,在设计成的交通灯中可能存在着一些问题与不足,希望教师给予指正。
图7引脚分配图