Sei sulla pagina 1di 3

Tipos de sentencias en VHDL

En VHDL existen dos tipos de declaraciones:

Secuenciales y concurrentes:

Las secuenciales: Sentencias que sólo pueden aparecer dentro de procesos y subprogramas,
requieren (if-then-else) o (case), dentro de la instrucción process.

La declaración concurrente: se obtiene con when-else o con ecuaciones booleanas.

IF
Permite escoger qué sentencia o sentencias deben ejecutarse en función de una CONDICIÓN.
Si hay varias condiciones ciertas, la primera que se cumple marca el resultado final.
Una condición es cualquier expresión booleana. [1]

Formato

IF condición_1 THEN
Sentencias secuenciales
END IF;

Ejemplo: biestable Latch


PROCESS (en, d)
BEGIN
IF (en = '1') THEN q <= d;
END IF;
END PROCESS;

IF-THEN-ELSE

Permite desviar el flujo de ejecución dentro de un proceso o subprograma, y a diferencia de


una declaración concurrente, una secuencial debe ejecutarse en el orden en que aparece. [2]

Formato

if la condición es cierta then


realiza la operación 1;
else
realiza la operación 2;
end if;

Formato para un mayor número de condiciones 2

if la condición es cierta then


realiza la operación 1;
elsif la condición 2 se cumple then
realiza la operación 2;
else
realiza la operación 3;
end if; [3]

WITH SELECT
Es una asignación por coincidencia entre un valor y una expresión a evaluar

Formato
WITH expresión SELECT
señal <= expresión_1 WHEN valor_1 ,
expresión_2 WHEN valor_2 ,
..............
expresión_n WHEN valor_n;

Si la expresión toma el valor_1 se hace la primera asignación, si el valor_2 la


segunda y así sucesivamente
Esta sentencia es muy similar a la sentencia CASE, con un matiz de
diferenciación importante:
 La sentencia WITH es concurrente
 La sentencia CASE es secuencial (en proceso) [1]

Instrucción CASE

Una instrucción case es similar a una asignación de señal seleccionada porque tiene una señal
de selección e incluye cláusulas WHEN para diversas combinaciones de esa señal.

Formato

CASE <expresión> IS
WHEN <valor1> => [sentencias1];
WHEN <valor2> => [sentencias2];
WHEN <rango de valores> => [sentenciasN];
WHEN OTHERS => [sentenciasM];
END CASE;

Potrebbero piacerti anche