白天计数
模块说明:系统经过对系统晶振的分频,对白天计数模块输入一个1hz的时钟信号,每当白天模块检测到1hz时钟信号的上升沿,设定0-44的信号减一,然后输出一个在0-44循环的数作为白天计数信号量
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
entity baitian45 is
port(clk_out1:in std_logic; ---输入1hz时钟
count_day : in std_logic;
count_day_0 : buffer integer range 0 to 44 := 44);
end baitian45;
architecture rtl of baitian45 is
begin
process(clk_out1)
begin
if clk_out1'event and clk_out1='1' then
if count_day= '0' then
if count_day_0=0 then
count_day_0<=44;
else count_day_0 <=count_day_0 - 1;
end if;
end if;
end if;
end process;
end rtl;
白天黑夜计数器
模块说明:分频器输出一个1hz的时钟信号,将一天分为60x60x24秒,白天和黑夜模式各占一半的时间,当计数信号处于0-43199的时候,代表是黑夜,输出一个为‘0’的状态量,表示是黑夜,白天的时候,输出一个‘1’的状态量代表这是白天
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
entity baitianheiyejishuqi is
port (clk_out1:in std_logic; ----输入1hz的时钟
count_day:out std_logic ); -----输出一个状态 夜间为1 白天为0
end entity baitianheiyejishuqi;
architecture rtl of baitianheiyejishuqi is
signal count_day_data:integer range 0 to 86399:=0; ---计数信号
signal count_day_bool :std_logic; ------ 计数状态
begin
PP: process(clk_out1)
begin
if clk_out1'event and clk_out1='1' then
if count_day_data=86399 then
count_day_data<=0;
else count_day_data<=count_day_data+1;
if count_day_data < 43199 then -----夜晚状态为1
count_day_bool <= '1';
else count_day_bool <= '0';
end if;
end if;
end if;
end process PP;
count_day <= count_day_bool;
end rtl;