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

📄 kai.vhd

📁 一个小赛车游戏
💻 VHD
📖 第 1 页 / 共 3 页
字号:
LIBRARY ieee;
USE ieee.std_logic_1164.all;



ENTITY kai IS--means complex
  PORT(
shiyan0  :out std_logic;
shiyan1  :out std_logic;
--shiyan2  :out std_logic;
--shiyan3  :out std_logic;
--shiyan4  :out std_logic;
--shiyan5  :out std_logic;
--shiyan6  :out std_logic;
       cp: IN STD_LOGIC;
reset:IN STD_LOGIC;
      left:IN STD_LOGIC;
      right:in std_logic;
      heng :OUT STD_LOGIC_VECTOR(0 TO 7);--上面7个不亮
      shu :OUT STD_LOGIC_VECTOR(0 TO 7);
      deng:OUT STD_LOGIC;--显示出局后的信息
      --deng0:OUT STD_LOGIC_VECTOR(0 TO 7);--显示出局后的信息
 tou:OUT STD_LOGIC_VECTOR(0 TO 7);
 de:OUT STD_LOGIC_VECTOR(0 TO 7);
      dogshu:OUT STD_LOGIC_VECTOR(0 TO 7)
      );
END kai ;

ARCHITECTURE shen OF kai IS
SIGNAL cou5000,cou1,cou1000:INTEGER range 0 to 9999999;
SIGNAL location:INTEGER range 0 to 7 ;
SIGNAL radom:INTEGER range 0 to 2 ;--障碍物的随即形状
SIGNAL radomji:INTEGER range 0 to 2 ;--障碍物的随即形状
SIGNAL xx:INTEGER range 0 to 2 ;
SIGNAL high:INTEGER  range 0 to 16 ;--记录障碍物的上下位置
SIGNAL clk5000,clk1,clk1000:STD_LOGIC;
 SIGNAL  heng1 : STD_LOGIC_VECTOR(0 TO 7);--上面7个不亮
 SIGNAL  heng2 : STD_LOGIC_VECTOR(0 TO 7);
SIGNAL  heng3 : STD_LOGIC_VECTOR(0 TO 7);
 SIGNAL   shu3 : STD_LOGIC_VECTOR(0 TO 7);
 SIGNAL   shu2 : STD_LOGIC_VECTOR(0 TO 7);
 SIGNAL   shu1 : STD_LOGIC_VECTOR(0 TO 7);
SIGNAL   dogshu1 : STD_LOGIC_VECTOR(0 TO 7);
SIGNAL   dogshu2 : STD_LOGIC_VECTOR(0 TO 7);
SIGNAL   dogshu3 : STD_LOGIC_VECTOR(0 TO 7);
SIGNAL zz:INTEGER:=0 ;
SIGNAL zz0:INTEGER:=0 ;---复位信号
SIGNAL score:INTEGER range 0 to 4 ;
SIGNAL  i:INTEGER range 0 to 60 ;
SIGNAL j:STD_LOGIC:='0' ;--reset  被按下
begin

weizhi:PROCESS(left,right,cp,clk5000)--#####################################################小车的位置
variable countleft,countright,countreset:INTEGER:=0; 
BEGIN
  
if clk5000'event and clk5000='1'then

if radom=2 then
radom<=0;
else
radom<=radom+1; 
end if;

if (high=5 or high=2 or high=8) then
xx<=0;
end if;

if left='0'then
   countleft:=countleft+1;
  if countleft=50 then
   countleft:=0;
    end if;
   else countleft:=0;
end if;

if right='0'then
 countright:=countright+1;
 if countright=50 then
   countright:=0;
end if;
   else countright:=0;
end if;

if reset='0'then
 countreset:=countreset+1;
 if countreset=50 then
   countreset:=0;
end if;
   else countreset:=0;
end if;


if  countleft=5 THEN----an xia le 
  if location=0 THEN
   location<=0;
  else location<=location-1;
       if(xx=0) then  radomji<=radom;   xx<=1 ; end if;
end if;
  end if;

if  countreset=5 THEN----an xia le 
  j<=not j;
end if;
shiyan1<=j;--^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  

if  countright=5 THEN   ----an xia le 
  if location=6 THEN
   location<=6;
  else location<=location+1;
        if(xx=0) then radomji<=radom;    xx<=1 ;  end if;
  end if;
  end if;
  end if;
