vhdl - 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);
结束行为;
解决方案
推荐阅读
- amazon-web-services - SQS 单个请求处理多个消息
- c# - c# linq to list - 2 个具有相同字段名称和结果但只有 1 个与 json() 一起使用的列表?
- rust - Rust:如何限制派生特征的类型参数
- c# - GroupBy HashSet 不分组,而 SetEquals 为真
- javascript - 在 React PWA 中永远不会触发来自外部 JS 脚本的窗口 onload 事件
- sql - 无法获取相关表列的名称
- python - 使用 Pandas read_csv() 处理开头以“sep=”开头的 .csv 文件
- java - 使用流从 Map 中的 Map 获取数据
- python - 保存一组变量的适当数据结构是什么
- docker - 如何使用 ngrok 正确公开 docker 服务器?