Resulta que estoy programando en VHDL una puerta de deteccion de metales de un banco. Y he coseguido eliminar todos los errores y latches del mismo excepto uno. Ya estoy desesperada y no se por donde puedo seguir. Me podriais ayudar???
El error es el siguiente:
Error (10500): VHDL syntax error at ahora.vhd(32) near text ";"; expecting "begin", or a declaration statement
que se encuentra en la linea 32, que es la siguiente:
process (actual, presencia, metal, duracion, abrir, carga_apertura, carga_cierre);
Y el programa es:
library ieee;
use ieee.std_logic_1164.all;
entity puerta is
port(clk, reset: in std_logic;
presencia, metal, abrir: in std_logic;
duracion: in std_logic_vector(15 downto 0);
carga_apertura, carga_cierre: in std_logic;
entrada, salida, led: out std_logic);
end puerta;
architecture uno of puerta is
type estado is(abriendo, cerrando, abierto, cerrado, metal_ON);
signal actual, siguiente: estado;
signal cerrar: std_logic;
begin
process(clk,reset)
begin
if reset= '1' then
actual <= abierto;
elsif clk'event and clk = '1' then
actual <= siguiente;
end if;
end process;
process (actual, presencia, metal, duracion, abrir, carga_apertura, carga_cierre);
begin
siguiente <= actual;
case actual is
when abierto =>
led<= '0';
if presencia = '1' then
siguiente <= cerrando;
else
siguiente <= abierto;
end if;
when cerrando =>
entrada <= '0';
carga_cierre <= '1';
if duracion = "0110000110101000" then --cargo 5 segundos
if metal = '1' then
siguiente <= metal_ON;
else
siguiente <= abriendo;
end if;
else
siguiente <= cerrando;
end if;
when metal_ON =>
led <= '1';
if duracion = "0010011100010000" then --cargo 2 segundos
if abrir = '1' then
led <='0';
carga_apertura <= '1';
if duracion ="0011101010011000" then --cargo 3 segundos
siguiente <= abriendo;
else
siguiente <= metal_ON;
end if;
else
entrada <= '1';
carga_apertura <= '1';
if duracion ="0011101010011000" then --cargo 3 segundos
siguiente <= abierto;
end if;
end if;
else
siguiente <= metal_ON;
end if;
when abriendo =>
led <= '0';
salida <= '1';
carga_apertura <= '1';
if duracion ="0011101010011000" then
if presencia = '1' then
siguiente <= abriendo;
else
siguiente <= cerrado;
end if;
else
siguiente <= abriendo;
end if;
when cerrado =>
salida <= '0';
carga_cierre <= '1';
if duracion = "0110000110101000" then
entrada <= '1';
carga_apertura <= '1';
if duracion ="0011101010011000" then
led <= '0';
end if;
else
siguiente <= cerrado;
end if;
end case;
end process;
end uno;
Muchas gracias a todos!!!
El error es el siguiente:
Error (10500): VHDL syntax error at ahora.vhd(32) near text ";"; expecting "begin", or a declaration statement
que se encuentra en la linea 32, que es la siguiente:
process (actual, presencia, metal, duracion, abrir, carga_apertura, carga_cierre);
Y el programa es:
library ieee;
use ieee.std_logic_1164.all;
entity puerta is
port(clk, reset: in std_logic;
presencia, metal, abrir: in std_logic;
duracion: in std_logic_vector(15 downto 0);
carga_apertura, carga_cierre: in std_logic;
entrada, salida, led: out std_logic);
end puerta;
architecture uno of puerta is
type estado is(abriendo, cerrando, abierto, cerrado, metal_ON);
signal actual, siguiente: estado;
signal cerrar: std_logic;
begin
process(clk,reset)
begin
if reset= '1' then
actual <= abierto;
elsif clk'event and clk = '1' then
actual <= siguiente;
end if;
end process;
process (actual, presencia, metal, duracion, abrir, carga_apertura, carga_cierre);
begin
siguiente <= actual;
case actual is
when abierto =>
led<= '0';
if presencia = '1' then
siguiente <= cerrando;
else
siguiente <= abierto;
end if;
when cerrando =>
entrada <= '0';
carga_cierre <= '1';
if duracion = "0110000110101000" then --cargo 5 segundos
if metal = '1' then
siguiente <= metal_ON;
else
siguiente <= abriendo;
end if;
else
siguiente <= cerrando;
end if;
when metal_ON =>
led <= '1';
if duracion = "0010011100010000" then --cargo 2 segundos
if abrir = '1' then
led <='0';
carga_apertura <= '1';
if duracion ="0011101010011000" then --cargo 3 segundos
siguiente <= abriendo;
else
siguiente <= metal_ON;
end if;
else
entrada <= '1';
carga_apertura <= '1';
if duracion ="0011101010011000" then --cargo 3 segundos
siguiente <= abierto;
end if;
end if;
else
siguiente <= metal_ON;
end if;
when abriendo =>
led <= '0';
salida <= '1';
carga_apertura <= '1';
if duracion ="0011101010011000" then
if presencia = '1' then
siguiente <= abriendo;
else
siguiente <= cerrado;
end if;
else
siguiente <= abriendo;
end if;
when cerrado =>
salida <= '0';
carga_cierre <= '1';
if duracion = "0110000110101000" then
entrada <= '1';
carga_apertura <= '1';
if duracion ="0011101010011000" then
led <= '0';
end if;
else
siguiente <= cerrado;
end if;
end case;
end process;
end uno;
Muchas gracias a todos!!!