END PROCESS weizhi;--#####################################################小车的位置


frequent1:PROCESS(cp)--###################################################按键的时钟
BEGIN
IF cp 'EVENT AND cp='1'THEN
 IF cou5000=50000 THEN
  cou5000<=0;
  clk5000<=NOT clk5000;
 ELSE cou5000<=cou5000+1;
END IF;
END IF;
--second<=clk1;       clk5000 f=5ms
END PROCESS frequent1;--###############################################按键的时钟

crclk1000:PROCESS(cp)
BEGIN
IF cp 'EVENT AND cp='1'THEN
 IF cou1000=5 THEN
  cou1000<=0;
  clk1000<=NOT clk1000;
 ELSE cou1000<=cou1000+1;
END IF;
END IF;
--second<=clk1;       clk1000 f=1000Hz       
END PROCESS crclk1000;


crclk:PROCESS(cp)--###################################################障碍物下调的时钟
BEGIN
IF cp 'EVENT AND cp='1'THEN
  
  IF cou1=2999990 THEN
  cou1<=0;
  clk1<=NOT clk1;
 ELSE cou1<=cou1+1;
END IF;
END IF;
deng<=clk1;       --clk1 f=1Hz    clk1是秒信号
END PROCESS crclk;--###############################################障碍物下调的时钟

move:PROCESS(cp)--###############################################小车的移动
BEGIN


END PROCESS move;--###############################################小车的移动

xiadiao:process (clk1)
begin 


if  clk1'event and clk1='1'   then 

if (high=16)then
 high<=0;
else
if(zz0=5) then
high<=high;
else
  high<=high+1;
end if;
end if;
end if;

END PROCESS xiadiao;

shao0:process (clk1000)---##################################################################在第一板上的移动
variable a0:INTEGER:=0; 
begin 
if  clk1000'event and clk1000='1'then 
 if a0=10 then
   a0:=0;
else
a0:=a0+1;
end if;
end if;

if (high<7 or high=7) then---可以化减
case location is
when 0=>  case high is
         when 0=> if a0=5 then
shu2<="11000000"; heng2<="11111110";  dogshu1<="00000000";
end if;
if a0=10 then

case radomji is
when 0=> dogshu1<="11100011"; 
when 1=> dogshu1<="00111000"; 
when 2=> dogshu1<="10010101"; 
end case; 

 heng2<="01111111";

shu2<="00000000";
end if;
         when 1=>if a0=5 then
shu2<="11000000";heng2<="11111110";  dogshu1<="00000000";
end if;
if a0=10 then
case radomji is
when 0=> dogshu1<="11100011"; 
when 1=> dogshu1<="00111000"; 
when 2=> dogshu1<="10010101"; 
end case; 
 heng2<="10111111"; shu2<="00000000";
end if;
        when 2=>if a0=5 then
shu2<="11000000";heng2<="11111110";  dogshu1<="00000000";
end if;
if a0=10 then
case radomji is
when 0=> dogshu1<="11100011"; 
when 1=> dogshu1<="00111000"; 
when 2=> dogshu1<="10010101"; 
end case; 
 heng2<="11011111"; shu2<="00000000";
end if;
       when 3=>if a0=5 then
shu2<="11000000";heng2<="11111110";  dogshu1<="00000000";
end if;
if a0=10 then
case radomji is
when 0=> dogshu1<="11100011"; 
when 1=> dogshu1<="00111000"; 
when 2=> dogshu1<="10010101"; 
end case; 
 heng2<="11101111"; shu2<="00000000";
end if;
       when 4=>if a0=5 then
shu2<="11000000";heng2<="11111110";  dogshu1<="00000000";
end if;
if a0=10 then
case radomji is
when 0=> dogshu1<="11100011"; 
when 1=> dogshu1<="00111000"; 
when 2=> dogshu1<="10010101"; 
end case; 
 heng2<="11110111"; shu2<="00000000";
end if;
       when 5=>if a0=5 then
shu2<="11000000";heng2<="11111110";  dogshu1<="00000000";
end if;
if a0=10 then
case radomji is
when 0=> dogshu1<="11100011"; 
when 1=> dogshu1<="00111000"; 
when 2=> dogshu1<="10010101"; 
end case; 
 heng2<="11111011"; shu2<="00000000";
