数字逻辑课程设计拔河游戏机

 

《数字逻辑》

课 程 设 计 报 告

 

 

 

题目:             拔河游戏机                   

 

 

 

 

 

专业:        计算机科学与技术         

班级:        14计科2班                     

组长:  张钦颖(1414080901218) 

成员:                    无                              

成员:                         无                            

 

惠州学院计算机科学系

二○一五 年 一 月 八 日


1 设计任务书

设计题目:拔河游戏机

拔河游戏机用7个发光二极管排列成一行,开机后只有中间一个发亮,以此作为拔河的中心线,游戏双方各持一个按键,迅速地、不断地按动产生脉冲,谁按得快,亮点向谁方向移动,每按一次,亮点移动一次。任一方终端二极管发亮时这一方获胜,此时双方按键被锁住,只有经复位后才使亮点恢复到中心线。

2 总体方案设计

2.1 功能和逻辑需求分析

(1)本课程设计的拔河游戏机由7个电平指示灯排列成一行,开机之后只有中间一个电平指示灯亮,以此作为拔河的中心线,游戏双方各持一个按键,迅速地、不断地按动产生脉冲,谁按得快,亮点向谁移动,每按一次,亮点移动一次。移到任一方终端指示灯点亮,这一方就获胜,此时双方按键均无效,输出保持,只有经裁判置位后才使亮点恢复到中心线。

(2)当一局比赛结束后,由点亮该终点灯的信号使电路封锁加减脉冲信号的作用。即实现电路自锁,使加减脉冲无效。同时,使电路自动加分。

(3)控制电路部分应能控制计数器的计数,可以使计数器停止计数。(其进入方向则由参赛双方的按键信号决定)

2.2 总体方案设计


2.2.1  模五计数器:

分设两个计数器比较选手快慢,对选手输入的手动脉冲进行计数,用预置法设初始值为0101,即5,使十进制计数器改成五进制计数器,先输入五个脉冲信号的将传一个进位信号到可逆计数器。

2.2.2  可逆计数器:

若甲选手对应可逆计数器的加法,乙选手对应可逆计数器的减法,若甲的速度比乙快(即甲所用计数器先输出进位信号),则控制可逆计数器进行加法,反之,则进行减法.

2.2.3  译码器:

译码器有三个输入和7个输出。每个输入都有和它唯一对应的输出。例如输入为001时对应l1这个灯亮,输入为111时对应l7这个灯亮。

2.2.4  异或门:

由于TDS-4实验箱只有两个手动脉冲,考虑到两个人比赛,那么这两个手动脉冲必然是要接入到计数器中,而比分显示器和可逆计数器都是需要脉冲触发的,而我们用异或门提供一个脉冲给可逆计数器,使得它们可正常计数。

3单元模块设计

3.1  十进制计数器(2个)

         

整形电路由两个模为5带进位信号的计数器组成。按键AB为别作为

  • 9
    点赞
  • 113
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
以下是一个基于Verilog的拔河游戏机的实现,其中使用了FPGA芯片和VGA显示器。该游戏机可以支持两个玩家,每个玩家都有一个按钮,按下按钮可以向自己的一侧移动亮点。当亮点到达屏幕的一侧时,该玩家获胜。 ```verilog module Tug_of_War( input clk, // 时钟信号 input rst, // 复位信号 input p1_btn, // 玩家1的按钮 input p2_btn, // 玩家2的按钮 output reg [6:0] led, // 7个发光二极管 output reg [9:0] vga_x, // VGA显示器的x坐标 output reg [9:0] vga_y // VGA显示器的y坐标 ); reg [1:0] state; // 状态机的状态 reg [1:0] winner; // 获胜者 reg [9:0] cnt; // 计数器 reg [9:0] p1_score; // 玩家1的得分 reg [9:0] p2_score; // 玩家2的得分 parameter IDLE = 2'b00; // 空闲状态 parameter PLAYING = 2'b01; // 游戏状态 parameter GAME_OVER = 2'b10; // 游戏结束状态 // 初始化 initial begin state <= IDLE; winner <= 2'b00; cnt <= 10'd0; p1_score <= 10'd0; p2_score <= 10'd0; end // 状态机 always @(posedge clk) begin if (rst) begin state <= IDLE; winner <= 2'b00; cnt <= 10'd0; p1_score <= 10'd0; p2_score <= 10'd0; end else begin case (state) IDLE: begin led <= 7'b0100000; // 中间的发光二极管亮 vga_x <= 10'd0; vga_y <= 10'd0; if (p1_btn && !p2_btn) begin state <= PLAYING; winner <= 2'b01; end else if (!p1_btn && p2_btn) begin state <= PLAYING; winner <= 2'b10; end end PLAYING: begin if (cnt == 10'd10) begin cnt <= 10'd0; if (winner == 2'b01) begin p1_score <= p1_score + 10'd1; vga_x <= p1_score; vga_y <= 10'd0; if (p1_score == 10'd511) begin state <= GAME_OVER; end else begin winner <= 2'b10; end end else if (winner == 2'b10) begin p2_score <= p2_score + 10'd1; vga_x <= p2_score; vga_y <= 10'd0; if (p2_score == 10'd511) begin state <= GAME_OVER; end else begin winner <= 2'b01; end end end else begin cnt <= cnt + 10'd1; if (p1_btn && !p2_btn) begin winner <= 2'b01; end else if (!p1_btn && p2_btn) begin winner <= 2'b10; end end end GAME_OVER: begin led <= 7'b0000001; // 最左边的发光二极管亮 vga_x <= 10'd0; vga_y <= 10'd0; if (p1_btn && !p2_btn) begin state <= IDLE; end else if (!p1_btn && p2_btn) begin state <= IDLE; end end endcase end end endmodule ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值