------------------------------------------------------------------------------------------------------------
-- Practica 5
-- Diseñe el codigo VHDL del programa que resuelva el problema del punto 1.
--
------------------------------------------------------------------------------------------------------------
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 SEMAFORO is
Port ( X, clock, R, CLC_E, CLC_E2: in STD_LOGIC;
Z : OUT STD_LOGIC_VECTOR(5 DOWNTO 0);
SALIDA: out STD_LOGIC );
end SEMAFORO;
architecture FUNCION of SEMAFORO is
type Estados is (S0, S1, S2, S3);
signal ED_ACTUAL, ED_SIGUIENTE :ESTADOS;
signal temporal : STD_LOGIC;
signal contador: integer range 0 to 100000000:=0;
signal contador2: integer range 0 to 300000000:=0;
BEGIN
--Estado de Registro.
divisor_frecuencia: process(R, clock)
begin
if(R='1') then
temporal<='0';
contador<=0;
elsif (rising_edge(clock) and CLC_E='0') then
if(contador=100000000) then
temporal<= not(temporal);
contador<=0;
else
contador<=contador+1;
end if;
end if;
end process;
Salida<=temporal;
RELOG_TEMPORAL: PROCESS (TEMPORAL)
BEGIN
IF (TEMPORAL' EVENT AND TEMPORAL='1' AND CLC_E2='0')THEN
ED_ACTUAL <= ED_SIGUIENTE;
END IF;
END PROCESS;
-- MAQUINA DE MOORE
--Estado Siguiente / salida logica..
PROCESS (X, ED_ACTUAL)
BEGIN
CASE (ED_ACTUAL) IS
WHEN S0 => Z <="100001";
IF (X='0')THEN
ED_SIGUIENTE <=S0;
ELSE
ED_SIGUIENTE <=S1;
END IF;
WHEN S1 => Z <="001100";
process(clock)
begin
if (rising_edge(clock) and CLC_E='0') then
if(contador2 = 300000000) then
contador2 <= 0;
ED_SIGUIENTE <=S0;
else
contador2<=contador2+1;
if(contador2 = 100000000) then
Z <="001010";
end if;
end if;
end if;
end process;
END CASE;
END PROCESS;
END FUNCION;
sabes cuando lo pruebo me sale error con los if y que no fue declarado la ultima linea Funcion
ResponderEliminar