SlideShare una empresa de Scribd logo
1 de 210
VHDL
INTRODUCCION
 Se estudiará como VHDL es usado en
proyectos de diseño.
 Se analizarán las aplicaciones de VHDL y
los diferentes estilos para usar el lenguaje.
 Se aprenderán sus elementos básicos, sus
ventajas y sus desventajas.
 Se discutirán los principales conceptos del
lenguaje y los principales constructos.
DEFINICION
 VHDL es un doble acrónimo:
 Very High Speed Integrated Circuit.
 Hardware Description Languaje.
 Fue desarrollado a principios de los 80´s para el
departamento. de los EEUU, como una
implementación, realizada por computadora para
describir sistemas electrónicos.
 En 1987 es Estandarizado por la IEEE (Std
1076)
 1993: Una nueva versión fue definida.
 Para los constructos comúnmente usados hay pocas
diferencias entre las dos versiones.
VHDL permite
 VHDL como lenguaje de alto nivel permite:
1. El modelado de ensambles electrónicos complejos.
2. La simulación de los modelos de componentes.
3. La síntesis lógica.
4. La portabilidad entre herramientas de síntesis y
entre arquitecturas.
VHDL permite
 Definir los “ports” de entrada y salida del conjunto
lógico descripto (entity).
 Definir una arquitectura usando el juego de
instrucciones soportado por las herramientas de
síntesis (escritura RTL).
 Unir los diferentes módulos descritos separadamente
(VHDL estructural)
EL PROCESO DE DISEÑO ELECTRONICO
LIMITACIONES
 VHDL es principalmente un
lenguaje para diseño digital.
Actualmente tiene capacidades
muy limitadas en el área
analógica, pero existen
trabajos para crear una versión
analógica del lenguaje.
 El estándar 1076 define un
estándar y su sintaxis, sin
describir ningun “estilo” para
usarlo en un diseño. Hay otros
estándares que usan, o que
requieren definir un “estilo”
antes de usar el lenguaje en
ciertas áreas.
VENTAJAS
 Notación formal: permite su uso en cualquier circuito
electrónico.
 Disponibilidad pública: no esta sometido a una patente o
fábrica.
 Independencia Tecnológica: soporta varias tecnologías
de diseño y distintas funcionalidades.
 Capacidad descriptiva: Permite el diseño en varios
niveles de abstracción
 Reutilización de Código: Sin importar la tecnología
(CMOS, Bipolar, etc.) o la implementación (FPGA, PLD,
etc.)
SOPORTE PARA
LENGUAJE DE SINTESIS
 Solo es posible
sintetizar lógicamente
desde un subgrupo del
lenguaje de VHDL.
Cada compañia tiene
su herramienta que
tienen su propio
subgrupo ligeramente
distinto de los demás.
SINTAXIS
 Los archivos VHDL llevan la extensión “----.VHD
 Minúsculas y mayúsculas 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
código.
 Ellos no afectan en nada los resultados de síntesis ni de simulación.
EJEMPLO:
- - este es un comentario
archtecture ARCHI of EJEMPLO is -- este también
begin
Los archivos VHDL llevan la extensión “----.VHD”
SINTAXIS
 Separadores: los separadores utilizados son:
 “ ; ” (Punto y coma, entre dos declaraciones o al fin de
una instrucción).
 “ , “ (coma, entre dos nombres de señal dentro de una
misma declaración).
 “ : “ (dos puntos, dentro de una declaración entre el
nombre de un objeto y su tipo).
 “ “ (espacio).
 El número de espacios entre dos palabras es indiferente,
siempre que el mínimo sea respetado.
 Retorno carro: Una misma instrucción o declaración puede
ser escrita en varias líneas consecutivas.
 Los comentarios pueden ser insertados al final de las
líneas sin afectar la integridad del código.
 A_IN, B_IN : in bit; - -puede también escribirse :
 -- A_IN,
 --B_IN : in bit;
CONCEPTOS
SINTESIS
 Proceso de transformar instrucciones lógicas de
software en circuitos hardware que desarrollen estas
instrucciones.
ABSTRACCION
 Cada abstracción define los detalles del diseño
especificados en una descripción particular de el.
 Los diferentes estilos de escribir código VHDL
tienen que ver con la abstracción.
NIVELES DE ABSTRACCION
1. LAYOUT: Especifica información acerca de
la verdadera implementación del diseño en
silicio.
2. LOGICO: se interconectan compuertas
lógicas y registros.
3. RTL: (transferencia de registros):se define
cada registro en el diseño, y la lógica entre
ellos.
4. COMPORTAMIENTO: describe la función
del diseño, sin especificar la arquitectura de
los registros.
SENTENCIAS
 CONCURRENTES
ocurren en paralelo
 SECUENCIALES
se ejecutan una después
de la otra.
FUNCION
 Es una rutina que hace una tarea particular.
 Cuando el programa pasa el control a una función.
 Ésta realiza la tarea y devuelve el control a la instrucción
siguiente a la que llamo.
 Ejecutan esta tarea utilizando valores específicos, denominados
argumentos, en un orden determinado.
 Los argumentos pueden ser números, texto, valores lógicos
como VERDADERO o FALSO, matrices, valores de error (con
#N/A ) o referencias de celda.
 El argumento que se designe deberá generar un valor válido
para el mismo. Los argumentos pueden ser también constantes,
fórmulas u otras funciones.
PRODECIMIENTO
 Su interés radica en las acciones que se realizan
durante su invocación.
 Siempre se invocan de forma aislada.
 Ejemplo:
println(...)
Éste siempre se invoca en forma aislada.
Las acciones que realiza la invocación de println
consisten en desplegar en pantalla el argumento que
recibe. Es ilegal escribir asignaciones como:
x= println( ... ); porque println no retorna ningún valor.
DIFERENCIA ENTRE PROCEDIMIENTO Y FUNCION
 La diferencia entre un procedimiento y una función es
que la función regresa al termino de la ejecución un
valor específico
PROCESO
 El proceso es una parte del código VHDL dentro del
cual las sentencias se ejecutan en secuencia. Un
proceso existe dentro de una arquitectura, y múltiples
procesos interactúan unos con otros de manera
concurrente.
 Hay procesos:
 combinatorios
 sÍncronos
PROCESO
 Un proceso es una parte de código 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 simulación y síntesis.
Sintaxis del Proceso
Mux: process (A,B,SEL)
begin
if SEL = '1' then
Z <= A;
else
Z <= B;
end if;
end process MUX;
Sentencias
secuenciales
Etiqueta Lista de sensitividad
Eventos en la lista de sensibilidad
 Un proceso no se ejecuta continuamente, el proceso
empieza a ejecutarse cuando una de las señales 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;
Múltiples procesos concurrentes
 Mientras que cada proceso ejecuta sus sentencias
en secuencia, múltiples procesos interactúan con los
demás de manera concurrente al producirse un
evento en las señales de la lista de sensibilidad.
Proceso Proceso
Proceso
Múltiples procesos en una arquitectura
architecture A of E is
begin
-- Sentencias Concurrentes
P1: process
begin
-- Sentencias Secuenciales
end process P1;
-- Sentencias Concurrentes
P2: process
begin
-- Sentencias Secuenciales
end process P2;
-- Sentencias Concurrentes
end A;
Proceso 1
Proceso 2
Ejecución de procesos
 Cuando estas 2 señales son concurrentes, definen 2
drivers sobre la señal Z.
Concurrente: 2 drivers
architecture CONCURRENT of MULTIPLE is
signal Z,A,B,C,D: std_logic;
begin
Z <= A & B;
Z <= C & D;
end CONCURRENT;
?
A
B
C
D
Z
Ejecución de procesos
 Cuando estas 2 señales son secuenciales, el valor con
el cual la señal es actualizada es el último valor que se
le asigna durante el proceso de ejecución.
Secuencial: 1 driver, última asignación
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 ;
C
D Z
Señal actualizada cuando el proceso se suspende
 Las señales 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 ;
Noción de process
 Un process es una parte de código 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 simulación y síntesis.
Implementación de Procesos
 Lógica combinatoria.
 Lógica sincrónica.
 Lógica sincrónica con inicialización asincrónica.
Procesos dormidos, se les llama así a los procesos mientras
las señales 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 asignación de señales
asignadas en el proceso.
Metodología de Procesos.
 Lista de sensibilidad consistente.
 Dominación de comportamiento e implementación de
la lógica.
 Diseños sintetizados, sin asincronismos.
Proceso Combinatorio
[ etiqueta: ] process ( lista de sensibilidad )
-- declaraciones
Begin
-- instrucciones secuenciales
-- (if, case, loop)
End process [ etiqueta];
• Lista de sensibilidad con señales 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 Síncrono
[ 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 evalúa la condición.
Ejemplo síncrono.
Process
Begin
wait until ( CK’ event and CK=‘1’ );
COUNT <= COUNT + 1;
End process;
• COUNT es construida por flip flops
• No debe haber señales combinatorias.
Proceso Síncrono
[ etiqueta: ] process ( CK )
-- declaraciones
Begin
if (CK’ event and CK=‘1’)
then --instrucciones secuenciales.
end if;
End process [etiqueta];
[ etiqueta: ] process ( CK , RST)
-- declaraciones
Begin
if RST=‘1’
then --acción asíncrona
elseif (CK’ event and CK=‘1’)
then --instrucciones secuenciales.
end if;
End process [etiqueta];
Proceso Síncrono con Inicialización Asíncrona
Cambio de prioridad por condición asíncrona
Ejemplo Síncrono
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 señales 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
if SEL = '1' then
Z <= A;
else
Z <= B;
end if;
end process MUX;
SEL
A
B
Z
Lista de Sensitividad
MUX: process (A , B)
begin
if SEL = '1' then
Z <= A;
else
Z <= B;
end if;
end process MUX;
Falta SEL
SEL
A
B
Z
Variables y Señales:
•Las Señales:
•Objetos que pueden ser declarados en el interior de
una entidad (ports) o de una arquitectura (señales
internas).
•La asignación de un valor a una señal se hace con un
retardo (infinitesimal).
•Variables
•Son objetos que pueden ser declarados dentro de un
process (u otras entidades secuenciales).
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 CK’event and CK = ‘1’ ;
TMP <= A or B; -- Esta línea será ignorada
S <= TMP;
TMP <= A and C; -- anula la asignación precedente
T <= TMP; -- sobre la señal TMP
end process;
End ARCHI;
Ejemplo sobre las señales:
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 CK’event and CK = ‘1’ ;
TMP := A or B;
S <= TMP;
TMP := A and C;
T <= TMP;
end process;
End ARCHI;
Ejemplo utilizando una variable:
Instrucciones secuénciales: frecuentemente utilizadas.
•-IF…THEN… ; [ELSIF… THEN…];[ELSE…]; END IF;
•Similar a la asignación de señales por selección.
•-CASE … END CASE;
•Similar a la asignación de señales por selección.
•-FOR … LOOP END LOOP;
•Similar a la instrucción 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
•El orden de las
sentencias en la
estructura if-elsif es muy
importante. Más de una
condición puede ser
verdadera, y es la
primera condición
verdadera la que provoca
que se ejecuten el grupo
de sentencias que le
siguen
if CONDITION then
-- 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
condición 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 contracción ELSIF permite simplificar la
escritura
process (A,B,C,D,SEL)
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;
process (A,B,C,D,SEL)
begin
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;
Ejemplo 2 de IF-ELSIF
Utilización de Clock_Enable
architecture ARCHI of SECUENCE is
begin
process
begin
wait until CK’event and CK = ‘1’ ;
If ENABLE = ‘1’ then COUNT<=COUNT+1;
end if;
end process;
end ARCHI;
architecture ARCHI of SECUENCE is
begin
process(CK)
begin
if CK’event and CK = ‘1’ then
If ENABLE = ‘1’ then COUNT<=COUNT+1;
end if;
end process;
end ARCHI;
Utilización de Clock_Enable
Riesgos de inserción de lógica combinatoria en la
línea del reloj
GESTION DE LA JERARQUIA
Modelo de un proceso
 El modelo de
simulación en VHDL
consiste de múltiples
procesos que se
encuentran
ejecutándose
secuencialmente.
Proceso
____
___
____
__
___
____
Proceso
____
___
____
__
___
____
Proceso
____
___
____
__
___
____
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 número
de sentencias
concurrentes y por lo
tanto cualquier número
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;
Asignación de señales en un proceso
Procesos concurrentes: múltiples 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;
 Tenemos dos
asignaciones a la señal
Z, realizadas fuera de un
proceso. Las sentencias
fuera de un proceso son
concurrentes y por lo
tanto Z tiene dos drivers
?
?
A
B
C
D
Z
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 señal)
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
Z
 El lenguaje define que
en un proceso, la última
asignación hecha a una
señal 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)
begin
Z <= A and B;
Z <= C and D;
end process;
end SEQUENTIAL;
Última asignación
cuando se suspende
Tiene efecto
Diferente significado
 Estas mismas dos
