Descripción VHDL de la mef con salidas registradas

Algunas veces interesa colocar un retardo en las señales de salida de la mef, ya sea por voluntad de acoplar señales, ya sea porque se requiere sincronizar las salidas a la señal de reloj (por ejemplo, la máquina de Mealy no tiene la salida sincronizada con el reloj)

Una forma de realizarlo en VHDL es introduciendo el cambio de la salida en el proceso de transición de estado (mejor si se trata de la síntesis de mef utilizando proceso único)

Ejemplo

entity mefRprocess is port

(nreset, ck, e: in bit;
a, b: out bit);

end;
architecture f of mefRprocess is
type estado is (s0, s1); -- Definición de estados
signal s: estado; -- Variable tipo estado
begin

registrado: process (nreset, ck) -- Proceso preparación estados futuros y cambio de estado
begin

if nreset='0' then s <= s0;
elsif ck'event and ck='1' then

b <= '0'; -- Por defecto b va a valer 0 a menos que cambie de valor dentro del case
--como a y b están dentro del proceso, su cambio se va a efectuar en el próximo flanco de reloj
case s is

when s0 =>

a <= '0';
if e = '1' then s <= s1;
else s <= s0;
end if;

when s1 =>

a <= '1';
if e = '1' then s <= s1; b <= '1';
else s <= s0;
end if;

end case;

end if;

end process;

end;

La siguiente figura muestra un resultado de síntesis que se corresponde con la descripción anterior. Se puede observar como las salidas están dispuestas después de un flip-flop

 

¡Cuidado! Muy a menudo sucede que no se requieren salidas registradas y, debido a un mal diseño de la mef se ha introducido el cambio de la señal de salida en el proceso de transición de estado.
Esto no suele pasar cuando se utiliza el diseño de la mef en dos procesos

Anterior
Volver a inicio curso
Volver a inicio capítulo
Siguiente


WcN - Joan Oliver. Diseño de circuitos digitales con VHDL: máquinas de estado finito