Я написал этот код, подключил тактовую частоту 100 Гц, и выходы - это 7-сегментные декодеры.Выходы в этом коде - это время.Время начинается в 10:00:00, потому что это баскетбольный матч.Моя проблема в том, что время должно остановиться в 00:00:00, но продолжается до F9: 59: 99.Что я должен сделать, чтобы остановить его автоматически?
entity Timer is
port(clock : in std_logic;
enable : in std_logic;
reset : in std_logic;
UniCent : out std_logic_vector(3 downto 0);
DezCent : out std_logic_vector(3 downto 0);
UniSeg : out std_logic_vector(3 downto 0);
DezSeg : out std_logic_vector(3 downto 0);
UniMin : out std_logic_vector(3 downto 0);
DezMin : out std_logic_vector(3 downto 0));
end Timer;
architecture Behavioral of Timer is
signal s_UnidadesCent : unsigned(3 downto 0):="0000";
signal s_DezenasCent : unsigned(3 downto 0) := "0000";
signal s_UnidadesSeg : unsigned(3 downto 0) := "0000";
signal s_DezenasSeg : unsigned(3 downto 0) := "0000";
signal s_UnidadesMin : unsigned(3 downto 0) := "0000";
signal s_DezenasMin : unsigned(3 downto 0) := "0001";
begin
process(clock)
begin
if (rising_edge(clock)) then
if (reset = '1') then
s_UnidadesCent <= "0000";
s_DezenasCent <= "0000";
s_UnidadesSeg <= "0000";
s_DezenasSeg <= "0000";
s_UnidadesMin <= "0000";
s_DezenasMin <= "0001";
elsif (enable = '1') then
if (s_UnidadesCent = "0000" and s_DezenasCent = "0000" and s_UnidadesSeg = "0000" and s_DezenasSeg = "0000" and s_UnidadesMin = "0000" and s_DezenasMin = "0000") then
s_UnidadesCent <= "0000";
s_DezenasCent <= "0000";
s_UnidadesSeg <= "0000";
s_DezenasSeg <= "0000";
s_UnidadesMin <= "0000";
s_DezenasMin <= "0000";
else
s_UnidadesCent <= s_UnidadesCent - 1;
if (s_UnidadesCent = "0000" and s_DezenasCent /= "0000") then
s_UnidadesCent <= "1001";
s_DezenasCent <= s_DezenasCent - 1;
if (s_UnidadesSeg = "0000" and s_DezenasSeg /= "0000") then
s_UnidadesSeg <= s_unidadesSeg;
s_DezenasSeg <= s_DezenasSeg;
if (s_UnidadesMin = "0000") then
s_DezenasMin <= s_DezenasMin;
s_UnidadesMin <= s_unidadesMin;
end if;
elsif (s_UnidadesSeg = "0000" and s_DezenasSeg = "0000") then
s_UnidadesSeg <= "1001";
s_DezenasSeg <= "0101";
s_UnidadesMin <= s_UnidadesMin - 1;
if (s_UnidadesMin = "0000") then
s_DezenasMin <= s_DezenasMin - 1;
s_UnidadesMin <= "1001";
end if;
end if;
elsif (s_UnidadesCent = "0000" and s_DezenasCent = "0000") then
s_UnidadesSeg <= s_UnidadesSeg - 1;
s_UnidadesCent <= "1001";
s_DezenasCent <= "1001";
if (s_UnidadesCent = "0000" and s_DezenasCent = "0000" and s_UnidadesSeg = "0000" and s_DezenasSeg /= "0000") then
s_UnidadesSeg <= "1001";
s_DezenasSeg <= s_DezenasSeg - 1;
elsif (s_UnidadesSeg = "0000" and s_DezenasSeg = "0000" and s_UnidadesCent = "0000" and s_DezenasCent = "0000") then
s_UnidadesSeg <= "1001";
s_DezenasSeg <= "0101";
s_UnidadesMin <= s_UnidadesMin - 1;
if (s_UnidadesMin = "0000") then
s_DezenasMin <= s_DezenasMin - 1;
s_UnidadesMin <= "1001";
end if;
end if;
end if;
end if;
else
s_UnidadesCent <= s_UnidadesCent;
s_DezenasCent <= s_DezenasCent;
s_UnidadesSeg <= s_UnidadesSeg;
s_DezenasSeg <= s_DezenasSeg;
s_UnidadesMin <= s_UnidadesMin;
s_DezenasMin <= s_DezenasMin;
end if;
end if;
end process;
UniCent <= std_logic_vector(s_UnidadesCent);
DezCent <= std_logic_vector(s_DezenasCent);
UniSeg <= std_logic_vector(s_UnidadesSeg);
DezSeg <= std_logic_vector(s_DezenasSeg);
UniMin <= std_logic_vector(s_UnidadesMin);
DezMin <= std_logic_vector(s_DezenasMin);
end Behavioral;