当前位置:文档之家› eda拔河游戏机课程设计报告

eda拔河游戏机课程设计报告

报告书写要求1、报告的撰写要求条理清晰、语言准确、表述简明。

报告中段首空两个字符,中文字体为宋体五号,数字、字符、字母为Times New Roman五号,且单倍行距。

2、报告中插图应与文字紧密配合,文图相符,技术内容正确。

每个图都应配有图题(由图号和图名组成)。

图题(宋体小五号)置于图下居中,其中图号按顺序编排,图名在图号之后空一格排写。

图中若有分图时,分图号用(a)、(b)等置于分图之下。

注:框图、流程图(矢量图)用专业画图软件。

3、报告中插表应与文字紧密配合,文表相符,技术内容正确。

表格不加左、右边线,上、下线需加粗(1.5磅),每个表应配有表题(由表号和表名组成)。

表题(宋体小五号)置于表上居中,其中表号按顺序编排,表名在表号之后空一格排写。

4、报告中公式原则上居中书写。

注:公式编辑器编写。

5、设计报告应按如下内容和顺序A4纸打印、左侧装订成册。

一、设计目的1.掌握数字系统的设计方法;2.掌握硬件描述语言——Verilog HDL;3.掌握模块化设计方法;4.掌握开发软件的使用方法。

二、设计要求(1)设计拔河游戏电路,用按键与LED表示输入与输出。

(2)初始时,16个LED中间的两个点亮,然后游戏双方不停按动按键,点亮的两个LED 向按动按键慢的一方移动;(3)每按动一下按键,LED向对方移动一格;(4)只要LED移动到头,游戏结束;(5)由裁判下达比赛开始命令后,甲乙双方才能输入信号,否则,输入信号无效。

用数码管显示获胜者的盘数,每次比赛结束自动给获胜方加分。

(6)完成全部流程:设计规范文档、模块设计、代码输入、功能仿真、约束与综合、布局布线、时序仿真、下载验证等。

(7)三、设计环境计算机、QuatusII开发软件四、设计内容(设计原理和方案、程序设计、仿真分析和适配)4.1设计原理和方案电子拔河游戏机是一种能容纳甲乙双方参赛或甲乙双方加裁判的三人游戏电路。

由一排16个LED发光二极管表示拔河的“电子绳”。

由甲乙双方通过按钮开关使发光的LED管向自己一方的终点延伸,当延伸到某方的最后一LED管时,则该方失败,对方获胜,并对获胜次数进行计数,连续比赛多局以定胜负。

比赛开始,由裁判下达比赛命令后,甲乙双方才能输入信号,否则,输入信号无效。

裁判信号由键盘空格键来控制。

“电子绳”由16个LED管构成,裁判下达“开始比赛”的命令后,摁一下空格键,位于“电子绳”中点的LED发亮。

甲乙双方通过按键输入信号,使发亮的LED管向自己一方移动,并阻止其向对方延伸,谁摁得快就向这一方移动。

当从中点至自己一方的最后一个LED管发亮时,表示比赛结束,这时,电路自锁,保持当前状态不变,除非由裁判使电路复位,并对获胜的一方计数器自动加一。

记分电路用两位七段数码管分别对双方得分进行累计,在每次比赛结束时电路自动加分。

当比赛结束时,计分器清零,为下一次比赛做好准备。

4.2程序设计及仿真4.2.1分频器模块程序设计及仿真module fpq(_10000HzOut,_25HzOut,_50MHzIn); input _50MHzIn;output _10000HzOut,_25HzOut; parameter width1=16,value1=2499; parameter width2=10,value2=499; reg _10000HzOut,_25HzOut; reg [width1-1:0] Count; reg [width2-1:0] Cnt;always @(posedge _50MHzIn) //2500*2*10000Hz=50MHzif (Count==value1) //Binary Counter(0~2499) beginCount <= 15'd0; _10000HzOut <= ~_10000HzOut; endelse Count <= Count + 1'b1;always @(posedge _50MHzIn) //100 000*2*25Hz=50MHzif (Cnt==value2) //Binary Counter(0~99999) beginCnt <= 15'd0; _25HzOut <= ~_25HzOut; end按键模块主控制电路模块拔河LED 显示模块计分数码管显示模块else Cnt <= Cnt + 1'b1;endmodule图1,分频器仿真波形图4.2.2按键模块程序设计及仿真按键模块采用3个或门消抖,由于有两个玩家,所以设置有两个按键,采用25hz脉冲。

