eda拔河游戏机课程设计报告文档格式.docx
《eda拔河游戏机课程设计报告文档格式.docx》由会员分享,可在线阅读,更多相关《eda拔河游戏机课程设计报告文档格式.docx(11页珍藏版)》请在冰豆网上搜索。
4.1设计原理和方案
电子拔河游戏机是一种能容纳甲乙双方参赛或甲乙双方加裁判的三人游戏电路。
由一排16个LED发光二极管表示拔河的“电子绳”。
由甲乙双方通过按钮开关使发光的LED管向自己一方的终点延伸,当延伸到某方的最后一LED管时,则该方失败,对方获胜,并对获胜次数进行计数,连续比赛多局以定胜负。
比赛开始,由裁判下达比赛命令后,甲乙双方才能输入信号,否则,输入信号无效。
裁判信号由键盘空格键来控制。
“电子绳”由16个LED管构成,裁判下达“开始比赛”的命令后,摁一下空格键,位于“电子绳”中点的LED发亮。
甲乙双方通过按键输入信号,使发亮的LED管向自己一方移动,并阻止其向对方延伸,谁摁得快就向这一方移动。
当从中点至自己一方的最后一个LED管发亮时,表示比赛结束,这时,电路自锁,保持当前状态不变,除非由裁判使电路复位,并对获胜的一方计数器自动加一。
记分电路用两位七段数码管分别对双方得分进行累计,在每次比赛结束时电路自动加分。
当比赛结束时,计分器清零,为下一次比赛做好准备。
4.2程序设计及仿真
4.2.1分频器模块程序设计及仿真
modulefpq(_10000HzOut,_25HzOut,_50MHzIn);
input_50MHzIn;
output_10000HzOut,_25HzOut;
parameterwidth1=16,value1=2499;
parameterwidth2=10,value2=499;
reg_10000HzOut,_25HzOut;
reg[width1-1:
0]Count;
reg[width2-1:
0]Cnt;
always(posedge_50MHzIn)//2500*2*10000Hz=50MHz
if(Count==value1)//BinaryCounter(0~2499)
begin
Count<
=15'
d0;
_10000HzOut<
=~_10000HzOut;
end
elseCount<
=Count+1'
b1;
always(posedge_50MHzIn)//100000*2*25Hz=50MHz
if(Cnt==value2)//BinaryCounter(0~99999)
Cnt<
_25HzOut<
=~_25HzOut;
elseCnt<
=Cnt+1'
endmodule
图1,分频器仿真波形图
4.2.2按键模块程序设计及仿真
按键模块采用3个或门消抖,由于有两个玩家,
所以设置有两个按键,采用25hz脉冲。
modulexiaodou(key1,key2,_25H,k1,k2);
inputkey1;
////按键1
inputkey2;
////按键2
input_25H;
//脉冲25Hz
outputk1;
outputk2;
assignk1=(a1|a2|a3);
////
assignk2=(b1|b2|b3);
////采用3个或门消抖
rega1,a2,a3,b1,b2,b3;
always(posedge_25H)
begin
a1<
=key1;
a2<
=a1;
a3<
=a2;
b1<
=key2;
b2<
=b1;
b3<
=b2;
end
endmodule
图2,仿真波形图
4.2.3主程序模块程序设计及仿真
拔河主程序开始时设有复位按键,通过左右数码管显示玩家分数,有两个led小灯代表拔河绳子的中点。
拔河结束也可清零。
modulexin(k1,k2,rst,nrst,_25H,q,left,right);
inputk1;
//
inputk2;
inputrst;
//拔河开始复位按键
inputnrst;
//计分清零按键
output[2:
0]q;
//拔河led显示输出
0]left;
//左边分数数码管输出
0]right;
//右边分数数码管输出
reg[2:
0]q;
regn;
0]left,right;
//reg寄存器
always(negedgerstorposedge_25Hornegedgenrst)
begin
if(~rst)beginq=7;
n=1;
end//q,led回中点n使能开
elseif(~nrst)beginleft=0;
right=0;
end//计分清零
elseif(n)//判断使能是否开!
begincase({k1,k2})//按键组
2'
b01:
q=q+1;
///led向右移一位
b10:
q=q-1;
////led向左移一位
default:
q=q;
///保持
endcase//
case(q)
3'
b000:
beginn=0;
left=left+1;
end//左+1分,n使能关
b110:
right=right+1;
end//右+1分,n使能关
n<
=n;
//保持
endcase
end
图3,仿真波形图
4.2.4LED模块程序设计及仿真
Led设有16个灯。
moduleled(q,_50M,led);
input[2:
input_50M;
output[7:
0]led;
reg[7:
always(posedge_50M)
d0:
led=16'
b11111;
d1:
d2:
d3:
d4:
d5:
d6:
d7:
//中点
d8:
d9:
d10:
b01111;
d11:
b00111;
d12:
b10011;
d13:
b11001;
d14:
b11100;
led<
=led;
图4,仿真波形图
4.2.5数码管模块程序设计及仿真
moduleshumaguan1(left,right,_10000H,segout,wx);
input_10000H;
output[6:
0]segout;
//数码管输出
0]wx;
reg[6:
reg[1:
0]count;
reg[3:
0]seg_in;
always(posedge_10000H)
case(count)
beginwx<
=3'
b011;
seg_in<
=left;
count<
=count+1;
end//leftwx+,计数输入=left,count进一位继续判断
b101;
=4'
d8;
end//-wx+,计数输入=8,同上
b110;
=right;
=0;
end//rihhtwx+,计数输入=right,conunt归零,重新判断
always(seg_in)
case(seg_in)//gfedcba//
4'
segout<
=7'
b1000000;
//0
b1111001;
//1
b0100100;
//2
b0110000;
//3
b0011001;
//4
b0010010;
//5
b0000010;
//6
b1111000;
//7
b0111111;
//8
b0111011;
//9
endcase
图5,仿真波形图
4.2.6顶层设计及仿真
图6,顶层设计
图7,顶层设计仿真波形图
4.3适配
1.选择的器件为:
CycloneIIEP2C5AT144A7
2.引脚分配:
NodeName
Direction
Location
_50MHzIn
Input
IOBANK_1
key1
IOBANK_2
key2
IOBANK_3
led[0]
Output
PIN_24
led[1]
PIN_25
led[2]
PIN_26
led[3]
PIN_30
led[4]
PIN_31
led[5]
PIN_32
led[6]
PIN_27
led[7]
PIN_28
led[8]
PIN_64
led[9]
PIN_63
led[10]
PIN_60
led[11]
PIN_59
led[12]
PIN_58
led[13]
PIN_57
led[14]
PIN_55
led[15]
PIN_53
nrst
IOBANK_4
rst
EDGE_BOTTOM
segout[0]
PIN_40
segout[1]
PIN_41
segout[2]
PIN_42
segout[3]
PIN_43
segout[4]
PIN_44
segout[5]
PIN_45
segout[6]
PIN_47
wx[0]
PIN_48
wx[1]
PIN_51
wx[2]
PIN_52
5、小结
一开始接触这个课题的时候,不知道怎么下手,通过老师的讲解以及查找资料基本了解了拔河游戏机的设计原理。
通过这次课程设计,我更加感到理论和实际之间的差异很大。
我也越来越强烈地感到要掌握一项技术,唯一的办法也是最好的办法就是实践。
只有通过实践才能将书本上的知识应用,也只有实践才能发现很多问题,真正掌握知识,学以致用。
虽然遇到的问题很多,但是同时得到很多有用的经验。
这些对于以后的学习和工作都有很大的帮助。
6、参考文献
[1]松著.EDA技术实用教程(第二版).:
科学,2005.
[2]睿强主编.VerilogHDL数字系统设计及实践.:
电子工业,2011.
[3]福奇主编.VerilogHDL应用程序设计实例精讲.:
电子工业,2009.
[4]王秀琴主编.数字系统设计入门与应用实例.:
电子工业,2012.
[5]侯建军主编.spoc技术基础教程.:
清华大学,2008.