end if;
        when 6=>if a0=5 then
shu2<="11000000";heng2<="11111110";  dogshu1<="00000000";
end if;
if a0=10 then
case radomji is
when 0=> dogshu1<="11100011"; 
when 1=> dogshu1<="00111000"; 
when 2=> dogshu1<="10010101"; 
end case; 
 heng2<="11111101"; shu2<="00000000";
end if;
         when 7=>if a0=5 then
shu2<="11000000";heng2<="11111110";  dogshu1<="00000000";
end if;
if a0=10 then
case radomji is
when 0=> dogshu1<="11100011"; 
when 1=> dogshu1<="00111000"; 
when 2=> dogshu1<="10010101"; 
end case; 
 heng2<="11111110"; shu2<="00000000";
end if;
         
      when others =>if a0=5 then
shu2<="11000000";heng2<="11111110";  dogshu1<="00000000";
end if;
if a0=10 then
dogshu1<="00111000"; heng2<="01111111"; shu2<="00000000";
end if;

end case;
WHEN 1 =>   case high is                                                      --zai xiaoche  zai 1 shi 
            when 0=>  if a0=5 then
shu2<="01100000";heng2<="11111110"; dogshu1<="00000000";
end if;
if a0=10 then
       case radomji is
when 0=> dogshu1<="11100011"; 
when 1=> dogshu1<="00111000"; 
when 2=> dogshu1<="10010101"; 
end case; 
 heng2<="01111111";  shu2<="00000000";
end if;
            when 1=>  if a0=5 then
shu2<="01100000";heng2<="11111110"; dogshu1<="00000000";
end if;
if a0=10 then
      case radomji is
when 0=> dogshu1<="11100011"; 
when 1=> dogshu1<="00111000"; 
when 2=> dogshu1<="10010101"; 
end case; 
 heng2<="10111111";  shu2<="00000000";
end if;
            when 2=>  if a0=5 then
shu2<="01100000";heng2<="11111110"; dogshu1<="00000000";
end if;
if a0=10 then
         case radomji is
when 0=> dogshu1<="11100011"; 
when 1=> dogshu1<="00111000"; 
when 2=> dogshu1<="10010101"; 
end case; 
 heng2<="11011111";  shu2<="00000000";
end if;
            when 3=>  if a0=5 then
shu2<="01100000";heng2<="11111110"; dogshu1<="00000000";
end if;
if a0=10 then
         case radomji is
when 0=> dogshu1<="11100011"; 
when 1=> dogshu1<="00111000"; 
when 2=> dogshu1<="10010101"; 
end case; 
 heng2<="11101111";  shu2<="00000000";
end if;
             when 4=>  if a0=5 then
shu2<="01100000";heng2<="11111110"; dogshu1<="00000000";
end if;
if a0=10 then
        case radomji is
when 0=> dogshu1<="11100011"; 
when 1=> dogshu1<="00111000"; 
when 2=> dogshu1<="10010101"; 
end case; 
 heng2<="11110111";  shu2<="00000000";
end if;
             when 5=>  if a0=5 then
shu2<="01100000";heng2<="11111110"; dogshu1<="00000000";
end if;
if a0=10 then
         case radomji is
when 0=> dogshu1<="11100011"; 
when 1=> dogshu1<="00111000"; 
when 2=> dogshu1<="10010101"; 
end case; 
 heng2<="11111011";  shu2<="00000000";
end if;
            when 6=>  if a0=5 then
shu2<="01100000";heng2<="11111110"; dogshu1<="00000000";
end if;
if a0=10 then
   case radomji is
when 0=> dogshu1<="11100011"; 
when 1=> dogshu1<="00111000"; 
when 2=> dogshu1<="10010101"; 
end case;      
 heng2<="11111101";  shu2<="00000000";
end if; 
            when 7=>  if a0=5 then
shu2<="01100000";heng2<="11111110"; dogshu1<="00000000";
end if;
if a0=10 then
case radomji is
when 0=> dogshu1<="11100011"; 
when 1=> dogshu1<="00111000"; 
when 2=> dogshu1<="10010101"; 
end case;          
 heng2<="11111110";  shu2<="00000000";
end if;
         when others =>if a0=5 then
shu2<="11000000";heng2<="11111110";  dogshu1<="00000000";
end if;
if a0=10 then
dogshu1<="00111000"; heng2<="01111111"; shu2<="00000000";
end if;

