Está en la página 1de 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

VHDL como lenguaje de alto nivel permite:


1. El modelado de ensambles electrnicos complejos.
2. La simulacin de los modelos de componentes.
3. La sntesis lgica.
4. 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. LAYOUT: Especifica informacin acerca de


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

CONCURRENTES SECUENCIALES
ocurren en paralelo 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
if SEL = '1' then
Z <= A; Sentencias
else secuenciales
Z <= B;
end if;

end process MUX;


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
if SEL = '1' then
Z <= A;
else
Z <= B;
end if;
end process MUX;
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

architecture A of E is
begin
-- Sentencias Concurrentes
P1: process
begin
-- Sentencias Secuenciales Proceso 1
end process P1;
-- Sentencias Concurrentes
P2: process
begin
-- Sentencias Secuenciales Proceso 2
end process P2;
-- Sentencias Concurrentes
end A;
Ejecucin de procesos

Concurrente: 2 drivers
Cuando estas 2 seales son concurrentes, definen 2
drivers sobre la seal Z.

architecture CONCURRENT of MULTIPLE is


A
signal Z,A,B,C,D: std_logic; B
begin ? Z
Z <= A & B; C
Z <= C & D; D
end CONCURRENT;
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.

architecture SEQUENTIAL of MULTIPLE is


signal Z,A,B,C,D: std_ulogic;
begin
process (A,B,C,D)
C
begin D Z
Z <= A & B;
Z <= C & D;
end process;
end SEQUENTIAL ;
Seal actualizada cuando el proceso se suspende

Las seales asignadas dentro de un proceso son


actualizadas hasta cuando el proceso termina y
queda suspendido.

architecture SEQUENTIAL of MULTIPLE is


signal Z,A,B,C,D: std_ulogic;
begin
process (A,B,C,D)
begin
Z <= A & B;
Z <= C & D;
end process;
end SEQUENTIAL ;
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)


SEL
begin
if SEL = '1' then
A
Z <= A;
else
Z <= B; B
end if;
Z
end process MUX;
Lista de Sensitividad

Falta SEL
SEL
MUX: process (A , B)
begin A
if SEL = '1' then
Z <= A;
B
else
Z <= B;
Z
end if;

end process MUX;


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:

Entity SIG is
port ( A, B, C, CK : in std_logic; S, T: out std_logic );
End SIG;
Architecture ARCHI of SIG is signal TMP : std_logic;
begin
process
begin
wait until CKevent and CK = 1 ;
TMP <= A or B; -- Esta lnea ser ignorada
S <= TMP;
TMP <= A and C; -- anula la asignacin precedente
T <= TMP; -- sobre la seal TMP
end process;
End ARCHI;
Ejemplo utilizando una variable:

Entity VAR is
port ( A, B, C, CK : in std_logic; S, T: out std_logic );
End VAR;
Architecture ARCHI of VAR is
begin
process
variable TMP : std_logic;
begin
wait until CKevent and CK = 1 ;
TMP := A or B;
S <= TMP;
TMP := A and C;
T <= TMP;
end process;
End ARCHI;
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 secuenciales
sentencias en la elsif CONDITION then
estructura if-elsif es muy -- sentencias secuenciales
importante. Ms de una
elsif CONDITION then
condicin puede ser
-- sentencias secuenciales
verdadera, y es la
primera condicin else
verdadera la que provoca -- sentencias secuenciales
que se ejecuten el grupo end if;
de sentencias que le
siguen
Ejemplo de IF-ELSIF

process (A,B,C,X)
Si X tiene el valor 0000, la
begin
condicin X=0000 es
If (X=0000) then
probada primero, entonces a
Z<=A;
Z se le asigna el valor de A.
elsif (X<=0101) then
Z<=B;
else
Z<=C;
end if;
end process;
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;
If SEL = 00 then MUX <=A;
else if SEL = 01 then MUX <= B;
elsIf SEL = 01 then MUX <=B;
else if SEL = 10 then MUX <=C;
elsif SEL = 10 then MUX <=C;
else MUX <=D;
end if; else MUX<=D;
end if; end if;
end if; end process;
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 Proceso Proceso
encuentran
ejecutndose
secuencialmente.
____
___
____
__
___
____