sentencias tienen
significado muy distinto,
dependiendo si se
ejecutan dentro o fuera
de un proceso.
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;
=
¿Llamadas a múltiples procesos?
 Un proceso puede ser potencialmente ejecutado varias
veces antes de que todas las señales sean actualizadas.
Ejemplo
SEÑALES ASIGNADAS
DESPUES DE UNA
LECTURA.
Tenemos un proceso con
asignación a la señal M,
y el valor de M es
también leído en el
proceso
B cambia de 0 a 1.
EJEMPLO: process (A, B, M)
begin
Y <= A;
M <= B;
Z <= M;
end process EJEMPLO;
A: 0
B:1
M:0
Z:0
Evento en B
Proceso llamado
Actualización de valores
Ejemplo: process(A,B,M)
begin
Y <= A;
M <=B;
Z <=M;
end process Ejemplo;
La asignación no
es inmediata!
En este punto Z
sigue teniendo
valor 0!
Actualización de valores
A
B
M
Z
El proceso termina la primera ejecución
Z no ha sido actualizada!
T1process
T1process: Tiempo que
tarda en ejecutarse el
bloque “process”
Debido a que M ha cambiado de 0 a 1 (por la asignación M<=B), el
proceso vuelve a ejecutarse
A
B
M
Z
T1process
Ejemplo: process(A,B,M)
Begin
Y <= A;
M <=B;
Z <=M;
end process Ejemplo;
Segunda ejecución del proceso
Al ejecutarse esta
línea Z no es
afectada!
Actualización de valores
A
B
M
Z
T1
process
Termina la segunda ejecución del proceso
T2
process
ENTRADA Y SALIDA
Definición de entrada/salida
 Se necesitan dos pasos para definir las
entradas/salidas.
 A) El tipo buffer (entrada, salida, tres estados ,etc.)
 B) La asignación de pins (pin particular del circuito)
Definición del tipo en el código
 Inferir o instanciar la entrada y salida.
 La herramienta de síntesis Xilinx es capaz de inferir
automáticamente los tipos de entrada/salida.
Jerarquía separada para entrada/salida
 Existen herramientas que
no infieren en la
entrada/salida básica.
 Para poder instanciarlos
consultar el manual de
uso del fabricante.
Instanciación de los
componentes
de la lógica del núcleo
Buffer E/S
Nivel Superior
Definición del tipo en la herramienta de síntesis
 Se puede realizar de forma separada la definición de
entrada/salida.
 Se selecciona los tipos de buffer y se asignan a los
puertos de la lógica del núcleo.
Asignación de los pins de entrada/salida
Asignación de pins en las
Herramientas de
Foundation.
User Control File (.UCF)
 Con las herramientas de
Xilinx, la asignación de
los pins es a través 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
 Las herramientas de
síntesis tienen la
habilidad de inferir
automáticamente celdas
de entrada/salida tanto
salidas de 3 estados
como bidireccionales.
Código VHDL
Síntesis
OUT
IN
EN
OUT
EN
‘Z’
‘Z’
Estilo de código para inferir 3 estados.
 El uso de la asignación
de Z es la que permite a
la herramienta de síntesis
inferir en el buffer de tres
estados.
if (EN = ‘0’) then
OUT_PAD <= BUS_OUT;
else
OUT_PAD <= ‘Z’;
end if;
Síntesis
BUS _OUT OUT_PAD
EN
Código 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;
Síntesis
BIDI
EN
CORE_OUT
CORE_IN
Sentencia
concurrente
Uso de la asignación
al valor Z
Entrada/Salida con registro
 La implementación es
automática utilizando un
registro en la celda de
entrada/salida apropiada
si esta disponible.
 Debe soportar el uso
implícito de enable y
reset síncronos en la
celda.
CLK
D
Q
Terminal de
Salida
Inserción de registros durante MAP
 Además las herramientas de implementación de Xilinx
tiene un interruptor que les permite poner registros
en las celdas de entrada/salida donde sea apropiado.
Pull-up
 Xilinx en su mayoría 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 señales de reset y del
reloj, tengan mejor velocidad y desempeño.
 Sucede cuando alguna señal se distribuye en una red de
elementos (alto fanout).
 Si la herramienta de síntesis 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 Genéricos son:
XC3000 BUFG
XC5200 BUFG
XC4000E BUFGP,BUFGS
BUFG
 Puede ser aplicado sobre un IBUF (buffer de entrada), o
sobre redes internas que manejan señales de CLK.
 El efecto que tiene es conectar una señal, por la ruta
mas corta, a la red sobre la que se aplica el BUFG
Ejemplos:
BUFG = CLK: mapea hacia una línea global de reloj
(GCK)
BUFG = OE: mapea hacia una línea 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}”;
Señales internas de 3 estados
 El uso de buffers internos ayuda en ocasiones a
simplificar el diseño
 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 diseño
Mux 5-1 con Buffers internos
Xilinx infiere cuando instanciar
automáticamente 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 señales 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
electrónicos.
ESTRUCTURA
 Composición de
elementos.
ENTIDAD
 La entidad en VHDL
describe la interfase de
un bloque jerárquico, sin
describir su
comportamiento.
 La entidad es equivalente
a un “símbolo” en un
diseño basado en una
estructura esquemática.
 Es la porción de código
que permite definir en
particular Entradas y
Salidas
ENTIDAD:
Informaciones Complementarias
- Equivalente a símbolos 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 “señales” 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
Esquemática
Sel
Símbolo Ejemplo
B[7:0]
A[7:0]
MUX_OR
ENTIDAD: Sintaxis de declaración
entity EJEMPLO is
port(Lista puertos de entrada/Salida comprimiendo:
Nombre_de_señal:modo y tipo.);
end [EJEMPLO];
--Los corchetes “[]” indican que es opcional usar de
--nuevo el nombre de la entidad después 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 paréntesis y seguida
de un punto y coma.
- Nombre de la entidad opcional después de la palabra “end”.
ARQUITECTURA
 Porción de descripción
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 diseño es
descrito a varios niveles de
abstracción: pueden existir
descripciones a nivel de
comportamiento, RTL y de
compuertas, del mismo
diseño, o varias formas de
describir el mismo circuito.
PAQUETE
 Un paquete tiene una colección de definiciones que
pueden ser referenciados por varios diseños al mismo
tiempo.
ARREGLOS
 Son elementos del mismo tipo.
 VHDL define dos tipo de arreglo estándar: bit_vector y string.
Un arreglo en VHDL tiene las siguientes tres características
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 declaración del objeto
1 2 3 4
Signal
C_BUS
3 2 1 0
Signal
Z_BUS
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)
bit string literal.
 Es una notación para especificar el valor de un
bit_vector.
signal SIG_A: bit_vector (7 downto 0)
SIG_A <= B”1110_0011” --(22710)
SIG_A 1 1 1 0 0 0 1 1
7 6 5 4 3 2 1 0
B”11111010” B”1111_1010”
B”11111010”
X”FA”
O”372” B”011111010”
Designación Base
B Binaria
O Octal
X Hexadecimal
Asignación por posición.
 Dos objetos de tipo arreglo pueden ser asignados uno al otro,
mientras sean del mismo tamaño y del mismo tipo:
 Notar que la asignación es por posición y no por número de índice.
El concepto de bit más significativo no esta definido en VHDL.
signal Z_BUS: bit_vector(3 downto 0);
signal C_BUS: bit_vector(1 to 4);
Z_BUS(3) <= C_BUS(1);
Z_BUS(2) <= C_BUS(2);
Z_BUS(1) <= C_BUS(3);
Z_BUS(0) <= C_BUS(4);
Z_BUS <= C_BUS;
3 2 1 0
Signal
Z_BUS
1 2 3 4
Signal
C_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
dirección de esta parte (es decir, to o downto) debe corresponder con la
dirección del arreglo declarado.
signal Z_BUS: bit_vector(3 downto 0);
signal 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
información.
Por ejemplo un vector de bit que
represente la instrucción de una
computadora puede contener un
campo representando el tipo de
instrucción.
Concatenación y agregados.
 Ahora se discuten dos conceptos conocidos como
concatenación y agregado. Estos son dos métodos
que sirven para asociar señales entre ellos y
asignarlas a un arreglo de objetos.
Concatenación
 VHDL tiene la habilidad de asociar bits individuales y
vectores para formar una estructura de arreglo. Esto es
conocido como concatenación 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.
 Otro método de
asignación a
elementos de un
arreglo es conocido
como agregado.
Un agregado esta
contenido entre
paréntesis y las
asignaciones a cada
elemento son
separadas por
comas.
Z_BUS<=(A, B, C, D);
signal Z_BUS: bit_vector(3 downto 0);
signal A,B,C,D: bit;
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
posición.
 Este ejemplo demuestra
que también un rango
del arreglo puede ser
asignado, siempre y
cuando el mismo valor
sea asignado a cada
elemento del rango.
X<= (3=>’1’, 1 downto 0 =>’1’, 2=>B)
signal X: bit_vector(3 downto 0);
signal A,B,C,D: bit;
signal BYTE:bit_vector(7 downto 0)
nombre rango nombre
Others, soporte para síntesis.
 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
síntesis soportan el uso de
agregados, por lo que puede
ser necesario usar
concatenación para realizar
manipulaciones sobre
arreglos.
X<= (3=>’1’, 1 =>’0’, others=>B)
signal Z_BUS: bit_vector (3 downto 0);
signal A,B,C,D: bit;
signal BYTE:bit_vector(7 downto 0);
Necesidad de mas que el “0” y el “1”
 El tipo bit tiene unas limitaciones, puede solo representar el 0 y el 1. En
simulación puede ser útil el poder representar otros valores, por ejemplo:
desconocido, no inicializado, alta impedancia. Mientras para la síntesis
puede ser útil representar una condición: don’t 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
Don’t care Implementación 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
Lógica de valores múltiples
 La idea de una lógica de valores múltiples, o un sistema
LVM lleva un tipo de señal enumerado definido por todos
los valores, junto con un grupo de funciones que
realizan operaciones lógicas tales como: AND y OR
sobre objetos de ese tipo.
High impedance
“Z”
Logic 0
“0”
Logic 1
“1”
Un-initialised
“U”
Unknown
“X”
Don’t care
“-”
0
?
0
1
1
c
c Output
input
VDD
Compuerta inversora NMOS Estática
Compuerta inversora NMOS Estática
RON
P
U
ROFF
PD
Input=L
Output=Vdd ROFF
P
ROFF
PD RON
P
U
+
=H
VDD
RON
P
U
RON
P
D
Output=Vdd RON
P
D
RON
PD RON
P
U
+
=L
VDD
Input=H
VDD
H
L
0
0
0
1
1
c
c Output
input
VDD
Compuerta inversora NMOS Estática
OBJETOS MANIPULABLES
 Los objetos que se pueden manipular en VHDL son:
