我写了这段代码,连接了100Hz时钟,出口是Bin 7 Segments Decoders。此代码中的退出是时间。 时间从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);
结束行为;