T2Tema 2 “Descripción de VHDL” (()2/2)tamarisco.datsi.fi.upm.es/PEOPLE/aalvarez/VHDL2B.pdf ·...

25
TECNOLOGÍA DE TECNOLOGÍA DE TECNOLOGÍA DE TECNOLOGÍA DE TECNOLOGÍA DE TECNOLOGÍA DE COMPUTADORES COMPUTADORES TECNOLOGÍA DE TECNOLOGÍA DE COMPUTADORES COMPUTADORES T 2 T 2 T ema 2 T ema 2 “Descripción de VHDL” “Descripción de VHDL” (2/2) (2/2) Agustín Álvarez Marquina Agustín Álvarez Marquina Tipos de sentencias en VHDL Tipos de sentencias en VHDL Sentencias concurrentes Sentencias secuenciales PROCESS Ai d ñl WAIT Asignación de señal Asignacn de señal BLOCK Asignación de variable IF CASE Llamadas a procedimientos Llamadas a funciones CASE LOOP NEXT GENERATE Instanciación de componentes EXIT RETURN NULL Instanciación de componentes ASSERT NULL ASSERT Llamada a procedimientos 09/10/2008 Facultad de Informática, UPM. 2 Llamada a funciones

Transcript of T2Tema 2 “Descripción de VHDL” (()2/2)tamarisco.datsi.fi.upm.es/PEOPLE/aalvarez/VHDL2B.pdf ·...

TECNOLOGÍA DETECNOLOGÍA DETECNOLOGÍA DETECNOLOGÍA DETECNOLOGÍA DE TECNOLOGÍA DE COMPUTADORESCOMPUTADORESTECNOLOGÍA DE TECNOLOGÍA DE COMPUTADORESCOMPUTADORES

T 2T 2Tema 2Tema 2

“Descripción de VHDL”“Descripción de VHDL”

(2/2)(2/2)( )( )

Agustín Álvarez MarquinaAgustín Álvarez Marquina

Tipos de sentencias en VHDLTipos de sentencias en VHDL

Sentencias concurrentes Sentencias secuencialesSe te c as co cu e tes

PROCESS

A i ió d ñ l

Se te c as secue c a esWAIT

Asignación de señal

Asignación de señal

BLOCK

Asignación de variable

IF

CASE

Llamadas a procedimientos

Llamadas a funciones

CASE

LOOP

NEXT

GENERATE

Instanciación de componentes

EXIT

RETURN

NULLInstanciación de componentes

ASSERT

NULL

ASSERT

Llamada a procedimientos

09/10/2008 Facultad de Informática, UPM. 2

Llamada a funciones

Sentencias concurrentes (I)Sentencias concurrentes (I)

Características:

Se ejecutan de forma asincróna unas respecto de lasotras en el mismo tiempo de simulación.

El orden en que se escriban es indiferente ya que nosiguen un orden de ejecución predefinido.

– No obstante conviene escribir el código en el orden quemejor se pueda entender y mejor documente el programa.

Sirven para especificar:Sirven para especificar: Interconexiones entre componentes.

Estructuras jerárquicas.

Estructuras regulares.

09/10/2008 Facultad de Informática, UPM. 3

Transferencias entre registros.

Sentencia PROCESS (I)Sentencia PROCESS (I)

Es concurrente, sin embargo, todas lassentencias contenidas en su parte descriptivason de tipo secuencial.

Las sentencias secuenciales se ejecutan en eljmismo paso o ciclo de simulación.

Puede convivir con otras sentenciasPROCESS o de cualquier otro tipo.

09/10/2008 Facultad de Informática, UPM. 4

Sentencia PROCESS (II)Sentencia PROCESS (II)

Si en el dominio de una arquitectura hay más deSi en el dominio de una arquitectura hay más deuna sentencia PROCESS, éstas se ejecutanconcurrentemente: sin un orden prefijado.p j

No hay una forma de indicar qué proceso seejecutara primero y cuales despuésejecutara primero y cuales después.

