本文为大家带来三种四人抢答器的VHDL语言设计方案介绍。
VHDL语言设计四人抢答器方案一
设计要求
l、设计用于竞赛的四人抢答器,功能如下:
(1)有多路抢答器,台数为四,能显示抢答台号;
(2)具有抢答开始后20秒倒计时,20秒倒计时后无人抢答显示超时,并报警;
(3)能显示超前抢答台号并显示犯规警报;
2、系统复位后进入抢答状态,当有一路抢答键按下时,该路抢答信号将其余各路抢答封锁,同时铃声响,直至该路按键松开,显示牌显示该路抢答台号。
3、用VHDL语言设计符合上述功能要求的四人抢答器,并用层次设计方法设计该电路。
电路工作原理
简易逻辑数字抢答器由主体电路与扩展电路组成。优先编码电路、锁存器、译码电路将参赛队的输入信号在显示器上输出;用控制电路和主持人开关启动报警电路,以上两部分组成主体电路。通过定时电路和译码电路将秒脉冲产生的信号在显示器上输出实现计时功能,构成扩展电路。
电路主要由脉冲产生电路、锁存电路、编码及译码显示电路、倒计时电路和音响产生电路组成。当有选手抢答时,首先锁存,阻止其他选手抢答,然后编码,再经译码器将数字显示在显示器上同时产生音响。主持人宣布开始抢答时,倒计时电路启动由20计到0,如有选手抢答,倒计时停止,如20秒后无人抢答,则会显示报警。
源程序
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entityqdqis
port(clr,clk,clk0,en,a,b,c,d:instd_logic;
dps:outstd_logic_vector(3downto0);
count:outstd_logic_vector(7downto0);
speaker:outstd_logic);
end;
architectureoneofqdqis
signaldps1:std_logic_vector(3downto0);
signalcount1:std_logic_vector(7downto0);
signaltmp1,tmp2,tmp3:std_logic;
begin
p1:process(clr,en,tmp1,tmp2)
begin
ifclr=‘1’then
tmp1<=‘0’;tmp2<=‘0’;
dps1<=“0000”;
elsifen=‘1’then
iftmp1=‘0’then
ifa=‘1’then
tmp1<=‘1’;
dps1<=“0001”;
endif;
ifb=‘1’thentmp1<=‘1’;
dps1<=“0010”;
endif;
ifc=‘1’thentmp1<=‘1’;
dps1<=“0011”;
endif;
ifd=‘1’thentmp1<=‘1’;
dps1<=“0100”;
endif;
endif;
elsifen=‘0’then
iftmp2=‘0’then
ifa=‘1’then
tmp2<=‘1’;
dps1<=“0001”;
endif;
ifb=‘1’then
tmp2<=‘1’;
dps1<=“0010”;
endif;
ifc=‘1’then
tmp2<=‘1’;
dps1<=“0011”;
endif;
ifd=‘1’then
tmp2<=‘1’;
dps1<=“0100”;
endif;
endif;
endif;
endprocess;
p2:process(clr,clk,tmp1,tmp3)
begin
ifclk‘eventandclk=’1‘then
ifclr=’1‘thencount1<=“00100000”;
tmp3<=’0‘;
elsifen=’1‘andtmp1=’0‘andtmp3=’0‘then
ifcount1=“00000000”then
tmp3<=’1‘;
elsifcount1(3downto0)=“0000”then
count1(3downto0)<=“1001”;
count1(7downto4)<=count1(7downto4)-’1‘;
elsecount1(3downto0)<=count1(3downto0)-’1‘;
endif;
endif;
endif;
endprocess;
count<=count1;
dps<=dps1;
speaker<=((tmp3oraorborcord)andclk0);
end;
仿真波形
(一)无人抢答的仿真波形
由上图可知,当en=0时此时主持人并没有提出开始抢答的信号.en=1,开始抢答的时候20秒倒计时,时间到而无人抢答。(count=“00000000”),则speaker报警,按下清零开关(clr=1),重新开始20秒倒计时进行下一轮
(二)有人抢答的仿真波形
由上图可知,clr=1,系统进入初始状态,即count=“00100000”,dps=“0000”;en=0时,此时主持人并没有提出开始抢答的信号是不允许抢答的,若有人抢答(b=1),则speaker报警,且数码管显示组别(dps=“0010”)显示出犯规的组别;en=1时,开始正常抢答而且count开始20秒倒计时,在15秒时(count=“00010101”)有人抢答(a=1),倒计时暂停同时锁存器工作将其他组别的信号锁存后面的信号将视为无效,数码管显示组别(dps=“0001”),且speaker报警。
评论
查看更多