Está en la página 1de 42

Interfaz gráfica del usuario

Todo entorno de interfaz gráfica al usuario contiene las siguientes partes que
pueden ser realizadas en forma secuencial:

 Ejecución del programa (Se tiene acceso a las herramientas de diseño)

 Definición del proyecto de síntesis (Definición de un nuevo proyecto, o el llamado


de uno ya existente)

 Edición del archivo fuente (Es decir, el archivo VHDL que describe al circuito)
 Compilación (Se efectúa sobre un archivo VHDL previamente creado y realiza
la interpretación y síntesis del circuito descrito)

 Síntesis (Se toma el resultado de la compilación y se convierte en un mapa de


interconexiones entre los diversos elementos que contiene un circuito
programable donde se vacía la información del proyecto)

 Simulación (Acción que se realiza para poder verificar su correcta definición, y


sobre todo, que realice la tarea para la cual fue creado)
Elementos básicos de VHDL
El lenguaje descriptivo VHDL (Very high-speed integrated circuit Hardware Language)
es un lenguaje estructurado y tiene ciertas similitudes
con PASCAL y C. Como todo lenguaje estructurado, éste consta de varios bloques de
declaraciones, cada uno de ellos con una función particular.

 Bloque de declaración de librerías

 Declaración de terminales externas

 Descripción de la arquitectura del circuito

 Banco de pruebas
 Declaración de librerías :

Library IEEE;
Use IEEE.std_logic_1164.all; Lógica estándar
Use IEEE.std_logic_arith.all; Aritmética estándar
Use IEEE.std_logic_unsigned.all; Aritmética estándar

Algunos proveedores del paquete de diseño VHDL agregan otras librerías adicionales a la librería
estándar y se debe tener cuidado al utilizarlas ya que pueden no ser compatibles con otros entornos.

 Declaración de terminales externas :

Para nombrar las variables de las terminales externas se pueden utilizar todos los caracteres
alfanuméricos como las letras y los números, además de la barra inferior. VHDL no es sensitivo
al tipo al tipo de letra y es indistinto el uso de mayúsculas y minúsculas.
Reglas para dar nombre a una terminal:

1 Siempre se debe iniciar con una letra


2 Después de la primera letra se puede combinar letras, números y la barra inferior
3 En principio, la longitud de los nombres de las variables no está limitado
4 No se pueden utilizar dos barras inferiores consecutivas
5 No se puede utilizar una barra inferior al final del nombre de la variable
6 No se pueden utilizar palabras reservadas de VHDL
Las terminales que se pueden declarar en VHDL son de cuatro tipos diferentes y pueden
ser:

1. Entradas simples
2. Salidas simples
3. Terminales bidireccionales
4. Salida con retroalimentación

Tipo de terminal VHDL


Entrada simple in
Salida simple out
Terminal bi-direccional inout
Salida con retroalimentación buffer
Ejemplo:
Entity caja_negra is
Port(
A,B:in std_logic; -- Entradas simples
X :out std_logic; --Salida simple
Y :inout std_logic; --Bi-direccional
W :buffer std_logic --Salida retroalimentada
);
End caja_negra;

El tipo std_logic corresponde a lógica


estándar y es el más utilizado en las
descripciones de circuitos e indica que la
terminal es de un solo bit.
Entity caja_negra is
Port(
A,B:in std_logic_vector(14 downto 0); -- Entradas vectoriales
X :out std_logic; --Salida simple
Y :inout std_logic; --Bi-direccional
W :buffer std_logic --Salida retroalimentada
);
End caja_negra;

El tipo std_logic_vector corresponde a


lógica estándar e indica que la terminal es
un vector de 15 bits.
Entity caja_negra is
Port(
A,B:in std_logic_vector(0 to 14); -- Entradas vectoriales
X :out std_logic; --Salida simple
Y :inout std_logic; --Bi-direccional
W :buffer std_logic --Salida retroalimentada
);
End caja_negra;

