EDA抢答器设计Word格式.docx
《EDA抢答器设计Word格式.docx》由会员分享,可在线阅读,更多相关《EDA抢答器设计Word格式.docx(8页珍藏版)》请在冰点文库上搜索。
在这个模块中主要实现抢答过程中的抢答功能,并能对超前抢答进行警告,还能记录无论是正常抢答还是朝前抢答者的台号,并且能实现当有一路抢答按键按下时,该路抢答信号将其余的抢答信号封锁的功能。
其中有四个抢答信号s0、s1、s2、s3;
抢答状态显示信号states;
抢答与警报时钟信号clk0;
系统复位信号rst;
警报信号warm。
(二).抢答器计时模块
在这个模块中主要实现抢答过程中的计时功能,在有抢答开始后进行20秒的倒计时,并且在20秒倒计时后无人抢答显示超时并报警。
其中有抢答时钟信号clk1;
抢答使能信号start;
无人抢答警报信号warn;
计时中止信号stop;
计时十位和个位信号tb,ta。
(三).报警模块
该模块中主要实现抢答过程中的报警功能,当主持人按下控制键,有限时间内无人抢答或是计数到时蜂鸣器开始报警,计数停止信号stop;
状态输出信号alm;
计数脉冲clk。
(四).译码模块
在这个模块中主要实现抢答过程中将BCD码转换成7段的计时功能。
(五).分频模块
在这个模块中主要实现抢答过程中所需的时钟信号。
(六).计分模块
在计分电路的设计中,按照一般的设计原则,按一定数进制进行加减。
由于此设计要先预置100分,所以可以设计rest开关,当它为高电平的时候就进行预置,然后为低电平的时候,有主持人控制ADD与ACC两个开关对抢答者做出的回答进行加减分判断。
预置数100分,就由AA0、AA1、AA2控制个、十、百位信号,因为个位一直为零,所以就将它一直设置成低电平,然后当十位为“9”的时候,向百位进位,百位就加“1”,减分的时候,当十位为“0”的时候,就向百位借“1”。
二.程序代码
(一).抢答器鉴别模块代码、仿真
modulejianbie(clk0,rst,key,s0,s1,s2,s3,states,led,warm,buzz);
inputclk0,rst,key,s0,s1,s2,s3;
output[6:
0]states;
output[3:
0]led;
outputwarm;
outputbuzz;
regEnFlat=1'
b1;
reg[3:
0]states=4'
b0000;
0]led=4'
b1111;
regspeaker;
regwarm=1'
regbuzz;
integeri;
always@(posedgeclk0)
begin
if(key==1)
if(s0==0)
beginstates=4'
b0001;
warm=1'
b0;
end
if(s1==0)
b0010;
if(s2==0)
b0011;
if(s3==0)
b0100;
if(key==1'
b0)
if(EnFlat==1'
b1)
if((s0==1'
b0)&
&
(EnFlat==1'
b1))
led=4'
b1110;
states=4'
EnFlat=1'
speaker=1'
elseif((s1==1'
b1101;
elseif((s2==1'
b1011;
elseif((s3==1'
b0111;
if(rst)
states=3'
d0;
always@(posedgeclk0)
if(speaker==1)
if(i<
25000000)beginbuzz<
=1;
i<
=i+1;
end
elsebuzz<
=0;
elsebeginbuzz<
endmodule
图2.1.1鉴别模块仿真
(二)、抢答器计时模块代码、仿真
modulejishi(clk_1s,ta,tb,chaoshi,start,block,rst,stop);
inputclk_1s,start,block,rst,stop;
outputreg[3:
0]ta,tb;
outputregchaoshi;
reg[5:
0]ji20;
always@(posedgeclk_1s)
begin
if(start==0)
ji20=6'
d20;
ta=4'
tb=4'
d2;
elseif(!
block)
if(ji20==0)
ta=0;
tb=0;
chaoshi=1;
elseif(ji20<
11)
ji20=ji20-6'
ta=ji20;
else
ta=ji20-6'
d10;
d1;
chaoshi=0;
图2.2.1抢答器计时仿真
(三).报警模块代码、仿真
modulebaojing(stop,alm,clk,fmq,warn);
inputstop,clk,warn;
outputregalm,fmq;
always@(posedgeclk)
begin
alm<
fmq<
if(warn&
!
stop)
end