Existe un mecanismo para controlar el orden deejecución declarando un proceso comoejecución declarando un proceso comoPOSTPONED.

I di l j ió d li Indica que la ejecución de ese proceso se realizaradespués del resto de los procesos no identificados deesta manera.

09/10/2008 Facultad de Informática, UPM. 5

Sentencia PROCESS (III)Sentencia PROCESS (III)

Sintaxis:Sintaxis:[Etiqueta]: PROCESS [(lista de sensibilidad)] [IS]

Subprogramas tipos y subtipos de datos constantesSubprogramas, tipos y subtipos de datos, constantes, variables, cláusula USE, ficheros, alias, atributos.No pueden declararse señales, solamente elementossecuenciales

Parte

Declarativa

secuenciales.BEGIN

Sentencias secuenciales.

WAITAsignación de señal.

END [POSTPONED] PROCESS [etiqueta];END [POSTPONED] PROCESS [etiqueta];Parte

Descriptiva

09/10/2008 Facultad de Informática, UPM. 6

Asignación concurrente de señal (I)Asignación concurrente de señal (I)

Asigna valores a las señales.

Es equivalente a una sentencia PROCESS.

E t i i l d tEn concurrente siempre que no se incluya dentrode un PROCESS.

Sintaxis:

[etiqueta:] nombre<= [TRANSPORT | (REJECT tiempo)INERTIAL señal|] [AFTER] tiempo [UNAFFECTED]

REJECT: rechaza los pulsos menores de un determinadotiempo. Debe ir acompañado de INERTIAL.

UNAFFECTED: cuando ha de realizarse una asignación pero

09/10/2008 Facultad de Informática, UPM. 7

UNAFFECTED: cuando ha de realizarse una asignación perono se realiza ninguna acción.

Asignación concurrente de señal (II)Asignación concurrente de señal (II)

Ejemplos: Ejemplos:

y<= REJECT 10 ns INERTIAL a;y

y<= a AFTER 10 ns;

y<= INERTIAL a AFTER 10 ns;

y<= REJECT 10 ns INERTIAL a AFTER 20 ns;

09/10/2008 Facultad de Informática, UPM. 8

Asignación condicional de señalAsignación condicional de señal

Sintaxis:Sintaxis:

señal<= valor1 WHEN condición ELSE valor2;

señal<= valor1 WHEN condición1 ELSE valor2WHEN condicion2 [ELSE valor3];

Ejemplo:ARCHITECTURE flujo OF comparador ISARCHITECTURE flujo OF comparador ISBEGINigual<= '1' WHEN a=b ELSE '0';mayor<= '1' WHEN a>b ELSE '0';mayor<= 1 WHEN a>b ELSE 0 ;menor<= '1' WHEN a<b ELSE '0';

END flujo;

09/10/2008 Facultad de Informática, UPM. 9

Asignación selectiva de señalAsignación selectiva de señal

Sintaxis:WITH l t SELECTWITH selector SELECT

señal<= valor1 WHEN selección1,señal<= valor2 WHEN selección2,señal<= valorN WHEN selecciónN;

Ejemplo:ARCHITECTURE flujo OF decodificador IS

SIGNAL seleccion: BIT_VECTOR(1 DOWNTO 0); BEGIN

seleccion<= sel1 & sel0;WITH seleccion SELECT

sal<= "0001" WHEN "00","0010" WHEN "01","0100" WHEN "10","1000" WHEN "11","0000" WHEN OTHERS;

09/10/2008 Facultad de Informática, UPM. 10

"0000" WHEN OTHERS; END flujo;

Llamada concurrente a subprogramas (I)Llamada concurrente a subprogramas (I)

Un procedimiento llamado concurrentemente secomporta exactamente como un PROCESS:comporta exactamente como un PROCESS:

Externamente la ejecución es concurrente e internamentesecuencialsecuencial.

Los argumentos del procedimiento desempeñan elg p ppapel de lista sensible.

