Documentos de Académico
Documentos de Profesional
Documentos de Cultura
VHDL 2 PDF
VHDL 2 PDF
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
sentencia_case::=
[etiqueta:]
case expresion is
when valor=>{sentencias_secuenciales}
{...}
end case [etiqueta];
valor ::=(expresion_simple|rango_discreto|others){|...}
sentencia_loop::=
[etiqueta:]
[while condicion|for id in rango_discreto] loop
{sentencias_secuenciales}
end loop [etiqueta];
BUCLES
BUCLES
BUCLES
BUCLES
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];
tipo_seal::= register|bus
asignacion_seal ::=
[label]identificador<=[mecanismo_retardo]forma_de_onda;
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
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
-6
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:
sentencia_process::=
[label:] process [(id_seal {,})] [is]
{declaraciones}
begin
{sentencias secuenciales}
end process [label];
sentencia_wait::=
[etiqueta:] wait [on id_seal {,..}]
[until exp_booleana]
[for exp_temp];
asignacion_concurrente_seal::=
[label:]identificador<=[mecanismo_retardo]forma_de_onda;
Asignacion_concurrente_condicional::=
[etiqueta:]seal_id<=[mecanismo_retardo]
{forma_de_onda when expr_booleana else}
forma_de_onda [when expr_booleana];
Asignacion_concurrente_seleccion::=
[etiqueta:]with expr select
seal_id<= [mecanismo_retardo]
{forma_onda when valor,}
forma_onda when valor;
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];
sentencia_instanciacion_componente::=
etiqueta: entity id_entidad [(id_arquitectura)]
[port map (lista_asocioacion_puertos)];
lista_asociacion_puertos::=
([nombre_puerto=>](seal_id|expr|open)){,}
sentencia_generate::=
etiqueta:
[for identificador in rango_discreto |if expr_booleana] generate
{[bloque_declaraciones}
begin]
{sentencias_concurrentes} --atencion
end generate [etiqueta];
SENTENCIA GENERATE