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
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;
A
B
?
C
D
Z

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
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
Última asignación

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)
Tiene efecto
begin
Z <= A and B;
Z <= C and D;
cuando se suspende
end process;
end SEQUENTIAL;
Diferente significado
process (A, B, C, D)
begin
Z <= A and B;
Z <= C and D;
end process;
=
Architecture X of MULTIPLE is
…
begin
Z <= A and B;
Z <= C and D;
end X;

Estas mismas dos
sentencias tienen
significado muy distinto,
dependiendo si se
ejecutan dentro o fuera
de un proceso.
¿Llamadas a 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.
Proceso llamado
EJEMPLO: process (A, B, M)
begin
Y <= A;
M <= B;
Z <= M;
end process EJEMPLO;
Evento en B
A: 0
B:1
M:0
Z:0
Actualización de valores
La asignación no
es inmediata!
Ejemplo: process(A,B,M)
begin
Y <= A;
M <=B;
Z <=M;
end process Ejemplo;
En este punto Z
sigue teniendo
valor 0!
Actualización de valores
Z no ha sido actualizada!
A
B
M
Z
T1process: Tiempo que
tarda en ejecutarse el
bloque “process”
T1process
El proceso termina la primera ejecución
Debido a que M ha cambiado de 0 a 1 (por la asignación M<=B), el
proceso vuelve a ejecutarse
Al ejecutarse esta
línea Z no es
afectada!
Segunda ejecución del proceso
Ejemplo: process(A,B,M)
Begin
Y <= A;
M <=B;
Z <=M;
end process Ejemplo;
A
B
M
Z
T1process
Actualización de valores
A
B
M
Z
T1
T2
process
process
Termina la segunda ejecución del proceso
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
Nivel Superior
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
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
Código VHDL

Síntesis
EN
EN
OUT
IN
OUT
‘Z’
‘Z’
Las herramientas de
síntesis tienen la
habilidad de inferir
automáticamente celdas
de entrada/salida tanto
salidas de 3 estados
como bidireccionales.
Estilo de código para inferir 3 estados.
if (EN = ‘0’) then
OUT_PAD <= BUS_OUT;
else
OUT_PAD <= ‘Z’;
end if;

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.
Síntesis
EN
BUS _OUT
OUT_PAD
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
EN
CORE_OUT
CORE_IN
Sentencia
concurrente
Uso de la asignación
al valor Z
BIDI
Entrada/Salida con registro

D

Q
Terminal de
Salida
CLK
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.
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 3estado.
BUFG = SR: mapea a una linea global de control
set/reset

Sintaxis BUFG


attribute BUFG: string;
attribute BUFG of signal_name: signal is
“{CLK|OE|SR|DATA_GATE}”;
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
Símbolo Ejemplo
A[7:0]
B[7:0]
Sel
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
Declaraciones legales
signal
Z_BUS: bit_vector (3 downto 0)
signal
C_BUS: bit_vector (1 to 4)
Declaraciones ilegales
signal
Z_BUS: bit_vector (0 downto 3)
signal
C_BUS: bit_vector (3 to 0)
Signal
1
2
3
4
3
2
1
0
C_BUS
Signal
Z_BUS
bit string literal.
signal SIG_A: bit_vector (7 downto 0)
7 6 5 4 3 2 1 0
SIG_A <= B”1110_0011” --(22710)
SIG_A
B”11111010”
X”FA”
O”372”

B”1111_1010”
B”11111010”
B”011111010”
1 1 1 0 0 0 1 1
Designación
Base
B
Binaria
O
Octal
X
Hexadecimal
Es una notación para especificar el valor de un
bit_vector.
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
signal
Z_BUS: bit_vector(3 downto 0);
C_BUS: bit_vector(1 to 4);
Z_BUS <= C_BUS;
Z_BUS(3) <= C_BUS(1);
Z_BUS(2) <= C_BUS(2);
Z_BUS(1) <= C_BUS(3);
Z_BUS(0) <= C_BUS(4);
Signal
1
2
3
4
3
2
1
0
C_BUS
Signal
Z_BUS
Parte de un arreglo. (Slices)

Una parte de un arreglo unidimensional, en general, y un bit_vector en
particular puede ser referenciado, inclusive por un solo elemento. La
dirección de esta parte (es decir, to o downto) debe corresponder con la
dirección del arreglo declarado.
signal
signal
Z_BUS: bit_vector(3 downto 0);
C_BUS: bit_vector(1 to 4);
legal
Z_BUS (3 downto 0) <=“00”
C_BUS:(2 to 4) <= Z_BUS (3 downto 1);
ilegal
Z_BUS (0 to 1) <=“111”
Los slices de vectores de bit son útiles
debido a que a menudo pueden ser
vistos como colecciones de campos,
donde cada campo lleva una pieza de
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
signal
signal
signal
signal
Z_BUS: bit_vector(3 downto 0);
A,B,C,D: bit;
BYTE: bit_vector(7 downto 0);
A_BUS: bit_vector(3 downto 0);
B_BUS: bit_vector(3 downto 0);
Z_BUS<= A & B & C & D
BYTE<=A_BUS & B_BUS
Agregados.

Otro 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.
signal
signal
Z_BUS: bit_vector(3 downto 0);
A,B,C,D: bit;
Z_BUS<=(A, B, C, D);
Z_BUS(3)<=A;
Z_BUS(2)<=B;
Z_BUS(1)<=C;
Z_BUS(0)<=D;
Especificando los elementos por nombre.


Es posible asignar a los
elementos de un arreglo
por nombre o por
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.
signal
signal
signal
X: bit_vector(3 downto 0);
A,B,C,D: bit;
BYTE:bit_vector(7 downto 0)
X<= (3=>’1’, 1 downto 0 =>’1’, 2=>B)
nombre
rango
nombre
Others, soporte para 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.
signal
signal
signal
Z_BUS: bit_vector (3 downto 0);
A,B,C,D: bit;
BYTE:bit_vector(7 downto 0);
X<= (3=>’1’, 1 =>’0’, others=>B)
Descargar

VHDL