名称:拔河游戏设计VHDL代码Quartus仿真
软件:Quartus
语言:VHDL
代码功能:
拔河游戏通常是由两队人数相等的选手在河界两侧各执绳索的一端,闻令后用力拉绳,以将对方拉出河界为胜。而在电子拔河游戏中,这一过程被转化为电子信号的处理和显示。使用led模拟绳子,通过按键按下的快慢来都发力。
设计指标:
电路使用9个发光二极管表示拔河的“电子绳”,开机后只有中间一个发亮,此即拔河的中心点。游戏甲乙双方各持一个按钮,迅速地不断地按动产生脉冲,谁按得快,亮点向谁方向移动,每按一次,亮点移动一次。亮点移到任一方终端二极管,这一方就获胜,此时双方按钮均无作用,输出保持,只有复位后才使亮点恢复到中心。由裁判下达比赛开始命令后,甲乙双方才能输入信号,否则输入信号无效。用数码管显示获胜者的盘数,每次比赛结束自动给获胜方加分。
FPGA代码Verilog/VHDL代码资源下载:www.hdlcode.com
演示视频:
设计文档:
1.工程文件
2.程序文件
3.程序编译
4.RTL图
5.仿真图
整体仿真图
控制模块
按键检测模块
显示模块
部分代码展示:
LIBRARY?ieee; ???USE?ieee.std_logic_1164.all; ???USE?ieee.std_logic_unsigned.all; --控制模块 ENTITY?bahe_ctrl?IS ???PORT?( ??????clk???????:?IN?STD_LOGIC;--标准时钟 ??????reset_n????????:?IN?STD_LOGIC;--复位信号,低有效? reset_cnt????????:?IN?STD_LOGIC;--计数复位信号,低有效? ??????shift1???????:?IN?STD_LOGIC;--选手1 ??????shift2???????:?IN?STD_LOGIC;--选手2 ??????led????????????:?OUT?STD_LOGIC_VECTOR(8?DOWNTO?0);--9个led ???win1_times?????:OUT?STD_LOGIC_VECTOR(15?DOWNTO?0);--1号获胜次数 ???win2_times?????:OUT?STD_LOGIC_VECTOR(15?DOWNTO?0)--2号获胜次数 ???); END?bahe_ctrl; ARCHITECTURE?behave?OF?bahe_ctrl?IS ??? ???TYPE?State_type?IS?(s_idle,?s_start,?s_left_shift,?s_right_shift,?s_win_1,?s_win_2);??--?定义状态 ???SIGNAL?state?:?State_Type;????--?创建信号 ???SIGNAL?game_led??????:?STD_LOGIC_VECTOR(8?DOWNTO?0)?:=?"000010000"; SIGNAL?win1_num??????:?STD_LOGIC_VECTOR(15?DOWNTO?0)?:=?"0000000000000000"; SIGNAL?win2_num??????:?STD_LOGIC_VECTOR(15?DOWNTO?0)?:=?"0000000000000000"; BEGIN ???PROCESS?(clk) ???BEGIN ??????IF?(clk'EVENT?AND?clk?=?'1')?THEN ?????????IF?((NOT(reset_n))?=?'1')?THEN ????????????state?--复位状态 ?????????????????????state?--游戏中 ??????????????????IF?(game_led?=?"100000000")?THEN ?????????????????????state?<=?s_win_1;--1号赢 ??????????????????ELSIF?(game_led?=?"000000001")?THEN ?????????????????????state?<=?s_win_2;--2号赢 ??????????????????ELSIF?(shift1?=?'1')?THEN ?????????????????????state?<=?s_left_shift;--led左移 ??????????????????ELSIF?(shift2?=?'1')?THEN ?????????????????????state?<=?s_right_shift;--led右移 ??????????????????ELSE ?????????????????????state?--led左移 ??????????????????state?--led右移 ??????????????????state? ??????????????????state? ??????????????????state? ????????????END?CASE; ?????????END?IF; ??????END?IF; ???END?PROCESS; ??? ??? ???PROCESS?(clk) ???BEGIN ??????IF?(clk'EVENT?AND?clk?=?'1')?THEN ?????????IF?((NOT(reset_n))?=?'1')?THEN--复位 ????????????game_led?<=?"000010000"; ?????????ELSIF?(state?=?s_left_shift)?THEN ????????????game_led?<=?(game_led(7?DOWNTO?0)?&?'0');--led左移 ?????????ELSIF?(state?=?s_right_shift)?THEN ????????????game_led?<=?('0'?&?game_led(8?DOWNTO?1));--led右移 ?????????END?IF; ??????END?IF; ???END?PROCESS;
点击链接获取代码文件:http://www.hdlcode.com/index.php?m=home&c=View&a=index&aid=1516
								
								
								
707