Si no hay argumentos en la lista sensible, ni tampoco unay g , psentencia WAIT, habrá que especificarlo, ya que sino seriaconsiderado un bucle infinito.

Sintaxis:[etiqueta:] POSTPONED nombreProcedimiento(lista);

09/10/2008 Facultad de Informática, UPM. 11

[etiqueta:] nombreFuncion(lista de parametros);

Sentencia BLOCK (I)Sentencia BLOCK (I)

Define una porción del diseño dentro de laparte descriptiva de una arquitectura.

L bl d t id dLos bloques pueden estar anidadosjerárquicamente.

Sintaxis:

etiqueta: BLOCK [(expresion de guarda)] [IS]etiqueta: BLOCK [(expresion_de guarda)] [IS]

[parte declarativa: GENERIC (GENERIC MAP),

PORT (PORT MAP)]

BEGIN

sentencias concurrentes

END BLOCK ti t

09/10/2008 Facultad de Informática, UPM. 12

END BLOCK etiqueta;

Sentencia BLOCK (II)Sentencia BLOCK (II)

EjemploEjemplo.

-- La etiqueta es obligatoriaq g

rom: BLOCK

PORT(direccion: IN bit_vector(15 DOWNTO 0);

bl IN bitenable: IN bit;

dato: OUT bit_vector(7 DOWNTO 0));

PORT MAP(direccion=> ROM_dir, enable=> ROM_ena,

dato=> ROM_dat);

BEGINBEGIN

...

END BLOCK rom;

09/10/2008 Facultad de Informática, UPM. 13

Sentencia BLOCK (III)Sentencia BLOCK (III)

Las ejecución de sentencias dentro de unLas ejecución de sentencias dentro de unBLOCK pueden estar supeditada al cumplimientode una condición de vigilancia GUARDEDde una condición de vigilancia GUARDED.

Solamente cuando se cumple la condición queSolamente cuando se cumple la condición queacompaña al BLOCK, el resultado de laexpresión que sigue al GUARDED se asigna.p q g g

Si una asignación dentro de un BLOCK no tiene lapalabra clave GUARDED se ejecutará aunque no sepalabra clave GUARDED se ejecutará aunque no secumpla la condición de guarda.

09/10/2008 Facultad de Informática, UPM. 14

Sentencia BLOCK (IV)Sentencia BLOCK (IV)

Sentencia BLOCKSentencia BLOCK.

Ejemplo:

ARCHITECTURE flujo_OF biestableD IS

BEGING

bD: BLOCK((clk='1' and (not clk'stable)

or clear='0')

BEGIN

q<= GUARDED (d and clear) AFTER retardo;

END BLOCK bD;

END flujo;

09/10/2008 Facultad de Informática, UPM. 15

Instanciación de componentesInstanciación de componentes (I)(I)

Sintaxis:

etiqueta: nombreComponente GENERIC MAP (valores) PORTMAP (conexiones);MAP (conexiones);

Ejemplo:

U1: biestableD GENERIC MAP(1 ns) PORT MAP (d,clk, clear, q);

Mismo ejemplo de otra manera:

U1: biestableD GENERIC MAP(retardo=> 1 ns) PORTU : b estab e G C ( eta do s) OMAP (d=>d, clk=>clk, clear=>clear, q=>q);

09/10/2008 Facultad de Informática, UPM. 16

Instanciación de componentesInstanciación de componentes (II)(II)

Requiere, además, incluir la definición delcomponente en la parte declarativa de lacomponente en la parte declarativa de laarquitectura.

D l ió d l tDeclaración del componente:[etiqueta:] COMPONENT nombre

GENERIC(l l )GENERIC(locales);

PORT(locales);

END COMPONENT [etiqueta];END COMPONENT [etiqueta];

Ejemplo:

bi blCOMPONENT biestableDGENERIC(retardo: TIME);PORT(d, clk, clear: IN BIT; q: OUT BIT);

09/10/2008 Facultad de Informática, UPM. 17

END COMPONENT;

Instanciación de componentesInstanciación de componentes (III)(III)

Especificación de configuraciones.

Asociación de entidades y arquitecturas a cadacomponente.

Si no se utiliza esta estructura se supone que laarquitectura asociada (y la entidad) es el última compilada.

También se pueden realizar estas asociaciones en las También se pueden realizar estas asociaciones en lasunidades de configuración (CONFIGURATION).

Sintaxis:

FOR etiqueta: nombreComponente USE ENTITY

WORK.nombreEntidad(nombreArquitectura);WORK.nombreEntidad(nombreArquitectura);

Ejemplo:

FOR U0: reloj USE ENTITY WORK reloj(reloj arq);

09/10/2008 Facultad de Informática, UPM. 18

FOR U0: reloj USE ENTITY WORK.reloj(reloj_arq);

Sentencia GENERATE (I)Sentencia GENERATE (I)

Sentencia GENERATE.

Equivale a un bucle hardware.

Se usa para replicar partes del modelo Se usa para replicar partes del modelo.

Es útil para describir series de componentes (registros,memorias).memorias).

Sintaxis:

etiqueta: IF condición GENERATE

[declaraciones]

BEGINBEGIN

[declaraciones]

END GENERATE [etiqueta];

09/10/2008 Facultad de Informática, UPM. 19

END GENERATE [etiqueta];

Sentencia GENERATE (II)Sentencia GENERATE (II)

Sintaxis (continuación):

etiqueta: FOR parametroRepetitivo GENERATE

[declaraciones]

BEGIN

[declaraciones]

END GENERATE [etiqueta];

Ejemplo 1:

G0: IF n<4 GENERATEG0: IF n<4 GENERATE

U1: and2 PORT MAP(e1,e0,s)

09/10/2008 Facultad de Informática, UPM. 20

END GENERATE;

Sentencia GENERATE (III)Sentencia GENERATE (III)

Ejemplo 2.je p o

ARCHITECTURE arq0 OF registroParaleloParaleloCuatroBits IS

COMPONENT biestableDCOMPONENT biestableD

PORT(d, clk, clear: IN BIT; q: OUT BIT);

END COMPONENT;

FOR ALL: biestableD USE ENTITY WORK.biestableD(bD_flanco_b);

BEGIN

G1: FOR i IN 0 TO 3 GENERATE

Ui: biestableD PORT MAP(entDatos(i),clk,

clear,salDatos(i));

END GENERATE;END GENERATE;

END registroParaleloParaleloCuatroBits;

09/10/2008 Facultad de Informática, UPM. 21

Sentencias secuenciales (I)Sentencias secuenciales (I)

Siempre están encapsuladas en procesosSiempre están encapsuladas en procesos(PROCESS) y procedimientos (PROCEDURE).

Especifican los algoritmos paso a paso. El orden deescritura determina el momento de la ejecución.

Similares a las de otros lenguajes de programación.

09/10/2008 Facultad de Informática, UPM. 22

Sentencia WAITSentencia WAIT (I)(I)

Una sentencia PROCESS siempre tiene queUna sentencia PROCESS siempre tiene quecontener en su parte descriptiva una sentenciaWAITWAIT.

En caso contrario su ejecución se interpreta como unbucle infinito del que no se salebucle infinito del que no se sale.

Sintaxis:Sintaxis:

WAIT ON lista_señales;

WAIT UNTIL condición;

WAIT FOR tiempo;

09/10/2008 Facultad de Informática, UPM. 23

Sentencia WAIT Sentencia WAIT (II)(II)

WAIT ON lista_señales._

El proceso se activa cuando se produce un evento enalguna de las señales de la lista de sensibilidad.alguna de las señales de la lista de sensibilidad.

Es equivalente poner entre paréntesis las señales juntocon la palabra PROCESScon la palabra PROCESS.

En el caso de utilizar esta última estructura no puedehaber otro WAIT explícito en su parte descriptiva:haber otro WAIT explícito en su parte descriptiva:

PROCESS(e1,e0)BEGIN

PROCESSBEGINBEGIN

...sentencias secuenciales

BEGIN...sentencias secuencialesWAIT ON e1 e0;

09/10/2008 Facultad de Informática, UPM. 24

...END PROCESS;

WAIT ON e1,e0;END PROCESS;

Sentencia WAITSentencia WAIT (III)(III)

WAIT UNTIL condición;WAIT UNTIL condición;

Ejemplo:

WAIT UNTIL contador >7;

WAIT FOR tiempo;WAIT FOR tiempo;

Ejemplo:

WAIT FOR 5 ns;

Ej l bi dEjemplos combinados:WAIT ON interrupcion FOR 25 ns;

WAIT ON interrupcion UNTIL contador>7 FOR 25 ns;

09/10/2008 Facultad de Informática, UPM. 25

WAIT ON interrupcion UNTIL contador>7 FOR 25 ns;

Asignación secuencial de señalAsignación secuencial de señal

No toman el valor que se les asigna de formainmediatainmediata.

No se actualizan sus drivers hasta que no se No se actualizan sus drivers hasta que no sehaya terminado de ejecutar completamente elPROCESS.

Sintaxis:

[ ti t ] b < [TRANSPORT | (REJECT[etiqueta:] nombre<= [TRANSPORT | (REJECTtiempo) INERTIAL señal|] [AFTER] tiempo

REJECT: rechaza los pulsos menores de un REJECT: rechaza los pulsos menores de undeterminado tiempo. Debe ir acompañado de INERTIAL.

UNAFFECTED: cuando ha de realizarse una asignación

09/10/2008 Facultad de Informática, UPM. 26

pero no se realiza ninguna acción.

Asignación de variableAsignación de variable

La sentencia de asignación de variablel l l t l d l i bl lreemplaza el valor actual de la variable con el

nuevo valor resultante de evaluar unaexpresiónexpresión.

La variable y el resultado de la expresión tienend l i tique ser del mismo tipo.

Las variables toman el valor que se les asigna Las variables toman el valor que se les asignade forma inmediata.

Sintaxis:

[ ti t ] b V i bl i

09/10/2008 Facultad de Informática, UPM. 27

[etiqueta:] nombreVariable:= expresion;

Diferencias entre señal variable (I)Diferencias entre señal variable (I)

Ej l Ejemplo.

ENTITY diferenciaSenalVariable ISPORT(a,b:IN integer; x,y: OUT integer);

END diferenciaSenalVariable;END diferenciaSenalVariable;

TESTTEST...

a<= 2 AFTER 1 ns;b<= 4 AFTER 1 ns;b< 4 AFTER 1 ns;

...

09/10/2008 Facultad de Informática, UPM. 28

Diferencias entre señal variable (II)Diferencias entre señal variable (II)

Ejemplo (continuación)

ARCHITECTURE S l ARCHITECTURE V i bl

Ejemplo (continuación).

ARCHITECTURE conSenalOF diferenciaSenalVariableIS

SIGNAL c: integer;

ARCHITECTURE conVariableOF diferenciaSenalVariable ISBEGINSIGNAL c: integer;

BEGINPROCESS(a,b,c)BEGIN

BEGINPROCESS(a,b)VARIABLE c: integer;BEGIN

c<= a;x<= c;c<= b;y<= c;

c:= a;x<= c;c:= b;y<= c;y< c;

END PROCESS;END conSenal;

y< c;END PROCESS;

END conVariable;

09/10/2008 Facultad de Informática, UPM. 29

Diferencias entre señal variable (III)Diferencias entre señal variable (III)

Ejemplo (continuación)

ns Delta a b x y

Ejemplo (continuación).

1 0 2 4 0 0

1 2 2 4 4 4

•Con señal

1 2 2 4 4 4

Conclusión:

c<= a;

ns Delta a b x y

c<= a;

es superflua

1 0 2 4 0 0

1 1 2 4 2 4•Con variable

09/10/2008 Facultad de Informática, UPM. 30

Sentencia IFSentencia IF

Sintaxis:Sintaxis:[etiqueta:] IF condición THEN

sentencias secuenciales[ELSE

sentencias secuenciales]END IF [etiqueta];END IF [etiqueta];

[etiqueta:] IF condición THEN[etiqueta:] IF condición THENsentencias secuenciales

ELSIF condición THENsentencias secuencialessentencias secuenciales

[ELSEsentencias secuenciales]

END IF [ ti t ]

09/10/2008 Facultad de Informática, UPM. 31

END IF [etiqueta];

Sentencia CASESentencia CASE

Sintaxis:Sintaxis:

[etiqueta:] CASE expresión IS

WHEN elección1=>WHEN elección1=>

secuencia de sentencias1;

WHEN l ió 2WHEN elección2=>

secuencia de sentencias2;

WHEN OTHERS=> -- Resto de casos

secuencia de sentenciasN;

END CASE [etiqueta];

09/10/2008 Facultad de Informática, UPM. 32

Sentencia LOOPSentencia LOOP

Sintaxis:[etiqueta:] [forma de iteración FOR | WHILE] LOOP

secuencias secuenciales

END LOOP [etiqueta];

[ ti t ] FOR id tifi d IN[etiqueta:] FOR identificador IN rango

LOOP

secuencia de sentencias

END LOOP [etiqueta];

ó[etiqueta:] WHILE condiciónLOOP

secuencia de sentencias

09/10/2008 Facultad de Informática, UPM. 33

END LOOP [etiqueta];

Sentencia NEXTSentencia NEXT

Detiene la ejecución de la iteración actual ypasa a la siguiente iteración.pasa a la siguiente iteración.

Solamente puede aparecer dentro de una sentenciaLOOP.

Sintaxis:

[etiqueta:] NEXT [identificador bucle] [WHEN condición];

Ejemplo: I t l FOR i l WHILEEjemplo: -- Interrumpe el FOR y sigue por el WHILEtermina: WHILE a< 100 LOOP

--- sentenciassigue: FOR n IN 0 TO 100sigue: FOR n IN 0 TO 100

--- sentenciasNEXT termina WHEN n=a;

END LOOP sigue;

09/10/2008 Facultad de Informática, UPM. 34

END LOOP sigue;END LOOP termina;

Sentencia EXITSentencia EXIT

Detiene la ejecución en ese instante y sale delDetiene la ejecución en ese instante y sale delbucle.

Si hay varios bucles anidados sale de donde se Si hay varios bucles anidados, sale de donde seencuentre la instrucción o bien del bucle que seespecifica en la etiqueta.

Solamente puede aparecer dentro de unat i LOOPsentencia LOOP.

Sintaxis:Sintaxis:

[etiqueta:] EXIT [identificador bucle] [WHEN condición];

09/10/2008 Facultad de Informática, UPM. 35

Sentencia NULLSentencia NULL

No realiza función alguna Pasa la ejecución aNo realiza función alguna. Pasa la ejecución ala siguiente sentencia secuencial.

Útil t i CASE d i Útil en sentencias CASE cuando no se quiererealizar ninguna acción para alguna de laseleccioneselecciones.

Sintaxis:Sintaxis:

[etiqueta:] NULL;

09/10/2008 Facultad de Informática, UPM. 36

Sentencia ASSERT (I)Sentencia ASSERT (I)

Comprueba si una determinada condiciónbooleana es cierta durante la simulación.

Si no es cierta, se emite un mensaje y el tipo de error.

Esta sentencia es considerada secuencial si set d t d t i PROCESSencuentra dentro de una sentencia PROCESS o

un PROCEDURE.

Es útil para test.

Sintaxis:Sintaxis:

[etiqueta:] ASSERT condición [REPORT expresión]

[SEVERITY valor];

09/10/2008 Facultad de Informática, UPM. 37

[SEVERITY valor];

Sentencia ASSERT (II)Sentencia ASSERT (II)

Si REPORT esta presente tiene que incluirse una Si REPORT esta presente tiene que incluirse unacláusula previa de definición de tipo de datos STRINGcon el mensaje que se desea dar.

Si SEVERITY está presente tiene que especificarse elvalor de tipo enumerado que aparece en el paquetep q p p qSTANDARD (NOTE, WARNING, ERROR, FAILURE).

Ejemplo: Ejemplo:

ASSERT set= ‘1’ AND reset= ‘1’

REPORT “¡¡set y reset activas al mismo tiempo!!”

SEVERITY ERROR;

09/10/2008 Facultad de Informática, UPM. 38

Llamadas a procedimientos (I)Llamadas a procedimientos (I)

Es secuencial si es llamado por un PROCESSEs secuencial si es llamado por un PROCESSu otro PROCEDURE.

Si ll d ENTITY ARCHITECTURE Si es llamado por una ENTITY, ARCHITECTUREo BLOCK entonces es concurrente.

Sintaxis:

[etiqueta:] PROCEDURE nombre(listaParámetros);

09/10/2008 Facultad de Informática, UPM. 39

Llamadas a procedimientos (II)Llamadas a procedimientos (II)

Formas de pasar argumentos: Formas de pasar argumentos:

Con un ejemplo:

PROCEDURE limites(CONSTANT valores: IN vector_16;VARIABLE min: OUT integer; VARIABLE max:OUTinteger:= 8);g

Posicional: tiene que escribirse en el mismo ordenque se declaran:

limites(conjunto(0 TO 15),lim_inf,lim_sup);

Asociación explícita: permite poner los parámetrosl i den cualquier orden.

limites(min=>lim_inf,max=>lim_sup,valores=>conjunto(0 TO 19));

09/10/2008 Facultad de Informática, UPM. 40

j

Declaración de procedimientos (I)Declaración de procedimientos (I)

Sintaxis:PROCEDURE nombre [listaParámetros: tipo[:=valor]] IS

[parte declarativa]

BEGINBEGIN

[sentencias secuenciales]

END [PROCEDURE] nombre;END [PROCEDURE] nombre;

Notas:

L l t d l ól i ibl Los elementos que se declaran sólo son visibles enel cuerpo del procedimiento.

Similares a los de la sentencia PROCESS. Similares a los de la sentencia PROCESS.

No se pueden declarar señales.

La lista de parámetros se declara de manera similar

09/10/2008 Facultad de Informática, UPM. 41

pa como se declaraban los puertos en las entidades.

Declaración de procedimientos (II)Declaración de procedimientos (II)

La lista de parámetros se declara de manera similar alPORT d ENTITYPORT de una ENTITY:1) Tipo de objeto (constante, variable, señal, fichero).

2) Nombre del objeto2) Nombre del objeto.

3) Modo del PORT (IN, OUT, INOUT).

4) Tipo de dato4) Tipo de dato.

Notas:

Las constantes pueden ser solo de modo IN Las constantes pueden ser solo de modo IN.

Las variables pueden ser de modo IN, OUT y no necesitan serdeclaradas.

Las señales pueden ser de modo IN, OUT, INOUT y necesitanser declaradas.

– Su uso como parámetros no es aconsejable, ya que puede dar

09/10/2008 Facultad de Informática, UPM. 42

p j , y q plugar a confusión por la forma en que éstas actualizan su valor.

Declaración de procedimientos (III)Declaración de procedimientos (III)

Ejemplo:

PROCEDURE limites(CONSTANT valores: IN vector_16;VARIABLE min, max: OUT integer) IS

VARIABLE indice: integer;VARIABLE indice: integer;BEGIN

min:= valores(0);l (0)max:= valores(0);

FOR indice IN 1 T0 15 LOOPIF min> valores(indice) THEN

min:= valores(indice);END IF;IF max< valores(indice) THEN

max:= valores(indice);END IF;

END LOOP;

09/10/2008 Facultad de Informática, UPM. 43

END limites;

Sentencias secuenciales (XXVIII)Sentencias secuenciales (XXVIII)

FuncionesFunciones.