1 SEÑALES: Los “ports” declarados dentro
de una entidad son señales.
2 CONSTANTES: permiten definir valores
permanentes
3 VARIABLES: utilizados solamente dentro de los
procesos(instrucciones secuénciales).
4 ARCHIVOS (FICHEROS)
Declaraciòn de Objetos
La formula de declaraciòn de constantes,
variables y señales 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;
Señales
 Son objetos que permiten simular la interconexión de
componentes dentro de la arquitectura de diseño.
 Permiten representar entradas o salidas de entidades.
Señales
 X0 y x1 no tienen asignada una terminal en la entidad de
diseño (funcionan como un medio de interconexión).
Sintaxis general de una señal
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 );
Señales
 Forma de declarar una señal:
signal identificator: tipo: [rango];
Ejemplo:
signal vcc: bit: ´1´;
signal suma: bit_vector: (3 downto 0);
Señales
 las señales pueden declararse en una entidad,
en una arquitectura o en un paquete.
 si se quiere inicializar una señal 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.
Señales
 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]);
Señales
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; (Errónea, no hay dimensión)
Driver de señal
• Un conductor (driver) para una señal se define por el
proceso que asigna valores a la señal.
• Los valores que viajan por los caminos de datos en un
tiempo dado están contenidos en dicho conductor, el
cual consta de una colección de parejas (tuplas)
valor/tiempo llamadas transacciones.
Asignación múltiple o concurrente
 Los “conductores” son creados por sentencias de
asignación de señales.
 Una asignación concurrente de señal dentro de una
arquitectura produce un “conductor” para cada
asignación de señal. Asignaciones múltiples producirán
“conductores” múltiples de señal.
Creación de un driver
ARCHITECTURE t1 OF d1 IS
BEGIN
a <= b AFTER 10 ns ;
a <= c AFTER 10 ns ;
END t1;
Función de resolución
 La señal ´”a” está siendo manejada por dos fuentes, b y
c.
 Cada asignación concurrente creará un conductor para
la señal a, esto no es admitido a menos que se defina
una función de resolución (resolved signals).
 La forma en que esto se resuelve queda a cargo del
diseñador.
Atributos función de las señales
S´EVENT Retorna verdadero si ocurrió un evento
en S durante el corriente delta, de lo
contrario devuelve falso.
S´ACTIVE Retorna verdadero si ocurrió una
transición en S durante el
corriente delta, else falso.
S´LAST_EVENT Retorna el tiempo transcurrido
desde la transición previa de la
señal S.
S´LAST_VALUE Retorna el valor previo de S
antes del último evento.
S´LAST_ACTIVE Retorna el tiempo transcurrido
desde la transacción previa de la
señal.
Señales de tipo definido
 Habiendo definido el tipo, podemos definir señales de
este tipo. Aquí hemos declarado la señal STATE de tipo
MY_STATE. Debemos observar las reglas estrictas
cuando usemos estas señales: no podemos asignar
nada a la señal 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 diseño 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 direcciòn “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 señal se le asigna
un valor, en VHDL, por
medio de una sentencia
de Asignación de señal.
 Una Asignación a una
señal define un driver
sobre esa señal.
 Se pueden tener
multilples drivers.
DEFINICION DE PUERTOS
Señales que relacionan una entidad
con otra
Forma genérica 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;
in
Un puerto es de modo in si la información correspondiente al mismo, entra a la entidad y se suele
usar para relojes, entradas de control (como las típicas load, reset y enable), y para datos de
entrada unidireccionales.
Modo de Puerto
out
Un puerto es de modo out si la información fluye hacia fuera de la entidad.
Este modo no permite realimentación ya que al declarar un puerto como out estamos indicando al
compilador que el estado lógico en el que se encuentra no es leíble.
buffer
Este modo es similar al modo out, pero además, permite la realimentación y no es bidireccional,
y solo puede ser conectado directamente a una señal interna, o a un puerto de modo buffer de
otra entidad. Una aplicación muy común 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 señales bidireccionales, es decir, si necesitamos que por el mismo puerto fluya
información tanto hacia dentro como hacia afuera de la entidad. Este modo permite la
realimentación interna y puede reemplazar a cualquiera de los modos anteriores, pudiéndose
usar este modo para todos los puertos.
Tipos Nativos para VHDL
boolean
Puede tomar dos valores: verdadero/true o falso/false. Un ejemplo típico es la salida de un comparador
que da verdadero si los números comparados son iguales y falso si no lo son
bit
Puede tomar dos valores: 0 ó 1 ( o también "low" o "high", según se prefiera). Es el tipo más 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
según pongamos la palabra reservada downto o to estaremos diciendo que el bit más significativo es
el número más alto o el más bajo del vector, respectivamente..
numero : bit_vector (0 to 7);
numero : bit_vector (7 downto 0);
integer
Para mantenerr números enteros. Hay que advertir que el uso de enteros consume muchos recursos
del dispositivo de lógica programable, siempre y cuando sea sintetizable, debido a que está
prácticamente creado para la simulación.
• Definir un modelo de comportamiento sintetizable (ARCHITECTURE)
Usando el juego de instrucciones soportado por las herramientas de síntesis
architecture archpro of programa is
-- Declaración de señales y otros accesorios
Begin
-- Núcleo del programa
End archpro;
Para describir una arquitectura podremos usar cuatro estilos
Estilo behavioral
Estilo dataflow
Estilo structural
Estilo mixto
Estilo behavioral
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;
entity compa is
port (
a,b: in bit_vector(3 downto 0);
igual: out bit
);
end compa;
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
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 mixto
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 asignación a
esa señal debe ser un valor definido por ese conjunto.
 Cuando hacemos una asignación a una señal, los tipos
en ambos lados del operador de asignación de señal
deben corresponder.
Declaraciòn de tipos de datos
Sintaxis general
type id is definiciòn_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 Direcciòn : Orientacion;
Los tipos deben corresponder
 Cuando hacemos una asignaciòn a una señal,
 los tipos en ambos lados del operador de
 asignaciòn de señal 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
 Físicos
 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 también es de tipo boolean.
TIPO BIT
El tipo BIT sirve para modelar niveles lógicos.
Conjunto de valores ‘0’ y ‘1’
Operaciones definidas sobre el:
 Lógicas: not,and,nand,or,nor,xor y xnor
 Comparación: ‘=‘, ‘/=‘,’<‘, ‘<=‘, ‘>’, ‘>=‘
 Concatenación: &
type bit is (‘0’, ‘1’)
TIPO CHARACTER
Se utiliza para definir un solo carácter.
‘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 básica 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 también 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 límites son números
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 definición de subtipos
que son restricciones o subconjuntos de
tipos existentes.
Hay dos tipos, el primero son subtipos
obtenidos a partir de la restricción 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 más
común es definir los tipos
dentro de un paquete,
arquitectura o proceso, y la
mayoría de las
herramientas de síntesis
son capaces de sintetizar
VHDL que contiene tipos
enumerated.
Síntesis de tipo enumerated
 La mayoría de las herramientas de síntesis pueden construir
lógica desde una señal del tipo enumerated. Usualmente la
señal tiene el número mínimo de bits requerido para
representar el número de valores posibles. Este ejemplo
muestra cada como cada valor es usualmente codificado en
la implementación del hardware.
RESET “00”
IDLE “01”
RW “10”
INT_CYCLE “11”
Mínimo número de bits
type MY_SATE is
(RESET, IDLE, RW_CYCLE, INT_CYCLE);
Codificación de derecha a izquierda en secuencia binaria
TIPO PREDEFINIDO (enumerated)
 Son especificados como código fuente de VHDL, y se
encontran en un paquete llamado STANDARD:
 Boolean
 Time
 Bit
 Bit_vector
 Character
 String
 Integer
 real
STANDARD_LOGIC
 El Estándar 1164 está
definido en código 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 versión 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 también contiene la definición 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 diseños.
 La razón para esto es que hay otros estandares para
usar VHDL que están 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 múltiples
 Si hay múltiples drivers en una señal se debe usar el
tipo std_logic, ya que no es valido tener mas de un
driver en un tipo de dato unresolved.
Z o RES_Z ?
signal A,B,Z: std_ulogic;
signal RES_Z: std_logic;
Z<= A;
Z<= B;
RES_Z<= A;
RES_Z<= B;
Cláusulas 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 líneas de código
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
número 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 efectúan al mismo tiempo (en
paralelo) :
 El orden de escritura de las instrucciones no afecta el
resultado de la síntesis o simulación.
 El estilo de escritura es comparable a los lenguajes de
programación de los PALs (ecuaciones lógicas).
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;
Ejecución 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;
Asignación concurrente
 Los diseños esquemáticos 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
Asignación 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 línea de
código está describiendo un sumador, sin registros de
almacenamiento implícitos.
X <= x + y;
En Hardware;
+
x y
x
Instrucciones secuenciales
Las operaciones se efectúan en secuencia.
 El orden afecta los resultados de simulación y sintésis.
 Estilo de escritura parecido a los lenguajes de
informática de alto nivel.
 Las instrucciones secuenciales se usan en partes
específicas del código: PROCESO o subprogramas.
Ejemplo
Architecture ARCHI of SECUENCIA is
begin
process begin
wait until CK’event and CK = ‘1’;
if ENA = ‘1’ then COUNT <= COUNT+1;
end if;
end process;
end ARCHI;
Utilización del Clock_Enable
Dedicado de los Flip Flops Xilinx
Instrucciones concurrentes
Asignación de señales por condición: WHEN…ELSE
 Sintaxis:
Signal_x <= valor_x when signal_y = valor_y
else valor_z;
 Notar que el valor_z es indicado directamente después
de “else”. (El símbolo de asignación “<=” es implícito)
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
S T
B
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;
A
C
B S
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;
C
B[ 15:0]
S[ 15:0]
A[ 15:0]
Asignación de señales por selección.
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 B
SEL[1:0
]
T
S
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 número de iteraciones.
 LABEL es de uso obligatorio.
 generate puede ajustarse empleando range.
Decodificador.
Hexadecimal – 7 Segmentos.
 Tabla de verdad:
a
b
c
d
e
f
g
1
1
1
0
0
0
1
1
1
1
1
F
1
1
1
1
0
0
1
0
1
1
1
E
1
0
1
1
1
1
0
1
0
1
1
D
0
1
1
1
0
0
1
0
0
1
1
C
1
1
1
1
1
0
0
1
1
0
1
B
1
1
1
0
1
1
1
0
1
0
1
A
1
1
0
1
1
1
1
1
0
0
1
9
1
1
1
1
1
1
1
0
0
0
1
8
0
0
0
0
1
1
1
1
1
1
0
7
1
1
1
1
1
0
1
0
1
1
0
6
1
1
0
1
1
0
1
1
0
1
0
5
1
1
0
0
1
1
0
0
0
1
0
4
1
0
0
1
1
1
1
1
1
0
0
3
1
0
1
1
0
1
1
0
1
0
0
2
0
0
0
0
1
1
0
1
0
0
0
1
0
1
1
1
1
1
1
0
0
0
0
0
g
f
e
d
c
b
a
D
C
B
A
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 configuración es como
una lista de partes,
especificando cual
arquitectura debe ser
usada para cada entidad
del diseño.
 Permitir una
configuración por default
permite que el código sea
más portable.
CONFIGURACION
 Es el enlace entre cada
nivel de la jerarquía, y la
especificación de cual
arquitectura es la que
debe ser usada
COMPILACION
 Después de que se ha
escrito el código de
VHDL en un archivo de
texto, el código 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
compilación y por otras
herramientas para
análisis.
MAPEO DE BIBLIOTECAS
 Las herramientas de
simulación y síntesis de
VHDL acceden a un
archivo que tiene un
mapa de los nombres de
las bibliotecas de VHDL
con los directorios físicos
en la computadora.
 VHDL también permite
definir una biblioteca
llamada WORK como la
biblioteca en la cual las
unidades de diseño son
compiladas sino se
especifica una biblioteca
Como se ejecuta
una simulación
Mecanismo de Cola
En un momento dado dentro de una simulación se generan 2
colas:
 Cola de señales a actualizar
 Cola de procesos a ejecutar