Proceso
Concurrentes vs. Secuencial

architecture A of E is
Este modelo puede tener begin
cualquier numero de -- concurrent statements
procesos. P1: process
begin
-- sequential statements
El proceso es visto como end process P1;
una sola sentencia -- concurrent statements
concurrente. P2: process
begin
-- sequential statements
Se puede tener n nmero end process P2;
de sentencias -- concurrent statments
concurrentes y por lo end A;
tanto cualquier nmero
de procesos.
Asignacin de seales en un proceso
Procesos concurrentes: mltiples drivers.

Architecture CONCURRENT of MULTIPLE is Tenemos dos


signal A, B, C ,D : std_ulogic; asignaciones a la seal
signal Z : std_logic;
Begin
Z, realizadas fuera de un
Z <= A and B; proceso. Las sentencias
Z <= C and D; fuera de un proceso son
End CONCURRENT; concurrentes y por lo
A tanto Z tiene dos drivers
B
? Z
C
D
Dentro de un proceso: un solo driver.

architecture SEQUENTIAL of
MULTIPLE is
Dentro de este ejemplo signal Z, A, B, C, D : std_ulogic;
similar, las dos begin
asignaciones a Z se process(A, B, C, D)
begin
encuentran dentro de Z <= A and B;
un proceso. (Un Z <= C and D;
proceso puede definir end process;
nicamente un driver en end SEQUENTIAL;
una seal)
C
Z
D
ltima asignacin

architecture SEQUENTIAL of MULTIPLE


El lenguaje define que is
en un proceso, la ltima signal Z, A, B, D : std_ulogic;
asignacin hecha a una begin}
process (A, B, C, D) Tiene efecto
seal tiene efecto, pero begin
nicamente cuando el Z <= A and B;
proceso se suspende Z <= C and D;
end process; cuando se suspende
(final del proceso)
end SEQUENTIAL;
Diferente significado

process (A, B, C, D)
Estas mismas dos
begin sentencias tienen
Z <= A and B;
Z <= C and D;
significado muy distinto,
end process; dependiendo si se
ejecutan dentro o fuera
= de un proceso.

Architecture X of MULTIPLE is

begin
Z <= A and B;
Z <= C and D;
end X;
Llamadas a mltiples procesos?

Un proceso puede ser potencialmente ejecutado varias


veces antes de que todas las seales sean actualizadas.
Ejemplo Proceso llamado

SEALES ASIGNADAS EJEMPLO: process (A, B, M) Evento en B


begin
DESPUES DE UNA A: 0
LECTURA. Y <= A; B:1
M:0
Tenemos un proceso con M <= B;
Z:0
Z <= M;
asignacin a la seal M,
y el valor de M es end process EJEMPLO;
tambin ledo en el
proceso
B cambia de 0 a 1.
Actualizacin de valores

La asignacin no
es inmediata!
Ejemplo: process(A,B,M)
begin
Y <= A;
M <=B;
Z <=M; En este punto Z
sigue teniendo
end process Ejemplo; valor 0!
Actualizacin de valores

Z no ha sido actualizada!

A
B
T1process: Tiempo que
M tarda en ejecutarse el
Z 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
Segunda ejecucin del proceso lnea Z no es
afectada!
Ejemplo: process(A,B,M)
Begin A
Y <= A; B
M <=B; M
Z <=M; Z
end process Ejemplo;

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
Instanciacin de los
uso del fabricante.
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 Con las herramientas de


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

