• 方案介绍
  • 附件下载
  • 相关推荐
申请入驻 产业图谱

拔河游戏设计VHDL代码Quartus仿真

05/16 09:41
668
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

2-25051319100DK.doc

共1个文件

名称:拔河游戏设计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

  • 2-25051319100DK.doc
    下载

相关推荐