Sunteți pe pagina 1din 210

VHDL

INTRODUCCION

Se estudiar como VHDL es usado en


proyectos de diseo.
Se analizarn las aplicaciones de VHDL y
los diferentes estilos para usar el lenguaje.
Se aprendern sus elementos bsicos, sus
ventajas y sus desventajas.
Se discutirn los principales conceptos del
lenguaje y los principales constructos.

DEFINICION

VHDL es un doble acrnimo:


Very High Speed Integrated Circuit.
Hardware Description Languaje.
Fue desarrollado a principios de los 80s para el
departamento. de los EEUU, como una
implementacin, realizada por computadora para
describir sistemas electrnicos.

En 1987 es Estandarizado por la IEEE


(Std
1076)
1993: Una nueva versin fue definida.
Para los constructos comnmente usados hay pocas
diferencias entre las dos versiones.

VHDL permite

1.
2.
3.
4.

VHDL como lenguaje de alto nivel permite:


El modelado de ensambles electrnicos complejos.
La simulacin de los modelos de componentes.
La sntesis lgica.
La portabilidad entre herramientas de sntesis y
entre arquitecturas.

VHDL permite

Definir los ports de entrada y salida del conjunto


lgico descripto (entity).
Definir una arquitectura usando el juego de
instrucciones soportado por las herramientas de
sntesis (escritura RTL).
Unir los diferentes mdulos descritos separadamente
(VHDL estructural)

EL PROCESO DE DISEO ELECTRONICO

LIMITACIONES

VHDL es principalmente un
lenguaje para diseo digital.
Actualmente tiene capacidades
muy limitadas en el rea
analgica, pero existen trabajos
para crear una versin analgica
del lenguaje.
El estndar 1076 define un
estndar y su sintaxis, sin
describir ningun estilo para
usarlo en un diseo. Hay otros
estndares que usan, o que
requieren definir un estilo antes
de usar el lenguaje en ciertas
reas.

VENTAJAS

Notacin formal: permite su uso en cualquier circuito


electrnico.
Disponibilidad pblica: no esta sometido a una patente o
fbrica.
Independencia Tecnolgica: soporta varias tecnologas
de diseo y distintas funcionalidades.
Capacidad descriptiva: Permite el diseo en varios
niveles de abstraccin
Reutilizacin de Cdigo: Sin importar la tecnologa
(CMOS, Bipolar, etc.) o la implementacin (FPGA, PLD,
etc.)

SOPORTE PARA
LENGUAJE DE SINTESIS

Solo es posible
sintetizar lgicamente
desde un subgrupo del
lenguaje de VHDL.
Cada compaia tiene su
herramienta que tienen
su propio subgrupo
ligeramente distinto de
los dems.

SINTAXIS

Los archivos VHDL llevan la extensin ----.VHD


Minsculas y maysculas no son diferenciadas en VHDL. Un objeto puede
ser indiferentemente llamado:
MODULE, Module, moDulE o module
Lo mismo ocurre con las palabras clave.
Los comentarios pueden ser colocados en cualquier lugar dentro del
cdigo.

Ellos no afectan en nada los resultados de sntesis ni de simulacin.


EJEMPLO:
- - este es un comentario
archtecture ARCHI of EJEMPLO is -- este tambin
begin
Los archivos VHDL llevan la extensin ----.VHD

SINTAXIS

Separadores: los separadores utilizados son:


; (Punto y coma, entre dos declaraciones o al fin de una
instruccin).
, (coma, entre dos nombres de seal dentro de una misma
declaracin).
: (dos puntos, dentro de una declaracin entre el nombre de un
objeto y
su tipo).
(espacio).
El nmero de espacios entre dos palabras es indiferente, siempre que el
mnimo sea respetado.
Retorno carro: Una misma instruccin o declaracin puede ser escrita en
varias lneas consecutivas.
Los comentarios pueden ser insertados al final de las lneas sin
afectar la integridad del cdigo.
A_IN, B_IN : in bit; - -puede tambin escribirse :
-- A_IN,
--B_IN : in bit;

CONCEPTOS

SINTESIS

Proceso de transformar instrucciones lgicas de


software en circuitos hardware que desarrollen estas
instrucciones.

ABSTRACCION

Cada abstraccin define los detalles del diseo


especificados en una descripcin particular de el.
Los diferentes estilos de escribir cdigo VHDL
tienen que ver con la abstraccin.

NIVELES DE ABSTRACCION

1.

2.
3.

4.

LAYOUT: Especifica informacin acerca de la


verdadera implementacin del diseo en
silicio.
LOGICO: se interconectan compuertas
lgicas y registros.
RTL: (transferencia de registros):se define
cada registro en el diseo, y la lgica entre
ellos.
COMPORTAMIENTO: describe la funcin del
diseo, sin especificar la arquitectura de los
registros.

SENTENCIAS

CONCURRENTES
ocurren en paralelo

SECUENCIALES
se ejecutan una despus
de la otra.

FUNCION

Es una rutina que hace una tarea particular.


Cuando el programa pasa el control a una funcin.

sta realiza la tarea y devuelve el control a la instruccin siguiente a la que


llamo.

Ejecutan esta tarea utilizando valores especficos, denominados


argumentos, en un orden determinado.

Los argumentos pueden ser nmeros, texto, valores lgicos como