Actualización de la
señal
Ejecución del proceso
Proceso puesto en la cola
 Cuando una señal es actualizada en un punto específico
del tiempo de simulación, todos los procesos que son
sensitivos a esa señal son puestos en una cola de
procesos en ejecución.
Actualización de la
señal
Ejecución del proceso
Instrucción: M <= B;
B actualizada
Proceso puesto
en la cola
Una cola de señales actualizadas
Las señales que son asignadas en cada
proceso no son actualizadas
inmediatamente después de que el proceso
se suspende, son puestas en una cola de
señales actualizadas.
Las señales son actualizadas cuando
todos los procesos han sido ejecutados.
Ciclo Delta
 Como resultado de la actualización de las señales, otros procesos
pueden ser ejecutados en la cola de procesos en ejecución.
 Un ciclo que cubre esta secuencia es conocido como un ciclo Delta.
Actualización de
la señal
Ejecución del
proceso
Ejemplo: process(A,B,M)
Begin
Y <= A;
M <=B;
Z <=M;
end process Ejemplo;
Ejecución sobre el
tiempo
Múltiples deltas en cada punto de
tiempo de simulación
 Varios ciclos delta en una simulación
 En cada punto del tiempo de simulación se
ejecuta el ciclo delta, hasta que no haya mas
asignaciones o procesos en ejecución
Actualización
de la señal
Ejecución
del proceso
Actualización
de la señal
Ejecución
del proceso
Tiempo de simulación
Avanza a la siguiente actividad
La cláusula “after”
 La asignación de una señal es colocada en
una cola de “señales actualizadas” en un
tiempo en el futuro, en lugar del tiempo actual
Tiempo de simulación
Z <= A after 5ns;
5 ns
Z puesta en esta cola
La cláusula “wait for”
Tiempo de simulación
Z <= A;
wait for 5 ns;
5 ns
Z puesta en esta cola

Más contenido relacionado

Similar a VHDL Fundamentos

Unidad 4 lenguaje hdl pe ISC
Unidad 4 lenguaje hdl pe ISCUnidad 4 lenguaje hdl pe ISC
Unidad 4 lenguaje hdl pe ISCJhonatan Pat
 
Unidad 4 lenguaje hdl pe RUBI
Unidad 4 lenguaje hdl pe RUBIUnidad 4 lenguaje hdl pe RUBI
Unidad 4 lenguaje hdl pe RUBIJhonatan Pat
 
Seudocodigos1
Seudocodigos1Seudocodigos1
Seudocodigos1jafp21
 
Ici rtu-unidad 5- tema 8
Ici rtu-unidad 5- tema 8Ici rtu-unidad 5- tema 8
Ici rtu-unidad 5- tema 8Daniela Barbosa
 
Ici opc-unidad v-tema 6
Ici opc-unidad v-tema 6Ici opc-unidad v-tema 6
Ici opc-unidad v-tema 6Nelson Gimon
 
Electrónica digital: Practicas spartan 3E
Electrónica digital: Practicas spartan 3EElectrónica digital: Practicas spartan 3E
Electrónica digital: Practicas spartan 3ESANTIAGO PABLO ALBERTO
 
Control industrial
Control  industrialControl  industrial
Control industrial180323675
 
Lenguajes de programacion de plc
Lenguajes de programacion de plcLenguajes de programacion de plc
Lenguajes de programacion de plccomunicale
 
Programacin estructurada
Programacin estructuradaProgramacin estructurada
Programacin estructuradaRubixita12
 
Fgl029 guiano2arquitecturasvhdl (1)
Fgl029 guiano2arquitecturasvhdl (1)Fgl029 guiano2arquitecturasvhdl (1)
Fgl029 guiano2arquitecturasvhdl (1)Alveiro2
 
Resumen lenguajes c#
Resumen lenguajes c#Resumen lenguajes c#
Resumen lenguajes c#Angie Galeano
 
La programación informática o programación algorítmica, acortada
La programación informática o programación algorítmica, acortadaLa programación informática o programación algorítmica, acortada
La programación informática o programación algorítmica, acortadaAeChm-MgMs-NnNm-OpSe
 

Similar a VHDL Fundamentos (20)

Desarrollo aplicaciones visuales
Desarrollo aplicaciones visualesDesarrollo aplicaciones visuales
Desarrollo aplicaciones visuales
 
Unidad 4 lenguaje hdl pe ISC
Unidad 4 lenguaje hdl pe ISCUnidad 4 lenguaje hdl pe ISC
Unidad 4 lenguaje hdl pe ISC
 
Unidad 4 lenguaje hdl pe RUBI
Unidad 4 lenguaje hdl pe RUBIUnidad 4 lenguaje hdl pe RUBI
Unidad 4 lenguaje hdl pe RUBI
 
Seudocodigos1
Seudocodigos1Seudocodigos1
Seudocodigos1
 
Ici rtu-unidad 5- tema 8
Ici rtu-unidad 5- tema 8Ici rtu-unidad 5- tema 8
Ici rtu-unidad 5- tema 8
 
IDLconVHDL2010.pdf
IDLconVHDL2010.pdfIDLconVHDL2010.pdf
IDLconVHDL2010.pdf
 
Java xml
Java xml Java xml
Java xml
 
Pascal
PascalPascal
Pascal
 
Ici opc-unidad v-tema 6
Ici opc-unidad v-tema 6Ici opc-unidad v-tema 6
Ici opc-unidad v-tema 6
 
Estructura programa arduino
Estructura programa arduinoEstructura programa arduino
Estructura programa arduino
 
Electrónica digital: Practicas spartan 3E
Electrónica digital: Practicas spartan 3EElectrónica digital: Practicas spartan 3E
Electrónica digital: Practicas spartan 3E
 
VHDL - Presentacion Brayan.pptx
VHDL - Presentacion Brayan.pptxVHDL - Presentacion Brayan.pptx
VHDL - Presentacion Brayan.pptx
 
Control industrial
Control  industrialControl  industrial
Control industrial
 
Lenguajes de programacion de plc
Lenguajes de programacion de plcLenguajes de programacion de plc
Lenguajes de programacion de plc
 
Programacin estructurada
Programacin estructuradaProgramacin estructurada
Programacin estructurada
 
Unidad 1
Unidad 1Unidad 1
Unidad 1
 
computacion I
computacion Icomputacion I
computacion I
 
Fgl029 guiano2arquitecturasvhdl (1)
Fgl029 guiano2arquitecturasvhdl (1)Fgl029 guiano2arquitecturasvhdl (1)
Fgl029 guiano2arquitecturasvhdl (1)
 
Resumen lenguajes c#
Resumen lenguajes c#Resumen lenguajes c#
Resumen lenguajes c#
 
La programación informática o programación algorítmica, acortada
La programación informática o programación algorítmica, acortadaLa programación informática o programación algorítmica, acortada
La programación informática o programación algorítmica, acortada
 

Más de ssuserc60019

Presentaci_n a Dir_Nacional de Exploraci_n_Producci_.ppt
Presentaci_n a Dir_Nacional de Exploraci_n_Producci_.pptPresentaci_n a Dir_Nacional de Exploraci_n_Producci_.ppt
Presentaci_n a Dir_Nacional de Exploraci_n_Producci_.pptssuserc60019
 
guia_bibliografica_2020_version_13_08_20.ppt
guia_bibliografica_2020_version_13_08_20.pptguia_bibliografica_2020_version_13_08_20.ppt
guia_bibliografica_2020_version_13_08_20.pptssuserc60019
 
Emprendimiento personaje lider Grupal.docx
Emprendimiento personaje lider Grupal.docxEmprendimiento personaje lider Grupal.docx
Emprendimiento personaje lider Grupal.docxssuserc60019
 
GRUPO SANGUINEO Y FACTOR RH Y DONACION DE SANGRE.doc
GRUPO SANGUINEO Y FACTOR RH Y DONACION DE SANGRE.docGRUPO SANGUINEO Y FACTOR RH Y DONACION DE SANGRE.doc
GRUPO SANGUINEO Y FACTOR RH Y DONACION DE SANGRE.docssuserc60019
 
Qué es la música folklórica en Bolivia.pdf
Qué es la música folklórica en Bolivia.pdfQué es la música folklórica en Bolivia.pdf
Qué es la música folklórica en Bolivia.pdfssuserc60019
 
Proyecto ecosistemas y medio ambiente en equilibrio.pdf
Proyecto ecosistemas y medio ambiente en equilibrio.pdfProyecto ecosistemas y medio ambiente en equilibrio.pdf
Proyecto ecosistemas y medio ambiente en equilibrio.pdfssuserc60019
 
Presentacion_clase 5.pdf
Presentacion_clase 5.pdfPresentacion_clase 5.pdf
Presentacion_clase 5.pdfssuserc60019
 
Dialnet-LosImpuestosEnLaEpocaDeLaIndependenciaSuImpactoSoc-3966935 (1).pdf
Dialnet-LosImpuestosEnLaEpocaDeLaIndependenciaSuImpactoSoc-3966935 (1).pdfDialnet-LosImpuestosEnLaEpocaDeLaIndependenciaSuImpactoSoc-3966935 (1).pdf
Dialnet-LosImpuestosEnLaEpocaDeLaIndependenciaSuImpactoSoc-3966935 (1).pdfssuserc60019
 
3°CARTILLA3°TRIM.pdf
3°CARTILLA3°TRIM.pdf3°CARTILLA3°TRIM.pdf
3°CARTILLA3°TRIM.pdfssuserc60019
 
3ero secundaria demo.pdf
3ero secundaria demo.pdf3ero secundaria demo.pdf
3ero secundaria demo.pdfssuserc60019
 
09 Slides_Modulo9.pdf
09 Slides_Modulo9.pdf09 Slides_Modulo9.pdf
09 Slides_Modulo9.pdfssuserc60019
 
04_getting-help_help.pdf
04_getting-help_help.pdf04_getting-help_help.pdf
04_getting-help_help.pdfssuserc60019
 

Más de ssuserc60019 (16)

Presentaci_n a Dir_Nacional de Exploraci_n_Producci_.ppt
Presentaci_n a Dir_Nacional de Exploraci_n_Producci_.pptPresentaci_n a Dir_Nacional de Exploraci_n_Producci_.ppt
Presentaci_n a Dir_Nacional de Exploraci_n_Producci_.ppt
 
guia_bibliografica_2020_version_13_08_20.ppt
guia_bibliografica_2020_version_13_08_20.pptguia_bibliografica_2020_version_13_08_20.ppt
guia_bibliografica_2020_version_13_08_20.ppt
 
camacho_0.ppt
camacho_0.pptcamacho_0.ppt
camacho_0.ppt
 
Huayculi.docx
Huayculi.docxHuayculi.docx
Huayculi.docx
 
Emprendimiento personaje lider Grupal.docx
Emprendimiento personaje lider Grupal.docxEmprendimiento personaje lider Grupal.docx
Emprendimiento personaje lider Grupal.docx
 
GRUPO SANGUINEO Y FACTOR RH Y DONACION DE SANGRE.doc
GRUPO SANGUINEO Y FACTOR RH Y DONACION DE SANGRE.docGRUPO SANGUINEO Y FACTOR RH Y DONACION DE SANGRE.doc
GRUPO SANGUINEO Y FACTOR RH Y DONACION DE SANGRE.doc
 
Triptico.pdf
Triptico.pdfTriptico.pdf
Triptico.pdf
 
Qué es la música folklórica en Bolivia.pdf
Qué es la música folklórica en Bolivia.pdfQué es la música folklórica en Bolivia.pdf
Qué es la música folklórica en Bolivia.pdf
 
Proyecto ecosistemas y medio ambiente en equilibrio.pdf
Proyecto ecosistemas y medio ambiente en equilibrio.pdfProyecto ecosistemas y medio ambiente en equilibrio.pdf
Proyecto ecosistemas y medio ambiente en equilibrio.pdf
 
