40
SENTENCIAS SECUENCIALES Y CONCURRENTES DE VHDL

SENTENCIAS SECUENCIALES Y CONCURRENTES DE VHDL …edii.uclm.es/~miniesta/vhdl 2.pdf · SENTENCIA IF El orden en el que se sitúan las ‘condiciones’ dentro del if-elsif es importante,

Embed Size (px)

Citation preview

Page 1: SENTENCIAS SECUENCIALES Y CONCURRENTES DE VHDL …edii.uclm.es/~miniesta/vhdl 2.pdf · SENTENCIA IF El orden en el que se sitúan las ‘condiciones’ dentro del if-elsif es importante,

SENTENCIAS SECUENCIALES Y CONCURRENTES DE VHDL

Page 2: SENTENCIAS SECUENCIALES Y CONCURRENTES DE VHDL …edii.uclm.es/~miniesta/vhdl 2.pdf · SENTENCIA IF El orden en el que se sitúan las ‘condiciones’ dentro del if-elsif es importante,

SENTENCIA IF

sentencia_if::=[etiqueta:]if condicion(boolean) then

{sentencias_secuenciales}{elsif condicion then

{sentencias_secuenciales}}[else

{sentencias_secuenciales}]end if [etiqueta];

Page 3: SENTENCIAS SECUENCIALES Y CONCURRENTES DE VHDL …edii.uclm.es/~miniesta/vhdl 2.pdf · SENTENCIA IF El orden en el que se sitúan las ‘condiciones’ dentro del if-elsif es importante,

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.

Page 4: SENTENCIAS SECUENCIALES Y CONCURRENTES DE VHDL …edii.uclm.es/~miniesta/vhdl 2.pdf · SENTENCIA IF El orden en el que se sitúan las ‘condiciones’ dentro del if-elsif es importante,

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’

Page 5: SENTENCIAS SECUENCIALES Y CONCURRENTES DE VHDL …edii.uclm.es/~miniesta/vhdl 2.pdf · SENTENCIA IF El orden en el que se sitúan las ‘condiciones’ dentro del if-elsif es importante,

SENTENCIA CASE

Page 6: SENTENCIAS SECUENCIALES Y CONCURRENTES DE VHDL …edii.uclm.es/~miniesta/vhdl 2.pdf · SENTENCIA IF El orden en el que se sitúan las ‘condiciones’ dentro del if-elsif es importante,

SENTENCIA CASE

Page 7: SENTENCIAS SECUENCIALES Y CONCURRENTES DE VHDL …edii.uclm.es/~miniesta/vhdl 2.pdf · SENTENCIA IF El orden en el que se sitúan las ‘condiciones’ dentro del if-elsif es importante,

SENTENCIA CASE

Page 8: SENTENCIAS SECUENCIALES Y CONCURRENTES DE VHDL …edii.uclm.es/~miniesta/vhdl 2.pdf · SENTENCIA IF El orden en el que se sitúan las ‘condiciones’ dentro del if-elsif es importante,

BUCLES

sentencia_loop::=[etiqueta:][while condicion|for id in rango_discreto] loop

{sentencias_secuenciales}end loop [etiqueta];

Page 9: SENTENCIAS SECUENCIALES Y CONCURRENTES DE VHDL …edii.uclm.es/~miniesta/vhdl 2.pdf · SENTENCIA IF El orden en el que se sitúan las ‘condiciones’ dentro del if-elsif es importante,

BUCLES

Page 10: SENTENCIAS SECUENCIALES Y CONCURRENTES DE VHDL …edii.uclm.es/~miniesta/vhdl 2.pdf · SENTENCIA IF El orden en el que se sitúan las ‘condiciones’ dentro del if-elsif es importante,

BUCLES

Page 11: SENTENCIAS SECUENCIALES Y CONCURRENTES DE VHDL …edii.uclm.es/~miniesta/vhdl 2.pdf · SENTENCIA IF El orden en el que se sitúan las ‘condiciones’ dentro del if-elsif es importante,

BUCLES

Page 12: SENTENCIAS SECUENCIALES Y CONCURRENTES DE VHDL …edii.uclm.es/~miniesta/vhdl 2.pdf · SENTENCIA IF El orden en el que se sitúan las ‘condiciones’ dentro del if-elsif es importante,

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];