VERDADERO o FALSO, matrices, valores de error (con #N/A ) o referencias
de celda.

El argumento que se designe deber generar un valor vlido para el mismo.


Los argumentos pueden ser tambin constantes, frmulas u otras funciones.

PRODECIMIENTO

Su inters radica en las acciones que se realizan


durante su invocacin.
Siempre se invocan de forma aislada.
Ejemplo:
println(...)
ste siempre se invoca en forma aislada.
Las acciones que realiza la invocacin de println
consisten en desplegar en pantalla el argumento que
recibe. Es ilegal escribir asignaciones como:
x= println( ... ); porque println no retorna ningn valor.

DIFERENCIA ENTRE PROCEDIMIENTO Y FUNCION

La diferencia entre un procedimiento y una funcin es


que la funcin regresa al termino de la ejecucin un
valor especfico

PROCESO

El proceso es una parte del cdigo VHDL dentro del


cual las sentencias se ejecutan en secuencia. Un
proceso existe dentro de una arquitectura, y mltiples
procesos interactan unos con otros de manera
concurrente.
Hay procesos:
combinatorios
sncronos

PROCESO

Un proceso es una parte de cdigo en la cual las


instrucciones se ejecutan en secuencia.
Una arquitectura puede contener varios proceso .
Todos los proceso se ejecutan en paralelo.
El orden de escritura de las instrucciones afecta los
resultados de simulacin y sntesis.

Sintaxis del Proceso

Etiqueta

Lista de sensitividad

Mux:process(A,B,SEL)
begin
ifSEL='1'then
Z<=A;
Sentencias
else
secuenciales
Z<=B;
endif;
endprocessMUX;

Eventos en la lista de sensibilidad

Un proceso no se ejecuta continuamente, el proceso


empieza a ejecutarse cuando una de las seales en
su lista de sensibilidad cambia de valor o, en el
lenguaje VHDL tiene un evento.
Mux:process(A,B,SEL)
begin
ifSEL='1'then
Z<=A;
else
Z<=B;
endif;
endprocessMUX;

Mltiples procesos concurrentes

Mientras que cada proceso ejecuta sus sentencias


en secuencia, mltiples procesos interactan con los
dems de manera concurrente al producirse un
evento en las seales de la lista de sensibilidad.

Proceso

Proceso
Proceso

Mltiples procesos en una arquitectura


architectureAofEis
begin

SentenciasConcurrentes
P1:process
begin
SentenciasSecuenciales
endprocessP1;
SentenciasConcurrentes
P2:process
begin
SentenciasSecuenciales
endprocessP2;
SentenciasConcurrentes
endA;

Proceso 1

Proceso 2

Ejecucin de procesos

Concurrente: 2 drivers

Cuando estas 2 seales son concurrentes, definen 2


drivers sobre la seal Z.

architectureCONCURRENTofMULTIPLEis
signalZ,A,B,C,D:std_logic;
begin
Z<=A&B;
Z<=C&D;
endCONCURRENT;

A
B
C
D

Ejecucin de procesos

Secuencial: 1 driver, ltima asignacin

Cuando estas 2 seales son secuenciales, el valor con el cual


la seal es actualizada es el ltimo valor que se le asigna
durante el proceso de ejecucin.

architectureSEQUENTIALofMULTIPLEis
signalZ,A,B,C,D:std_ulogic;
begin
process(A,B,C,D)
begin
Z<=A&B;
Z<=C&D;
endprocess;
endSEQUENTIAL;

C
D

Seal actualizada cuando el proceso se suspende

Las seales asignadas dentro de un proceso son


actualizadas hasta cuando el proceso termina y queda
suspendido.
architectureSEQUENTIALofMULTIPLEis
signalZ,A,B,C,D:std_ulogic;
begin
process(A,B,C,D)
begin
Z<=A&B;
Z<=C&D;
endprocess;
endSEQUENTIAL;

Nocin de process

Un process es una parte de cdigo en la cual


las instrucciones se ejecutan en secuencia.
Una arquitectura puede contener varios
process .
Todos los process se ejecutan en paralelo.
El orden de escritura de las instrucciones
afecta los resultados de simulacin y sntesis.

Implementacin de Procesos

Lgica combinatoria.
Lgica sincrnica.
Lgica sincrnica con inicializacin asincrnica.

Procesos dormidos, se les llama as a los procesos mientras


las seales que los activan no cambian su estado.

Estructura de Proceso
[ etiqueta: ] process ( lista de sensibilidad )
-- declaraciones
-- variables eventuales
Begin
-- parte operatoria
-- instrucciones secuenciales
-- (if, case, loop)
End process;
Lista de sensibilidad, cambia la asignacin de seales
asignadas en el proceso.

Metodologa de Procesos.

Lista de sensibilidad consistente.


Dominacin de comportamiento e implementacin de
la lgica.
Diseos sintetizados, sin asincronismos.

Proceso Combinatorio
[ etiqueta: ] process ( lista de sensibilidad )
-- declaraciones
Begin
-- instrucciones secuenciales
-- (if, case, loop)
End process [ etiqueta];

Lista de sensibilidad con seales que activan el proceso.


Parte declaratoria que puede contener variables.
Variable con mbito de proceso.

Ejemplo Combinatorio.
Mux: process (A, B,SEL )
Begin
if SEL=0
then SALIDA<=A;
else SALIDA<=B;
end if;
End process;

Estructura Proceso Sncrono


[ etiqueta: ] process
-- declaraciones
Begin
wait until (CK event and CK=1);
End process [etiqueta];
El flanco de subida provoca el cambio en el estado.
wait until evala la condicin.

Ejemplo sncrono.
Process
Begin
wait until ( CK event and CK=1 );
COUNT <= COUNT + 1;
End process;

COUNT es construida por flip flops


No debe haber seales combinatorias.

Proceso Sncrono
[ etiqueta: ] process ( CK )
-- declaraciones
Begin
if (CK event and CK=1)
then --instrucciones secuenciales.
end if;
End process [etiqueta];

Proceso Sncrono con Inicializacin Asncrona


[ etiqueta: ] process ( CK , RST)
-- declaraciones
Begin
if RST=1
then --accin asncrona
elseif (CK event and CK=1)
then --instrucciones secuenciales.
end if;
End process [etiqueta];
Cambio de prioridad por condicin asncrona

Ejemplo Sncrono
Process ( CK )
Begin
if ( CK event and CK=1 )
then COUNT <= COUNT + 1;
end if;
End process;

COUNT es construida por flip flops


Todas las seales deben ser combinatorias.

SENSITIVIDAD

La sensitividad es el conjunto de entradas de un


bloque que cada vez que tengan un cambio en su
estado activan el sistema y producen una salida.

Lista de Sensitividad

MUX:process(A,B,SEL)
begin
ifSEL='1'then
Z<=A;
else
Z<=B;
endif;

SEL
A

B
Z

endprocessMUX;

Lista de Sensitividad

Falta SEL
MUX:process(A,B)
begin
ifSEL='1'then
Z<=A;
else
Z<=B;
endif;
endprocessMUX;

SEL
A

B
Z

Variables y Seales:
Las Seales:
Objetos que pueden ser declarados en el interior de
una entidad (ports) o de una arquitectura (seales
internas).
La asignacin de un valor a una seal se hace con un
retardo (infinitesimal).
Variables
Son objetos que pueden ser declarados dentro de un
process (u otras entidades secuenciales).

Ejemplo sobre las seales:


EntitySIGis
port(A,B,C,CK:instd_logic;S,T:outstd_logic);
EndSIG;
ArchitectureARCHIofSIGissignalTMP:std_logic;
begin
process
begin
waituntilCKeventandCK=1;
TMP<=AorB;Estalneaserignorada
S<=TMP;
TMP<=AandC;anulalaasignacinprecedente
T<=TMP;sobrelasealTMP
endprocess;
EndARCHI;

Ejemplo utilizando una variable:


EntityVARis
port(A,B,C,CK:instd_logic;S,T:outstd_logic);
EndVAR;
ArchitectureARCHIofVARis
begin
process
variableTMP:std_logic;
begin
waituntilCKeventandCK=1;
TMP:=AorB;
S<=TMP;
TMP:=AandC;
T<=TMP;
endprocess;
EndARCHI;

Instrucciones secunciales: frecuentemente utilizadas.

-IFTHEN ; [ELSIF THEN];[ELSE]; END IF;


Similar a la asignacin de seales por seleccin.
-CASE END CASE;
Similar a la asignacin de seales por seleccin.
-FOR LOOP END LOOP;
Similar a la instruccin FOR GENERATE

La Sentencia IF
Sintaxis if- then else.
if CONDITION then
--- Sentencias secuenciales
end if;

if CONDITION then
--- Sentencias secuenciales
else
--- Sentencias secuenciales
end if;

Estructura if elsif.
if CONDITION then
--- Sentencias secuenciales
elsif CONDITION then
--- Sentencias secuenciales
elsif CONDITION then
--- Sentencias secuenciales
.
.
.
else
--- Sentencias secuenciales
end if;

IF-ELSIF
if CONDITION then

El
orden
de
las
sentencias
en
la
estructura if-elsif es muy
importante. Ms de una
condicin
puede
ser
verdadera, y es la
primera
condicin
verdadera la que provoca
que se ejecuten el grupo
de sentencias que le
siguen

-- sentencias secuenciales
elsif CONDITION then
-- sentencias secuenciales
elsif CONDITION then
-- sentencias secuenciales
else
-- sentencias secuenciales
end if;

Ejemplo de IF-ELSIF
process (A,B,C,X)
begin
If (X=0000) then
Z<=A;
elsif (X<=0101) then
Z<=B;
else
Z<=C;
end if;
end process;

Si X tiene el valor 0000, la


condicin
X=0000
es
probada primero, entonces a
Z se le asigna el valor de A.

IF THEN ;[ELSIF THEN];[ELSE]; END IF;


Sintaxis:

Todo IF debe terminarse por END IF.


IF esta en general seguido por ELSE
Varios IF pueden estar enlazados.
La contraccin ELSIF permite simplificar la
escritura

Ejemplo 2 de IF-ELSIF
process (A,B,C,D,SEL)

process (A,B,C,D,SEL)

begin

begin

If SEL = 00 then MUX <=A;


else if SEL = 01 then MUX <= B;
else if SEL = 10 then MUX <=C;
else MUX <=D;
end if;
end if;
end if;
end process;

If SEL = 00 then MUX <=A;


elsIf SEL = 01 then MUX <=B;
elsif SEL = 10 then MUX <=C;
else MUX<=D;
end if;
end process;

Utilizacin de Clock_Enable
architecture ARCHI of SECUENCE is
begin
process
begin
wait until CKevent and CK = 1 ;
If ENABLE = 1 then COUNT<=COUNT+1;
end if;
end process;
end ARCHI;

Utilizacin de Clock_Enable

architecture ARCHI of SECUENCE is


begin
process(CK)
begin
if CKevent and CK = 1 then
If ENABLE = 1 then COUNT<=COUNT+1;
end if;
end process;
end ARCHI;

Riesgos de insercin de lgica combinatoria en la


lnea del reloj

GESTION DE LA JERARQUIA

Modelo de un proceso

El
modelo
de
simulacin en VHDL
consiste de mltiples
procesos
que
se
encuentran
ejecutndose
secuencialmente.

____
___
____
__
___
____

____
___
____
__
___
____

Proceso

Proceso

____
___
____
__
___
____
Proceso

Concurrentes vs. Secuencial

Este modelo puede tener


cualquier numero de
procesos.
El proceso es visto como
una sola sentencia
concurrente.
Se puede tener n nmero
de sentencias
concurrentes y por lo
tanto cualquier nmero de
procesos.

architecture A of E is
begin
-- concurrent statements
P1: process
begin
-- sequential statements
end process P1;
-- concurrent statements
P2: process
begin
-- sequential statements
end process P2;
-- concurrent statments
end A;

Asignacin de seales en un proceso

Procesos concurrentes: mltiples drivers.

Architecture CONCURRENT of MULTIPLE is


signal A, B, C ,D : std_ulogic;
signal Z : std_logic;
Begin
Z <= A and B;
Z <= C and D;
End CONCURRENT;

A
B
?
C
D

Tenemos dos
asignaciones a la seal
Z, realizadas fuera de un
proceso. Las sentencias
fuera de un proceso son
concurrentes y por lo
tanto Z tiene dos drivers

Dentro de un proceso: un solo driver.

Dentro de este ejemplo


similar, las dos
asignaciones a Z se
encuentran dentro de
un proceso. (Un
proceso puede definir
nicamente un driver en
una seal)

architecture SEQUENTIAL of
MULTIPLE is
signal Z, A, B, C, D : std_ulogic;
begin
process(A, B, C, D)
begin
Z <= A and B;
Z <= C and D;
end process;
end SEQUENTIAL;

C
D

ltima asignacin

El lenguaje define que


en un proceso, la ltima
asignacin hecha a una
seal tiene efecto, pero
nicamente cuando el
proceso se suspende
(final del proceso)

architecture SEQUENTIAL of MULTIPLE is


signal Z, A, B, D : std_ulogic;
begin}
process (A, B, C, D)
Tiene efecto
begin
Z <= A and B;
Z <= C and D;
end process;
cuando se suspen
end SEQUENTIAL;

