程序说明:当白天黑夜计数器输出的白天黑夜状态量为‘1’表示系统处于白天,白天的时候,红绿灯以及倒计时为一个30+15秒循环的状态量,对状态机进行穷举,便可以得到白天模式的显示
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
entity baitian is
port ( NUM02,NUM12,NUM22,NUM32 : buffer STD_LOGIC_VECTOR(3 DOWNTO 0);
clk_out1:in std_logic;
count_day_0: in integer range 0 to 45;
count_day:in std_logic );
end entity baitian;
architecture rtl of baitian is
signal num0: STD_LOGIC_VECTOR(3 DOWNTO 0);
signal num1: STD_LOGIC_VECTOR(3 DOWNTO 0);
signal num2: STD_LOGIC_VECTOR(3 DOWNTO 0);
signal num3: STD_LOGIC_VECTOR(3 DOWNTO 0);
begin
P: process(clk_out1)
begin
if clk_out1'event and clk_out1='1' then
if count_day= '0' then
case count_day_0 is
when 44 => num0<= "0001";
when 43 => num0<= "0001";
when 42 => num0<= "0001";
when 41 => num0<= "0001";
when 40 => num0<= "0001";
when 39 => num0<= "0001";
when 38 => num0<= "0001";
when 37 => num0<= "0001";
when 36 => num0<= "0001";
when 35 => num0<= "0001";
when 34 => num0<= "0001";
when 33 => num0<= "0001";
when 32 => num0<= "0001";
when 31 => num0<= "0001";
when 30 => num0<= "0001";
when 29 => num0<= "0001";
when 28 => num0<= "0001";
when 27 => num0<= "0001";
when 26 => num0<= "0001";
when 25 => num0<= "0001";
when 24 => num0<= "0001";
when 23 => num0<= "0001";
when 22 => num0<= "0001";
when 21 => num0<= "0001";
when 20 => num0<= "0001";
when 19 => num0<= "0001";
when 18 => num0<= "0001";
when 17 => num0<= "0001";
when 16 => num0<= "0010";
when 15 => num0<= "0010";
when 14 => num0<= "0010";
when 13 => num0<= "0011";
when 12 => num0<= "0011";
when 11 => num0<= "0011";
when 10 => num0<= "0011";
when 9 => num0<= "0011";
when 8 => num0<= "0011";
when 7 => num0<= "0011";
when 6 => num0<= "0011";
when 5 => num0<= "0011";
when 4 => num0<= "0011";
when 3 => num0<= "0011";
when 2 => num0<= "0011";
when 1 => num0<= "0011";
when 0 => num0<= "0011";
when others => num0<="XXXX";
end case;
end if;
end if;
end process P;
PP: process(clk_out1)
begin
if clk_out1'event and clk_out1='1' then
if count_day= '0' then
case count_day_0 is
when 44 => num1<= "0011";
when 43 => num1<= "0011";
when 42 => num1<= "0011";
when 41 => num1<= "0011";
when 40 => num1<= "0011";
when 39 => num1<= "0011";
when 38 => num1<= "0011";
when 37 => num1<= "0011";
when 36 => num1<= "0011";
when 35 => num1<= "0011";
when 34 => num1<= "0011";
when 33 => num1<= "0011";
when 32 => num1<= "0011";
when 31 => num1<= "0011";
when 30 => num1<= "0011";
when 29 => num1<= "0011";
when 28 => num1<= "0011";
when 27 => num1<= "0011";
when 26 => num1<= "0011";
when 25 => num1<= "0011";
when 24 => num1<= "0011";
when 23 => num1<= "0011";
when 22 => num1<= "0011";
when 21 => num1<= "0011";
when 20 => num1<= "0011";
when 19 => num1<= "0011";
when 18 => num1<= "0011";
when 17 => num1<= "0011";
when 16 => num1<= "0011";
when 15 => num1<= "0011";
when 14 => num1<= "0001";
when 13 => num1<= "0001";
when 12 => num1<= "0001";
when 11 => num1<= "0001";
when 10 => num1<= "0001";
when 9 => num1<= "0001";
when 8 => num1<= "0001";
when 7 => num1<= "0001";
when 6 => num1<= "0001";
when 5 => num1<= "0001";
when 4 => num1<= "0001";
when 3 => num1<= "0001";
when 2 => num1<= "0001";
when 1 => num1<= "0001";
when 0 => num1<= "0001";
when others => num1<="XXXX";
end case;
end if;
end if;
end process PP;
PPP: process(clk_out1)
begin
if clk_out1'event and clk_out1='1' then
if count_day= '0' then
case count_day_0 is
when 44 => num2<= "0010";
when 43 => num2<= "0010";
when 42 => num2<= "0010";
when 41 => num2<= "0010";
when 40 => num2<= "0010";
when 39 => num2<= "0010";
when 38 => num2<= "0010";
when 37 => num2<= "0010";
when 36 => num2<= "0010";
when 35 => num2<= "0010";
when 34 => num2<= "0001";
when 33 => num2<= "0001";
when 32 => num2<= "0001";
when 31 => num2<= "0001";
when 30 => num2<= "0001";
when 29 => num2<= "0001";
when 28 => num2<= "0001";
when 27 => num2<= "0001";
when 26 => num2<= "0001";
when 25 => num2<= "0001";
when 24 => num2<= "0000";
when 23 => num2<= "0000";
when 22 => num2<= "0000";
when 21 => num2<= "0000";
when 20 => num2<= "0000";
when 19 => num2<= "0000";
when 18 => num2<= "0000";
when 17 => num2<= "0000";
when 16 => num2<= "0000";
when 15 => num2<= "0000";
when 14 => num2<= "0001";
when 13 => num2<= "0001";
when 12 => num2<= "0001";
when 11 => num2<= "0001";
when 10 => num2<= "0001";
when 9 => num2<= "0000";
when 8 => num2<= "0000";
when 7 => num2<= "0000";
when 6 => num2<= "0000";
when 5 => num2<= "0000";
when 4 => num2<= "0000";
when 3 => num2<= "0000";
when 2 => num2<= "0000";
when 1 => num2<= "0000";
when 0 => num2<= "0000";
when others => num2<="XXXX";
end case;
end if;
end if;
end process PPP;
PPPP: process(clk_out1)
begin
if clk_out1'event and clk_out1='1' then
if count_day= '0' then
case count_day_0 is
when 44 => num3<= "1001";
when 43 => num3<= "1000";
when 42 => num3<= "0111";
when 41 => num3<= "0110";
when 40 => num3<= "0101";
when 39 => num3<= "0100";
when 38 => num3<= "0011";
when 37 => num3<= "0010";
when 36 => num3<= "0001";
when 35 => num3<= "0000";
when 34 => num3<= "1001";
when 33 => num3<= "1000";
when 32 => num3<= "0111";
when 31 => num3<= "0110";
when 30 => num3<= "0101";
when 29 => num3<= "0100";
when 28 => num3<= "0011";
when 27 => num3<= "0010";
when 26 => num3<= "0001";
when 25 => num3<= "1001";
when 24 => num3<= "1000";
when 23 => num3<= "0111";
when 22 => num3<= "0110";
when 21 => num3<= "0101";
when 20 => num3<= "0100";
when 19 => num3<= "0011";
when 18 => num3<= "0010";
when 17 => num3<= "0001";
when 16 => num3<= "0000";
when 15 => num3<= "0101";
when 14 => num3<= "0100";
when 13 => num3<= "0011";
when 12 => num3<= "0010";
when 11 => num3<= "0001";
when 10 => num3<= "0000";
when 9 => num3<= "1001";
when 8 => num3<= "1000";
when 7 => num3<= "0111";
when 6 => num3<= "0110";
when 5 => num3<= "0101";
when 4 => num3<= "0100";
when 3 => num3<= "0011";
when 2 => num3<= "0010";
when 1 => num3<= "0001";
when 0 => num3<= "0000";
when others => num3<="XXXX";
end case;
end if;
end if;
end process PPPP;
num02 <= num0;
num12 <= num1;
num22 <= num2;
num32 <= num3;
end rtl;