EDA实验设计论文-拔河游戏机设计.doc
《EDA实验设计论文-拔河游戏机设计.doc》由会员分享,可在线阅读,更多相关《EDA实验设计论文-拔河游戏机设计.doc(18页珍藏版)》请在冰豆网上搜索。
EDA技术及应用
考试设计论文
题目(中文):
拔河游戏机设计
姓名
贺鹤
学号
201308002118
院(系)
电子与信息工程学院
班级
通信1301班
任课老师
蒋恩松、杨振南
开课学期
2015年下期
项目实施日期
2015年6月1日至2015年6月12日
设计题目要求
设计基本要求
A.设计一个能进行拔河游戏的电路;
B. 电路使用7个发光二极管,开机后只有中间一个发亮,此即拔河的中心点;
C. 游戏双方各持一个按钮,迅速的、不断地按动,产生脉冲,谁按得快,亮点就向谁的方向移动,每按一次,亮点就移动一次;
D.亮点移到任一方终端二极管时,这一方就获胜,此时双方按钮均无作用,输出保持,有复位后才使亮点恢复到中心;
E.用数码管显示获胜者的盘数;
扩展要求:
3、设计最终提交形式
(1)仿真。
(2)实验箱验证。
(3)设计论文。
设计方案
设计功能:
1.按钮信号即输入的脉冲信号,每按一次按钮都应进行有效的计数;
2.用可逆计数器的加减输入端分别接受两路脉冲信号,可逆计数器原始输出状态为0000,经译码器输出,使中间一只二极管发亮;
3.当计数器进行加法计数时,亮点向右移;进行减法计数时,亮点向左移;
4.由一个控制电路指示谁胜谁负,当亮点移到任一方终端时,由控制电路产生一个信号,使计数器停止计数;
5.将双方二极管“点亮”信号分别接两个计数器的“使能”端,当一方取胜时,相应的计数器进行一次计数,这样得到双方取胜次数的显示;
6.设置一个“复位”按钮,使亮点回到中心,取胜计数器也要设置一个“复位”按钮,使之能清零;
系统内部功能模块
系统内部模块图如下:
抢答好选手编号
4个选手得分显示,使用数码管1~4
指导老师意见:
设计论文
第一章设计目标
1.拔河游戏机的基本原理
电子拔河游戏机是一种能容纳甲乙双方参赛或甲乙双方加裁判的三人游戏电路。
由一排7个LED发光二极管表示拔河的“电子绳”。
由甲乙双方通过按钮开关使发光的LED管向自己一方的终点延伸,当延伸到某方的最后一LED管时,则该方失败,对方获胜,并对获胜次数进行计数,连续比赛多局以定胜负。
比赛开始,由裁判下达比赛命令后,甲乙双方才能输入信号,否则,输入信号无效。
裁判信号由键盘空格键来控制。
“电子绳”由7个LED管构成,裁判下达“开始比赛”的命令后,摁一下空格键,位于“电子绳”中点的LED发亮。
甲乙双方通过按键输入信号,使发亮的LED管向自己一方移动,并阻止其向对方延伸,谁摁得快就向这一方移动。
当从中点至自己一方的最后一个LED管发亮时,表示比赛结束,这时,电路自锁,保持当前状态不变,除非由裁判使电路复位,并对获胜的一方计数器自动加一。
记分电路用两位七段数码管分别对双方得分进行累计,在每次比赛结束时电路自动加分。
当比赛结束时,计分器清零,为下一次比赛做好准备。
2.拔河游戏机功能
本设计中实现的拔河游戏机功能如图1
1.按钮信号即输入的脉冲信号,每按一次按钮都应进行有效的计数;
2.用可逆计数器的加减输入端分别接受两路脉冲信号,可逆计数器原始输出状态为0000,经译码器输出,使中间一只二极管发亮;
3.当计数器进行加法计数时,亮点向右移;进行减法计数时,亮点向左移;
4.由一个控制电路指示谁胜谁负,当亮点移到任一方终端时,由控制电路产生一个信号,使计数器停止计数;
5.将双方二极管“点亮”信号分别接两个计数器的“使能”端,当一方取胜时,相应的计数器进行一次计数,这样得到双方取胜次数的显示;
6.设置一个“复位”按钮,使亮点回到中心,取胜计数器也要设置一个“复位”按钮,使之能清零;
第二章详细设计方案
根据需求,本设计的内部结构如图2所示。
主要包括按键消抖模块,分频模块,主控制电路,LED显示模块,数码管显示模块五个部分。
消抖模块用来按键时消除抖动。
主控制电路控制玩家按键移位,LED灯随着按键频率不同而移动,将移动结果用拔河LED显示模块显示出来。
数码管显示模块将计分输赢结果显示输出。
图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)
begin
Cnt<=15'd0;_25HzOut<=~_25HzOut;
end
elseCnt<=Cnt+1'b1;
endmodule
图3分频器仿真波形图
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
图4仿真波形图
3.主程序模块程序设计及仿真
拔河主程序开始时设有复位按键,通过左右数码管显示玩家分数,有两个led小灯代表拔河绳子的中点。
拔河结束也可清零。
modulekongzhi(k1,k2,rst,nrst,_25H,q,left,right);
inputk1;//
inputk2;//
inputrst;//拔河开始复位按键
inputnrst;//计分清零按键
input_25H;//
output[2:
0]q;//拔河led显示输出
output[2:
0]left;//左边分数数码管输出
output[2:
0]right;//右边分数数码管输出
reg[2:
0]q;
regn;
reg[2:
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向右移一位
2'b10:
q=q-1;////led向左移一位
default:
q=q;///保持
endcase//
case(q)
3'b000:
beginn=0;left=left+1;end//左+1分,n使能关
3'b110:
beginn=0;right=right+1;end//右+1分,n使能关
default:
n<=n;//保持
endcase
end
end
endmodule
图5仿真波形图
4.LED模块程序设计及仿真
Led设有7个灯。
moduleled(q,_50M,led);
input[2:
0]q;
input_50M;
output[6:
0]led;
reg[6:
0]led;
always@(posedge_50M)
case(q)
3'd0:
led=7'b1111000;
3'd1:
led=7'b0111000;
3'd2:
led=7'b0011000;
3'd3:
led=7'b0001000;
3'd4:
led=7'b0001100;
3'd5:
led=7'b0001110;
3'd6:
led=7'b0001111;
default:
led<=led;
endcase
endmodule
图6仿真波形图
5.数码管模块程序设计及仿真
moduleshumaguan(left,right,_10000H,segout,wx);
input[2:
0]left;
input[2:
0]right;
input_10000H;
output[6:
0]segout;//数码管输出
output[2:
0]wx;
reg[2:
0]wx;
reg[6:
0]segout;
reg[1:
0]count;
reg[3:
0]seg_in;
always@(p