El tipo std_logic_vector corresponde a


lógica estándar e indica que la terminal es
un vector de 15 bits.
 Descripción de la arquitectura del circuito:

La sección de arquitectura contiene tres campos principales: componentes externos,


señales internas y descripción .

Architecture Nombre_de_la_arquitectura of Nombre_de_la_entidad is

--Tipos y señales internas


type Tipo_1 is (Conjunto de valores del tipo 1); --Define un tipo especial
type Tipo_n is (Conjunto de valores del tipo n); --Define un tipo especial
signal Senal_1:Tipo_especial_1; -- Declara Senal_1 del tipo Tipo_1
signal Senal_n:Tipo_especial_n; -- Declara Senal_n del tipo Tipo_n
signal S_1: std_logic; -- Declaración estandar
signal S_2: std_logic_vector(V1 downto 0); -- Declaración estandar
--Componentes externos
component Componente_1
port(
--Prototipo del componente 1
);
end component;

...

component Componente_s
port(
--Prototipo del componente s
);
end component;

-- Sentencias descriptivas

End Nombre_de_la_arquitectura;
Sentencias descriptivas

•Asignación directa
 Sentencias concurrentes •Asignación condicional
•Llamado a componentes externos

•if
 Sentencias secuenciales •case
•for
Sentencias concurrentes
 Asignación directa:
La asignación directa se lleva a cabo de manera incondicional
Y<=X;
B:in std_logic;
C:out std_logic;
Z:in std_logic_vector(3 downto 0);
W:out std_logic_vector(7 downto o);
D<=‘0’; E<=“111”;

 Asignación condicional: Nota: La asignación


Asignación binaria directa es la única que
F<=Valor_1 when (condiccion_1) else Valor_2; puede formar parte de un
proceso secuencial.
Asignación múltiple
F<=Valor_1 when (condiccion_1) else
Valor_2 when (condiccion_2) else
. . .
Valor_n when (condiccion_n) else
Valor_por_omision;

 Llamado de componentes externos:


Elemento_n: Componente_n generic map(Asignación_de_variables);
Elemento_n: Componente_n port map(Asignación_de_variables);
Sentencias secuenciales

El nombre de sentencias secuenciales se deriva del hecho de que éstas son capaces de
formar elementos de memoria, los cuales requieren que el sistema se describa en términos
de la lógica secuencial. Las sentencias secuenciales tienen que ser englobadas dentro de
un proceso.

Nombre_del_Proceso: process(Lista_de_sensitividades)
Begin
--Sentencias secuenciales
end process Nombre_del_Proceso;
if, case y for
if case
if (condicion_1) then case vector_de_seleccion is
--Conjunto de asignaciones 1 when condicion_1=>
elsif (condicion_2) then --Conjunto de asignaciones 1
--Conjunto de asignaciones 2 when condicion_2=>
… --Conjunto de asignaciones 2
elsif (condicion_n) then …
--Conjunto de asignaciones n when condicion_n=>
else --Conjunto de asignaciones n
--Conjunto de asignaciones por omision when others =>
end case; --Conjunto de asignaciones por omision
end case;

for
for i in Inicio to Fin loop
--Asignaciones recursivas
end loop;
Diagrama de bloque de un circuito secuencial

Entradas Salidas
Circuito
combinacional
Elementos de
memoria
Máquina Mealy

Y
Combinacional
2

X
Combinacional N Memoria
1
P

En la máquina Mealy se pueden presentar señales transitorias no deseadas en la


salida, debido a que cualquier cambio en la entrada las afecta.
Máquina Moore
Y
Combinacional
2

Combinacional N Memoria
1
P

Las máquinas Moore los cambios en las salidas solamente atienden a los cambios
de estado y las entradas no tienen una conexión directa a la salida.
Nota importante:

Con las sentencias secuenciales se pueden describir circuitos combinacionales y


