sentencias secuenciales y concurrentes de vhdl …edii.uclm.es/~miniesta/vhdl 2.pdf · sentencia if...
TRANSCRIPT
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 sitúan 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 elección no pueden solapar sus rangos .•Los valores de elección 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 ejecución y pasar a la siguiente iteración:
sentencia_next::=[etiqueta:]next [etiqueta_loop][when condicion];
BUCLESLa 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 :
•Una sentencia null no efectúa ninguna 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];
type severity_level is (note,warning,error,failure);
Asignación secuencial de señalesdeclaracion_señal::=
signal identificador{,...}:subtipo[tipo_señal][:=expresion ];
tipo_señal::= register|bus
asignacion_señal ::= [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 simulación actual.y<= not or_a_b after 5ns;salida<= b“0010”; -- retardo delta
Asignación secuencial de señales• Las señales pueden cambiar de valor en cualquier momento, pero a
diferencia de las variables guardan una analogía con el Hw.• Se pueden considerar una abstracción de conexiones físicas o buses.• Cosideraremos:
Transacción: par nuevo valor-tiempo en que se aplicaEvento: transacción que provoca un cambio de valor en una señal
• Los procesos se ejecutan como respuesta a eventos en las señales.• Cada señal tiene asociado un driver en el que se almacenan pares valor-
tiempo como una secuencia de transacciones.• Cuando se hace una asignación a una señal no se modifica el contenido
de la misma, si no el de su cola de eventos. Se indica el futuro valor de la señal para un tiempo determinado, aunque esa asignación puede llegar a no producirse.
Asignación secuencial de señales• Retardo Delta: en algunas ocasiones la asignación de señales se produce
con un retardo de 0 fs (delta delay), por ejemplo salida<= b“0010”;
• El ciclo de simulación tiene dos fases:• Actualización de señales: se produce cuando el tiempo de
simulación avanza hasta una transacción programada.• Ejecución 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
señales que tienen retardo delta, produciéndose una actualización como la descrita anteriormente pero sin que cambie el paso de simulación.
• Y así sucesivamente hasta que no hayan más eventos.• Los modelos con retardos delta implican alto nivel de abstracción
Actualizarseñales
Ejecutarprocesos
Todas las señalesactualizadas
INICIO SIMULACIÓN
Lista de eventos
Procesos suspendidos:Avance del tiempo de
simulación hasta próximoevento programado
FINAL SIMULACIÓN
No más eventosFin tiempo simulación
δ
Asignación secuencial de señales
Asignación secuencial de señales(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 duración provoca una salida: respuesta en frecuencia infinita.
•El modelo inertial describe circuitos reales en los que una señal de corta duración puede no provocar una salida en el dispositivo. La anchura de pulso mínima se especifica mediante reject y en su ausencia por after.
•Si no se indica nada en la asignación de un señal el modelo de retardo utilizado es inertial
•Cuando en una misma asignación se especifican varias transaccio-nes a una señal, el mecanismo de retardo solo se aplica a la prime-ra, siendo el del resto del tipo transport.
Asignación secuencial de señales(modelos de retardos)
5ns18ns
10ns 10ns
A
B
C
A
B10ns
1ns
Asignación secuencial de señales
Modelo de transporte: • Las nuevas asignaciones eliminan las asignaciones posteriores del
driver:• Se añaden al final del driver
T+101
T+25T+20Tiempo TX0Valor Actual
T+25T+10Tiempo TX1Valor Actual
T+10Tiempo T1Valor Actual
Asignación secuencial de señales(modelos de retardos)
T+20T+10Tiempo T01Valor Actual
Modelo inercial: • Las nuevas asignaciones eliminan las asignaciones posteriores del
driver:• Se comprueban en las nuevas transacciones si se cumple la anchura de
pulso mínima exigida (parámetro reject o after), eliminando las asignaciones que no lo hagan.
T+9 T+15T+10Tiempo T101000Valor Actual
T+15T+12Tiempo T101010Valor Actual
T+10Tiempo T000Valor Actual
-6
T+12Tiempo T010Valor Actual
Asignación secuencial de señales(modelos de retardos)
Asignación secuencial de señales
Otro ejemplo:
T+25T+20T+17T+16T+15T+14T+12T+11Tiempo T
011101X1Valor actual
T+181
T+13 T+25T+20T+17 T+16T+15T+14T+12T+11Tiempo T011101X1Valor actual
-5
T+16 T+18T+17T+12T+11Tiempo T
111X1Valor actual
Asignación secuencial de señales(modelos de retardos)
Asignación secuencial de señales(Atributos)
Para una señal S y un tiempo T se definen los siguientes atributos:
S’delayed[(T)] Señal S retrasada T unidades de tiempoS’stable[(T)] Señal booleana verdadera si no se han producido eventos
en las T últimas unidades de tiempo.S’quiet[(T)] Señal booleana verdadera si no se ha producido ninguna
asignación en las T ultimas unidades de tiempo.S’transaction Señal tipo bit que cambia de ‘0’ a ‘1’ y viceversa cada vez
que se produce una transacción en S.S’event Verdadero si hay un evento en S en el actual ciclo de
simulación, falso en cualquier otro caso.S’active Verdadero si hay una transacción en S en el actual ciclo de
simulación, falso en cualquier otro caso.S’last_event Intervalo de tiempo desde el último evento en S.S’last_active Intervalo de tiempo desde la última transacción en S.S’last_value Valor de S antes del último evento.
SENTENCIA PROCESS
• Un proceso es una sentencia concurrente que define su comportamiento a través de sentencias secuenciales:
• Cualquier sentencia, secuencial o concurrente tiene su proceso equivalente: VHDL solo trabaja con procesos.
sentencia_process::=[label:] process [(id_señal {,…})] [is]
{declaraciones}begin
{sentencias secuenciales}end process [label];
• Un proceso es un bucle infinito entre las sentencias begin y end process.• La ejecución de un proceso se detiene (suspende) al ejecutar una sentencia
wait.• Un proceso despierta cuando se produce un evento en la relación de señales
especificadas en su declaración o por las especificadas en a sentencia wait.• Un proceso que no asigna valores a ninguna y señal 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 ejecución de un proceso.
• Al mismo tiempo indica las condiciones para su reactivación.
sentencia_wait::=[etiqueta:] wait [on id_señal {,..}]
[until exp_booleana][for exp_temp];
•wait on establece las señales a las que será sensible el proceso.
SENTENCIA WAIT
SENTENCIA WAIT
SENTENCIA WAIT
Asignación concurrente de señales
• Se utiliza para casos sencillos, en modelos funcionales comportamentales en los que la operación se describe como una simple asignación combinacionalque transforma las entradas en salidas.
• Se declara en las arquitecturas en vez de en los procesos o subprogramas.• Es sensible a las señales que se encuentran a la derecha del símbolo de
asignación.
asignacion_concurrente_señal::= [label:]identificador<=[mecanismo_retardo]forma_de_onda;
Dato_0<= sel and dato_in after 20ns;
Asignación concurrente de señalesAsignación concurrente condicional
Asignacion_concurrente_condicional::=[etiqueta:]señal_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 condición no deseamos cambiar el valor de la señal.
•Es sensible a las señales relacionadas en forma_de_onda y en expr_boolena.
Asignación concurrente de señalesAsignación concurrente condicional
Asignación concurrente de señalesAsignación concurrente con selección
Asignacion_concurrente_seleccion::=[etiqueta:]with expr select
señal_id<= [mecanismo_retardo]{forma_onda when valor,}forma_onda when valor;
• Podemos sustituir forma_de_onda por la palabra clave unaffected si para alguna condición no deseamos cambiar el valor de la señal.
• Es sensible a las señales relacionadas en forma_de_onda y en expr.
Asignación concurrente de señalesAsignación concurrente con selección
sentecia_assert::=[etiqueta:] assert condicion
[report expresion] [severity expresion];
Assert concurrente
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];
•Cualquier sentencia concurrente incluida en la declaración de entidad debe ser pasiva, no puede afectar a ninguna señal.
Entidades y procesos pasivos
Descripciones estructurales•Una descripción estructural representa un sistema en términos de subsistemas interconectados mediante señales.
•Cada subsistema a su vez se puede representar mediante otros subsistemas más básicos interconectados por señales.
•Y así sucesivamente hasta llegar a los componentes básicos consistentes en primitivas descritas en términos 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=>](señal_id|expr|open)){,…}
•Permite asociar cada puerto de la entidad referenciada con una señal de la arquitectura donde se instancia.
•La cláusula open indica que un puerto no esta asociado a ninguna señal.
Descripciones estructurales
Asociación posicional: cada señal listada en el mapa de puertos se conecta con el puerto de la misma posición en la declaración de entidad.
Asociación por nombre: se indica explícitamente mediante el operador => la asociación entre los puertos.
SENTENCIA GENERATE
sentencia_generate::=etiqueta:[for identificador in rango_discreto |if expr_booleana] generate
{[bloque_declaraciones}begin]
{sentencias_concurrentes} --atencionend generate [etiqueta];
SENTENCIA GENERATE