Siempre devuelven un valor.

Sus parámetros sólo pueden ser de modo IN.

Siempre se usan en expresiones Siempre se usan en expresiones.

El objeto por defecto es una CONSTANT, aunquetambién admiten señales, pero hay que definirlasmediante SIGNAL.

No pueden incluir sentencias WAIT.

09/10/2008 Facultad de Informática, UPM. 44

Llamada a funcionesLlamada a funciones

Es secuencial si es llamado por un PROCESS u otroPROCEDUREPROCEDURE.

Si es llamado por una ARCHITECTURE o BLOCK entonces esconcurrente.

Sintaxis:

[Etiqueta:] nombreFunción(lista de parámetros);

Formas de pasar argumentos:p g

Posicional: los parámetros se escriben en el mismo orden quese declaran.temp_F<= Centigrados_A_Fahrenheit(temp_C);

Asociación implícita: permite poner los parámetros encualquier orden.

09/10/2008 Facultad de Informática, UPM. 45

q

temp_F<= Centigrados_A_Fahrenheit(c=>temp_C);

Declaración de funciones (I)Declaración de funciones (I)

Se realiza en la parte declarativa de laSe realiza en la parte declarativa de laarquitectura (ARCHITECTURE), bloque (BLOCK) opaquete (PACKAGE)paquete (PACKAGE).

