⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main1.vhd

📁 此为一用VHDL编写的硬件游戏程序
💻 VHD
字号:
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;

entity main1 is
port(onoff :in std_logic;--开关
     crin  :in std_logic_vector(2 downto 0);--100 my plane dye;  010  my plane eat bullet; 001  kill one enemy; 
     rest  :in std_logic;--剩余的我方飞机
     isfour :in std_logic;--是否躲过一个飞机
     check_level1 :in std_logic_vector(1 downto 0);--00 nothing 01 level add 10 win
     check_level2 :in std_logic_vector(1 downto 0);--同上
     clk :in std_logic;--时钟
     
     
     kill  :out std_logic;--杀死一个敌人
     --rst_sys  :out std_logic;--系统复位
     analize  :out std_logic;--初始化
     j_analize  :out std_logic;--局初始化
     bullet_add :out std_logic;--加子弹
     score_add:out std_logic;--加分
     bullet_jian :out std_logic;--子弹减
     move_en :out std_logic;--移动
     rest_jian :out std_logic;--剩余减
     level_add :out std_logic;--升级
     en :out std_logic_vector(1 downto 0));--显示使能00 正常; 01 被撞;10 结束; 11 胜利 
end main1;
architecture behave of main1 is
    signal present_state,next_state :std_logic_vector(3 downto 0);
begin

    process(present_state,onoff)
    begin
    if(onoff='0')then--还没开始
        next_state<="0000";
    else
    case present_state is

         when "0001"=>next_state<="0010"; --analize
                                 
         when "0010"=>next_state<="0011"; --mei ju analize
                      
         when "0011"=>next_state<="0111"; --move
         when "0111"=>case check_level1 is--check
                   when "00"=>next_state<="1111";
                   when "01"=>next_state<="0010";
                   when "10"=>next_state<="1001";
                   when others=>next_state<="1111";
                 end case;                          

         when "1111"=>                
                        case crin is---check 
                           when "100"=>next_state<="0100";
                           when"010"=>next_state<="0101";
                           when "001"=>next_state<="0110";
                           when others=>next_state<="0011";
                         end case; --是否 add score 
          when "0100"=>if(rest='0')then--bei zhuang 
                   next_state<="1000";
                     else next_state<="0011";
                      end if;
         when "0101"=>next_state<="0011";--eat bullet
         when "0110"=>case check_level2 is--kill enemy
                   when "00"=>next_state<="0011";
                   when "01"=>next_state<="0010";
                   when "10"=>next_state<="1001";
                   when others=>next_state<="0011";
                 end case;
           when others=>next_state<="0011";

        end case ;
      end if;
    end process;

process(clk)
begin
   if(rising_edge(clk))then
   present_state<=next_state;
   end if;
end process;


process(present_state)
begin
  case present_state is
    when"0001"=>kill<='0';
                analize<='1';
                j_analize<='0';
                bullet_add<='0';
                bullet_jian<='0';
                score_add<='0';
                move_en<='0';
                rest_jian<='0';
                level_add<='0';
                en<="00";
    when"0010"=>kill<='0';--analize
                analize<='0';
                j_analize<='1';
                bullet_add<='0';
                bullet_jian<='0';
                score_add<='0';
                move_en<='0';
                rest_jian<='0';
                level_add<='0';
               en<="00";
    when "0011"=>kill<='0';--move
                 analize<='0';
                 j_analize<='0';
                 bullet_add<='0';
                 bullet_jian<='0';
                 move_en<='1';
                 score_add<='0';
                 rest_jian<='0';
                 level_add<='0';
                 en<="00";
    when "0111"=>if(isfour='1')then
                  if(check_level1="10")then
                     level_add<='1';
                  else
                  level_add<='0';
                  end if;         
                     -- else score_add<='0';
                end if;                                                                                   
                 kill<='0';
                 analize<='0';
                 j_analize<='0';
                 bullet_add<='0';
                 bullet_jian<='0';
                 move_en<='0';
                 rest_jian<='0';
                 en<="00";
     when "0100"=>kill<='0';
                  analize<='0';
                  j_analize<='0';
                  bullet_add<='0';
                  bullet_jian<='0';
                  move_en<='0';
                  rest_jian<='1';
                  level_add<='0';
                  en<="01";
     when "0101"=>kill<='0';
                 analize<='0';
                  j_analize<='0';
                  bullet_add<='1';
                  bullet_jian<='0';
                  move_en<='0';
                  rest_jian<='0';
                  level_add<='0';
                   en<="00";
     when "0110"=>kill<='1';
                  analize<='0';
                  j_analize<='0';
                  bullet_add<='0';
                 bullet_jian<='0';
                  move_en<='0';
                  rest_jian<='0';
                  score_add<='1';
                  if(check_level2="10")then
                     level_add<='1';
                  else
                  level_add<='0';
                  end if;
                  en<="00";
     when "1000"=>kill<='0';
                  analize<='1';
                  j_analize<='0';
                  bullet_add<='0';
                  bullet_jian<='0';
                  move_en<='0';
                  rest_jian<='0';
                  score_add<='0';
                  level_add<='0';
                  en<="10";
    when "1001"=>kill<='0';
                 analize<='1';
                 j_analize<='0';
                 bullet_add<='0';
                 bullet_jian<='0';
                 move_en<='0';
                 rest_jian<='0';
                 score_add<='0';
                 level_add<='0';
                 en<="11";
   when others=>kill<='0';
                analize<='0';
                j_analize<='0';
                bullet_add<='0';
                bullet_jian<='0';
                move_en<='0';
                level_add<='0';
                rest_jian<='0';
                score_add<='0';
                en<="00";
  end case;
                  
                
                
end process;

   
end behave;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -