|
Library ieee;
Use ieee.std_logic_1164.all;
Use ieee.std_logic_unsigned.all;
Entity water is
Port(clk:in std_logic;
LEDR:out std_logic_vector(17 downto 0);
second:out std_logic;
Qb0,Qb1:out std_logic_vector(3 downto 0);
Qd0,Qd1:out std_logic_vector(6 downto 0));
end;
Architecture dd of water is
signal Qsfp,Qwfp:std_logic_vector(24 downto 0);
signal cps,cpw:std_logic;
signal qq0,qq1:std_logic_vector(3 downto 0);
signal N:integer range 0 to 73;
procedure sum( x:in std_logic_vector(3 downto 0);
y:out std_logic_vector(6 downto 0))is
begin
case x is
when"0000"=>y:="0111111";
when"0001"=>y:="0000110";
when"0010"=>y:="1011011";
when"0011"=>y:="1001111";
when"0100"=>y:="1100110";
when"0101"=>y:="1101101";
when"0110"=>y:="1111101";
when"0111"=>y:="0000111";
when"1000"=>y:="1111111";
when"1001"=>y:="1101111";
when others=>y:=Null;
end case;
end sum;
begin
-------cps means 1s---cpw means flash LED------
Process(clk)
begin
if clk'event and clk='1' then
Qsfp<=Qsfp+1; --1s court
Qwfp<=Qwfp+1; --0.1s court
------------------------
if Qsfp=24999999 then
Qsfp<="0000000000000000000000000";
cps<=not cps; --1Hz
end if;
-------------------------
if Qwfp=2499999 then
Qwfp<="0000000000000000000000000";
cpw<=not cpw; --10Hz
end if;
--------------------------
end if;
end process;
-------------- 60s court--------------
Process(cps)
begin
if cps'event and cps='1' then
qq0<=qq0+1;
------ge-------
if qq0=9 then
qq0<="0000";
qq1<=qq1+1;
end if;
------shi-------
if qq1=5 and qq0=9 then
qq1<="0000";
end if;
end if;
end process;
----------display 60s court-------
process(qq0,qq1,cps)
variable y0,y1:std_logic_vector(6 downto 0);
begin
second<=cps;
Qb0<=qq0;
Qb1<=qq1;
sum(qq0,y0);
sum(qq1,y1);
Qd0<=not y0;
Qd1<=not y1;
end process;
---------display flash LED-----------
Process(cpw)
begin
if cpw'event and cpw='1' then
N<=N+1;
if N=89 then
N<=0;
end if;
if N<18 then
LEDR(N)<='1';
end if;
if N>17 and N<36 then
LEDR(35-N)<='0';
end if;
if N>35 and N<54 then
LEDR(N-36)<='0';
LEDR(N-35)<='1';
end if;
if N>53 and N< 73 then
LEDR(72-N)<='0';
LEDR(71-N)<='1';
end if;
if N>72 and N< 81 then
LEDR(N-72)<='1';
LEDR(90-N)<='1';
end if;
If N>80 then
LEDR(N-71)<='0';
LEDR(90-N)<='0';
end if;
end if;
|
|