У меня есть некоторые проблемы с сигналом сброса в конечном автомате Мили в VHDL. Я создал очень простой Mealy FSM для более легкого понимания.
FSM имеет два процесса, один синхронный для расчета состояния, а другой комбинационный для расчета выходов и следующего состояния. У меня проблема в том, что когда reset = '1' и input1 = "11", то output1 = "11", когда он должен быть output1 = "00"
Эту проблему можно решить путем включения входа сброса в список чувствительности комбинационного блока.
Или путем оценки сигнала сброса в состоянии s0 (например, if input1="11" and rst = '0'then
). Тем не менее я не видел этих «решений» ни в одной литературе, так что тут есть мои сомнения.
Ниже приведен исходный код.
library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.ALL;
entity fsmtest is
port (
clk : in std_logic;
rst : in std_logic;
input1 : in std_logic_vector(1 downto 0);
output1 : out std_logic_vector(1 downto 0));
end fsmtest;
architecture rtl of fsmtest is
type state is (s0, s1);
signal st, next_state : state := s0;
begin -- rtl
process (clk, rst)
begin --process
if rst = '1' then
st <= s0;
--next_state <= s0;
elsif clk'event and clk = '1' then -- rising clock edge
st <= next_state;
end if;
end process;
process(st, input1)
begin -- process
case (st) is
when (s0) => --initial state
if input1 = "11" then
next_state <= s1;
output1 <= "11";
else
next_state <= s0;
output1 <= "00";
end if;
when (s1) => --wait10
if input1 = "00" then
next_state <= s0;
output1 <= "00";
else
output1 <= input1;
next_state <= s1;
end if;
end case;
end process;
end rtl;
Спасибо заранее