Hay que indicar el tipo de dato que devuelve.

Sintaxis:[PURE|IMPURE] FUNCTION nombre [(parámetros)][PURE|IMPURE] FUNCTION nombre [(parámetros)]RETURN tipoDatosResultado IS

[declaraciones]BEGINBEGIN

[sentencias serie] -- Debe incluir al menos un RETURN

END [FUNCTION] [nombre];

09/10/2008 Facultad de Informática, UPM. 46

[ ] [ ];

Declaración de funciones (II)Declaración de funciones (II)

PURE devuelve siempre el mismo valor para unosp pparámetros de entrada.

IMPURE para unos mismos parámetros pueded l l dif tdevolver valores diferentes.

Ejemplo anterior:Ejemplo anterior:

FUNCTION Centigrados_A_Fahrenhait(c: real) RETURN real IS

VARIABLE f: real;

BEGIN

f:= c* 9.0/5.0 + 32.0;

RETURN(f);

END FUNCTION;

09/10/2008 Facultad de Informática, UPM. 47

Resumen. Elementos de VHDLResumen. Elementos de VHDL

Cláusulas de contexto LIBRARY CLAUSE USE CLAUSE

Especificaciones ATTRIBUTE, CONFIGURATION,

Declaraciones de las unidades de diseño

USE CLAUSE ,DISCONNECTION

