Anda di halaman 1dari 40

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 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){|...}

Los valores de eleccin no pueden solapar sus rangos .


Los valores de eleccin 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 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 :

Una sentencia null no efecta ninguna


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];
type severity_level is (note,warning,error,failure);

Asignacin secuencial de seales


declaracion_seal::=
signal identificador{,...}:subtipo[tipo_seal][:=expresion ];
tipo_seal::= register|bus
asignacion_seal ::=
[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 simulacin actual.
y<= not or_a_b after 5ns;
salida<= b0010; -- retardo delta

Asignacin secuencial de seales


Las seales pueden cambiar de valor en cualquier momento, pero a
diferencia de las variables guardan una analoga con el Hw.
Se pueden considerar una abstraccin de conexiones fsicas o buses.
Cosideraremos:
Transaccin: par nuevo valor-tiempo en que se aplica
Evento: transaccin que provoca un cambio de valor en una seal
Los procesos se ejecutan como respuesta a eventos en las seales.
Cada seal tiene asociado un driver en el que se almacenan pares valortiempo como una secuencia de transacciones.
Cuando se hace una asignacin a una seal no se modifica el contenido
de la misma, si no el de su cola de eventos. Se indica el futuro valor de la
seal para un tiempo determinado, aunque esa asignacin puede llegar a
no producirse.

Asignacin secuencial de seales


Retardo Delta: en algunas ocasiones la asignacin de seales se produce
con un retardo de 0 fs (delta delay), por ejemplo salida<= b0010;
El ciclo de simulacin tiene dos fases:
Actualizacin de seales: se produce cuando el tiempo de
simulacin avanza hasta una transaccin programada.
Ejecucin 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
seales que tienen retardo delta, producindose una actualizacin
como la descrita anteriormente pero sin que cambie el paso de
simulacin.
Y as sucesivamente hasta que no hayan ms eventos.
Los modelos con retardos delta implican alto nivel de abstraccin

Asignacin secuencial de seales


INICIO SIMULACIN
Lista de
eventos
Actualizar
seales

Todas las seales


actualizadas

Ejecutar
procesos

Procesos suspendidos:
Avance del tiempo de
simulacin hasta prximo
evento programado

No ms eventos
Fin tiempo simulacin

FINAL SIMULACIN

Asignacin secuencial de seales


(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 duracin provoca una salida: respuesta en frecuencia infinita.
El modelo inertial describe circuitos reales en los que una seal de
corta duracin puede no provocar una salida en el dispositivo. La
anchura de pulso mnima se especifica mediante reject y en su
ausencia por after.
Si no se indica nada en la asignacin de un seal el modelo de
retardo utilizado es inertial
Cuando en una misma asignacin se especifican varias transacciones a una seal, el mecanismo de retardo solo se aplica a la primera, siendo el del resto del tipo transport.

Asignacin secuencial de seales


(modelos de retardos)

18ns

5ns

A
B
C
10ns

10ns

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

Valor Actual
Tiempo T

Valor Actual
Tiempo T

Valor Actual

T+10

Tiempo T

T+10 T+20 T+25

T+10

T+25

Valor Actual
Tiempo T

T+10

T+20

Asignacin secuencial de seales


(modelos de retardos)
Modelo inercial:
Las nuevas asignaciones eliminan las asignaciones posteriores del
driver:
Se comprueban en las nuevas transacciones si se cumple la anchura de
pulso mnima exigida (parmetro reject o after), eliminando las
asignaciones que no lo hagan.

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

Asignacin secuencial de seales


(modelos de retardos)
Otro ejemplo:
Valor actual

Tiempo T

Valor actual
Tiempo T

T+11 T+12 T+14 T+15 T+16 T+17 T+20 T+25

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

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:
Sdelayed[(T)]

Seal S retrasada T unidades de tiempo

Sstable[(T)]

Slast_event

Seal booleana verdadera si no se han producido eventos


en las T ltimas unidades de tiempo.
Seal booleana verdadera si no se ha producido ninguna
asignacin en las T ultimas unidades de tiempo.
Seal tipo bit que cambia de 0 a 1 y viceversa cada vez
que se produce una transaccin en S.
Verdadero si hay un evento en S en el actual ciclo de
simulacin, falso en cualquier otro caso.
Verdadero si hay una transaccin en S en el actual ciclo de
simulacin, falso en cualquier otro caso.
Intervalo de tiempo desde el ltimo evento en S.

Slast_active

Intervalo de tiempo desde la ltima transaccin en S.

Slast_value

Valor de S antes del ltimo evento.

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]

Un proceso es un bucle infinito entre las sentencias begin y end process.


La ejecucin de un proceso se detiene (suspende) al ejecutar una sentencia
wait.
Un proceso despierta cuando se produce un evento en la relacin de seales
especificadas en su declaracin o por las especificadas en a sentencia wait.
Un proceso que no asigna valores a ninguna y seal 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
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

Asignacin concurrente de seales


Se utiliza para casos sencillos, en modelos funcionales comportamentales en
los que la operacin se describe como una simple asignacin combinacional
que transforma las entradas en salidas.
Se declara en las arquitecturas en vez de en los procesos o subprogramas.
Es sensible a las seales que se encuentran a la derecha del smbolo de
asignacin.
asignacion_concurrente_seal::=
[label:]identificador<=[mecanismo_retardo]forma_de_onda;
Dato_0<= sel and dato_in after 20ns;

Asignacin concurrente de seales


Asignacin concurrente condicional
Asignacion_concurrente_condicional::=
[etiqueta:]seal_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


condicin no deseamos cambiar el valor de la seal.
Es sensible a las seales relacionadas en forma_de_onda y en expr_boolena.

Asignacin concurrente de seales


Asignacin concurrente condicional

Asignacin concurrente de seales


Asignacin concurrente con seleccin

Asignacion_concurrente_seleccion::=
[etiqueta:]with expr select
seal_id<= [mecanismo_retardo]
{forma_onda when valor,}
forma_onda when valor;

Podemos sustituir forma_de_onda por la palabra clave unaffected si para alguna


condicin no deseamos cambiar el valor de la seal.
Es sensible a las seales relacionadas en forma_de_onda y en expr.

Asignacin concurrente de seales


Asignacin concurrente con seleccin

Assert concurrente
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];
Cualquier sentencia concurrente incluida en la declaracin de
entidad debe ser pasiva, no puede afectar a ninguna seal.

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

Asociacin posicional: cada seal listada en el mapa de puertos se conecta con el


puerto de la misma posicin en la declaracin de entidad.

Asociacin por nombre: se indica explcitamente mediante el operador => la


asociacin entre los puertos.

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

Anda mungkin juga menyukai