Page 13: SENTENCIAS SECUENCIALES Y CONCURRENTES DE VHDL …edii.uclm.es/~miniesta/vhdl 2.pdf · SENTENCIA IF El orden en el que se sitúan las ‘condiciones’ dentro del if-elsif es importante,

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

Page 14: SENTENCIAS SECUENCIALES Y CONCURRENTES DE VHDL …edii.uclm.es/~miniesta/vhdl 2.pdf · SENTENCIA IF El orden en el que se sitúan las ‘condiciones’ dentro del if-elsif es importante,

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);

Page 15: SENTENCIAS SECUENCIALES Y CONCURRENTES DE VHDL …edii.uclm.es/~miniesta/vhdl 2.pdf · SENTENCIA IF El orden en el que se sitúan las ‘condiciones’ dentro del if-elsif es importante,

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

Page 16: SENTENCIAS SECUENCIALES Y CONCURRENTES DE VHDL …edii.uclm.es/~miniesta/vhdl 2.pdf · SENTENCIA IF El orden en el que se sitúan las ‘condiciones’ dentro del if-elsif es importante,

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.

Page 17: SENTENCIAS SECUENCIALES Y CONCURRENTES DE VHDL …edii.uclm.es/~miniesta/vhdl 2.pdf · SENTENCIA IF El orden en el que se sitúan las ‘condiciones’ dentro del if-elsif es importante,

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

Page 18: SENTENCIAS SECUENCIALES Y CONCURRENTES DE VHDL …edii.uclm.es/~miniesta/vhdl 2.pdf · SENTENCIA IF El orden en el que se sitúan las ‘condiciones’ dentro del if-elsif es importante,

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

Page 19: SENTENCIAS SECUENCIALES Y CONCURRENTES DE VHDL …edii.uclm.es/~miniesta/vhdl 2.pdf · SENTENCIA IF El orden en el que se sitúan las ‘condiciones’ dentro del if-elsif es importante,

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.

Page 20: SENTENCIAS SECUENCIALES Y CONCURRENTES DE VHDL …edii.uclm.es/~miniesta/vhdl 2.pdf · SENTENCIA IF El orden en el que se sitúan las ‘condiciones’ dentro del if-elsif es importante,

Asignación secuencial de señales(modelos de retardos)

5ns18ns

10ns 10ns

A

B

C

A

B10ns

1ns

Page 21: SENTENCIAS SECUENCIALES Y CONCURRENTES DE VHDL …edii.uclm.es/~miniesta/vhdl 2.pdf · SENTENCIA IF El orden en el que se sitúan las ‘condiciones’ dentro del if-elsif es importante,

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

Page 22: SENTENCIAS SECUENCIALES Y CONCURRENTES DE VHDL …edii.uclm.es/~miniesta/vhdl 2.pdf · SENTENCIA IF El orden en el que se sitúan las ‘condiciones’ dentro del if-elsif es importante,

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)

Page 23: SENTENCIAS SECUENCIALES Y CONCURRENTES DE VHDL …edii.uclm.es/~miniesta/vhdl 2.pdf · SENTENCIA IF El orden en el que se sitúan las ‘condiciones’ dentro del if-elsif es importante,

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)

Page 24: SENTENCIAS SECUENCIALES Y CONCURRENTES DE VHDL …edii.uclm.es/~miniesta/vhdl 2.pdf · SENTENCIA IF El orden en el que se sitúan las ‘condiciones’ dentro del if-elsif es importante,

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.

Page 25: SENTENCIAS SECUENCIALES Y CONCURRENTES DE VHDL …edii.uclm.es/~miniesta/vhdl 2.pdf · SENTENCIA IF El orden en el que se sitúan las ‘condiciones’ dentro del if-elsif es importante,

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.

Page 26: SENTENCIAS SECUENCIALES Y CONCURRENTES DE VHDL …edii.uclm.es/~miniesta/vhdl 2.pdf · SENTENCIA IF El orden en el que se sitúan las ‘condiciones’ dentro del if-elsif es importante,

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.

Page 27: SENTENCIAS SECUENCIALES Y CONCURRENTES DE VHDL …edii.uclm.es/~miniesta/vhdl 2.pdf · SENTENCIA IF El orden en el que se sitúan las ‘condiciones’ dentro del if-elsif es importante,