Presentacion_clase 5.pdf
Presentacion_clase 5.pdfPresentacion_clase 5.pdf
Presentacion_clase 5.pdf
 
Dialnet-LosImpuestosEnLaEpocaDeLaIndependenciaSuImpactoSoc-3966935 (1).pdf
Dialnet-LosImpuestosEnLaEpocaDeLaIndependenciaSuImpactoSoc-3966935 (1).pdfDialnet-LosImpuestosEnLaEpocaDeLaIndependenciaSuImpactoSoc-3966935 (1).pdf
Dialnet-LosImpuestosEnLaEpocaDeLaIndependenciaSuImpactoSoc-3966935 (1).pdf
 
cheto 2.pdf
cheto 2.pdfcheto 2.pdf
cheto 2.pdf
 
3°CARTILLA3°TRIM.pdf
3°CARTILLA3°TRIM.pdf3°CARTILLA3°TRIM.pdf
3°CARTILLA3°TRIM.pdf
 
3ero secundaria demo.pdf
3ero secundaria demo.pdf3ero secundaria demo.pdf
3ero secundaria demo.pdf
 
09 Slides_Modulo9.pdf
09 Slides_Modulo9.pdf09 Slides_Modulo9.pdf
09 Slides_Modulo9.pdf
 
04_getting-help_help.pdf
04_getting-help_help.pdf04_getting-help_help.pdf
04_getting-help_help.pdf
 

Último

FASES DE LA CONSULTORÍA- parte 1aa.pptx
FASES DE LA CONSULTORÍA- parte 1aa.pptxFASES DE LA CONSULTORÍA- parte 1aa.pptx
FASES DE LA CONSULTORÍA- parte 1aa.pptx10ColungaFloresJosSa
 
-PEIC-NUEVO de plantel educativo Venezuela
-PEIC-NUEVO de plantel educativo Venezuela-PEIC-NUEVO de plantel educativo Venezuela
-PEIC-NUEVO de plantel educativo VenezuelaJESUS341998
 
¡Explora el boletín del 29 abril de 2024!
¡Explora el boletín del 29 abril de 2024!¡Explora el boletín del 29 abril de 2024!
¡Explora el boletín del 29 abril de 2024!Yes Europa
 
CONTRATO DE TRABAJO, remuneraciones y otros datos
CONTRATO DE TRABAJO, remuneraciones y otros datosCONTRATO DE TRABAJO, remuneraciones y otros datos
CONTRATO DE TRABAJO, remuneraciones y otros datosJENNIFERBERARDI1
 
EMBARQUE Y DESEMBARQUE VEHICULOS MILITARES .pptx
EMBARQUE Y DESEMBARQUE VEHICULOS MILITARES .pptxEMBARQUE Y DESEMBARQUE VEHICULOS MILITARES .pptx
EMBARQUE Y DESEMBARQUE VEHICULOS MILITARES .pptxdaryel2
 
GUIA DOCENTE NEUMOLOGIA 2024 guia guia.pdf
GUIA DOCENTE NEUMOLOGIA 2024 guia guia.pdfGUIA DOCENTE NEUMOLOGIA 2024 guia guia.pdf
GUIA DOCENTE NEUMOLOGIA 2024 guia guia.pdfIsaacRobertoRamrezLe
 
NOM-011-STPS-2001 NORMATIVA PRESENTACION
NOM-011-STPS-2001 NORMATIVA PRESENTACIONNOM-011-STPS-2001 NORMATIVA PRESENTACION
NOM-011-STPS-2001 NORMATIVA PRESENTACIONKarina224599
 

Último (7)

FASES DE LA CONSULTORÍA- parte 1aa.pptx
FASES DE LA CONSULTORÍA- parte 1aa.pptxFASES DE LA CONSULTORÍA- parte 1aa.pptx
FASES DE LA CONSULTORÍA- parte 1aa.pptx
 
-PEIC-NUEVO de plantel educativo Venezuela
-PEIC-NUEVO de plantel educativo Venezuela-PEIC-NUEVO de plantel educativo Venezuela
-PEIC-NUEVO de plantel educativo Venezuela
 
¡Explora el boletín del 29 abril de 2024!
¡Explora el boletín del 29 abril de 2024!¡Explora el boletín del 29 abril de 2024!
¡Explora el boletín del 29 abril de 2024!
 
CONTRATO DE TRABAJO, remuneraciones y otros datos
CONTRATO DE TRABAJO, remuneraciones y otros datosCONTRATO DE TRABAJO, remuneraciones y otros datos
CONTRATO DE TRABAJO, remuneraciones y otros datos
 
EMBARQUE Y DESEMBARQUE VEHICULOS MILITARES .pptx
EMBARQUE Y DESEMBARQUE VEHICULOS MILITARES .pptxEMBARQUE Y DESEMBARQUE VEHICULOS MILITARES .pptx
EMBARQUE Y DESEMBARQUE VEHICULOS MILITARES .pptx
 
GUIA DOCENTE NEUMOLOGIA 2024 guia guia.pdf
GUIA DOCENTE NEUMOLOGIA 2024 guia guia.pdfGUIA DOCENTE NEUMOLOGIA 2024 guia guia.pdf
GUIA DOCENTE NEUMOLOGIA 2024 guia guia.pdf
 
NOM-011-STPS-2001 NORMATIVA PRESENTACION
NOM-011-STPS-2001 NORMATIVA PRESENTACIONNOM-011-STPS-2001 NORMATIVA PRESENTACION
NOM-011-STPS-2001 NORMATIVA PRESENTACION
 

