抢答器VerilogHDL实现.docx
- 文档编号:25014009
- 上传时间:2023-06-03
- 格式:DOCX
- 页数:14
- 大小:81.70KB
抢答器VerilogHDL实现.docx
《抢答器VerilogHDL实现.docx》由会员分享,可在线阅读,更多相关《抢答器VerilogHDL实现.docx(14页珍藏版)》请在冰豆网上搜索。
抢答器VerilogHDL实现
抢答器(-Verilog-HDL实现)
桂林电子科技大学信息科技学院
《EDA技术与应用》实训报告
学号0952100110
姓名赵万里
指导教师:
江国强杨艺敏
2011年04月20日
实训题目:
智能电子抢答器
1.系统设计
1.1设计要求
1.1.1设计任务
设计并制作一台智能电子抢答器。
1.1.2技术要求
①用EDA实训仪的I/O设备和PLD芯片实现智能电子抢答器的设计。
②智能电子抢答器可容纳4组参赛者抢答,每组设一个抢答钮。
③电路具有第一抢答信号的鉴别和锁存功能。
在主持人将复位按钮按下后开始抢答,并用EDA实训仪上的八段数码管显示抢答者的序号,同时扬声器发出“嘟嘟”的响声,并维持3秒钟,此时电路自锁,不再接受其他选手的抢答信号。
④设计一个计分电路,每组在开始时设置为100分,抢答后由主持人计分,答对一次加10分,答错一次减10分。
⑤设计一个犯规电路,对提前抢答和超时抢答者鸣喇叭示警,并显示犯规的组别序号。
1.2方案比较
(1)设计制作一个可容纳四组参赛者的数字智力抢答器,每组设置一个抢答按钮。
(2)电路具有第一抢答信号的鉴别和锁存功能。
在主持人按下复位按钮后,若参加者按抢答开关,则该组指示灯亮。
此时,电路应具备自锁功能,使别组的抢答开关不起作用。
(3)自锁后,用八段数码管显示抢答者的序号,同时指示灯亮。
(4)设置计分电路。
每组在开始时预置成100,抢答后由主持人计分,答对一次加10,否则减10分。
(5)电路具有淘汰功能,当每组的100分减少到0时,该组被淘汰,以后每次抢答,该组抢答按钮都无效。
1.3方案论证
1.3.1总体思路
总体分为四部分:
倒计时模块、计分模块、抢答模块和分屏显示模块。
倒计时模块用一个20000000分频。
产生一个进位,连接一个30的减法计数器构成。
计分模块中分为两部分,一部分用于计分,另一部分用于处理计数器的进制问题,当加到A时自动向前进位,并且把A变为0。
当减少到F时,向前借位,并且把F变为9。
这就实现了把十六进制变成一般用的十进制。
抢答模块分两部分,复位模块和抢答模块,每次抢答都要初始化按键。
抢答模块又分为误抢,无人抢答和正确抢答。
每次抢答,当有一组按下抢答,立即锁定,亮相应的分数和组号,并且亮起各种抢答所对应的灯信号。
(即所要求的蜂鸣器)
分屏显示模块中用每次抢答的组号作为输入,当抢答后立即换屏显示其组号分数。
1.3.2设计方案
(1)根据设计要求需要一个时钟的接入端clk,清除端clrn,使倒计时复位,count进位端当倒计时到0时进位,进位端返回到j,使倒计时停止。
当佣人抢答时,输入一个低电平,在取反输入到i,使倒计时停止。
(图1)
(2)电路的计分模块,d位组号的输入端,是s1位计数按键,p位加减的控制端,高电平是s1位加分,低电平s1位减分,t1、t2、t3、t4位各组的分数输出端,cnn1、cnn2、cnn3、cnn4分别为第一组、第二组、第三组、第四组的减分进位端,当分数减少到0的时候,产生进位,使该组不能再次抢答,使其淘汰。
(图2)
(3)抢答模块,clk位时钟的输入端,再程序的开始捕捉时钟的上升沿,qd是抢答初始化,每次抢答开始首先初始化,使抢答就位,准备开始抢答。
qd1、qd2、qd3、qd4为四组的抢答按键,每次有一组抢答后程序立即锁定,使别的组不能再抢答。
K为抢答开的的控制键,k高电平时开始抢答,低电平时抢答即为误抢。
cnn1、cnn2、cnn3、cnn4位减数进位端,sig、sig1、sig2为各种抢的标志的输出,即亮灯(蜂鸣器)。
d位抢答者的组号输出端。
(图3)
(4)分屏显示模块mux_1,d,t1、t2、t3、t4分别为组号和各组分数的输入端,w换屏信号的输入端,qs位输出。
(图4)
(5)全局电路
2.各个模块程序的设计
(1)倒计时模块,20000000分频产生进位,输入到计数器模块,完成30秒计数。
(2)计分模块,用一个按键和一个拨动开关,拨动开关高点平时按键每按一次加十分,低电平时每按一次减十分。
(3)抢答模块
A、一个复位键,四个抢答键,当按下复位键后,如果有选手抢答,则电路立即锁定,使其他组不能再次抢答。
B、在没有开始抢答之前,如果用人抢答即为误抢,显示其组号,分数。
C、30秒倒计时开始,抢答者都不抢答,则表示无人抢答,亮起相应的灯。
(4)分屏显示模块,此模块完全由输入的组号控制。
3.制作与调试过程
(1)30秒倒计时的调试,管脚锁定clk,使每秒产生一个进位,送到减数器模块。
(2)计分模块,锁定两组的管脚,进行操作,组号的输入用拨动开关控制。
(3)抢答模块,锁定相应的管脚,进行抢答,误抢和无人抢答操作,测试是否能够锁定,以及亮灯,显示正确的组号分数。
4.结论
本次实训为期三周,确定下题目后,首先就是方案的确定。
经过老师的辅导、同学的帮助、翻阅相关资料,综合各方面的考虑。
了解EP1C3T144C8芯片的构造,需要查看大量的英文资料,我并没有气馁,一个管脚一个管脚的对比,终于弄清楚了实现功能的大体思路。
然后就是再次学习VerilogHDL语言,虽然以前学过,但是差不多都忘了,用了几天时间熟悉了VerilogHDL源程序的编写。
最后是硬件的调试,这是个漫长的过程,EP1C3T144C8芯片的接口也非常的繁杂,最后我坚持了下来。
5.实训心得体会
通过这次实训,我对VerilogHDL有了深入的认识。
同时也对EDA产生了更加浓厚的兴趣。
本次实训,也检验了自己的能力,加强了逻辑思维的能力,不过我也发现了自身存在的一些问题,比如在quartus软件的应用上还有很多不成熟不理解的地方,但是相信在以后的学习生活中我可以很好的与予改正,取得更好的成绩,也希望日后老师能不厌其烦的指导我,给予我更大的支持。
6.参考文献
1江国强EDA技术与应用第三版电子工业出版社2010
2谭会生,张昌凡.EDA技术及应用.第二版.西安电子科技大学出版社,2009
附录:
仿真波形图(部分模块)
(图130秒倒计时)
程序清单
(1)倒计时模块
A.20000000分频程序
modulecnt60(clk,cout,i,j,m);
inputclk,i,j,m;
reg[24:
0]q;
outputregcout;
always@(posedgeclk&(~i)&(~j)&(~m))
begin
if(q<20000000-1)q=q+1;
elseq=0;
if(q==20000000-1)cout=1;
elsecout=0;
end
endmodule
B、30秒倒计时程序
modulecntdj(clrn,clk,q,count);
inputclk,clrn;
outputreg[7:
0]q;
outputregcount;
always@(posedgeclkornegedgeclrn)
if(~clrn)beginq='h30;count='h0;end
elsebegin
if(q==0)q='h30;
elseq=q-1;
if(q[3:
0]=='hf)beginq[3:
0]=9;end
if(q=='h0)count=1;
elsecount=0;
end
endmodule
(2)计分模块程序
modulejiajianjishu(t1,t2,t3,t4,s1,d,count,cnn1,cnn2,cnn3,cnn4,p);
inputs1,p;
input[3:
0]d;
outputregcount,cnn1,cnn2,cnn3,cnn4;
outputreg[11:
0]t1,t2,t3,t4;
initialbegint1='h100;t2='h100;t3='h100;t4='h100;end
always@(posedges1)
begin
if(p)begin
if(d=='h1)begint1=t1+'h10;
if(t1[7:
4]=='ha)begin
t1[7:
4]=0;t1[11:
8]=t1[11:
8]+1;
end
elseif(t1=='h1000)count=1;
elsecount=0;end
elseif(d=='h2)begint2=t2+'h10;
if(t2[7:
4]=='ha)begin
t2[7:
4]=0;t2[11:
8]=t2[11:
8]+1;
end
elseif(t2=='h1000)count=1;
elsecount=0;end
elseif(d=='h3)begint3=t3+'h10;
if(t3[7:
4]=='ha)begin
t3[7:
4]=0;t3[11:
8]=t3[11:
8]+1;
end
elseif(t3=='h1000)count=1;
elsecount=0;end
elseif(d=='h4)begint4=t4+'h10;
if(t4[7:
4]=='ha)begin
t4[7:
4]=0;t4[11:
8]=t4[11:
8]+1;
end
elseif(t4=='h1000)count=1;
elsecount=0;end
elsebegint1='h100;t2='h100;t3='h100;t4='h100;end
end
elseif(~p)
begin
if(d=='h1)begint1=t1-'h10;
if(t1[7:
4]=='hf)begint1[7:
4]=9;t1[11:
8]=t1[11:
8]-1;
if(t1[11:
8]=='hf)begint1[11:
8]=0;end
/*elset1[11:
8]=t1[11:
8];*/
end
elseif(t1[11:
4]=='h0)begincnn1=1;t1[11:
0]='h0;end
elsecnn1=0;
end
elseif(d=='h2)begint2=t2-'h10;
if(t2[7:
4]=='hf)begint2[7:
4]=9;t2[11:
8]=t2[11:
8]-1;
if(t2[11:
8]=='hf)begint2[11:
8]=0;end
/*elset2[11:
8]=t2[11:
8];*/
end
elseif(t2[11:
4]=='h0)begincnn2=1;t2[11:
0]='h0;end
elsecnn2=0;end
elseif(d=='h3)begint3=t3-'h10;
if(t3[7:
4]=='hf)begint3[7:
4]=9;t3[11:
8]=t3[11:
8]-1;
if(t3[11:
8]=='hf)begint3[11:
8]=0;end
/*elset3[11:
8]=t3[11:
8];*/
end
elseif(t3[11:
4]=='h0)begincnn3=1;t3[11:
0]='h0;end
elsecnn3=0;end
elseif(d=='h4)begint4=t4-'h10;
if(t4[7:
4]=='hf)begint4[7:
4]=9;t4[11:
8]=t4[11:
8]-1;
if(t4[11:
8]=='hf)begint4[11:
8]=0;end
/*elset4[11:
8]=t4[11:
8];*/
end
elseif(t4[11:
4]=='h0)begincnn4=1;t4[11:
0]='h0;end
elsecnn4=0;end
elsebegint1=100;t2=100;t3=100;t4=100;end
end
end
endmodule
(3)抢答模块程序
moduleqdq(clk,qd,qd1,qd2,qd3,qd4,Sig,Sig1,Sig2,d,k,g,cnn1,cnn2,cnn3,cnn4);
inputclk,qd,qd1,qd2,qd3,qd4,k,g,cnn1,cnn2,cnn3,cnn4;
outputSig,Sig1,Sig2;
output[3:
0]d;
regSig='h0,Sig1='h0,Sig2='h0;
reg[3:
0]d;
regzd=1'b0;
always@(posedgeclk)
begin
if(qd==1'b0)
begin
zd=1'b1;
Sig='h0;
Sig1='h0;
Sig2='h0;
d='h0;
end
if(k)begin
if(zd==1'b1)
begin
if((qd1==1'b0)&(~cnn1))
begin
zd=1'b0;
Sig='h1;
d=1;
end
elseif((qd2==1'b0)&(~cnn2))
begin
zd=1'b0;
Sig='h1;
d=2;
end
elseif((qd3==1'b0)&(~cnn3))
begin
zd=1'b0;
Sig='h1;
d=3;
end
elseif((qd4==1'b0)&(~cnn4))
begin
zd=1'b0;
Sig='h1;
d=4;
end
elseif(g)beginzd=1'b0;Sig2='h1;end
end
end
elseif(~k)begin
if(zd==1'b1)
begin
if((qd1==1'b0)&(~cnn1))
begin
zd=1'b0;
Sig1='h1;
d=1;
end
elseif((qd2==1'b0)&(~cnn2))
begin
zd=1'b0;
Sig1='h1;
d=2;
end
elseif((qd3==1'b0)&(~cnn3))
begin
zd=1'b0;
Sig1='h1;
d=3;
end
elseif((qd4==1'b0)&(~cnn4))
begin
zd=1'b0;
Sig1='h1;
d=4;
end
end
end
end
endmodule
(4)分屏显示模块程序
modulemux_1(d,t1,t2,t3,t4,w,qs);
inputw;
input[3:
0]d;
input[11:
0]t1,t2,t3,t4;
outputreg[15:
0]qs;
always
begin
if(w)begin
qs[15:
12]=d;
if(d==1)beginqs[11:
0]=t1;end
elseif(d==2)beginqs[11:
0]=t2;end
elseif(d==3)beginqs[11:
0]=t3;end
elseif(d==4)beginqs[11:
0]=t4;end
elseqs[11:
0]=0;
end
elseqs[15:
0]=0;
end
endmodule
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 抢答 VerilogHDL 实现