首页 > 解决方案 > VHDL - 无法在 00:00:00 停止我的倒数计时器

问题描述

我写了这段代码,连接了一个 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);

结束行为;

标签: vhdl

解决方案


推荐阅读