Documentos de Académico
Documentos de Profesional
Documentos de Cultura
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 efectúa ninguna
[etiqueta:] null : acción.
•En algunas ocasiones la sintaxis del
lenguaje exige la poner una sentencia
Sentencia ASSERT
•Proporciona mensajes si no se cumple una condición en tiempo de ejecución.
•Se utiliza en la depuración de modelos.
•Puede llegar a detener la ejecución de una simulación
sentecia_assert::=
[etiqueta:] assert condicion
[report expresion] [severity expresion];
tipo_señal::= register|bus
asignacion_señal ::=
[label]identificador<=[mecanismo_retardo]forma_de_onda;
INICIO SIMULACIÓN
Lista de
Todas las señales
eventos
actualizadas
Actualizar
señales δ Ejecutar
procesos
Procesos suspendidos:
No más eventos
Avance del tiempo de
Fin tiempo simulación
simulación hasta próximo
evento programado
FINAL SIMULACIÓN
Asignación secuencial de señales
(modelos de retardos)
mecanismo_retardo::=
transport|[reject exp_tmp]inertial
18ns 5ns
10ns 10ns
A 1ns
B
10ns
Asignación secuencial de señales
(modelos de retardos)
Modelo de transporte:
• Las nuevas asignaciones eliminan las asignaciones posteriores del
driver:
• Se añaden 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
Asignación secuencial de señales
(Atributos)
Para una señal S y un tiempo T se definen los siguientes atributos:
sentencia_process::=
[label:] process [(id_señal {,…})] [is]
{declaraciones}
begin
{sentencias secuenciales}
end process [label];
sentencia_wait::=
[etiqueta:] wait [on id_señal {,..}]
[until exp_booleana]
[for exp_temp];
asignacion_concurrente_señal::=
[label:]identificador<=[mecanismo_retardo]forma_de_onda;
Asignacion_concurrente_condicional::=
[etiqueta:]señal_id<=[mecanismo_retardo]
{forma_de_onda when expr_booleana else}
forma_de_onda [when expr_booleana];
Asignacion_concurrente_seleccion::=
[etiqueta:]with expr select
señal_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_genéricos);]
[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)];
•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=>](señal_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