Diferente significado

process (A, B, C, D)
begin
Z <= A and B;
Z <= C and D;
end process;

=
Architecture X of MULTIPLE is

begin
Z <= A and B;
Z <= C and D;
end X;

Estas mismas dos


sentencias tienen
significado muy distinto,
dependiendo si se
ejecutan dentro o fuera
de un proceso.

Llamadas a mltiples procesos?

Un proceso puede ser potencialmente ejecutado varias


veces antes de que todas las seales sean actualizadas.

Ejemplo

SEALES ASIGNADAS
DESPUES DE UNA
LECTURA.
Tenemos un proceso con
asignacin a la seal M,
y el valor de M es
tambin ledo en el
proceso
B cambia de 0 a 1.

Proceso
llamado

EJEMPLO: process (A, B, M)


begin
Y <= A;
M <= B;
Z <= M;
end process EJEMPLO;

Evento en
B
A: 0
B:1
M:0
Z:0

Actualizacin de valores

La asignacin no
es inmediata!

Ejemplo: process(A,B,M)
begin
Y <= A;
M <=B;
Z <=M;
end process Ejemplo;

En este punto Z
sigue teniendo
valor 0!

Actualizacin de valores

Z no ha sido actualizada!

A
B
M
Z

T1process: Tiempo que


tarda en ejecutarse el
bloque process

T1process

El proceso termina la primera ejecucin

Debido a que M ha cambiado de 0 a 1 (por la asignacin M<=B), el


proceso vuelve a ejecutarse
Al ejecutarse esta
lnea Z no es
afectada!

Segunda ejecucin del proceso

Ejemplo: process(A,B,M)
Begin
Y <= A;
M <=B;
Z <=M;
end process Ejemplo;

A
B
M
Z

T1process

Actualizacin de valores

A
B
M
Z
T1

T2

process

process

Termina la segunda ejecucin del proceso

ENTRADA Y SALIDA

Definicin de entrada/salida

Se necesitan dos pasos para definir las entradas/salidas.


A)

El tipo buffer (entrada, salida, tres estados ,etc.)

B)

La asignacin de pins (pin particular del circuito)

Definicin del tipo en el cdigo

Inferir o instanciar la entrada y salida.

La herramienta de sntesis Xilinx es capaz de inferir


automticamente los tipos de entrada/salida.

Jerarqua separada para entrada/salida


Existen herramientas que
no infieren en la
Nivel Superior
entrada/salida bsica.
Para poder instanciarlos
consultar el manual de
uso del fabricante.
Instanciacin de los
componentes
de la lgica del ncleo

Buffer E/S

Definicin del tipo en la herramienta de sntesis

Se puede realizar de forma separada la definicin de


entrada/salida.

Se selecciona los tipos de buffer y se asignan a los


puertos de la lgica del ncleo.

Asignacin de los pins de entrada/salida

Asignacin de pins en las


Herramientas de
Foundation.

User Control File (.UCF)

Con las herramientas de


Xilinx, la asignacin de
los pins es a travs del
archivo (.UCF).

Tres estados y entrada/salida bidireccional

Dentro de la familia Xilinx es capaz de soportar


entrada/salida bidireccional, de tres estados o con
registros, etc.

Salida de 3 estados
Cdigo VHDL

Sntesis

EN
EN
OUT
OUT

IN
Z

Las herramientas de
sntesis tienen la
habilidad de inferir
automticamente celdas
de entrada/salida tanto
salidas de 3 estados
como bidireccionales.

Estilo de cdigo para inferir 3 estados.

if (EN = 0) then
OUT_PAD <= BUS_OUT;
else
OUT_PAD <= Z;
end if;

El uso de la asignacin
de Z es la que permite a
la herramienta de sntesis
inferir en el buffer de tres
estados.

Sntesis

EN
BUS _OUT

OUT_PAD

Cdigo para inferir entradas y salidas bidireccionales


CORE_IN <= BIDI;
process (CORE_OUT, BIDI)
if (EN=0) then
BIDI <= CORE_OUT;
else
BIDI <= Z;
end if;
end process;

Sntesis

CORE_OUT
CORE_IN

EN

Sentencia
concurrente

Uso de la asignacin
al valor Z
BIDI

Entrada/Salida con registro

Q
Terminal de
Salida

CLK

La implementacin es
automtica utilizando un
registro en la celda de
entrada/salida apropiada
si esta disponible.
Debe soportar el uso
implcito de enable y
reset sncronos en la
celda.

Insercin de registros durante MAP

Adems las herramientas de implementacin de Xilinx


tiene un interruptor
que les permite poner registros
en las celdas de entrada/salida donde sea apropiado.

Pull-up

Xilinx en su mayora de
dispositivos permite el uso de
pull-up/down, en las terminales
de entrada/salida.

Requerimentos de ruteo
especiales

