基于EDA的智力抢答器的课程设计说明书Word文档格式.docx
《基于EDA的智力抢答器的课程设计说明书Word文档格式.docx》由会员分享,可在线阅读,更多相关《基于EDA的智力抢答器的课程设计说明书Word文档格式.docx(30页珍藏版)》请在冰豆网上搜索。
此设计问题可分为第一信号鉴别、锁存模块、答题计时电路模块、计分电路模块和扫描显示模块四个模块构成。
①此设计问题的关键是准确判断出第一抢答者并将其锁存,实现的方法可使用触发器或锁存器,在得到第一信号后将输入封锁,使其它组的抢答信号无效。
②形成第一抢答信号后,用编码、译码及数码显示电路显示第一抢答者的组别,用第一抢答信号控制一个具有2种工作频率交替变化的音频振荡器工作,推动扬声器发出2种笛音音响。
③计分电路采用十进制加/减计数器、数码管显示,由于每次都是加/减10分,所以个位始终为零,只要十位、百位进行加/减运算即可。
其流程图如下:
图2.2四路抢答器原理
3、课程设计内容
3.1软件整体设计
Y
YN
NY
图3.1软件设计整体框架
3.2总体设计电路
3.3模块设计和相应模块程序
第一信号鉴别锁存模块的原理:
1
在得到第一信号后,准确判断出第一抢答者并将其锁存;
2将输入端封锁,使其他组的抢答信号无效。
采用锁存器74175实现,如右图所示。
3.3.1抢答鉴别模块
信号锁存电路信号定义:
CLK:
时钟信号;
K1、K2、K3、K4:
抢答按钮信号;
out1、out2、out3、out4:
抢答LED显示信号;
judge:
裁判员抢答开始信号;
buzzout:
示警输出信号;
flag:
答题是否超时的标志;
modulesel(clk,k1,k2,k3,k4,judge,seg,sl,out1,out2,out3,out4,out5,buzzout);
inputclk,k1,k2,k3,k4,judge;
outputout1,out2,out3,out4,out5,buzzout;
regout1,out2,out3,out4,out5,block,buzzout;
output[7:
0]seg;
output[3:
0]sl;
reg[32:
0]count;
reg[27:
0]counter;
reg[7:
0]seg_reg;
reg[3:
0]sl_reg;
regflag;
always@(posedgeclk)
begin
counter=counter+1;
//裁判员发开始抢答信号,初始化指示灯为灭、抢答的互斥量为0,蜂鸣器禁声
if(!
judge)
begin
{out1,out2,out3,out4,out5,block}<
=6'
b111110;
count<
=0;
flag=0;
end
else
k1)//第一组别按键是否按下
block)
out1=0;
block=1;
//封锁别组抢答信号
count=1;
//第一组已按下按钮,可启动答题计时器
…
elseif(!
k4)//第四组别按键是否按下
block)
out4=0;
seg_reg=8'
hc0;
if(count!
=0)
out1)
hf9;
out2)
ha4;
out3)
hb0;
out4)
h99;
sl_reg=4'
b0111;
if(count==32'
h608f3d00)//如果答题时间到了30s,亮犯规灯
count=0;
out5=0;
flag=1'
b1;
//置蜂鸣器发声标志
count=count+1;
////蜂鸣器发声
always@(counter[7])
if(flag==1)buzzout=!
(counter[11]&
counter[22]&
counter[27]);
elsebuzzout=1'
b0;
assignseg=seg_reg;
assignsl=sl_reg;
endmodule
抢答鉴别模块图
抢答鉴别模块用来准确直观地判断K1,K2,K3,K4四组抢答者谁最先按下按钮,并为显示端送出信号,通过数显和蜂鸣等途径使观众能够清楚地知道是哪一组抢答成功,是整个系统的核心部分。
同时组别显示端为下一模块输入信号,以方便主持人为该组抢答成功者进行加减分的操作。
3.3.2计时模块
modulejsq(out,clk,reset);
outputout;
reg[3:
0]qh;
0]ql;
regout;
inputclk,reset;
always@(posedgeclkornegedgereset)
out<
if(~reset){qh,ql}<
else
begin
if({qh,ql}==8'
h03)
begin{qh,ql}<
=1;
end
else
if(~out)
begin
if(ql==9)
beginql<
qh<
=qh+1;
ql<
=ql+1;
end
计时模块图
在这个模块中主要实现抢答过程中的计时功能,在有抢答开始后进行30秒的倒计时,并且在30秒倒计时后无人抢答显示超时并报警。
系统复位信号reset;
3.3.3数据选择模块和译码模块
modulesell(in1,in2,in3,in4,in5,in6,in7,in8,clk,ms1,ms2,ms3,ms4,ms5,ms6,ms7,ms8,a,b,c,d,e,f,g);
inputclk;
input[3:
0]in1,in2,in3,in4,in5,in6,in7,in8;
outputms1,ms2,ms3,ms4,ms5,ms6,ms7,ms8,a,b,c,d,e,f,g;
regms1,ms2,ms3,ms4,ms5,ms6,ms7,ms8,a,b,c,d,e,f,g;
0]temp,flag;
{ms1,ms2,ms3,ms4,ms5,ms6,ms7,ms8}=8'
b00000000;
flag=flag+1;
case(flag)
0:
begintemp=in1;
ms1=1;
1:
begintemp=in2;
ms2=1;
2:
begintemp=in3;
ms3=1;
3:
begintemp=in4;
ms4=1;
4:
begintemp=in5;
ms5=1;
5:
begintemp=in6;
ms6=1;
6:
begintemp=in7;
ms7=1;
7:
begintemp=in8;
ms8=1;
endcase
case(temp)
4'
d0:
{a,b,c,d,e,f,g}=7'
b1111110;
d1:
b0110000;
d2:
b1101101;
d3:
b1111001;
d4:
b0110011;
d5:
b1011011;
d6:
b1011111;
d7:
b1110000;
d8:
b1111111;
d9:
b1111011;
default:
在这个模块中主要实现抢答过程中将BCD码转换成7段的功能。
3.4仿真及仿真结果分析
抢答鉴别
计时
其中有抢答时钟信号clk2;
系统复位信号rst;
抢答使能信号s;
抢答状态显示信号states;
无人抢答警报信号warn;
计时中止信号stop;
计时十位和个位信号tb,ta。
报警
在这个模块中主要实现抢答过程中的报警功能,当主持人按下控制键,有限时间内如果人抢答或是计数到时蜂鸣器开始报警,有效电平输入信号i;
状态输出信号q;
计数脉冲clk。
译码
5、结论与致谢
这次EDA课程设计让我加深理解了VHDL程序设计的步骤和原理。
我们的题目是四路抢答器设计,刚开始一头雾水,通过查资料和借鉴前辈的作品,我一步一步从迷茫到困惑再到柳暗花明,我发现做学问要知其然知其所以然,静下心来,仔细研究,才能有所发现。
总的来说,这次设计的抢答器还是比较成功的,在设计中遇到了很多问题,最后在老师的辛勤的指导下,终于迎刃而解,有点小小的成就感,终于觉得平时所学的知识有了实用的价值,达到了理论与实际相结合的目的,不仅学到了不少知识,而且锻炼了自己的能力。
参考文献
[1]黄仁欣.EDA技术实用教程.北京:
清华大学出版社,2006
[2]潘松,黄继业.EDA技术与VHDL.北京:
清华大学出版社,2009
[3]江国强编著.EDA技术与应用(第三版)..北京:
电子工业出版社,2010
[4]夏宇闻编著.VerilogHDL数字系统设计教程..北京:
北京航空航天大学出版社,2008
[5]周祖成,程晓军,马卓钊编著.数字电路与系统教学实验教程.北京:
科学出版社,2010
[6]周润景,苏良碧.基于QuartusII的数字系统VerilogHDL设计实例详解.北京:
[7](美国)SanirPalnitkar译者:
夏宇闻胡燕祥刁岚松.VerilogHDL数字设计与综合(第2版).北京:
电子工业出版社,2009
[8]云创工作室.VerilogHDL程序设计与实践.北京:
人民邮电出版社,2009
[9]刘福奇,刘波.VerilogHDL应用程序设计实例精讲.北京:
[10]张延伟,杨金岩,葛爱学.veriloghdl程序设计实例详解.北京:
人民邮电出版社,2008
附录
附录一:
系统设计程序
//========智力抢答器========
//========编制:
//函数定义
modulesel(clk,k1,k2,k3,k4,judge,seg,sl,out1,out2,out3,out4,out5,buzzout);
k2)//第二组别按键是否按下
out2=0;
k3)//第三组别按键是否按下
out3=0;
//答题计时电路模块
modulejsq(out,clk,reset);
elsebegin
h03)begin{qh,ql}<
elsebegin
//计分电路模块和扫描显示模块
modulejfq(clk,qd1,qd2,qd3,qd4,yes,no,reset,df1l,df1h,df2l,df2h,df3l,df3h,df4l,df4h);
inputclk,qd1,qd2,qd3,qd4,yes,no,reset;
0]df1l,df1h,df2l,df2h,df3l,df3h,df4l,df4h;
if(reset)
{df1l,df1h,df2l,df2h,df3l,df3h,df4l,df4h}=32'
h10101010;
elseif(yes)
//
if(qd1)
if(df1l==9)
df1l=0;
if(df1h==9)
df1h=0;
df1h=df1h+1;
df1l=df1l+1;
if(qd2)
if(df2l==9)
df2l=0;
if(df2h==9)
df2h=0;
df2h=df2h+1;
df2l=df2l+1;
if(qd3)
if(df3l==9)
df3l=0;
if(df3h==9)
df3h=0;
df3h=df3h+1;
df3l=df3l+1;
if(qd4)
if(df4l==9)
df4l=0;
if(df4h==9)
df4h=0;
df4h=df4h+1;
df4l=df4l+1;
elseif(no)
if(df1l!
=4'
b0000)
df1l=df1l-1;
elseif(df1h!
df1h=df1h-1;
df1l=9;
if(df2l!
df2l=df2l-1;
elseif(df2h!
df2h=df2h-1;
df2l=9;
if(df3l!
df3l=df3l-1;
elseif(df3h!
df3h=df3h-1;
df3l=9;
if(df4l!
df4l=df4l-1;
elseif(df4h!
df4h=df4h-1;
df4l=9;
//选择模块
module
sel(in1,in2,in3,in4,in5,in6,in7,in8,clk,ms1,ms2,ms3,ms4,ms5,ms6,ms7,ms8,a,b,c,d,e,f,g);
{a,b,c,d,e,f,