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 ifelsif 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){|...}
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::=
[etiqueta:] null :
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);
Ejecutar
procesos
Procesos suspendidos:
Avance del tiempo de
simulacin hasta prximo
evento programado
No ms eventos
Fin tiempo simulacin
FINAL SIMULACIN
18ns
5ns
A
B
C
10ns
10ns
1ns
B
10ns
Valor Actual
Tiempo T
Valor Actual
Tiempo T
Valor Actual
T+10
Tiempo T
T+10
T+25
Valor Actual
Tiempo T
T+10
T+20
Valor Actual
Tiempo T
Valor Actual
000
Tiempo T
T+10
000
T+9
T+10 T+15
-6
Valor Actual
Tiempo T
010
101
T+12
T+15
Valor Actual
Tiempo T
101
010
T+12
Tiempo T
Valor actual
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
Tiempo T
Sstable[(T)]
Slast_event
Slast_active
Slast_value
Squiet[(T)]
Stransaction
Sevent
Sactive
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 {,})]
{declaraciones}
begin
{sentencias secuenciales}
end process [label];
[is]
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
Asignacion_concurrente_seleccion::=
[etiqueta:]with expr select
seal_id<= [mecanismo_retardo]
{forma_onda when valor,}
forma_onda when valor;
Assert concurrente
sentecia_assert::=
[etiqueta:] assert condicion
[report expresion] [severity expresion];
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
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