VHDL Fundamentos

  • 2. INTRODUCCION  Se estudiará como VHDL es usado en proyectos de diseño.  Se analizarán las aplicaciones de VHDL y los diferentes estilos para usar el lenguaje.  Se aprenderán sus elementos básicos, sus ventajas y sus desventajas.  Se discutirán los principales conceptos del lenguaje y los principales constructos.
  • 3. DEFINICION  VHDL es un doble acrónimo:  Very High Speed Integrated Circuit.  Hardware Description Languaje.  Fue desarrollado a principios de los 80´s para el departamento. de los EEUU, como una implementación, realizada por computadora para describir sistemas electrónicos.
  • 4.  En 1987 es Estandarizado por la IEEE (Std 1076)  1993: Una nueva versión fue definida.  Para los constructos comúnmente usados hay pocas diferencias entre las dos versiones.
  • 5. VHDL permite  VHDL como lenguaje de alto nivel permite: 1. El modelado de ensambles electrónicos complejos. 2. La simulación de los modelos de componentes. 3. La síntesis lógica. 4. La portabilidad entre herramientas de síntesis y entre arquitecturas.
  • 6. VHDL permite  Definir los “ports” de entrada y salida del conjunto lógico descripto (entity).  Definir una arquitectura usando el juego de instrucciones soportado por las herramientas de síntesis (escritura RTL).  Unir los diferentes módulos descritos separadamente (VHDL estructural)
  • 7. EL PROCESO DE DISEÑO ELECTRONICO
  • 8. LIMITACIONES  VHDL es principalmente un lenguaje para diseño digital. Actualmente tiene capacidades muy limitadas en el área analógica, pero existen trabajos para crear una versión analógica del lenguaje.  El estándar 1076 define un estándar y su sintaxis, sin describir ningun “estilo” para usarlo en un diseño. Hay otros estándares que usan, o que requieren definir un “estilo” antes de usar el lenguaje en ciertas áreas.
  • 9. VENTAJAS  Notación formal: permite su uso en cualquier circuito electrónico.  Disponibilidad pública: no esta sometido a una patente o fábrica.  Independencia Tecnológica: soporta varias tecnologías de diseño y distintas funcionalidades.  Capacidad descriptiva: Permite el diseño en varios niveles de abstracción  Reutilización de Código: Sin importar la tecnología (CMOS, Bipolar, etc.) o la implementación (FPGA, PLD, etc.)
  • 10. SOPORTE PARA LENGUAJE DE SINTESIS  Solo es posible sintetizar lógicamente desde un subgrupo del lenguaje de VHDL. Cada compañia tiene su herramienta que tienen su propio subgrupo ligeramente distinto de los demás.
  • 11. SINTAXIS  Los archivos VHDL llevan la extensión “----.VHD  Minúsculas y mayúsculas 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 código.  Ellos no afectan en nada los resultados de síntesis ni de simulación. EJEMPLO: - - este es un comentario archtecture ARCHI of EJEMPLO is -- este también begin Los archivos VHDL llevan la extensión “----.VHD”
  • 12. SINTAXIS  Separadores: los separadores utilizados son:  “ ; ” (Punto y coma, entre dos declaraciones o al fin de una instrucción).  “ , “ (coma, entre dos nombres de señal dentro de una misma declaración).  “ : “ (dos puntos, dentro de una declaración entre el nombre de un objeto y su tipo).  “ “ (espacio).  El número de espacios entre dos palabras es indiferente, siempre que el mínimo sea respetado.  Retorno carro: Una misma instrucción o declaración puede ser escrita en varias líneas consecutivas.  Los comentarios pueden ser insertados al final de las líneas sin afectar la integridad del código.  A_IN, B_IN : in bit; - -puede también escribirse :  -- A_IN,  --B_IN : in bit;
  • 14. SINTESIS  Proceso de transformar instrucciones lógicas de software en circuitos hardware que desarrollen estas instrucciones.
  • 15. ABSTRACCION  Cada abstracción define los detalles del diseño especificados en una descripción particular de el.  Los diferentes estilos de escribir código VHDL tienen que ver con la abstracción.
  • 16. NIVELES DE ABSTRACCION 1. LAYOUT: Especifica información acerca de la verdadera implementación del diseño en silicio. 2. LOGICO: se interconectan compuertas lógicas y registros. 3. RTL: (transferencia de registros):se define cada registro en el diseño, y la lógica entre ellos. 4. COMPORTAMIENTO: describe la función del diseño, sin especificar la arquitectura de los registros.
  • 17. SENTENCIAS  CONCURRENTES ocurren en paralelo  SECUENCIALES se ejecutan una después de la otra.
  • 18. FUNCION  Es una rutina que hace una tarea particular.  Cuando el programa pasa el control a una función.  Ésta realiza la tarea y devuelve el control a la instrucción siguiente a la que llamo.  Ejecutan esta tarea utilizando valores específicos, denominados argumentos, en un orden determinado.  Los argumentos pueden ser números, texto, valores lógicos como VERDADERO o FALSO, matrices, valores de error (con #N/A ) o referencias de celda.  El argumento que se designe deberá generar un valor válido para el mismo. Los argumentos pueden ser también constantes, fórmulas u otras funciones.
  • 19. PRODECIMIENTO  Su interés radica en las acciones que se realizan durante su invocación.  Siempre se invocan de forma aislada.  Ejemplo: println(...) Éste siempre se invoca en forma aislada. Las acciones que realiza la invocación de println consisten en desplegar en pantalla el argumento que recibe. Es ilegal escribir asignaciones como: x= println( ... ); porque println no retorna ningún valor.
  • 20. DIFERENCIA ENTRE PROCEDIMIENTO Y FUNCION  La diferencia entre un procedimiento y una función es que la función regresa al termino de la ejecución un valor específico
  • 21. PROCESO  El proceso es una parte del código VHDL dentro del cual las sentencias se ejecutan en secuencia. Un proceso existe dentro de una arquitectura, y múltiples procesos interactúan unos con otros de manera concurrente.  Hay procesos:  combinatorios  sÍncronos
  • 22. PROCESO  Un proceso es una parte de código 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 simulación y síntesis.
  • 23. Sintaxis del Proceso Mux: process (A,B,SEL) begin if SEL = '1' then Z <= A; else Z <= B; end if; end process MUX; Sentencias secuenciales Etiqueta Lista de sensitividad
  • 24. Eventos en la lista de sensibilidad  Un proceso no se ejecuta continuamente, el proceso empieza a ejecutarse cuando una de las señales 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;
  • 25. Múltiples procesos concurrentes  Mientras que cada proceso ejecuta sus sentencias en secuencia, múltiples procesos interactúan con los demás de manera concurrente al producirse un evento en las señales de la lista de sensibilidad. Proceso Proceso Proceso
  • 26. Múltiples procesos en una arquitectura architecture A of E is begin -- Sentencias Concurrentes P1: process begin -- Sentencias Secuenciales end process P1; -- Sentencias Concurrentes P2: process begin -- Sentencias Secuenciales end process P2; -- Sentencias Concurrentes end A; Proceso 1 Proceso 2
  • 27. Ejecución de procesos  Cuando estas 2 señales son concurrentes, definen 2 drivers sobre la señal Z. Concurrente: 2 drivers architecture CONCURRENT of MULTIPLE is signal Z,A,B,C,D: std_logic; begin Z <= A & B; Z <= C & D; end CONCURRENT; ? A B C D Z
  • 28. Ejecución de procesos  Cuando estas 2 señales son secuenciales, el valor con el cual la señal es actualizada es el último valor que se le asigna durante el proceso de ejecución. Secuencial: 1 driver, última asignación 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 ; C D Z
  • 29. Señal actualizada cuando el proceso se suspende  Las señales 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 ;
  • 30. Noción de process  Un process es una parte de código 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 simulación y síntesis.
  • 31. Implementación de Procesos  Lógica combinatoria.  Lógica sincrónica.  Lógica sincrónica con inicialización asincrónica. Procesos dormidos, se les llama así a los procesos mientras las señales que los activan no cambian su estado.
  • 32. 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 asignación de señales asignadas en el proceso.
  • 33. Metodología de Procesos.  Lista de sensibilidad consistente.  Dominación de comportamiento e implementación de la lógica.  Diseños sintetizados, sin asincronismos.
  • 34. Proceso Combinatorio [ etiqueta: ] process ( lista de sensibilidad ) -- declaraciones Begin -- instrucciones secuenciales -- (if, case, loop) End process [ etiqueta]; • Lista de sensibilidad con señales que activan el proceso. • Parte declaratoria que puede contener variables. • Variable con ámbito de proceso.
  • 35. Ejemplo Combinatorio. Mux: process (A, B,SEL ) Begin if SEL=‘0’ then SALIDA<=A; else SALIDA<=B; end if; End process;
  • 36. Estructura Proceso Síncrono [ 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 evalúa la condición.
  • 37. Ejemplo síncrono. Process Begin wait until ( CK’ event and CK=‘1’ ); COUNT <= COUNT + 1; End process; • COUNT es construida por flip flops • No debe haber señales combinatorias.
  • 38. Proceso Síncrono [ etiqueta: ] process ( CK ) -- declaraciones Begin if (CK’ event and CK=‘1’) then --instrucciones secuenciales. end if; End process [etiqueta];
  • 39. [ etiqueta: ] process ( CK , RST) -- declaraciones Begin if RST=‘1’ then --acción asíncrona elseif (CK’ event and CK=‘1’) then --instrucciones secuenciales. end if; End process [etiqueta]; Proceso Síncrono con Inicialización Asíncrona Cambio de prioridad por condición asíncrona
  • 40. Ejemplo Síncrono 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 señales deben ser combinatorias.
  • 41. 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.
  • 42. Lista de Sensitividad MUX: process (A , B, SEL) begin if SEL = '1' then Z <= A; else Z <= B; end if; end process MUX; SEL A B Z
  • 43. Lista de Sensitividad MUX: process (A , B) begin if SEL = '1' then Z <= A; else Z <= B; end if; end process MUX; Falta SEL SEL A B Z
  • 44. Variables y Señales: •Las Señales: •Objetos que pueden ser declarados en el interior de una entidad (ports) o de una arquitectura (señales internas). •La asignación de un valor a una señal se hace con un retardo (infinitesimal). •Variables •Son objetos que pueden ser declarados dentro de un process (u otras entidades secuenciales).
  • 45. 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 CK’event and CK = ‘1’ ; TMP <= A or B; -- Esta línea será ignorada S <= TMP; TMP <= A and C; -- anula la asignación precedente T <= TMP; -- sobre la señal TMP end process; End ARCHI; Ejemplo sobre las señales:
  • 46. 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 CK’event and CK = ‘1’ ; TMP := A or B; S <= TMP; TMP := A and C; T <= TMP; end process; End ARCHI; Ejemplo utilizando una variable:
  • 47. Instrucciones secuénciales: frecuentemente utilizadas. •-IF…THEN… ; [ELSIF… THEN…];[ELSE…]; END IF; •Similar a la asignación de señales por selección. •-CASE … END CASE; •Similar a la asignación de señales por selección. •-FOR … LOOP END LOOP; •Similar a la instrucción FOR … GENERATE
  • 48. La Sentencia IF Sintaxis if- then – else. if CONDITION then --- Sentencias secuenciales end if; if CONDITION then --- Sentencias secuenciales else --- Sentencias secuenciales end if;
  • 49. Estructura if – elsif. if CONDITION then --- Sentencias secuenciales elsif CONDITION then --- Sentencias secuenciales elsif CONDITION then --- Sentencias secuenciales . . . else --- Sentencias secuenciales end if;
  • 50. IF-ELSIF •El orden de las sentencias en la estructura if-elsif es muy importante. Más de una condición puede ser verdadera, y es la primera condición verdadera la que provoca que se ejecuten el grupo de sentencias que le siguen if CONDITION then -- sentencias secuenciales elsif CONDITION then -- sentencias secuenciales elsif CONDITION then -- sentencias secuenciales else -- sentencias secuenciales end if;
  • 51. 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 condición X=0000 es probada primero, entonces a Z se le asigna el valor de A.
  • 52. 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 contracción ELSIF permite simplificar la escritura
  • 53. process (A,B,C,D,SEL) 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; process (A,B,C,D,SEL) begin 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; Ejemplo 2 de IF-ELSIF
  • 54. Utilización de Clock_Enable architecture ARCHI of SECUENCE is begin process begin wait until CK’event and CK = ‘1’ ; If ENABLE = ‘1’ then COUNT<=COUNT+1; end if; end process; end ARCHI;
  • 55. architecture ARCHI of SECUENCE is begin process(CK) begin if CK’event and CK = ‘1’ then If ENABLE = ‘1’ then COUNT<=COUNT+1; end if; end process; end ARCHI; Utilización de Clock_Enable
  • 56. Riesgos de inserción de lógica combinatoria en la línea del reloj
  • 57. GESTION DE LA JERARQUIA
  • 58. Modelo de un proceso  El modelo de simulación en VHDL consiste de múltiples procesos que se encuentran ejecutándose secuencialmente. Proceso ____ ___ ____ __ ___ ____ Proceso ____ ___ ____ __ ___ ____ Proceso ____ ___ ____ __ ___ ____ Proceso ____ ___ ____ __ ___ ____ Proceso ____ ___ ____ __ ___ ____ Proceso ____ ___ ____ __ ___ ____
  • 59. Concurrentes vs. Secuencial  Este modelo puede tener cualquier numero de procesos.  El proceso es visto como una sola sentencia concurrente.  Se puede tener n número de sentencias concurrentes y por lo tanto cualquier número 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;
  • 60. Asignación de señales en un proceso
  • 61. Procesos concurrentes: múltiples 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;  Tenemos dos asignaciones a la señal Z, realizadas fuera de un proceso. Las sentencias fuera de un proceso son concurrentes y por lo tanto Z tiene dos drivers ? ? A B C D Z
  • 62. 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 señal) 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 Z
  • 63.  El lenguaje define que en un proceso, la última asignación hecha a una señal 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) begin Z <= A and B; Z <= C and D; end process; end SEQUENTIAL; Última asignación cuando se suspende Tiene efecto
  • 64. Diferente significado  Estas mismas dos sentencias tienen significado muy distinto, dependiendo si se ejecutan dentro o fuera de un proceso. 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; =
  • 65. ¿Llamadas a múltiples procesos?  Un proceso puede ser potencialmente ejecutado varias veces antes de que todas las señales sean actualizadas.
  • 66. Ejemplo SEÑALES ASIGNADAS DESPUES DE UNA LECTURA. Tenemos un proceso con asignación a la señal M, y el valor de M es también leído en el proceso B cambia de 0 a 1. EJEMPLO: process (A, B, M) begin Y <= A; M <= B; Z <= M; end process EJEMPLO; A: 0 B:1 M:0 Z:0 Evento en B Proceso llamado
  • 67. Actualización de valores Ejemplo: process(A,B,M) begin Y <= A; M <=B; Z <=M; end process Ejemplo; La asignación no es inmediata! En este punto Z sigue teniendo valor 0!
  • 68. Actualización de valores A B M Z El proceso termina la primera ejecución Z no ha sido actualizada! T1process T1process: Tiempo que tarda en ejecutarse el bloque “process”
  • 69. Debido a que M ha cambiado de 0 a 1 (por la asignación M<=B), el proceso vuelve a ejecutarse A B M Z T1process Ejemplo: process(A,B,M) Begin Y <= A; M <=B; Z <=M; end process Ejemplo; Segunda ejecución del proceso Al ejecutarse esta línea Z no es afectada!
  • 70. Actualización de valores A B M Z T1 process Termina la segunda ejecución del proceso T2 process
  • 72. Definición de entrada/salida  Se necesitan dos pasos para definir las entradas/salidas.  A) El tipo buffer (entrada, salida, tres estados ,etc.)  B) La asignación de pins (pin particular del circuito)
  • 73. Definición del tipo en el código  Inferir o instanciar la entrada y salida.  La herramienta de síntesis Xilinx es capaz de inferir automáticamente los tipos de entrada/salida.
  • 74. Jerarquía separada para entrada/salida  Existen herramientas que no infieren en la entrada/salida básica.  Para poder instanciarlos consultar el manual de uso del fabricante. Instanciación de los componentes de la lógica del núcleo Buffer E/S Nivel Superior
  • 75. Definición del tipo en la herramienta de síntesis  Se puede realizar de forma separada la definición de entrada/salida.  Se selecciona los tipos de buffer y se asignan a los puertos de la lógica del núcleo.
  • 76. Asignación de los pins de entrada/salida Asignación de pins en las Herramientas de Foundation. User Control File (.UCF)  Con las herramientas de Xilinx, la asignación de los pins es a través del archivo (.UCF).
  • 77. 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.
  • 78. Salida de 3 estados  Las herramientas de síntesis tienen la habilidad de inferir automáticamente celdas de entrada/salida tanto salidas de 3 estados como bidireccionales. Código VHDL Síntesis OUT IN EN OUT EN ‘Z’ ‘Z’
  • 79. Estilo de código para inferir 3 estados.  El uso de la asignación de Z es la que permite a la herramienta de síntesis inferir en el buffer de tres estados. if (EN = ‘0’) then OUT_PAD <= BUS_OUT; else OUT_PAD <= ‘Z’; end if; Síntesis BUS _OUT OUT_PAD EN
  • 80. Código 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; Síntesis BIDI EN CORE_OUT CORE_IN Sentencia concurrente Uso de la asignación al valor Z
  • 81. Entrada/Salida con registro  La implementación es automática utilizando un registro en la celda de entrada/salida apropiada si esta disponible.  Debe soportar el uso implícito de enable y reset síncronos en la celda. CLK D Q Terminal de Salida
  • 82. Inserción de registros durante MAP  Además las herramientas de implementación de Xilinx tiene un interruptor que les permite poner registros en las celdas de entrada/salida donde sea apropiado.
  • 83. Pull-up  Xilinx en su mayoría de dispositivos permite el uso de pull-up/down, en las terminales de entrada/salida.
  • 84. Requerimentos de ruteo especiales  En ocasiones, se requiere que las señales de reset y del reloj, tengan mejor velocidad y desempeño.  Sucede cuando alguna señal se distribuye en una red de elementos (alto fanout).  Si la herramienta de síntesis no infiere esta red, se debe especificar con STARTUP, una red llamada GSR (Global set/reset)
  • 85. 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 Genéricos son: XC3000 BUFG XC5200 BUFG XC4000E BUFGP,BUFGS
  • 86. BUFG  Puede ser aplicado sobre un IBUF (buffer de entrada), o sobre redes internas que manejan señales de CLK.  El efecto que tiene es conectar una señal, por la ruta mas corta, a la red sobre la que se aplica el BUFG Ejemplos: BUFG = CLK: mapea hacia una línea global de reloj (GCK) BUFG = OE: mapea hacia una línea global de control 3- estado. BUFG = SR: mapea a una linea global de control set/reset
  • 87. Sintaxis BUFG  attribute BUFG: string;  attribute BUFG of signal_name: signal is “{CLK|OE|SR|DATA_GATE}”;
  • 88. Señales internas de 3 estados  El uso de buffers internos ayuda en ocasiones a simplificar el diseño  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 diseño
  • 89. Mux 5-1 con Buffers internos Xilinx infiere cuando instanciar automáticamente buffer, (BUFT)
  • 90. 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 señales 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.
  • 91. TIEMPO  VHDL nos permite modelar el tiempo, que es una parte importante al describir sistemas electrónicos.
  • 93. ENTIDAD  La entidad en VHDL describe la interfase de un bloque jerárquico, sin describir su comportamiento.  La entidad es equivalente a un “símbolo” en un diseño basado en una estructura esquemática.  Es la porción de código que permite definir en particular Entradas y Salidas
  • 94. ENTIDAD: Informaciones Complementarias - Equivalente a símbolos 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 “señales” simples (ej. Bit) o en forma de bus (ej: bit_Vector).
  • 95. 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 Esquemática Sel Símbolo Ejemplo B[7:0] A[7:0] MUX_OR
  • 96. ENTIDAD: Sintaxis de declaración entity EJEMPLO is port(Lista puertos de entrada/Salida comprimiendo: Nombre_de_señal:modo y tipo.); end [EJEMPLO]; --Los corchetes “[]” indican que es opcional usar de --nuevo el nombre de la entidad después 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 paréntesis y seguida de un punto y coma. - Nombre de la entidad opcional después de la palabra “end”.
  • 97. ARQUITECTURA  Porción de descripción 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.
  • 98. Entidad y Arquitectura  Una entidad puede tener mas de una arquitectura.  Una aplicacion es útil, esto es cuando un diseño es descrito a varios niveles de abstracción: pueden existir descripciones a nivel de comportamiento, RTL y de compuertas, del mismo diseño, o varias formas de describir el mismo circuito.
  • 99. PAQUETE  Un paquete tiene una colección de definiciones que pueden ser referenciados por varios diseños al mismo tiempo.
  • 100. ARREGLOS  Son elementos del mismo tipo.  VHDL define dos tipo de arreglo estándar: bit_vector y string. Un arreglo en VHDL tiene las siguientes tres características 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 declaración del objeto 1 2 3 4 Signal C_BUS 3 2 1 0 Signal Z_BUS 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)
  • 101. bit string literal.  Es una notación para especificar el valor de un bit_vector. signal SIG_A: bit_vector (7 downto 0) SIG_A <= B”1110_0011” --(22710) SIG_A 1 1 1 0 0 0 1 1 7 6 5 4 3 2 1 0 B”11111010” B”1111_1010” B”11111010” X”FA” O”372” B”011111010” Designación Base B Binaria O Octal X Hexadecimal
  • 102. Asignación por posición.  Dos objetos de tipo arreglo pueden ser asignados uno al otro, mientras sean del mismo tamaño y del mismo tipo:  Notar que la asignación es por posición y no por número de índice. El concepto de bit más significativo no esta definido en VHDL. signal Z_BUS: bit_vector(3 downto 0); signal C_BUS: bit_vector(1 to 4); Z_BUS(3) <= C_BUS(1); Z_BUS(2) <= C_BUS(2); Z_BUS(1) <= C_BUS(3); Z_BUS(0) <= C_BUS(4); Z_BUS <= C_BUS; 3 2 1 0 Signal Z_BUS 1 2 3 4 Signal C_BUS
  • 103. 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 dirección de esta parte (es decir, to o downto) debe corresponder con la dirección del arreglo declarado. signal Z_BUS: bit_vector(3 downto 0); signal 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 información. Por ejemplo un vector de bit que represente la instrucción de una computadora puede contener un campo representando el tipo de instrucción.
  • 104. Concatenación y agregados.  Ahora se discuten dos conceptos conocidos como concatenación y agregado. Estos son dos métodos que sirven para asociar señales entre ellos y asignarlas a un arreglo de objetos.
  • 105. Concatenación  VHDL tiene la habilidad de asociar bits individuales y vectores para formar una estructura de arreglo. Esto es conocido como concatenación 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
  • 106. Agregados.  Otro método de asignación a elementos de un arreglo es conocido como agregado. Un agregado esta contenido entre paréntesis y las asignaciones a cada elemento son separadas por comas. Z_BUS<=(A, B, C, D); signal Z_BUS: bit_vector(3 downto 0); signal A,B,C,D: bit; Z_BUS(3)<=A; Z_BUS(2)<=B; Z_BUS(1)<=C; Z_BUS(0)<=D;
  • 107. Especificando los elementos por nombre.  Es posible asignar a los elementos de un arreglo por nombre o por posición.  Este ejemplo demuestra que también un rango del arreglo puede ser asignado, siempre y cuando el mismo valor sea asignado a cada elemento del rango. X<= (3=>’1’, 1 downto 0 =>’1’, 2=>B) signal X: bit_vector(3 downto 0); signal A,B,C,D: bit; signal BYTE:bit_vector(7 downto 0) nombre rango nombre
  • 108. Others, soporte para síntesis.  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 síntesis soportan el uso de agregados, por lo que puede ser necesario usar concatenación para realizar manipulaciones sobre arreglos. X<= (3=>’1’, 1 =>’0’, others=>B) signal Z_BUS: bit_vector (3 downto 0); signal A,B,C,D: bit; signal BYTE:bit_vector(7 downto 0);
  • 109. Necesidad de mas que el “0” y el “1”  El tipo bit tiene unas limitaciones, puede solo representar el 0 y el 1. En simulación puede ser útil el poder representar otros valores, por ejemplo: desconocido, no inicializado, alta impedancia. Mientras para la síntesis puede ser útil representar una condición: don’t 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 Don’t care Implementación 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
  • 110. Lógica de valores múltiples  La idea de una lógica de valores múltiples, o un sistema LVM lleva un tipo de señal enumerado definido por todos los valores, junto con un grupo de funciones que realizan operaciones lógicas tales como: AND y OR sobre objetos de ese tipo. High impedance “Z” Logic 0 “0” Logic 1 “1” Un-initialised “U” Unknown “X” Don’t care “-”
  • 112. Compuerta inversora NMOS Estática RON P U ROFF PD Input=L Output=Vdd ROFF P ROFF PD RON P U + =H VDD RON P U RON P D Output=Vdd RON P D RON PD RON P U + =L VDD Input=H VDD H L
  • 114. OBJETOS MANIPULABLES  Los objetos que se pueden manipular en VHDL son: 1 SEÑALES: Los “ports” declarados dentro de una entidad son señales. 2 CONSTANTES: permiten definir valores permanentes 3 VARIABLES: utilizados solamente dentro de los procesos(instrucciones secuénciales). 4 ARCHIVOS (FICHEROS)
  • 115. Declaraciòn de Objetos La formula de declaraciòn de constantes, variables y señales 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;
  • 116. Señales  Son objetos que permiten simular la interconexión de componentes dentro de la arquitectura de diseño.  Permiten representar entradas o salidas de entidades.
  • 117. Señales  X0 y x1 no tienen asignada una terminal en la entidad de diseño (funcionan como un medio de interconexión).
  • 118. Sintaxis general de una señal 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 );
  • 119. Señales  Forma de declarar una señal: signal identificator: tipo: [rango]; Ejemplo: signal vcc: bit: ´1´; signal suma: bit_vector: (3 downto 0);
  • 120. Señales  las señales pueden declararse en una entidad, en una arquitectura o en un paquete.  si se quiere inicializar una señal 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.
  • 121. Señales  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]);
  • 122. Señales 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; (Errónea, no hay dimensión)
  • 123. Driver de señal • Un conductor (driver) para una señal se define por el proceso que asigna valores a la señal. • Los valores que viajan por los caminos de datos en un tiempo dado están contenidos en dicho conductor, el cual consta de una colección de parejas (tuplas) valor/tiempo llamadas transacciones.
  • 124. Asignación múltiple o concurrente  Los “conductores” son creados por sentencias de asignación de señales.  Una asignación concurrente de señal dentro de una arquitectura produce un “conductor” para cada asignación de señal. Asignaciones múltiples producirán “conductores” múltiples de señal.
  • 125. Creación de un driver ARCHITECTURE t1 OF d1 IS BEGIN a <= b AFTER 10 ns ; a <= c AFTER 10 ns ; END t1;
  • 126. Función de resolución  La señal ´”a” está siendo manejada por dos fuentes, b y c.  Cada asignación concurrente creará un conductor para la señal a, esto no es admitido a menos que se defina una función de resolución (resolved signals).  La forma en que esto se resuelve queda a cargo del diseñador.
  • 127. Atributos función de las señales S´EVENT Retorna verdadero si ocurrió un evento en S durante el corriente delta, de lo contrario devuelve falso. S´ACTIVE Retorna verdadero si ocurrió una transición en S durante el corriente delta, else falso. S´LAST_EVENT Retorna el tiempo transcurrido desde la transición previa de la señal S. S´LAST_VALUE Retorna el valor previo de S antes del último evento. S´LAST_ACTIVE Retorna el tiempo transcurrido desde la transacción previa de la señal.
  • 128. Señales de tipo definido  Habiendo definido el tipo, podemos definir señales de este tipo. Aquí hemos declarado la señal STATE de tipo MY_STATE. Debemos observar las reglas estrictas cuando usemos estas señales: no podemos asignar nada a la señal 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;
  • 129. 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];
  • 130. 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
  • 131. 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];
  • 132. Ejemplos Variable Indice1, Indice2, Indice3 : integer := 0; variable Comparacion : boolean; variable Resultado : real;
  • 133. ARCHIVOS (FICHEROS) Permiten comunicar un diseño 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.
  • 134. Sintaxis general de un archivo file id {,....} : tipo [is direcciòn “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”;
  • 135. ASIGNACION DE UN VALOR  A una señal se le asigna un valor, en VHDL, por medio de una sentencia de Asignación de señal.  Una Asignación a una señal define un driver sobre esa señal.  Se pueden tener multilples drivers.
  • 136. DEFINICION DE PUERTOS Señales que relacionan una entidad con otra
  • 137. Forma genérica 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;
  • 138. in Un puerto es de modo in si la información correspondiente al mismo, entra a la entidad y se suele usar para relojes, entradas de control (como las típicas load, reset y enable), y para datos de entrada unidireccionales. Modo de Puerto out Un puerto es de modo out si la información fluye hacia fuera de la entidad. Este modo no permite realimentación ya que al declarar un puerto como out estamos indicando al compilador que el estado lógico en el que se encuentra no es leíble. buffer Este modo es similar al modo out, pero además, permite la realimentación y no es bidireccional, y solo puede ser conectado directamente a una señal interna, o a un puerto de modo buffer de otra entidad. Una aplicación muy común 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 señales bidireccionales, es decir, si necesitamos que por el mismo puerto fluya información tanto hacia dentro como hacia afuera de la entidad. Este modo permite la realimentación interna y puede reemplazar a cualquiera de los modos anteriores, pudiéndose usar este modo para todos los puertos.
  • 139. Tipos Nativos para VHDL boolean Puede tomar dos valores: verdadero/true o falso/false. Un ejemplo típico es la salida de un comparador que da verdadero si los números comparados son iguales y falso si no lo son bit Puede tomar dos valores: 0 ó 1 ( o también "low" o "high", según se prefiera). Es el tipo más 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 según pongamos la palabra reservada downto o to estaremos diciendo que el bit más significativo es el número más alto o el más bajo del vector, respectivamente.. numero : bit_vector (0 to 7); numero : bit_vector (7 downto 0); integer Para mantenerr números enteros. Hay que advertir que el uso de enteros consume muchos recursos del dispositivo de lógica programable, siempre y cuando sea sintetizable, debido a que está prácticamente creado para la simulación.
  • 140. • Definir un modelo de comportamiento sintetizable (ARCHITECTURE) Usando el juego de instrucciones soportado por las herramientas de síntesis architecture archpro of programa is -- Declaración de señales y otros accesorios Begin -- Núcleo del programa End archpro; Para describir una arquitectura podremos usar cuatro estilos Estilo behavioral Estilo dataflow Estilo structural Estilo mixto
  • 141. Estilo behavioral 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; entity compa is port ( a,b: in bit_vector(3 downto 0); igual: out bit ); end compa; 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;
  • 142. Estilo structural 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 mixto
  • 143. 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
  • 144. 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.
  • 145. TIPO  El tipo define un conjunto de valores y una asignación a esa señal debe ser un valor definido por ese conjunto.  Cuando hacemos una asignación a una señal, los tipos en ambos lados del operador de asignación de señal deben corresponder.
  • 146. Declaraciòn de tipos de datos Sintaxis general type id is definiciòn_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 Direcciòn : Orientacion;
  • 147. Los tipos deben corresponder  Cuando hacemos una asignaciòn a una señal,  los tipos en ambos lados del operador de  asignaciòn de señal deben corresponder. Ejemplo:  Entity HALFADD is  port (A,B : in bit;  SUM, CARRY : out bit);  end HALFADD;
  • 148. Tipos predefinidos  Escalares  Enumerados  BOOLEAN,BIT,CHARACTER  Enteros  INTEGER  Físicos  TIME  Flotantes  REAL  Compuestos  Arrays  STRING,BIT_VECTOR 
  • 150. 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 también es de tipo boolean.
  • 151. TIPO BIT El tipo BIT sirve para modelar niveles lógicos. Conjunto de valores ‘0’ y ‘1’ Operaciones definidas sobre el:  Lógicas: not,and,nand,or,nor,xor y xnor  Comparación: ‘=‘, ‘/=‘,’<‘, ‘<=‘, ‘>’, ‘>=‘  Concatenación: & type bit is (‘0’, ‘1’)
  • 152. TIPO CHARACTER Se utiliza para definir un solo carácter. ‘A’ ‘b’ ‘x’
  • 153. 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;
  • 154. TIPO TIME El tipo TIME sirve para especificar valores de tiempo en los modelos Se define la unidad básica 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;
  • 155. TIPO REAL Conocidos también 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 límites son números reales.
  • 156. TIPO STRING El tipo string se define como un arreglo de cadenas de caracteres. Ejemplos “error en sincronia” “Hola Mundo”
  • 157. 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;
  • 158. SUBTIPOS DE DATOS VHDL permite la definición de subtipos que son restricciones o subconjuntos de tipos existentes. Hay dos tipos, el primero son subtipos obtenidos a partir de la restricción de un tipo escalar a un rango.
  • 159. 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);
  • 160. Tipos enumerated.  Un tipo de datos definido por el usuario es conocido en VHDL como un tipo enumerated. Lo más común es definir los tipos dentro de un paquete, arquitectura o proceso, y la mayoría de las herramientas de síntesis son capaces de sintetizar VHDL que contiene tipos enumerated.
  • 161. Síntesis de tipo enumerated  La mayoría de las herramientas de síntesis pueden construir lógica desde una señal del tipo enumerated. Usualmente la señal tiene el número mínimo de bits requerido para representar el número de valores posibles. Este ejemplo muestra cada como cada valor es usualmente codificado en la implementación del hardware. RESET “00” IDLE “01” RW “10” INT_CYCLE “11” Mínimo número de bits type MY_SATE is (RESET, IDLE, RW_CYCLE, INT_CYCLE); Codificación de derecha a izquierda en secuencia binaria
  • 162. TIPO PREDEFINIDO (enumerated)  Son especificados como código fuente de VHDL, y se encontran en un paquete llamado STANDARD:  Boolean  Time  Bit  Bit_vector  Character  String  Integer  real
  • 163. STANDARD_LOGIC  El Estándar 1164 está definido en código fuente VHDL puro y describe un tipo de dato llamado “std_ulogic”, el cual define los nueve estados posibles.
  • 164. 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.
  • 165. TIPO STD_LOGIC  Hay otro tipo definido, llamado “std_logic”.  el cual es una versión tipo resolved de std_ulogic y puede tener mas de un driver.  El tipo std_logic tiene los mismos nueve estados de std_ulogic.
  • 166. VECTORES TIPO STD_LOGIC Y STD_ULOGIC  El paquete también contiene la definición 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 diseños.  La razón para esto es que hay otros estandares para usar VHDL que están basados en estos tipos en lugar de std_ulogic y std_ulogic_vector.
  • 167. 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
  • 168. std_logic para drivers múltiples  Si hay múltiples drivers en una señal se debe usar el tipo std_logic, ya que no es valido tener mas de un driver en un tipo de dato unresolved. Z o RES_Z ? signal A,B,Z: std_ulogic; signal RES_Z: std_logic; Z<= A; Z<= B; RES_Z<= A; RES_Z<= B;
  • 169. Cláusulas 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 líneas de código 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;
  • 170. OPERADORES LOGICOS  Tienen la misma precedencia, y se ejecutan de izquierda a derecha en la sentencia.
  • 171. OPERADORES RELACIONALES  Los operadores deben ser del mismo tipo, pero el número de bits comparados puede ser diferentes.
  • 172. 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.
  • 173. 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
  • 175. Sentencias secuenciales y concurrentes  Sentencias concurrentes. Se ejecutan al mismo tiempo. En paralelo.  Sentencias secuenciales. Se ejecutan una a la vez. En secuencia.
  • 176. Instrucciones concurrentes Las operaciones se efectúan al mismo tiempo (en paralelo) :  El orden de escritura de las instrucciones no afecta el resultado de la síntesis o simulación.  El estilo de escritura es comparable a los lenguajes de programación de los PALs (ecuaciones lógicas).
  • 177. 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;
  • 178. Ejecución 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;
  • 179. Asignación concurrente  Los diseños esquemáticos 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
  • 180. Asignación Concurrente  Consideremos la sentencia x <= x + y. X <= x + y; En Software; Registro X Registro X +
  • 181. No para Hardware  Siendo una sentencia concurrente, esta misma línea de código está describiendo un sumador, sin registros de almacenamiento implícitos. X <= x + y; En Hardware; + x y x
  • 182. Instrucciones secuenciales Las operaciones se efectúan en secuencia.  El orden afecta los resultados de simulación y sintésis.  Estilo de escritura parecido a los lenguajes de informática de alto nivel.  Las instrucciones secuenciales se usan en partes específicas del código: PROCESO o subprogramas.
  • 183. Ejemplo Architecture ARCHI of SECUENCIA is begin process begin wait until CK’event and CK = ‘1’; if ENA = ‘1’ then COUNT <= COUNT+1; end if; end process; end ARCHI; Utilización del Clock_Enable Dedicado de los Flip Flops Xilinx
  • 184. Instrucciones concurrentes Asignación de señales por condición: WHEN…ELSE  Sintaxis: Signal_x <= valor_x when signal_y = valor_y else valor_z;  Notar que el valor_z es indicado directamente después de “else”. (El símbolo de asignación “<=” es implícito)
  • 185. 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;
  • 186. 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;
  • 187. 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;
  • 188.  Las dos instrucciones (o asignaciones) son concurrentes. El orden de escritura no afecta los resultados.  Estas instrucciones generan: A B C S T B
  • 189. 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;
  • 191. 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;
  • 193. Asignación de señales por selección. 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;
  • 194.  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 B SEL[1:0 ] T S
  • 195. 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 número de iteraciones.  LABEL es de uso obligatorio.  generate puede ajustarse empleando range.
  • 196. Decodificador. Hexadecimal – 7 Segmentos.  Tabla de verdad: a b c d e f g 1 1 1 0 0 0 1 1 1 1 1 F 1 1 1 1 0 0 1 0 1 1 1 E 1 0 1 1 1 1 0 1 0 1 1 D 0 1 1 1 0 0 1 0 0 1 1 C 1 1 1 1 1 0 0 1 1 0 1 B 1 1 1 0 1 1 1 0 1 0 1 A 1 1 0 1 1 1 1 1 0 0 1 9 1 1 1 1 1 1 1 0 0 0 1 8 0 0 0 0 1 1 1 1 1 1 0 7 1 1 1 1 1 0 1 0 1 1 0 6 1 1 0 1 1 0 1 1 0 1 0 5 1 1 0 0 1 1 0 0 0 1 0 4 1 0 0 1 1 1 1 1 1 0 0 3 1 0 1 1 0 1 1 0 1 0 0 2 0 0 0 0 1 1 0 1 0 0 0 1 0 1 1 1 1 1 1 0 0 0 0 0 g f e d c b a D C B A
  • 197. 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;
  • 198. CONFIGURACION  La configuración es como una lista de partes, especificando cual arquitectura debe ser usada para cada entidad del diseño.  Permitir una configuración por default permite que el código sea más portable.
  • 199. CONFIGURACION  Es el enlace entre cada nivel de la jerarquía, y la especificación de cual arquitectura es la que debe ser usada
  • 200. COMPILACION  Después de que se ha escrito el código de VHDL en un archivo de texto, el código 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 compilación y por otras herramientas para análisis.
  • 201. MAPEO DE BIBLIOTECAS  Las herramientas de simulación y síntesis de VHDL acceden a un archivo que tiene un mapa de los nombres de las bibliotecas de VHDL con los directorios físicos en la computadora.  VHDL también permite definir una biblioteca llamada WORK como la biblioteca en la cual las unidades de diseño son compiladas sino se especifica una biblioteca
  • 202. Como se ejecuta una simulación
  • 203. Mecanismo de Cola En un momento dado dentro de una simulación se generan 2 colas:  Cola de señales a actualizar  Cola de procesos a ejecutar Actualización de la señal Ejecución del proceso
  • 204. Proceso puesto en la cola  Cuando una señal es actualizada en un punto específico del tiempo de simulación, todos los procesos que son sensitivos a esa señal son puestos en una cola de procesos en ejecución. Actualización de la señal Ejecución del proceso Instrucción: M <= B; B actualizada Proceso puesto en la cola
  • 205. Una cola de señales actualizadas Las señales que son asignadas en cada proceso no son actualizadas inmediatamente después de que el proceso se suspende, son puestas en una cola de señales actualizadas. Las señales son actualizadas cuando todos los procesos han sido ejecutados.
  • 206. Ciclo Delta  Como resultado de la actualización de las señales, otros procesos pueden ser ejecutados en la cola de procesos en ejecución.  Un ciclo que cubre esta secuencia es conocido como un ciclo Delta. Actualización de la señal Ejecución del proceso Ejemplo: process(A,B,M) Begin Y <= A; M <=B; Z <=M; end process Ejemplo;
  • 208. Múltiples deltas en cada punto de tiempo de simulación  Varios ciclos delta en una simulación  En cada punto del tiempo de simulación se ejecuta el ciclo delta, hasta que no haya mas asignaciones o procesos en ejecución Actualización de la señal Ejecución del proceso Actualización de la señal Ejecución del proceso Tiempo de simulación Avanza a la siguiente actividad
  • 209. La cláusula “after”  La asignación de una señal es colocada en una cola de “señales actualizadas” en un tiempo en el futuro, en lugar del tiempo actual Tiempo de simulación Z <= A after 5ns; 5 ns Z puesta en esta cola
  • 210. La cláusula “wait for” Tiempo de simulación Z <= A; wait for 5 ns; 5 ns Z puesta en esta cola