SENTENCIA WAIT

Page 28: SENTENCIAS SECUENCIALES Y CONCURRENTES DE VHDL …edii.uclm.es/~miniesta/vhdl 2.pdf · SENTENCIA IF El orden en el que se sitúan las ‘condiciones’ dentro del if-elsif es importante,

SENTENCIA WAIT

Page 29: SENTENCIAS SECUENCIALES Y CONCURRENTES DE VHDL …edii.uclm.es/~miniesta/vhdl 2.pdf · SENTENCIA IF El orden en el que se sitúan las ‘condiciones’ dentro del if-elsif es importante,

SENTENCIA WAIT

Page 30: SENTENCIAS SECUENCIALES Y CONCURRENTES DE VHDL …edii.uclm.es/~miniesta/vhdl 2.pdf · SENTENCIA IF El orden en el que se sitúan las ‘condiciones’ dentro del if-elsif es importante,

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;

Page 31: SENTENCIAS SECUENCIALES Y CONCURRENTES DE VHDL …edii.uclm.es/~miniesta/vhdl 2.pdf · SENTENCIA IF El orden en el que se sitúan las ‘condiciones’ dentro del if-elsif es importante,

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.

Page 32: SENTENCIAS SECUENCIALES Y CONCURRENTES DE VHDL …edii.uclm.es/~miniesta/vhdl 2.pdf · SENTENCIA IF El orden en el que se sitúan las ‘condiciones’ dentro del if-elsif es importante,

Asignación concurrente de señalesAsignación concurrente condicional

Page 33: SENTENCIAS SECUENCIALES Y CONCURRENTES DE VHDL …edii.uclm.es/~miniesta/vhdl 2.pdf · SENTENCIA IF El orden en el que se sitúan las ‘condiciones’ dentro del if-elsif es importante,

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.

Page 34: SENTENCIAS SECUENCIALES Y CONCURRENTES DE VHDL …edii.uclm.es/~miniesta/vhdl 2.pdf · SENTENCIA IF El orden en el que se sitúan las ‘condiciones’ dentro del if-elsif es importante,

Asignación concurrente de señalesAsignación concurrente con selección

Page 35: SENTENCIAS SECUENCIALES Y CONCURRENTES DE VHDL …edii.uclm.es/~miniesta/vhdl 2.pdf · SENTENCIA IF El orden en el que se sitúan las ‘condiciones’ dentro del if-elsif es importante,

sentecia_assert::=[etiqueta:] assert condicion

[report expresion] [severity expresion];

Assert concurrente

Page 36: SENTENCIAS SECUENCIALES Y CONCURRENTES DE VHDL …edii.uclm.es/~miniesta/vhdl 2.pdf · SENTENCIA IF El orden en el que se sitúan las ‘condiciones’ dentro del if-elsif es importante,

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

Page 37: SENTENCIAS SECUENCIALES Y CONCURRENTES DE VHDL …edii.uclm.es/~miniesta/vhdl 2.pdf · SENTENCIA IF El orden en el que se sitúan las ‘condiciones’ dentro del if-elsif es importante,

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.

Page 38: SENTENCIAS SECUENCIALES Y CONCURRENTES DE VHDL …edii.uclm.es/~miniesta/vhdl 2.pdf · SENTENCIA IF El orden en el que se sitúan las ‘condiciones’ dentro del if-elsif es importante,

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.

Page 39: SENTENCIAS SECUENCIALES Y CONCURRENTES DE VHDL …edii.uclm.es/~miniesta/vhdl 2.pdf · SENTENCIA IF El orden en el que se sitúan las ‘condiciones’ dentro del if-elsif es importante,

SENTENCIA GENERATE

sentencia_generate::=etiqueta:[for identificador in rango_discreto |if expr_booleana] generate

{[bloque_declaraciones}begin]

{sentencias_concurrentes} --atencionend generate [etiqueta];

Page 40: SENTENCIAS SECUENCIALES Y CONCURRENTES DE VHDL …edii.uclm.es/~miniesta/vhdl 2.pdf · SENTENCIA IF El orden en el que se sitúan las ‘condiciones’ dentro del if-elsif es importante,

SENTENCIA GENERATE