secuenciales, pero es importante durante la realización de la lógica combinacional
mediante estas sentencias, considerar los casos por omisión, si no se incluyen la
condición por omisión, el circuito resultante es un bloque secuencial, es decir,
elementos de memoria.

El uso de la estructura if debe realizarse con mucho cuidado para evitar una síntesis
errónea. Principalmente el if se utiliza en procesos secuenciales, no combinacionales,
y una asignación con el if debe estar siempre acompañada de la asignación
concurrente de los valores por omisión.
Es momento de empezar
a
programar
Compuerta NAND

A
F

A B F
0 0 1
0 1 1
1 0 1
1 1 0
Pasos para simular
N. Actividad a realizar Comentario

1 En la barra de tareas seleccionar Simulation

2 Dentro del submenú de Simulation seleccionar


Initialize Simulation
3 Seleccionar New Waveform Se activan las herramientas de
simulación y se muestra la
pantalla de waveform editor .
4 Seleccionar la casilla Add Signals Aparece una ventana con la
opción de seleccionar las
terminales a mostrar en la
simulación.
5 Seleccionar todas las terminales Colocar el cursor en la ventana de
las terminales; con el botón
derecho de mouse seleccionar
todas , agregar y cerrar.
N. Actividad a realizar Comentario
6 Inicio de estimulación las entradas Una vez agregadas las terminales,
éstas se mostrarán en el waveform
editor, hacer clip con el botón
derecho del mouse sobre una de
las terminales y seleccionar
Simulators.
7 Seleccionar el tipo de estimulación Al seleccionar Simulators se abre
la ventana de opciones de
estimulación, se selecciona una ,
se aplica y se cierra.
8 Repetir los pasos 6 y 7 para todas las terminales
de entrada.
9 Con F5 se puede correr la simulación. Existen
otras formas que se descubrirán mientras se
avanza con la familiarización del entorno.

Nota:
Ver las imágenes de las siguientes diapositivas que corresponden a cada actividad
Actividad # 1 y # 2
Actividad # 3

Waveform editor

New Waveform
Actividad # 4 y #5

Add Signals
Actividad # 6
Actividad # 7
Compuertas_Basicas

B A F(1) F(2) F(3) F(4) F(5) F(6) F(7)


0 0 1 1 1 1 0 0 0
0 1 0 1 1 0 0 1 1
1 0 1 0 1 0 0 1 1
1 1 0 0 0 0 1 1 0
Función_lógica_simple

Z Y X X and Y Y and Z F
0 0 0 0 0 0
0 0 1 0 0 0
0 1 0 0 0 0
0 1 1 1 0 1
1 0 0 0 0 0
1 0 1 0 0 0
1 1 0 0 1 1
1 1 1 1 1 1
Conmutadores

Uno de los bloques funcionales de mayor relevancia en la electrónica digital son los
conmutadores, también conocidos como multiplexores y demultiplexores. El
principio básico de un conmutador es el de permitir el paso selectivo de una o
varias señales hacia uno o varios puntos.

Multiplexor 2-1 Demultiplexor 1-2


Mux_8_1

S2 S1 S0 Y
0 0 0 I0
0 0 1 I1
0 1 0 I2
0 1 1 I3
1 0 0 I4
1 0 1 I5
1 1 0 I6
1 1 1 I7
Demux_2_4

S1 S0 Y3 Y2 Y1 Y0
0 0 0 0 0 X
0 1 0 0 X 0
1 0 0 X 0 0
1 1 X 0 0 0
Circuitos aritméticos

Un grupo muy importante de circuitos combinacionales lo conforman los siguientes


bloques aritméticos:

 Sumadores
 Restadores
 Multiplicadores
Sumadores
El elemento más básico de los circuitos aritméticos es el medio sumador. Este circuito
suma dos palabras de 1 bit y entrega como resultado la suma y el acarreo correspondiente.

