用6個燈制造流星的效果程序
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity deng50 is
port(clk:in std_logic;
d0,d1,d2,d3,d4,d5:out std_logic);
end deng50;
architecture deng of deng50 is
signal q0:std_logic_vector(24 downto 0);
signal qq0:std_logic_vector(13 downto 0);
signal qq1:std_logic_vector(2 downto 0);
signal c0: std_logic;
begin
process(clk)
begin
if clk'event and clk='1' then
if q0=4500000 then q0<="0000000000000000000000000";c0<='1';
else q0<=q0+1;c0<='0';
end if;
if qq0=13650 then qq0<="00000000000000";
else qq0<=qq0+1;
end if;
end if;
if c0'event and c0='1' then qq1<=qq1+1;
if qq1=7 then qq1<="000";end if;
end if;
case qq1 is
when "000"=>
if qq0<5 then d1<='0';else d1<='0';end if;
if qq0<30 and qq0>10 then d2<='0';else d2<='0';end if;
if qq0<130 and qq0>50 then d3<='0';else d3<='0';end if;
if qq0<530 and qq0>210 then d4<='0';else d4<='0';end if;
if qq0<2210 and qq0>850 then d5<='0';else d5<='0';end if;
if qq0<13650 and qq0>3410 then d0<='1';else d0<='0';end if;
when "001"=>
if qq0<5 then d2<='0';else d2<='0';end if;
if qq0<30 and qq0>10 then d3<='0';else d3<='0';end if;
if qq0<130 and qq0>50 then d4<='0';else d4<='0';end if;
if qq0<530 and qq0>210 then d5<='0';else d5<='0';end if;
if qq0<2210 and qq0>850 then d0<='1';else d0<='0';end if;
if qq0<13650 and qq0>3410 then d1<='1';else d1<='0';end if;
when "010"=>
if qq0<5 then d3<='0';else d3<='0';end if;
if qq0<10 and qq0>10 then d4<='0';else d4<='0';end if;
if qq0<80 and qq0>50 then d5<='0';else d5<='0';end if;
if qq0<330 and qq0>210 then d0<='1';else d0<='0';end if;
if qq0<1310 and qq0>850 then d1<='1';else d1<='0';end if;
if qq0<13650 and qq0>3410 then d2<='1';else d2<='0';end if;
when "011"=>
if qq0<2 then d4<='0';else d4<='0';end if;
if qq0<10 and qq0>10 then d5<='0';else d5<='0';end if;
if qq0<80 and qq0>50 then d0<='1';else d0<='0';end if;
if qq0<330 and qq0>210 then d1<='1';else d1<='0';end if;
if qq0<1310 and qq0>850 then d2<='1';else d2<='0';end if;
if qq0<13650 and qq0>3410 then d3<='1';else d3<='0';end if;
when "100"=>
if qq0<2 then d5<='0';else d1<='0';end if;
if qq0<10 and qq0>10 then d0<='1';else d0<='0';end if;
if qq0<80 and qq0>50 then d1<='1';else d1<='0';end if;
if qq0<330 and qq0>210 then d2<='1';else d2<='0';end if;
if qq0<1310 and qq0>850 then d3<='1';else d3<='0';end if;
if qq0<13650 and qq0>3410 then d4<='1';else d4<='0';end if;
when "101"=>
if qq0<2 then d0<='1';else d0<='0';end if;
if qq0<10 and qq0>10 then d1<='1';else d1<='0';end if;
if qq0<80 and qq0>50 then d2<='1';else d2<='0';end if;
if qq0<330 and qq0>210 then d3<='1';else d3<='0';end if;
if qq0<1310 and qq0>850 then d4<='1';else d4<='0';end if;
if qq0<13650 and qq0>3410 then d5<='1';else d5<='0';end if;
when others=>d0<='0';d2<='0';d2<='0';d3<='0';d4<='0';d5<='0';
end case;
end process;
end;
時間的簡便編法:
if clk'event and clk='1' then secondL<=secondL+1;
if secondL=9 then secondL<="0000";secondH<=secondH+1;end if;
if secondH=5 and secondL=9 then secondH<="0000";monthL<=monthL+1;end if;
if monthL=9 and secondH=5 and secondL=9 then monthL<="0000";monthH<=monthH+1;end if;
if monthH=5 and monthL=9 and secondH=5 and secondL=9 then monthH<="0000";hourL<=hourL+1;end if;
if hourL=9 and monthH=5 and monthL=9 and secondH=5 and secondL=9 then hourL<="0000";hourH<=hourH+1;end if;
if hourH=2 and hourL=3 and monthH=5 and monthL=9 and secondH=5 and secondL=9 then
hourL<="0000";hourH<="0000";day<=day+1;
end if;
end if;