User Control File (.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 Las herramientas de


sntesis tienen la
Sntesis habilidad de inferir
automticamente celdas
de entrada/salida tanto
EN salidas de 3 estados
EN como bidireccionales.
OUT Z
IN
OUT
Z
Estilo de cdigo para inferir 3 estados.

if (EN = 0) then
OUT_PAD <= BUS_OUT;
El uso de la asignacin
else de Z es la que permite a
OUT_PAD <= Z; la herramienta de sntesis
end if;
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 Sentencia
BIDI <= CORE_OUT; concurrente
else
BIDI <= Z;
end if;
end process;

Sntesis Uso de la asignacin


al valor Z

EN
CORE_OUT BIDI

CORE_IN
Entrada/Salida con registro

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

CLK
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 3-
estado.
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; Smbolo Ejemplo
Mux_OR:out bit );
end Ejemplo; A[7:0]
B[7:0] MUX_OR
Equivalencia
Sel
Esquemtica
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 1 2 3 4
signal Z_BUS: bit_vector (3 downto 0) Signal
signal C_BUS: bit_vector (1 to 4) C_BUS

Declaraciones ilegales
signal Z_BUS: bit_vector (0 downto 3) 3 2 1 0
Signal
signal C_BUS: bit_vector (3 to 0)
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)
SIG_A 1 1 1 0 0 0 1 1

B11111010 B1111_1010 Designacin Base


B Binaria
XFA B11111010
O Octal
O372 B011111010
X 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 Z_BUS: bit_vector(3 downto 0); 1 2 3 4
signal C_BUS: bit_vector(1 to 4); Signal

Z_BUS <= C_BUS; C_BUS

Z_BUS(3) <= C_BUS(1);


Z_BUS(2) <= C_BUS(2); 3 2 1 0
Z_BUS(1) <= C_BUS(3); Signal
Z_BUS(0) <= C_BUS(4);
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 Z_BUS: bit_vector(3 downto 0);
signal C_BUS: bit_vector(1 to 4);
Los slices de vectores de bit son tiles
legal debido a que a menudo pueden ser
Z_BUS (3 downto 0) <=00 vistos como colecciones de campos,
C_BUS:(2 to 4) <= Z_BUS (3 downto 1); donde cada campo lleva una pieza de
informacin.
Por ejemplo un vector de bit que
ilegal represente la instruccin de una
Z_BUS (0 to 1) <=111 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 Z_BUS: bit_vector(3 downto 0);
signal A,B,C,D: bit;
signal BYTE: bit_vector(7 downto 0);
signal A_BUS: bit_vector(3 downto 0);
signal B_BUS: bit_vector(3 downto 0);

Z_BUS<= A & B & C & D


BYTE<=A_BUS & B_BUS
Agregados.

signal Z_BUS: bit_vector(3 downto 0);


Otro mtodo de signal A,B,C,D: bit;
asignacin a
elementos de un Z_BUS<=(A, B, C, D);
arreglo es conocido
como agregado.
Un agregado esta Z_BUS(3)<=A;
Z_BUS(2)<=B;
contenido entre Z_BUS(1)<=C;
parntesis y las Z_BUS(0)<=D;
asignaciones a cada
elemento son
separadas por
comas.
Especificando los elementos por nombre.

Es posible asignar a los signal X: bit_vector(3 downto 0);


elementos de un arreglo signal A,B,C,D: bit;
signal BYTE:bit_vector(7 downto 0)
por nombre o por
posicin.
X<= (3=>1, 1 downto 0 =>1, 2=>B)
Este ejemplo demuestra
que tambin un rango
del arreglo puede ser nombre rango nombre
asignado, siempre y
cuando el mismo valor
sea asignado a cada
elemento del rango.
Others, soporte para sntesis.

Los agregados tienen la


habilidad de usar la signal Z_BUS: bit_vector (3 downto 0);
sentencia others, la cual signal A,B,C,D: bit;
signal BYTE:bit_vector(7 downto 0);
asignar un valor a todos los
otros elementos de un X<= (3=>1, 1 =>0, others=>B)
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.
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


