Está en la página 1de 40

SENTENCIAS SECUENCIALES Y

CONCURRENTES DE VHDL
SENTENCIA IF

sentencia_if::=
[etiqueta:]
if condicion(boolean) then
{sentencias_secuenciales}
{elsif condicion then
{sentencias_secuenciales}}
[else
{sentencias_secuenciales}]
end if [etiqueta];
SENTENCIA IF

El orden en el que se sitan las condiciones dentro del if-


elsif es importante, pues si hay dos ciertas, se ejecutar
nicamente la primera.
SENTENCIA CASE

sentencia_case::=
[etiqueta:]
case expresion is
when valor=>{sentencias_secuenciales}
{...}
end case [etiqueta];

valor ::=(expresion_simple|rango_discreto|others){|...}

Los valores de eleccin no pueden solapar sus rangos .


Los valores de eleccin deben cubrir todos los valores posibles de
expresion
SENTENCIA CASE
SENTENCIA CASE
SENTENCIA CASE
BUCLES

sentencia_loop::=
[etiqueta:]
[while condicion|for id in rango_discreto] loop
{sentencias_secuenciales}
end loop [etiqueta];
BUCLES
BUCLES
BUCLES
BUCLES

La sentencia next se utiliza en un bucle para detener una ejecucin y


pasar a la siguiente iteracin:

sentencia_next::=
[etiqueta:]next [etiqueta_loop][when condicion];
BUCLES
La sentencia exit se utiliza para salir de un bucle de forma incondicional.

sentencia_exit::=
[etiqueta:]exit [etiqueta_loop][when condicion];

Sentencia NULL
sentencia_null::= Una sentencia null no efecta ninguna
[etiqueta:] null : accin.
En algunas ocasiones la sintaxis del
lenguaje exige la poner una sentencia
Sentencia ASSERT
Proporciona mensajes si no se cumple una condicin en tiempo de ejecucin.
Se utiliza en la depuracin de modelos.
Puede llegar a detener la ejecucin de una simulacin

sentecia_assert::=
[etiqueta:] assert condicion
[report expresion] [severity expresion];

type severity_level is (note,warning,error,failure);


Asignacin secuencial de seales
declaracion_seal::=
signal identificador{,...}:subtipo[tipo_seal][:=expresion ];

tipo_seal::= register|bus

asignacion_seal ::=
[label]identificador<=[mecanismo_retardo]forma_de_onda;

forma_de_onda::=(expresion [after exp_tmp]){,...}

mecanismo_retardo::= transport|[reject exp_tmp]inertial

signal net1,net2: bit;


signal enable:integer:=0;
reloj<= 1 after t_pw,0 after 2*t_pw;
-- t_pw y 2*t_pw tienen la misma referencia temporal:
-- el tiempo de simulacin actual.
y<= not or_a_b after 5ns;
salida<= b0010; -- retardo delta
Asignacin secuencial de seales
Las seales pueden cambiar de valor en cualquier momento, pero a
diferencia de las variables guardan una analoga con el Hw.
Se pueden considerar una abstraccin de conexiones fsicas o buses.
Cosideraremos:
Transaccin: par nuevo valor-tiempo en que se aplica
Evento: transaccin que provoca un cambio de valor en una seal
Los procesos se ejecutan como respuesta a eventos en las seales.
Cada seal tiene asociado un driver en el que se almacenan pares valor-
tiempo como una secuencia de transacciones.
Cuando se hace una asignacin a una seal no se modifica el contenido
de la misma, si no el de su cola de eventos. Se indica el futuro valor de la
seal para un tiempo determinado, aunque esa asignacin puede llegar a
no producirse.
Asignacin secuencial de seales
Retardo Delta: en algunas ocasiones la asignacin de seales se produce
con un retardo de 0 fs (delta delay), por ejemplo salida<= b0010;
El ciclo de simulacin tiene dos fases:
Actualizacin de seales: se produce cuando el tiempo de
simulacin avanza hasta una transaccin programada.
Ejecucin de procesos: si en la fase anterior se producen eventos los
procesos implicados en ellos se ejecutan.
Cuando todos los procesos se suspenden, el simulador procesa las
seales que tienen retardo delta, producindose una actualizacin
como la descrita anteriormente pero sin que cambie el paso de
simulacin.
Y as sucesivamente hasta que no hayan ms eventos.
Los modelos con retardos delta implican alto nivel de abstraccin
Asignacin secuencial de seales