En ocasiones, se requiere que las seales de reset y del


reloj, tengan mejor velocidad y desempeo.
Sucede cuando alguna seal se distribuye en una red de
elementos (alto fanout).
Si la herramienta de sntesis no infiere esta red, se debe
especificar con STARTUP, una red llamada GSR (Global
set/reset)

Redes para reloj

Al sintetizar Xilinx, instancia buffers globales


automaticamente en redes de reloj.
Si esto no sucede, entonces debe instanciarse una celda
de buffer global para manejar la red del reloj
Los Buffers Genricos son:

XC3000

BUFG

XC5200

BUFG

XC4000E BUFGP,BUFGS

BUFG
Puede ser aplicado sobre un IBUF (buffer de entrada), o
sobre redes internas que manejan seales de CLK.
El efecto que tiene es conectar una seal, por la ruta
mas corta, a la red sobre la que se aplica el BUFG
Ejemplos:
BUFG = CLK: mapea hacia una lnea global de reloj
(GCK)
BUFG = OE: mapea hacia una lnea global de control 3estado.
BUFG = SR: mapea a una linea global de control
set/reset

Sintaxis BUFG

attribute BUFG: string;


attribute BUFG of signal_name: signal is {CLK|OE|SR|
DATA_GATE};

Seales internas de 3 estados

El uso de buffers internos ayuda en ocasiones a


simplificar el diseo
Estos buffers pueden ser implementados de tres
maneras:
- tres estados
- and cableada
- or-and cableada
Para el uso de un mux 5-1, el uso de estos elementos
simplifica el diseo

Mux 5-1 con Buffers internos

Xilinx infiere cuando instanciar


automticamente buffer, (BUFT)

Decodificadores amplios(Wide Edge Decoder)

En ocasiones es de mucha utilidad contar con un


decodificador de direcciones, por ello Xilinx tiene
circuiteria dedicada sobre el contorno del dispositivo, por
lo que las seales de entrada pueden ser decodificadas.
Estos decoficadores son implementados con celdas and
y pull-up.
Existe el tipo WAND, que permite instanciar este tipo de
decodificadores.

TIEMPO

VHDL nos permite


modelar el tiempo, que es
una parte importante al
describir sistemas
electrnicos.

ESTRUCTURA

Composicin de
elementos.

ENTIDAD

La entidad en VHDL
describe la interfase de un
bloque jerrquico, sin
describir su comportamiento.
La entidad es equivalente a
un smbolo en un diseo
basado en una estructura
esquemtica.
Es la porcin de cdigo que
permite definir en particular
Entradas y Salidas

ENTIDAD:
Informaciones Complementarias
Equivalente a smbolos en los esquemas.
- Los ports de entrada/salida deben imperativamente
estar declarados dentro de la entidad y definir su modo:
in, out, inout, buffer.
Modo por defecto:in
- Los ports pueden igualmente ser declarados en forma
de seales simples (ej. Bit) o en forma de bus (ej:
bit_Vector).
-

EJEMPLO DE ENTIDAD
Ejemplo:
entity Ejemplo is
port(
A,B:in bit_vector(7 downto 0);
SEL:in bit;
Mux_OR:out bit );
end Ejemplo;

Equivalencia
Esquemtica

Smbolo Ejemplo
A[7:0]
B[7:0]
Sel

MUX_OR

ENTIDAD: Sintaxis de declaracin


entity EJEMPLO is
port(Lista puertos de entrada/Salida comprimiendo:
Nombre_de_seal:modo y tipo.);
end [EJEMPLO];
--Los corchetes [] indican que es opcional usar de
--nuevo el nombre de la entidad despus de la palabra
-- clave end.
- El nombre dado a la entidad puede ser cualquiera. (excepto las
palabras reservadas).
- Dar de preferencia el mismo nombre a la entidad y al fichero VHDL
(En este caso EJEMPLO.vhd)
- La lista de puertos est comprendida entre dos parntesis y
seguida de un punto y coma.
- Nombre de la entidad opcional despus de la palabra end.

ARQUITECTURA

Porcin de descripcin del


comportamiento del
dispositivo a sintetizar.
La arquitectura describe el
comportamiento de la entidad.
Esta asociada a una
entidad

(dentro del mismo fichero)


Posee una parte
declaratoria y una parte
operatoria.

Entidad y Arquitectura

Una entidad puede tener


mas de una arquitectura.

Una aplicacion es til, esto


es cuando un diseo es
descrito a varios niveles de
abstraccin: pueden existir
descripciones a nivel de
comportamiento, RTL y de
compuertas, del mismo
diseo, o varias formas de
describir el mismo circuito.

PAQUETE

Un paquete tiene una coleccin de definiciones que


pueden ser referenciados por varios diseos al mismo
tiempo.

ARREGLOS

Son elementos del mismo tipo.


VHDL define dos tipo de arreglo estndar: bit_vector y string.
Un arreglo en VHDL tiene las siguientes tres caractersticas
1.-El tipo de elementos en el arreglo (tienen que ser del mismo tipo)
2.-La longitud de el arreglo
3.-Los ndices del arreglo
bit_vector representa un tipo especial de arreglo en el cual el numero de bits o la
longitud del arreglo no es restringida y es puesta en la declaracin del objeto
Declaraciones legales
signal
Z_BUS: bit_vector (3 downto 0)
signal
C_BUS: bit_vector (1 to 4)
Declaraciones ilegales
signal
Z_BUS: bit_vector (0 downto 3)
signal
C_BUS: bit_vector (3 to 0)

Signal

C_BUS
Signal
Z_BUS

bit string literal.

signal SIG_A: bit_vector (7 downto 0)


7 6 5 4 3 2 1 0

SIG_A <= B1110_0011 --(22710)

B11111010

B1111_1010

XFA

B11111010

O372

B011111010

SIG_A

1 1 1 0 0 0 1 1

Designacin

Base

Binaria

Octal

Hexadecimal

Es una notacin para especificar el valor de un bit_vector.

Asignacin por posicin.

Dos objetos de tipo arreglo pueden ser asignados uno al otro, mientras sean
del mismo tamao y del mismo tipo:
Notar que la asignacin es por posicin y no por nmero de ndice. El
concepto de bit ms significativo no esta definido en VHDL.

signal
signal

Z_BUS: bit_vector(3 downto 0);


C_BUS: bit_vector(1 to 4);
Z_BUS <= C_BUS;

Z_BUS(3) <= C_BUS(1);


Z_BUS(2) <= C_BUS(2);
Z_BUS(1) <= C_BUS(3);
Z_BUS(0) <= C_BUS(4);

Signal

C_BUS

Signal
Z_BUS

Parte de un arreglo. (Slices)

Una parte de un arreglo unidimensional, en general, y un bit_vector en


particular puede ser referenciado, inclusive por un solo elemento. La
direccin de esta parte (es decir, to o downto) debe corresponder con la
direccin del arreglo declarado.
signal
signal

Z_BUS: bit_vector(3 downto 0);


C_BUS: bit_vector(1 to 4);

legal
Z_BUS (3 downto 0) <=00
C_BUS:(2 to 4) <= Z_BUS (3 downto 1);

ilegal
Z_BUS (0 to 1) <=111

Los slices de vectores de bit son tiles


debido a que a menudo pueden ser
vistos como colecciones de campos,
donde cada campo lleva una pieza de
informacin.
Por ejemplo un vector de bit que
represente la instruccin de una
computadora puede contener un
campo representando el tipo de
instruccin.

Concatenacin y agregados.

Ahora se discuten dos conceptos conocidos como


concatenacin y agregado. Estos son dos mtodos
que sirven para asociar seales entre ellos y
asignarlas a un arreglo de objetos.

Concatenacin