end case;


WHEN 2 => case high is 
      when 0 =>if a0=5 then
shu2<="00110000";heng2<="11111110";  dogshu1<="00000000";
end if;
if a0=10 then
        case radomji is
when 0=> dogshu1<="11100011"; 
when 1=> dogshu1<="00111000"; 
when 2=> dogshu1<="10010101"; 
end case; 
 heng2<="01111111";  shu2<="00000000";
end if;
     when 1 =>if a0=5 then
shu2<="00110000";heng2<="11111110";  dogshu1<="00000000";
end if;
if a0=10 then
        case radomji is
when 0=> dogshu1<="11100011"; 
when 1=> dogshu1<="00111000"; 
when 2=> dogshu1<="10010101"; 
end case; 
 heng2<="10111111";  shu2<="00000000";
end if;
        when 2 =>if a0=5 then
shu2<="00110000";heng2<="11111110";  dogshu1<="00000000";
end if;
if a0=10 then
         case radomji is
when 0=> dogshu1<="11100011"; 
when 1=> dogshu1<="00111000"; 
when 2=> dogshu1<="10010101"; 
end case; 
 heng2<="11011111";  shu2<="00000000";
end if;
         when 3 =>if a0=5 then
shu2<="00110000";heng2<="11111110";  dogshu1<="00000000";
end if;
if a0=10 then
         case radomji is
when 0=> dogshu1<="11100011"; 
when 1=> dogshu1<="00111000"; 
when 2=> dogshu1<="10010101"; 
end case; 
 heng2<="11101111";  shu2<="00000000";
end if;
         when 4 =>if a0=5 then
shu2<="00110000";heng2<="11111110";  dogshu1<="00000000";
end if;
if a0=10 then
         case radomji is
when 0=> dogshu1<="11100011"; 
when 1=> dogshu1<="00111000"; 
when 2=> dogshu1<="10010101"; 
end case; 
 heng2<="11110111";  shu2<="00000000";
end if;
          when 5 =>if a0=5 then
shu2<="00110000";heng2<="11111110";  dogshu1<="00000000";
end if;
if a0=10 then
        case radomji is
when 0=> dogshu1<="11100011"; 
when 1=> dogshu1<="00111000"; 
when 2=> dogshu1<="10010101"; 
end case; 
heng2<="11111011";  shu2<="00000000";
end if;
           when 6 =>if a0=5 then
shu2<="00110000";heng2<="11111110";  dogshu1<="00000000";
end if;
if a0=10 then
         case radomji is
when 0=> dogshu1<="11100011"; 
when 1=> dogshu1<="00111000"; 
when 2=> dogshu1<="10010101"; 
end case; 
 heng2<="11111101";  shu2<="00000000";
end if;
           when 7 =>if a0=5 then
shu2<="00110000";heng2<="11111110";  dogshu1<="00000000";
end if;
if a0=10 then
       case radomji is
when 0=> dogshu1<="11100011"; 
when 1=> dogshu1<="00111000"; 
when 2=> dogshu1<="10010101"; 
end case; 
 heng2<="11111110";  shu2<="00000000";
end if;
                   when others =>if a0=5 then
shu2<="11000000";heng2<="11111110";  dogshu1<="00000000";
end if;
if a0=10 then
dogshu1<="00111000"; heng2<="01111111"; shu2<="00000000";
end if;

end case;
 WHEN 3 =>    case high is                      --&&&&&&&&&&&&&&&
              when 0=> if a0=5 then

shu2<="00011000";heng2<="11111110"; dogshu1<="00000000";
end if;
if a0=10 then
           case radomji is
when 0=> dogshu1<="11100011"; 
when 1=> dogshu1<="00111000"; 
when 2=> dogshu1<="10010101"; 
end case; 
heng2<="01111111";  shu2<="00000000";
end if;
            when 1=> if a0=5 then

shu2<="00011000";heng2<="11111110"; dogshu1<="00000000";
end if;
if a0=10 then
          case radomji is
when 0=> dogshu1<="11100011"; 
when 1=> dogshu1<="00111000"; 
when 2=> dogshu1<="10010101"; 
end case; 
 heng2<="10111111";  shu2<="00000000";
end if;

⌨️ 快捷键说明

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