INICIO SIMULACIN

Lista de
Todas las seales
eventos
actualizadas

Actualizar
seales Ejecutar
procesos

Procesos suspendidos:
No ms eventos
Avance del tiempo de
Fin tiempo simulacin
simulacin hasta prximo
evento programado

FINAL SIMULACIN
Asignacin secuencial de seales
(modelos de retardos)
mecanismo_retardo::=
transport|[reject exp_tmp]inertial

El modelo transport describe el comportamiento de un dispositivo


ideal, en el que cualquier pulso de entrada independientemente de
su duracin provoca una salida: respuesta en frecuencia infinita.
El modelo inertial describe circuitos reales en los que una seal de
corta duracin puede no provocar una salida en el dispositivo. La
anchura de pulso mnima se especifica mediante reject y en su
ausencia por after.
Si no se indica nada en la asignacin de un seal el modelo de
retardo utilizado es inertial
Cuando en una misma asignacin se especifican varias transaccio-
nes a una seal, el mecanismo de retardo solo se aplica a la prime-
ra, siendo el del resto del tipo transport.
Asignacin secuencial de seales
(modelos de retardos)

18ns 5ns

10ns 10ns

A 1ns

B
10ns
Asignacin secuencial de seales
(modelos de retardos)
Modelo de transporte:
Las nuevas asignaciones eliminan las asignaciones posteriores del
driver:
Se aaden al final del driver

Valor Actual 1 Valor Actual 1 X


Tiempo T T+10 Tiempo T T+10 T+25

Valor Actual 1 0 X Valor Actual 1 0


Tiempo T T+10 T+20 T+25 Tiempo T T+10 T+20
Asignacin secuencial de seales
(modelos de retardos)
Modelo inercial:
Las nuevas asignaciones eliminan las asignaciones posteriores del
driver:
Se comprueban en las nuevas transacciones si se cumple la anchura de
pulso mnima exigida (parmetro reject o after), eliminando las
asignaciones que no lo hagan.

Valor Actual 000 Valor Actual 000 101


Tiempo T T+10 Tiempo T T+9 T+10 T+15

-6

Valor Actual 010 101 Valor Actual 010


Tiempo T T+12 T+15 Tiempo T T+12
Asignacin secuencial de seales
(modelos de retardos)
Otro ejemplo:

Valor actual 1 X 1 0 1 1 1 0
Tiempo T T+11 T+12 T+14 T+15 T+16 T+17 T+20 T+25

Valor actual 1 X 1 0 1 1 1 1 0
Tiempo T T+11 T+12 T+13 T+14 T+15 T+16 T+17 T+18 T+20 T+25

-5

Valor actual 1 X 1 1 1
Tiempo T T+11 T+12 T+16 T+17 T+18
Asignacin secuencial de seales
(Atributos)
Para una seal S y un tiempo T se definen los siguientes atributos:

Sdelayed[(T)] Seal S retrasada T unidades de tiempo


Sstable[(T)] Seal booleana verdadera si no se han producido eventos
en las T ltimas unidades de tiempo.
Squiet[(T)] Seal booleana verdadera si no se ha producido ninguna
asignacin en las T ultimas unidades de tiempo.
Stransaction Seal tipo bit que cambia de 0 a 1 y viceversa cada vez
que se produce una transaccin en S.
Sevent Verdadero si hay un evento en S en el actual ciclo de
simulacin, falso en cualquier otro caso.
Sactive Verdadero si hay una transaccin en S en el actual ciclo de
simulacin, falso en cualquier otro caso.
Slast_event Intervalo de tiempo desde el ltimo evento en S.
Slast_active Intervalo de tiempo desde la ltima transaccin en S.
Slast_value Valor de S antes del ltimo evento.
SENTENCIA PROCESS

Un proceso es una sentencia concurrente que define su comportamiento a


travs de sentencias secuenciales:
Cualquier sentencia, secuencial o concurrente tiene su proceso equivalente:
VHDL solo trabaja con procesos.

sentencia_process::=
[label:] process [(id_seal {,})] [is]
{declaraciones}
begin
{sentencias secuenciales}
end process [label];

Un proceso es un bucle infinito entre las sentencias begin y end process.