A B C S
0 0 0 0
0 1 0 1
1 0 0 1
1 1 1 0
El sumador medio no contempla la posibilidad de sumar en forma secuencial y para poder
realizar esto, se necesita un sumador completo.

A B Ci Co S
0 0 0 0 0
0 0 1 0 1
0 1 0 0 1
0 1 1 1 0
1 0 0 0 1
1 0 1 1 0
1 1 0 1 0
1 1 1 1 1
En una aplicación práctica no resulta útil sumador 2 ó 3 bits, ya que normalmente se
utilizan sumadores con una mayor cantidad de bits. El diseño de estos sumadores más
grandes tienen tres formas principales de ser realizado:

• Cascada
• 2-niveles
• Acarreo adelantado

En cascada
Realización en dos niveles

A1 B1 A0 B0 C0 Acarreo Salidas El diseño por medio de tablas de


interno verdad para un sumador de n bits,
C1 S0 C2 S1 pronto aumenta la complejidad, por
la enorme cantidad de variables
0 0 0 0 0 0 0 0 0 involucradas. Para un bit se tiene 3
0 0 0 0 1 0 1 0 0 variables de entrada, para dos bits
0 0 0 1 0 0 1 0 0 ya son 5 las variables de entrada y
cada bit adicional contribuye con 2
0 0 0 1 1 1 0 0 1 variables más. Este proceso es muy
. . . . . complicado y es preferible utilizar la
. . . . . recursión para inferir las ecuaciones
. . . . . lógicas del sumador, en vez de
aplicar los métodos de minimización
1 1 1 1 1 1 1 1 1 directa y después reducir las
expresiones resultantes.
Otra forma que puede ser realizada en dos niveles es usando directamente las
ecuaciones vistas anteriormente para un sumador completo.

Para obtener los siguientes bits se utiliza la recursión de fórmulas de tal manera que:

Las ecuaciones para los bits superiores del sumador en dos niveles de compuertas se
complica extremadamente, de hecho, llega un punto que los circuitos requieren de
tantas entradas que la velocidad comienza a decrecer y ya no es una ventaja el diseño
en dos niveles. Sin embargo, existe un sumador denominado acarreo de propagación
adelantada o CLA (Carry Look-Ahead). La técnica CLA utiliza dos niveles de lógica que
se traducen en cuatro niveles de compuertas. El retardo es mayor que en el sumador
en dos niveles, pero es mucho menor que en el sumador en cascada.
La técnica CLA consiste en generar un primer nivel lógico con funciones parciales y en
base a estas, generar las funciones de suma. Las funciones intermedias de un sumador
con acarreo de propagación adelantada se llaman generadora, Gi, y propagadora Pi,
respectivamente.

A partir de estas funciones se pueden definir las operaciones de suma y de acarreo en


un segundo nivel lógico utilizando las siguientes relaciones:

Para que el segundo nivel lógico permanezca en una realización de dos niveles de
compuertas, se desarrollan, recursivamente, las expresiones para el acarreo, de tal
forma que:
Sección de propagación y Sección CLA Sección de suma
generación

Sumador completo de 4 bits con CLA


Restadores
Al igual que la suma binaria, también se puede definir la operación de resta binaria. Como
la resta no es conmutativa se tiene establecer el orden de los operandos , según una
convención.

Restador medio Restador completo


A B β R βi A B βo R
0 0 0 0
0 1 1 1 0 0 0 0 0
1 0 0 1 0 0 1 1 1
1 1 0 0 0 1 0 0 1
0 1 1 0 0
1 0 0 1 1
1 0 1 1 0
1 1 0 0 0
1 1 1 1 1
Para la realización de restadores de un mayor número de bits se puede utilizar las
mismas técnicas utilizadas en los sumadores: conexión en cascada, dos niveles y CLA.
Otra forma de realizar un restador es basar el diseño en un sumador ya existente y un
circuito que obtenga el complemento 2 de la palabra binaria B.

Selector de operandos

También podría gustarte