VHDL tiene la habilidad de asociar bits individuales y vectores para formar una
estructura de arreglo. Esto es conocido como concatenacin y utiliza el operador
ampersand (&). Los ejemplos muestran que bits individuales y vectores de bits
pueden ser concatenados para formar nuevos vectores

signal
signal
signal
signal
signal

Z_BUS: bit_vector(3 downto 0);


A,B,C,D: bit;
BYTE: bit_vector(7 downto 0);
A_BUS: bit_vector(3 downto 0);
B_BUS: bit_vector(3 downto 0);

Z_BUS<= A & B & C & D


BYTE<=A_BUS & B_BUS

Agregados.

Otro mtodo de
asignacin a
elementos de un
arreglo es conocido
como agregado.
Un agregado esta
contenido entre
parntesis y las
asignaciones a cada
elemento son
separadas por
comas.

signal
signal

Z_BUS: bit_vector(3 downto 0);


A,B,C,D: bit;
Z_BUS<=(A, B, C, D);

Z_BUS(3)<=A;
Z_BUS(2)<=B;
Z_BUS(1)<=C;
Z_BUS(0)<=D;

Especificando los elementos por nombre.

Es posible asignar a los


elementos de un arreglo por
nombre o por posicin.
Este ejemplo demuestra que
tambin un rango del arreglo
puede ser asignado, siempre
y cuando el mismo valor sea
asignado a cada elemento
del rango.

signal
signal
signal

X: bit_vector(3 downto 0);


A,B,C,D: bit;
BYTE:bit_vector(7 downto 0)

X<= (3=>1, 1 downto 0 =>1, 2=>B)

nombre

rango

nombre

Others, soporte para sntesis.

Los agregados tienen la habilidad


de usar la sentencia others, la
cual asignar un valor a todos los
otros elementos de un arreglo que
no han sido especificados.
Finalmente,
no
todas
las
herramientas de sntesis soportan
el uso de agregados, por lo que
puede
ser
necesario
usar
concatenacin
para
realizar
manipulaciones sobre arreglos.

signal
signal
signal

Z_BUS: bit_vector (3 downto 0);


A,B,C,D: bit;
BYTE:bit_vector(7 downto 0);

X<= (3=>1, 1 =>0, others=>B)

Necesidad de mas que el 0 y el 1

El tipo bit tiene unas limitaciones, puede solo representar el 0 y el 1. En


simulacin puede ser til el poder representar otros valores, por ejemplo:
desconocido, no inicializado, alta impedancia. Mientras para la sntesis
puede ser til representar una condicin: dont care
Unknown

El valor era conocido pero ya no lo es. A menudo denota


dos compuertas manejando el mismo nodo de salida, con
conflicto entre valores.

Un-initialised

El valor nunca fue conocido (prepower-up)

High Impedance

La red no tiene driver

Drive strengths

Maneja diferentes drivers de salida

Dont care

Implementacin en sintesis. No estamos interesados en el


comportamiento de la entrada/salida, la salida no esta
siendo monitoreada bajo ciertas condiciones de entrada o
ciertas condiciones de entrada que nunca se espera que
ocurran

Lgica de valores mltiples

La idea de una lgica de valores mltiples, o un sistema LVM


lleva un tipo de seal enumerado definido por todos los valores,
junto con un grupo de funciones que realizan operaciones
lgicas tales como: AND y OR sobre objetos de ese tipo.

Logic 0

Logic 1

Unknown

Dont care

Un-initialised

High impedance

Compuerta inversora NMOS Esttica

VDD

1
?

c
c
input

Output

Compuerta inversora NMOS Esttica


VDD

VDD
RONPU
Output=Vdd
Input=L

ROFFPD

ROFFP
ROFFPD

RONPU

=H

VDD
RONPU
Output=Vdd
Input=H

RONPD

RONPD
RONPD

RONPU

=L

Compuerta inversora NMOS Esttica

1
0

VDD

0
c
c
input

Output

OBJETOS MANIPULABLES

Los objetos que se pueden manipular en VHDL son:


1 SEALES: Los ports declarados dentro
de una entidad son seales.
2 CONSTANTES: permiten definir valores
permanentes
3 VARIABLES: utilizados solamente dentro de los
procesos(instrucciones secunciales).
4 ARCHIVOS (FICHEROS)

Declaracin de Objetos
La formula de declaracin de constantes,
variables y seales es:

Tipo_de_Objeto Nombre_de_Objeto Tipo_de_Dato:=Valor Inicial

Por ejemplo:
SIGNAL nodno1: BIT:='1';
VARIABLE var1:BIT;
CONST pi: REAL:=3.14159;

Seales

Son objetos que permiten simular la interconexin de


componentes dentro de la arquitectura de diseo.

Permiten representar entradas o salidas de entidades.

Seales

X0 y x1 no tienen asignada una terminal en la entidad de


diseo (funcionan como un medio de interconexin).

Sintaxis general de una seal


signal id {,...} : tipo [:= expresion ];
port ( { id {, ...} : direccion tipo [:= expresion];}]

Signal Reloj : std _logic :='0';


signal Comparacion: bit;
signal Resultado : integer range 0 to 7;
port ( a,b : in
integer range 0 to 7;
c : out
integer range 0 to 7;
d : inout std_logic );

Seales
Forma de declarar una seal:
signal identificator: tipo: [rango];

Ejemplo:
signal vcc: bit: 1;
signal suma: bit_vector: (3 downto 0);

Seales

las seales pueden declararse en una entidad,


en una arquitectura o en un paquete.
si se quiere inicializar una seal hay que indicar
un valor en [:=expression]
por ejemplo: signal s: bit:='1';
de otra manera, el valor es inicializado al valor
mas bajo del tipo de variable definido.

Seales

Escalar: signal name(s):=type [range_contraint]


[:=expression];
Vectorial: signal name(s): array_type[index_constraint]
[:=expression];
Entidad: port (name(s): direction type [range_constraint]
[:=expression]);

Seales

Ejemplos:
signal count: integer range 1 to 50; (el valor inicial ser
1)
signal GROUND: BIT:='0';
signal YS_BUS std_logic_vector (7 downto 0);
port (B,A: in integer range 0 to 9);
signal bogus: bit_vector; (Errnea, no hay dimensin)

Driver de seal

Un conductor (driver) para una seal se define por el


proceso que asigna valores a la seal.
Los valores que viajan por los caminos de datos en un
tiempo dado estn contenidos en dicho conductor, el
cual consta de una coleccin de parejas (tuplas)
valor/tiempo llamadas transacciones.

Asignacin mltiple o concurrente

Los conductores son creados por sentencias de


asignacin de seales.
Una asignacin concurrente de seal dentro de una
arquitectura produce un conductor para cada
asignacin de seal. Asignaciones mltiples producirn
conductores mltiples de seal.

Creacin de un driver
ARCHITECTURE t1 OF d1 IS
BEGIN
a <= b AFTER 10 ns ;
a <= c AFTER 10 ns ;
END t1;

Funcin de resolucin

La seal a est siendo manejada por dos fuentes, b y


c.
Cada asignacin concurrente crear un conductor para
la seal a, esto no es admitido a menos que se defina
una funcin de resolucin (resolved signals).
La forma en que esto se resuelve queda a cargo del
diseador.

Atributos funcin de las seales


SEVENT
Retorna verdadero si ocurri un evento en S durante
el corriente delta, de lo contrario devuelve falso.
SACTIVE Retorna verdadero si ocurri una transicin en S
durante el corriente delta, else falso.
SLAST_EVENT
transicin

Retorna el tiempo transcurrido desde la


previa de la seal S.

SLAST_VALUE
evento.

Retorna el valor previo de S antes del ltimo

SLAST_ACTIVE
transaccin

Retorna el tiempo transcurrido desde la


previa de la seal.

Seales de tipo definido

