Si quiero demorar mi FSM para permanecer en un estado durante 5 ciclos, ¿cómo podría hacerlo? Supongo que debería usar un contador, pero ¿cuál es el código VHDL? ¿Cómo podría usar un contador dentro de la declaración del proceso?
Lo siento si la pregunta es simple, estoy aprendiendo codificación VHDL.
Estoy usando esta codificación, pero no está compilando:
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_arith.all;
use ieee.std_logic_unsigned.all;
use ieee.numeric_std.all;
entity state3_fsm is
port (
clk_H : in std_logic;
res_H : in std_logic;
start : in std_logic;
done_H : in std_logic);
end entity state3_fsm;
architecture arc of state3_fsm is
type statetype is (s0, s1, s2);
signal pr_state, nx_state : statetype;
signal count : std_logic_vector(3 downto 0);
begin
ff_pro : process (clk_H, res_H)
begin
if (res_H = '1') then
pr_state <= s0;
elsif (clk_H'event and clk_H = '1') then
pr_state <= nx_state;
end if;
end process ff_pro;
com_pro : process (start, count, pr_state, done_H)
begin
case pr_state is
when s0 =>
if (start = '1') then
nx_state <= s1;
else nx_state <= s0;
end if;
when s1 =>
count <= count + 1;
if (count = 5) then
nx_state <= s2;
count <= "000";
else
nx_state <= s2;
end if;
when s2 =>
if done_H = '1' then
nx_state <= s0;
else nx_state <= s2;
end if;
when others =>
nx_state <= s0;
end case;
end process com_pro;
end architecture arc;