Так что моя проблема в том, что я правильно написал диаграмму состояний, чтобы определить последовательность 1011, но когда я реализую ее в Quatus II 8.1, я не могу смоделировать код, так как я получаю вывод как 0 всегда.
Моделирование ссылка на картинку находится в комментарии.
часть моего кода:
скорректированный код как попытка решить проблему .. вывод, кажется, всегда 0
library IEEE;
use IEEE.std_logic_1164.all;
entity moore_4s is
port ( D: in std_logic;
CLK: in std_logic;
RST: in std_logic;
Q: out std_logic);
end moore_4s;
architecture MYARCH of moore_4s is
type STATE is (ZERO, ONE, TWO, THREE, FOUR);
signal PR_STATE, NX_STATE: STATE;
begin
seq_ff: process (RST, CLK)
begin
if (RST = '1') then
PR_STATE <= ZERO;
elsif (CLK'event and CLK = '1') then
PR_STATE <= NX_STATE;
end if;
end process;
COMB: process (D, PR_STATE)
begin
case PR_STATE is
when ZERO =>
if (D = '1') then NX_STATE <= ONE;
else NX_STATE <= ZERO; end if;
when ONE =>
if (D = '0') then NX_STATE <= TWO;
else NX_STATE <= ONE; end if;
when TWO =>
if (D = '1') then NX_STATE <= THREE;
else NX_STATE <= ZERO; end if;
when THREE =>
if (D = '1') then NX_STATE <= FOUR;
else NX_STATE <= TWO; end if;
when FOUR =>
if (D = '1') then NX_STATE <= ONE;
else NX_STATE <= TWO; end if;
end case;
end process;
process(PR_STATE)
begin
case PR_STATE is
when Zero =>
Q <= '0';
when ONE =>
Q <= '0';
when TWO =>
Q <= '0';
when THREE =>
Q <= '0';
when FOUR =>
Q <= '1';
end case;
end process;
end architecture;