Habiendo definido el tipo, podemos definir seales de este tipo. Aqu hemos
declarado la seal STATE de tipo MY_STATE. Debemos observar las reglas
estrictas cuando usemos estas seales: no podemos asignar nada a la
seal STATE que no sea del tipo MY_STATE

type MY_SATE is
(RESET, IDLE, RW_CYCLE, INT_CYCLE);

Signal
STATE: MY_STATE;
Signal
TWO_BIT: bit_vector (0 to 1);

STATE<=RESET;
STATE<=00;
STATE<=TWO_BIT;

CONSTANTES
Una constante es un objeto que se inicializa
a un determinado valor y no puede ser cambiado una vez
inicializado.

Sintaxis general de una constante


constant id {,...} : tipo [:= expresion];

Ejemplos

Constant Pi: real : =3.1415;


constant BitsPalabra
: integer :=8;
constant NumPalabras : integer :=64;
constant NumBits : integer :=BitsPalabras * NumPalabras;
constant RetardoAND2 , RetardoOR2 : time := 2 ns

VARIABLES

Una variable es un objeto que se inicializa a un


determinado valor y a diferencia de una constante
su valor puede ser alterado en cualquier instante.
Sintaxis general de una variable
variable id {,....}

: tipo

[expresion];

Ejemplos

Variable Indice1, Indice2, Indice3 : integer := 0;


variable Comparacion : boolean;
variable Resultado : real;

ARCHIVOS (FICHEROS)
Permiten comunicar un diseo VHDL con el exterior, el modelo
lee y escribe datos persistentes.
En el paquete texti o de la biblioteca standar hay
tipos de datos y operaciones de lectura/escritura de archivos de
texto.
VHDL soporta subprogramas para leer y escribir
archivos en forma secuencial.

Sintaxis general de un archivo


file id {,....}
file id {,....}
nombre;]

: tipo
: tipo

[is direccin nombre ;]