ENTITY

PACKAGE DECLARATION,

CONFIGURATION

ARCHITECTURE PACKAGE BODY,

Declaraciones ALIAS, ATTRIBUTE, TYPE, , , ,SUBTYPE, CONSTANT, SIGNAL VARIABLE, GROUP, FILE, COMPONENT, PROCEDURE, FUNCTION

Sentencias concurrentes PROCESS, ASSERT, SIGNAL ASSIGNEMENT, BLOCK, COMPONENT, GENERATE llamada a procedimiento llamada

Sentencias secuenciales WAIT, ASSERT, IF, CASE,LOOP, NEXT, EXIT, RETURN,NULL asignación de señal

09/10/2008 Facultad de Informática, UPM. 48

llamada a procedimiento, llamada a función, instanciación

NULL, asignación de señal,asignación de variable, llamada aprocedimiento, llamada a función.

Recursos VHDL y estilos de especificaciónRecursos VHDL y estilos de especificación

Especificación de comportamiento.

PROCESS.

E ifi ió d fl j Especificación de flujo.

Asignación concurrente de señal.

Asignación condicional de señal

Asignación selectiva de señal.

BLOCK.

Especificación estructural Especificación estructural.

Instanciación de componentes.

GENERATE

09/10/2008 Facultad de Informática, UPM. 49

GENERATE.