0 1 X

Dont care Un-initialised High impedance


- U Z
Compuerta inversora NMOS Esttica

VDD
0 1

?
c Output
c
1
input

0
Compuerta inversora NMOS Esttica

VDD VDD

RONP
U

Output=Vdd ROFFP H
=H
Input=L ROFFPD + RONP
ROFFPD U

VDD
RONP
U
Output=Vdd RONP L
D =L
Input=H RONPD + RONP
RONP U
D
Compuerta inversora NMOS Esttica

0 1

1 VDD

c Output
c
input
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 Retorna el tiempo transcurrido
desde la transicin previa de la
seal S.
SLAST_VALUE Retorna el valor previo de S
antes del ltimo evento.
SLAST_ACTIVE Retorna el tiempo transcurrido
desde la transaccin 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 {,....} : tipo [is direccin nombre ;]


file id {,....} : tipo [ [ open tipo_acceso] is nombre;]

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 sntesis

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 behavioral
Estilo dataflow
Estilo structural
Estilo mixto
Estilo behavioral Estilo dataflow

entity compa is architecture dataflow1 of compa is


port ( begin
a,b: in bit_vector(3 downto 0); igual<='1' when (a=b) else '0';
igual: out bit end dataflow1;
);
end compa;

architecture dataflow2 of compa is


architecture behavioral of compa is begin
begin igual<= not(a(0) xor b(0))
comp: process (a, b) and not(a(1) xor b(1))
begin and not(a(2) xor b(2))
if a= b then and not(a(3) xor b(3));
igual<='1'; end dataflow2;
else
igual<='0';
end if;
end process comp;
end behavioral;
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 conexiones


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 00
IDLE 01
RW 10
INT_CYCLE 11
Mnimo nmero de bits
TIPO PREDEFINIDO (enumerated)

Son especificados como cdigo fuente de VHDL, y se


encontran en un paquete llamado STANDARD:
Boolean
Time
Bit Character
Bit_vector String
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.

s
i
g
n
a
l
A
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; RES_Z<= A;
Z<= B; 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; --hace visible la biblioteca
use IEEE.Std.Logic_1164.all; --hace todo el contenido del paquete visible

entity MVLS is
port (A,B: in std_ulogic;
Z: out std_ulogic);
end MVLS;
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 ( rotate left )


ror ( rotate right )
sll ( shift left logical )
srl ( shift rigth logical )
sla ( shift left arithmetic )
sra ( 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 + Z
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
S B T
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;
B S

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]
S[ 15:0]

A[ 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 S
C
D B T
SEL[1:0
]
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 B C D a b c d e f g
0 0 0 0 0 1 1 1 1 1 1 0
1 0 0 0 1 0 1 1 0 0 0 0
a
2 0 0 1 0 1 1 0 1 1 0 1
3 0 0 1 1 1 1 1 1 0 0 1
4 0 1 0 0 0 1 1 0 0 1 1
f b
5 0 1 0 1 1 0 1 1 0 1 1
g
6 0 1 1 0 1 0 1 1 1 1 1
7 0 1 1 1 1 1 1 0 0 0 0
8 1 0 0 0 1 1 1 1 1 1 1
e c
9 1 0 0 1 1 1 1 1 0 1 1
A 1 0 1 0 1 1 1 0 1 1 1
d
B 1 0 1 1 0 0 1 1 1 1 1
C 1 1 0 0 1 0 0 1 1 1 0
D 1 1 0 1 0 1 1 1 1 0 1
E 1 1 1 0 1 0 0 1 1 1 1
F 1 1 1 1 1 0 0 0 1 1 1
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
Ejecucin del proceso
seal
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
Ejecucin del proceso
seal
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 Ejecucin del


la seal 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 Ejecucin Actualizacin Ejecucin


de la seal del proceso de la seal 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

También podría gustarte