[ [ open tipo_acceso] is

Ejemplos
file Estimulos : FicheroEnteros open read_mode is datos.in;
file Salida
: FicheroEnteros open write_mode id datos.out;

ASIGNACION DE UN VALOR

A una seal se le asigna


un valor, en VHDL, por
medio de una sentencia
de Asignacin de seal.
Una Asignacin a una
seal define un driver
sobre esa seal.
Se pueden tener
multilples drivers.

DEFINICION DE PUERTOS

Seales que relacionan una entidad


con otra

Forma genrica de designar un puerto


nombre_variable: modo tipo;
Ejemplos:
puertoa: in bit;
puertob: in bit_vector(0 to 7);
puertoc: out bit_vector(3 downto 0);
puertod: buffer bit;
puertoe:inout std_logic;

Modo de Puerto
in
Un puerto es de modo in si la informacin correspondiente al mismo, entra a la
entidad y se suele usar para relojes, entradas de control (como las tpicas load, reset y
enable), y para datos de entrada unidireccionales.
out
Un puerto es de modo out si la informacin fluye hacia fuera de la entidad.
Este modo no permite realimentacin ya que al declarar un puerto como out estamos
indicando al compilador que el estado lgico en el que se encuentra no es leble.

buffer
Este modo es similar al modo out, pero adems, permite la realimentacin y no es
bidireccional, y solo puede ser conectado directamente a una seal interna, o a un
puerto de modo buffer de otra entidad. Una aplicacin muy comn de este modo es
la de salida de un contador, ya que debemos saber la salida en el momento actual
para determinar la salida en el momento siguiente.
inout
Es usado para seales bidireccionales, es decir, si necesitamos que por el mismo
puerto fluya informacin tanto hacia dentro como hacia afuera de la entidad. Este
modo permite la realimentacin interna y puede reemplazar a cualquiera de los
modos anteriores, pudindose usar este modo para todos los puertos.

Tipos Nativos para VHDL


boolean
Puede tomar dos valores: verdadero/true o falso/false. Un ejemplo tpico es la salida de un
comparador que da verdadero si los nmeros comparados son iguales y falso si no lo son

bit
Puede tomar dos valores: 0 1 ( o tambin "low" o "high", segn se prefiera). Es el tipo
ms usado de los nativos
bit_vector
Es un vector de bits. Debemos tener cuidado al definir el peso de los bits que lo integran,
ya que segn pongamos la palabra reservada downto o to estaremos diciendo que el bit
ms significativo es el nmero ms alto o el ms bajo del vector, respectivamente..
numero : bit_vector (0 to 7);
numero : bit_vector (7 downto 0);
integer
Para mantenerr nmeros enteros. Hay que advertir que el uso de enteros consume
muchos recursos del dispositivo de lgica programable, siempre y cuando sea
sintetizable, debido a que est prcticamente creado para la simulacin.

Definir un modelo de comportamiento sintetizable (ARCHITECTURE)


Usando el juego de instrucciones soportado por las herramientas de sn

architecture archpro of programa is


-- Declaracin de seales y otros accesorios
Begin
-- Ncleo del programa
End archpro;

Para describir una arquitectura podremos usar cuatro estilos


Estilo
Estilo
Estilo
Estilo

behavioral
dataflow
structural
mixto

Estilo behavioral
entity compa is
port (
a,b: in bit_vector(3 downto 0);
igual: out bit
);
end compa;

architecture behavioral of compa is


begin
comp: process (a, b)
begin
if a= b then
igual<='1';
else
igual<='0';
end if;
end process comp;
end behavioral;

Estilo dataflow
architecture dataflow1 of compa is
begin
igual<='1' when (a=b) else '0';
end dataflow1;

architecture dataflow2 of compa is


begin
igual<= not(a(0) xor b(0))
and not(a(1) xor b(1))
and not(a(2) xor b(2))
and not(a(3) xor b(3));
end dataflow2;

Estilo structural
Estilo mixto
architecture struct of compa is
signal x: bit_vector(0 to 3);
Component xnor2
Port (e1,e2:in bit; y:out bit);
End component;
Component and4
Port (e1,e2,e3,e4:in bit; y:out bit);
End component;
begin
u0: xnor2 port map (a(0),b(0),x(0));
u1: xnor2 port map (a(1),b(1),x(1));
u2: xnor2 port map (a(2),b(2),x(2));
u3: xnor2 port map (a(3),b(3),x(3));
u4: and4 port map (x(0),x(1),x(2),x(3),igual);
end struct;

Estilo de Escritura RTL (Register Transfer Level)

Netlist Describe los componentes que posee y las conexione


entre ellos (Estilo Estructural)
RTL Describe el comportamiento de cada entidad

CONCEPTO DE TIPO DE DATO

Todos los objetos en VHDL son de un tipo dado.


Un tipo de dato se caracteriza por el conjunto de
valores que puede tomar y los operadores que
se le puede aplicar a un objeto.

TIPO

El tipo define un conjunto de valores y una asignacin a


esa seal debe ser un valor definido por ese conjunto.
Cuando hacemos una asignacin a una seal, los tipos
en ambos lados del operador de asignacin de seal
deben corresponder.

Declaracin de tipos de datos


Sintaxis general
type id is definicin_tipo;
Ejemplos
type DiaMes is range 1 to 31 ;
type Dela31 is range 1 to 31;
type Orientacion is (norte,sur,este,oeste);
Uso
constant DiasEnero : DiasMes :=31;
variable DiaHoy : DiaMes;
signal Direccin : Orientacion;

Los tipos deben corresponder

Cuando hacemos una asignacin a una seal,


los tipos en ambos lados del operador de
asignacin de seal deben corresponder.

Ejemplo:
Entity HALFADD is
port (A,B
: in bit;

SUM, CARRY : out bit);


end HALFADD;

Tipos predefinidos

Escalares
Enumerados
BOOLEAN,BIT,CHARACTER
Enteros
INTEGER
Fsicos
TIME
Flotantes
REAL
Compuestos
Arrays
STRING,BIT_VECTOR

Otros
Puntero
ACCESS
Archivos
FILE

TIPO BOOLEAN
Este tipo de dato puede tomar un valor
falso o verdadero

TRUE
FALSO

Cuando se comparan dos valores de tipo boolean


el resultado tambin es de tipo boolean.

TIPO BIT
El tipo BIT sirve para modelar niveles lgicos.
Conjunto de valores 0 y 1
Operaciones definidas sobre el:
Lgicas: not,and,nand,or,nor,xor y xnor
Comparacin: =, /=,<, <=, >, >=
Concatenacin: &
type bit is (0, 1)

TIPO CHARACTER

Se utiliza para definir un solo carcter.


A
b
x

TIPO INTEGER
Un tipo integer es un dato cuyo contenido es un
valor numerico entero que esta dentro del siguiente rango :
2,147,483,647 a +2,147,483,647.
Ejemplos
+1
682
-139
+239
TYPE Integer IS 0 TO 255;
TYPE index IS RANGE 7 DOWNTO 1;

TIPO TIME
El tipo TIME sirve para especificar valores de
tiempo en los modelos
Se define la unidad bsica y las derivadas de ellas.
type time is orange -2147483647 to 2147483647
units
fs;
ps = 1000 fs;
ns = 1000 ps;
us = 1000 ns;
min = 60 sec;
end units;

TIPO REAL

Conocidos tambin como coma flotante,


son los tipos que definen un numero
real. Al igual que los enteros se definen
mediante la palabra clave RANGE, con la
diferencia de que los lmites son nmeros
reales.

TIPO STRING
El tipo string se define como un arreglo
de cadenas de caracteres.
Ejemplos
error en sincronia
Hola Mundo

TIPO BIT_VECTOR

El tipo bit_vector es un arreglo de bit:


Permite modelar buses con un solo driver
Solo admite valores 0 y 1
"0101_1001"
x"00AF"
type bit_vector is array (natural range <>) of bit;

SUBTIPOS DE DATOS

VHDL permite la definicin de subtipos


que son restricciones o subconjuntos de
tipos existentes.
Hay dos tipos, el primero son subtipos
obtenidos a partir de la restriccin de un
tipo escalar a un rango.

Ejemplo:
SUBTYPE raro IS integer RANGE 4 TO 7;
SUBTYPE digitos IS character RANGE '0' TO
'9';
El segundo tipo de subtipos son aquellos que
restringen el rango de una matriz:
Ejemplo:
SUBTYPE id IS string(1 TO 20);
SUBTYPE word IS bit_vector(31 DOWNTO 0);

Tipos enumerated.

Un tipo de datos definido por


el usuario es conocido en
VHDL
como
un
tipo
enumerated. Lo ms comn
es definir los tipos dentro de
un paquete, arquitectura o
proceso, y la mayora de las
herramientas de sntesis son
capaces de sintetizar VHDL
que
contiene
tipos
enumerated.

Sntesis de tipo enumerated

La mayora de las herramientas de sntesis pueden construir lgica desde una seal
del tipo enumerated. Usualmente la seal tiene el nmero mnimo de bits requerido
para representar el nmero de valores posibles. Este ejemplo muestra cada como cada
valor es usualmente codificado en la implementacin del hardware.

type MY_SATE is
(RESET, IDLE, RW_CYCLE, INT_CYCLE);
Codificacin de derecha a izquierda en secuencia binaria
RESET
IDLE
RW
INT_CYCLE
Mnimo nmero de bits

00
01
10
11

TIPO PREDEFINIDO (enumerated)

Son especificados como cdigo fuente de VHDL, y se


encontran en un paquete llamado STANDARD:
Boolean
Time
Character
Bit
String
Bit_vector

Integer
real

STANDARD_LOGIC

El Estndar 1164 est


definido en cdigo fuente
VHDL puro y describe un
tipo de dato llamado
std_ulogic, el cual
define los nueve estados
posibles.

TIPO STD_ULOGIC

El tipo std_ulogic es un tipo de dato unresolved, y puede


tener un solo driver. De hecho, la u se refiere al hecho
de que es de tipo unresolved.

TIPO STD_LOGIC

Hay otro tipo definido, llamado std_logic.


el cual es una versin tipo resolved de std_ulogic y
puede tener mas de un driver.
El tipo std_logic tiene los mismos nueve estados de
std_ulogic.

VECTORES TIPO STD_LOGIC Y STD_ULOGIC

El paquete tambin contiene la definicin de los arreglos


de std_logic y std_ulogic, conocidos como
std_logic_vector y std_ulogic_vector. estos tipos tienden
a ser usados para describir estructuras de bus en la
forma como el tipo bit_vector.
Los tipos std_logic y std_logic_vector, son los
recomendados para usar en los diseos.
La razn para esto es que hay otros estandares para
usar VHDL que estn basados en estos tipos en lugar
de std_ulogic y std_ulogic_vector.

Asignar std_logic a std_ulogic.

Como se muestra en el diagrama es posible asignar objetos


de tipo std_logic a objetos del tipo std_ulogic, y viceversa.

signal A,B,Z: std_ulogic;


signal RES_Z: std_logic
Z<=A;
RES_Z<=A;
A<=RES_Z;

std_logic para drivers mltiples

Si hay mltiples drivers en una seal se debe usar el tipo std_logic, ya


que no es valido tener mas de un driver en un tipo de dato unresolved.

signal A,B,Z: std_ulogic;


signal RES_Z: std_logic;
Z o RES_Z ?

Z<= A;
Z<= B;

RES_Z<= A;
RES_Z<= B;

Clusulas library y use

El paquete de definiciones est contenido en una biblioteca llamada IEEE.


Es necesario hacer referencia tanto a la biblioteca como al paquete, como
es mostrada en el diagrama. Se deben usar estas lneas de cdigo antes
de describir las entidades que usan en el Standard Logic.

library IEEE;
use IEEE.Std.Logic_1164.all;
entity MVLS is
port (A,B: in std_ulogic;
Z: out std_ulogic);
end MVLS;

--hace visible la biblioteca


--hace todo el contenido del paquete visible

OPERADORES LOGICOS

Tienen la misma precedencia, y se ejecutan de


izquierda a derecha en la sentencia.

OPERADORES RELACIONALES

Los operadores deben ser del mismo tipo, pero el


nmero de bits comparados puede ser diferentes.

OPERADORES ARITMETICOS
Operan

sobre objetos de
tipo INTEGER.

Pueden

igualmente
operar sobre
STD_LOGIC_VECTOR
utilizando los paquetes
STD_LOGIC_UNSIGNED
y STD_LOGIC_ARITH.

OPERADORES DE DESPLAZAMIENTO
rol
ror
sll
srl
sla
sra

( rotate left )
( rotate right )
( shift left logical )
( shift rigth logical )
( shift left arithmetic )
( shift right arithmetic )

Operan sobre objetos de tipo:


bit_vector
std_logic_vector, std_ulogic_vector

INSTRUCCIONES
SECUENCIALES Y
CONCURRENTES

Sentencias secuenciales y concurrentes

Sentencias concurrentes. Se ejecutan al mismo tiempo.


En paralelo.

Sentencias secuenciales. Se ejecutan una a la vez.


En secuencia.

Instrucciones concurrentes

Las operaciones se efectan al mismo tiempo (en


paralelo) :
El orden de escritura de las instrucciones no afecta el
resultado de la sntesis o simulacin.
El estilo de escritura es comparable a los lenguajes de
programacin de los PALs (ecuaciones lgicas).

Ejemplo
Entity CONCURRENT is
port(A, B, C : in bit;
S, T : out bit); end CONCURRENT;
Architecture ARCHI of CONCURRENT is
begin
S <= (A and B) and not(C);
T <= B xor C;
end ARCHI;

Ejecucin en paralelo orden independiente

El comportamiento de sentencias concurrentes es


independiente del orden en el cual sean escritas.

X <= A + B;
Z <= C + X;
Z <= C + X;
X <= A + B;

Asignacin concurrente
Los diseos esquemticos son usados para representar
hardware, por lo que son concurrentes por naturaleza.

X <= A + B;
Z <= C + X;
Z <= C + X;
X <= A + B;
A
B
C

Asignacin Concurrente

Consideremos la sentencia x <= x + y.


X <= x + y;

En Software;
Registro X

Registro X

No para Hardware
Siendo una sentencia concurrente, esta misma lnea de
cdigo est describiendo un sumador, sin registros de
almacenamiento implcitos.

X <= x + y;

En Hardware;
x y

+
x

Instrucciones secuenciales
Las operaciones se efectan en secuencia.
El orden afecta los resultados de simulacin y sintsis.
Estilo de escritura parecido a los lenguajes de
informtica de alto nivel.
Las instrucciones secuenciales se usan en partes
especficas del cdigo: PROCESO o subprogramas.

Ejemplo
Architecture ARCHI of SECUENCIA is
begin
process begin
wait until CKevent and CK = 1;
if ENA = 1 then COUNT <= COUNT+1;
end if;
end process;
end ARCHI;

Utilizacin del Clock_Enable


Dedicado de los Flip Flops Xilinx

Instrucciones concurrentes
Asignacin de seales por condicin: WHENELSE
Sintaxis:
Signal_x <= valor_x when signal_y = valor_y
else valor_z;
Notar que el valor_z es indicado directamente despus
de else. (El smbolo de asignacin <= es implcito)

Ejemplo
entity CONCURRENT is
port (A, B, C : in bit; S, T : out bit);
end CONCURRENT;
architecture ARCHI of CONCURRENT is
begin
S <= A when C = 1 else B;
T <= B xor C;
end ARCHI;

Ejemplo
entity CONCURRENT is
port (A, B, C : in bit; S, T : out bit);
end CONCURRENT;
architecture ARCHI of CONCURRENT is
Begin
if (c = 1) then S <= A
else S <= B;
T <= B xor C;
end ARCHI;

Ejemplo
Entity CONCURRENT is
port (A, B, C : in bit; S, T : out bit);
end CONCURRENT;
architecture ARCHI of CONCURRENT is
begin
S <= A when C = 1 else B;
T <= not B;
end ARCHI;

Las
dos
instrucciones
(o
asignaciones)
son
concurrentes. El orden de escritura no afecta los
resultados.
Estas instrucciones generan:

A
B
C

Ejemplo
Entity TRISTATE is
port (A, B, C, : in std_logic; S : out std_logic );
end TRISTATE
Architecture ARCHI of TRISTATE is
begin
S <= A when C = 0 else Z;
S <= B when C = 1 else Z;
end ARCHI;

C
A

Entity is
port (A, B : in std_logic_vector(15 downto 0);
C : in std_logic;
S : out std_logic_vector(15 downto o));
end TRISTATE;
Architecture ARCHI of TRISTATE is
begin
S<=A when C=0 else ZZZZZZZZZZZZZZZZ;
S<=B when C=1 else ZZZZZZZZZZZZZZZZ;
End ARCHI;

B[ 15:0]

A[ 15:0]

S[ 15:0]

Asignacin de seales por seleccin.


with - select

Ejemplo:

with signal_x select


signal_y <= valor_y1 when 00,
valor_y2 when 01,
valor_y3 when 10,
valor_y4 when others;

Ejemplo 2:

architecture archi of muxAndNot is


begin
with SEL select
S <= A when 00,
B when 01,
C when 10,
D when others;
T <= not B,
end archi

A
B
C
D
SEL[1:0
]

S
B

Ciclos con:
for - in to - generate

Sintaxis:

LABEL: for i in enteroA to enteroB generate


--Instrucciones concurrentes
end generate;

i No necesita declararse previamente y no puede


modificarse su valor dentro del ciclo.
enteroA y enteroB definen el nmero de iteraciones.
LABEL es de uso obligatorio.
generate puede ajustarse empleando range.

Decodificador.
Hexadecimal 7 Segmentos.

Tabla de verdad:
A

a
f
g
e

c
d

Decodificador BCD 7 Segmentos


with BCDIN select
display <= 0000000 when x 0,
0000000 when x 1,
0000000 when x 2,
0000000 when x 3,
0000000 when x 4,
0000000 when x 5,
0000000 when x 6,
0000000 when x 7,
0000000 when x 8,
0000000 when x 9,
0000000 when x a,
0000000 when x b,
0000000 when x c,
0000000 when x d,
0000000 when x e,
0000000 when x f ,
0000000 when others;

CONFIGURACION

La configuracin es como
una lista de partes,
especificando cual
arquitectura debe ser
usada para cada entidad
del diseo.
Permitir una
configuracin por default
permite que el cdigo sea
ms portable.

CONFIGURACION

Es el enlace entre cada


nivel de la jerarqua, y la
especificacin de cual
arquitectura es la que
debe ser usada

COMPILACION

Despus de que se ha
escrito el cdigo de VHDL en
un archivo de texto, el
cdigo es analizado para
determinar si tiene errores
de sintaxis, y se crea un
archivo binario.
Este proceso es realizado
por unas de las herramientas
para compilacin y por otras
herramientas para anlisis.

MAPEO DE BIBLIOTECAS

Las herramientas de
simulacin y sntesis de
VHDL acceden a un archivo
que tiene un mapa de los
nombres de las bibliotecas
de VHDL con los directorios
fsicos en la computadora.

VHDL tambin permite


definir una biblioteca
llamada WORK como la
biblioteca en la cual las
unidades de diseo son
compiladas sino se
especifica una biblioteca

Como se ejecuta
una simulacin

Mecanismo
de
Cola
En un momento dado dentro de una simulacin se generan 2
colas:
Cola de seales a actualizar
Cola de procesos a ejecutar

Actualizacin de la
seal

Ejecucin del proceso

Proceso puesto en la cola

Cuando una seal es actualizada en un punto especfico


del tiempo de simulacin, todos los procesos que son
sensitivos a esa seal son puestos en una cola de
procesos en ejecucin.
Instruccin:

M <= B;
Proceso puesto
en la cola

B actualizada

Actualizacin de la
seal

Ejecucin del proceso

Una cola de seales actualizadas


Las seales que son asignadas en cada
proceso no son actualizadas
inmediatamente despus de que el proceso
se suspende, son puestas en una cola de
seales actualizadas.
Las seales son actualizadas cuando
todos los procesos han sido ejecutados.

CicloComoDelta
resultado de la actualizacin de las seales, otros procesos

pueden ser ejecutados en la cola de procesos en ejecucin.

Un ciclo que cubre esta secuencia es conocido como un ciclo Delta.

Ejemplo: process(A,B,M)
Begin
Y <= A;
M <=B;
Z <=M;
end process Ejemplo;
Actualizacin de
la seal

Ejecucin del
proceso

Ejecucin sobre el
tiempo

Mltiples deltas en cada punto de


tiempo de simulacin
Varios

ciclos delta en una simulacin


En cada punto del tiempo de simulacin se
ejecuta el ciclo delta, hasta que no haya mas
asignaciones o procesos en ejecucin
Avanza a la siguiente actividad

Actualizacin
de la seal

Ejecucin
del proceso

Actualizacin
de la seal

Ejecucin
del proceso

Tiempo de simulacin

La clusula after
La

asignacin de una seal es colocada en


una cola de seales actualizadas en un
tiempo en el futuro, en lugar del tiempo actual

Z <= A after 5ns;

Z puesta en esta cola

5 ns
Tiempo de simulacin

La clusula wait for


Z <= A;

Z puesta en esta cola

wait for 5 ns;

5 ns
Tiempo de simulacin

S-ar putea să vă placă și