LAB_5. Máquina de estados tipo Moore (Segundo método)
A continuación se presenta la implementación de una máquina de estados tipo Moore en cuyo código correspondiente en Xilinx se realizan en un solo "case" tanto la lógica combinacional parra generar los próximos estados como la lógica de salida. a diferencia del anterior método el cual realizaba lo anterior por casos separados (uno para la lógica de siguiente estado y otro para las salidas).
---------------------------------------------------------------------------------------------------------
LAB_5. Código en Xilinx de la máquina de estados
El siguiente es el código correspondiente a la máquina anteriormente descrita.---------------------------------------------------------------------------------------------------------
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
-- Uncomment the following library declaration if using
-- arithmetic functions with Signed or Unsigned values
--use IEEE.NUMERIC_STD.ALL;
-- Uncomment the following library declaration if instantiating
-- any Xilinx primitives in this code.
--library UNISIM;
--use UNISIM.VComponents.all;
entity maquina_2 is
port (
a: in STD_LOGIC;
b : in STD_LOGIC;
y : out STD_LOGIC_vector (2 downto 0);
clk : in STD_LOGIC;
reset : in STD_LOGIC);
end maquina_2;
architecture Behavioral of maquina_2 is
type estado is (s1,s2,s3,s4,s5,idle);
signal nextstate , currentstate :estado;
begin
siguiente : process (a,b,currentstate)
begin
case Currentstate is
when idle=>
Nextstate <= s1;
y <= "000";
when s1 =>
if a ='1' then
Nextstate <= s2;
else
Nextstate <= s1;
end if;
y <= "101";
When s2=>
if a ='0' and b = '1' then
Nextstate <=s3;
elsif a ='1' and b = '1' then
Nextstate <= s4;
elsif a ='1' and b = '0' then
Nextstate <= s5;
else Nextstate <= s2;
end if;
y <= "111";
when s3 =>
Nextstate <= s4;
y <= "011";
when s4 =>
nextstate <= idle;
y <= "000";
when s5 =>
nextstate <= idle;
y <= "100";
end case;
end process;
FFs: process (clk, reset)
begin
if reset = '1' then
currentstate <= idle;
elsif clk'event and clk='1' then
currentstate <= nextstate;
end if;
end process;
end Behavioral;
No hay comentarios:
Publicar un comentario