📄 kai.vhd
字号:
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 + -