La ejecucin de un proceso se detiene (suspende) al ejecutar una sentencia
wait.
Un proceso despierta cuando se produce un evento en la relacin de seales
especificadas en su declaracin o por las especificadas en a sentencia wait.
Un proceso que no asigna valores a ninguna y seal y por tanto no puede
despertar a otros procesos, se llama proceso pasivo.
SENTENCIA WAIT

La sentencia wait indica en que punto se suspende la


ejecucin de un proceso.
Al mismo tiempo indica las condiciones para su
reactivacin.

sentencia_wait::=
[etiqueta:] wait [on id_seal {,..}]
[until exp_booleana]
[for exp_temp];

wait on establece las seales a las que ser sensible el


proceso.
SENTENCIA WAIT
SENTENCIA WAIT
SENTENCIA WAIT
Asignacin concurrente de seales
Se utiliza para casos sencillos, en modelos funcionales comportamentales en
los que la operacin se describe como una simple asignacin combinacional
que transforma las entradas en salidas.
Se declara en las arquitecturas en vez de en los procesos o subprogramas.
Es sensible a las seales que se encuentran a la derecha del smbolo de
asignacin.

asignacion_concurrente_seal::=
[label:]identificador<=[mecanismo_retardo]forma_de_onda;

Dato_0<= sel and dato_in after 20ns;


Asignacin concurrente de seales
Asignacin concurrente condicional

Asignacion_concurrente_condicional::=
[etiqueta:]seal_id<=[mecanismo_retardo]
{forma_de_onda when expr_booleana else}
forma_de_onda [when expr_booleana];

Podemos sustituir forma_de_onda por la palabra clave unaffected si para alguna


condicin no deseamos cambiar el valor de la seal.
Es sensible a las seales relacionadas en forma_de_onda y en expr_boolena.
Asignacin concurrente de seales
Asignacin concurrente condicional
Asignacin concurrente de seales
Asignacin concurrente con seleccin

Asignacion_concurrente_seleccion::=
[etiqueta:]with expr select
seal_id<= [mecanismo_retardo]
{forma_onda when valor,}
forma_onda when valor;

Podemos sustituir forma_de_onda por la palabra clave unaffected si para alguna


condicin no deseamos cambiar el valor de la seal.
Es sensible a las seales relacionadas en forma_de_onda y en expr.
Asignacin concurrente de seales
Asignacin concurrente con seleccin
Assert concurrente

sentecia_assert::=
[etiqueta:] assert condicion
[report expresion] [severity expresion];
Entidades y procesos pasivos
Declaracion_entidad::=
entity <identificador> is
[generic (lista_de_genricos);]
[port (lista_de_puertos);]
{declaraciones}
[begin
{sentencias_assert_concurrentes
|llamadas_a_procesos_concurrentes_pasivos
|sentencias_de_procesos_pasivos}]
end [entity] [identificador];

Cualquier sentencia concurrente incluida en la declaracin de


entidad debe ser pasiva, no puede afectar a ninguna seal.
Descripciones estructurales
Una descripcin estructural representa un sistema en trminos de subsistemas
interconectados mediante seales.
Cada subsistema a su vez se puede representar mediante otros subsistemas
ms bsicos interconectados por seales.
Y as sucesivamente hasta llegar a los componentes bsicos consistentes en
primitivas descritas en trminos de comportamiento.

sentencia_instanciacion_componente::=
etiqueta: entity id_entidad [(id_arquitectura)]
[port map (lista_asocioacion_puertos)];

Se puede considerar que esta sentencia concurrente crea una copia de la


entidad referenciada, a la que le asocia una de las posibles arquitecturas
que puede tener definidas

lista_asociacion_puertos::=
([nombre_puerto=>](seal_id|expr|open)){,}

Permite asociar cada puerto de la entidad referenciada con una seal de


la arquitectura donde se instancia.
La clusula open indica que un puerto no esta asociado a ninguna seal.
Descripciones estructurales

Asociacin posicional: cada seal listada en el mapa de puertos se conecta con el


puerto de la misma posicin en la declaracin de entidad.

Asociacin por nombre: se indica explcitamente mediante el operador => la


asociacin entre los puertos.
SENTENCIA GENERATE

sentencia_generate::=
etiqueta:
[for identificador in rango_discreto |if expr_booleana] generate
{[bloque_declaraciones}
begin]
{sentencias_concurrentes} --atencion
end generate [etiqueta];
SENTENCIA GENERATE

También podría gustarte