Детектор последовательности в VHDL с использованием конечного автомата Мура - PullRequest
0 голосов
/ 26 апреля 2020

Так что моя проблема в том, что я правильно написал диаграмму состояний, чтобы определить последовательность 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;

...