module xiaodou(key1, key2, _25H,k1, k2);input key1; //// 按键1input key2; //// 按键2input _25H; //脉冲25Hzoutput k1;output k2;assign k1=(a1|a2|a3); ////assign k2=(b1|b2|b3); //// 采用3个或门消抖reg a1,a2,a3,b1,b2,b3;always @(posedge _25H)begina1<=key1;a2<=a1;a3<=a2;b1<=key2;b2<=b1;b3<=b2;endendmodule图2,仿真波形图4.2.3主程序模块程序设计及仿真拔河主程序开始时设有复位按键,通过左右数码管显示玩家分数,有两个led小灯代表拔河绳子的中点。

拔河结束也可清零。

module xin(k1, k2, rst, nrst, _25H, q, left, right);input k1; //input k2; //input rst; //拔河开始复位按键input nrst; //计分清零按键input _25H; //output [2:0] q; //拔河led显示输出output [2:0] left; //左边分数数码管输出output [2:0] right; //右边分数数码管输出reg [2:0]q;reg n;reg [2:0]left,right; //reg寄存器always @(negedge rst or posedge _25H or negedge nrst)beginif(~rst) begin q=7;n=1;end //q,led回中点 n使能开 else if(~nrst) begin left=0;right=0;end //计分清零 else if(n) //判断使能是否开! begin case({k1,k2}) // 按键组2'b01: q=q+1; /// led向右移一位 2'b10: q=q-1; //// led向左移一位 default: q=q; /// 保持endcase //case(q)3'b000:begin n=0;left=left+1;end //左+1分,n使能关3'b110:begin n=0;right=right+1;end //右+1分,n使能关default:n<=n; //保持endcaseendendendmodule图3,仿真波形图4.2.4LED模块程序设计及仿真Led设有16个灯。

module led(q, _50M, led);input [2:0] q;input _50M;output [7:0] led;reg [7:0] led;always@(posedge _50M)case(q)3'd0:led=16'b0011111111111111;3'd1:led=16'b1001111111111111;3'd2:led=16'b1100111111111111;3'd3:led=16'b1110011111111111;3'd4:led=16'b1111001111111111;3'd5:led=16'b1111100111111111;3'd6:led=16'b1111110011111111;3'd7:led=16'b1111111001111111; // 中点 3'd8:led=16'b1111111100111111;3'd9:led=16'b1111111110011111;3'd10:led=16'b1111111111001111;3'd11:led=16'b1111111111100111;3'd12:led=16'b1111111111110011;3'd13:led=16'b1111111111111001;3'd14:led=16'b1111111111111100;default:led<=led;endcaseendmodule图4,仿真波形图4.2.5数码管模块程序设计及仿真module shumaguan1(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@(posedge _10000H)case(count)2'd0:begin wx<=3'b011;seg_in<=left;count<=count+1;end //left wx +,计数输入=left,count进一位继续判断2'd1:begin wx<=3'b101;seg_in<=4'd8;count<=count+1;end //- wx+,计数输入=8,同上2'd2:begin wx<=3'b110;seg_in<=right;count<=0;end //rihht wx +,计数输入=right,conunt归零,重新判断endcasealways@(seg_in)case(seg_in) //g f e d c b a//4'd0:segout<=7'b1000000; //04'd1:segout<=7'b1111001; //14'd2:segout<=7'b0100100; //24'd3:segout<=7'b0110000; //34'd4:segout<=7'b0011001; //44'd5:segout<=7'b0010010; //54'd6:segout<=7'b0000010; //64'd7:segout<=7'b1111000; //74'd8:segout<=7'b0111111; //84'd9:segout<=7'b0111011; //9default:segout<=7'b1000000;endcaseendmodule图5,仿真波形图4.2.6顶层设计及仿真图6,顶层设计图7,顶层设计仿真波形图4.3适配1.选择的器件为:Cyclone II EP2C5AT144A72.引脚分配:五、小结一开始接触这个课题的时候,不知道怎么下手,通过老师的讲解以及查找资料基本了解了拔河游戏机的设计原理。

相关主题