名称:乒乓球游戏机设计Verilog代码ISE仿真(文末获取)
软件:ISE
语言:Verilog
代码功能:
乒乓球游戏机
项目功能说明
设计一个由两人参赛的乒乓球游戏机,用4个LED排成一条直线,两边各代表参赛双方的位置,其中一只点亮的LED指示球的当前位置,点亮的LED一次从左到右,或者从右到左,其移动速度应能调节。当“球”将运动到某方的最后一位时,参赛者应能果断地按下位于自己一方的按钮开关,即表示启动球拍击球,若击中,则球向相反方向移动;若未击中,球掉出桌外,则对方得一分。双方各设一个LED表示拥有发球权,每隔两次自动交换发球权,拥有发球权的一方发球才有效。设置计分电路,其中参赛选手各有一个可显示自己当前分数的按钮,当按下个人分数按钮,可用LED灯显示自己分数,当某一方率先达到11分
时,所有LED灯闪烁,表示比赛结束。
输入输出的关系
out: clk, rst, in1, in2, scorel, score2
Output: led[3: 0
①clk为系统时钟,在代码中需要进行分频,根据合适的分频系数从而调节乒乓球的运动快慢;rst为异步复位信号,可清除当前的比分;inl和in2分别为两个选手的击球按钮。 scorel和sore2分别为显示各自当前分数的按键,当按下任意一个时,led[3:0]显示相对应选手的分数
②led[3:0]为球运动轨迹信号,同时也可以代替数码管显示选手分数;
③s1~s4为球运动轨迹寄存器,s0和s5为球掉出桌外的信号, R score1和2为双方当前得分寄存器,turm1和] turn r为移位信号寄存器,nght和righ2为双方的发球权
.注意事项
①显示输出模块中,可把球运动轨迹和双方分数分别存到不同的寄存器中,按下相应的按键显示相应的输出;
②球的移动可通过加减计数器和译码电路实现,或者通过移位信号实现
③设置好发球权,每次得分后,LED[0]或者LED3]应显示下一次的发球权
仿真程序说明
测试时按照相应的时间设置相应的输入信号inl和in2,看球的运动轨迹和得分及发球权情况。同时内部分数寄存器也可显示当前分数。
1、工程文件
2、程序文件
3、程序编译
4、RTL图
5、管脚分配
部分代码展示:
`timescale 1ns / 1ps module pingpang_game( input clk,//50MHz input rst,//低电平复位 input In1,//选手1 input In2,//选手2 input Score1,//选手1分数查询 input Score2,//选手2分数查询 output [3:0] led//led,低电平亮,获胜所有LED亮 ); wire button_posedge_1; wire button_posedge_2; //按键消抖模块 key_debounce i1_key_debounce( . clk(clk), . button_in(In1),//输入 . button_pos(button_posedge_1)//消抖后按键上升沿 ); //按键消抖模块 key_debounce i2_key_debounce( . clk(clk), . button_in(In2),//输入 . button_pos(button_posedge_2)//消抖后按键上升沿 ); //分频模块 move_speed i_move_speed( . clk_in(clk), . reset_p(button_posedge_1 | button_posedge_2), . shift_en(shift_en)//移动使能信号 );
源代码
点击下方的公众号卡片获取