Está en la página 1de 14

GUÍA DE TRABAJO PRÁCTICO - Código FGL 029

EXPERIMENTAL Versión 01
Talleres y Laboratorios de Docencia ITM Fecha 2014-08-20

1. IDENTIFICACIÓN DE LA GUÍA

Nombre de la guía: Unidad Lógico Aritmética


Código de la guía (No.): LDX42-P4
Taller(es) o Laboratorio(s) aplicable(s): Laboratorio Electrónica Digital
Tiempo de trabajo práctico estimado: 2 horas TP – 2 horas TI
Asignatura(s) aplicable(s): LDX42 Laboratorio Electrónica Digital
Programa(s) Académico(s) / Tecnología en Electrónica – Tecnología
Facultad(es): en Telecomunicaciones

CONTENIDO INDICADOR DE
COMPETENCIAS
TEMÁTICO LOGRO
Programa en
VHDL con estilo
de programación
Implementación de IC estructural sobre
El estudiante está en capacidad de comerciales de una FPGA para
diseñar e implementar circuitos digitales mediana escala de implementar IC
para la resolución de problemas prácticos, integración (Medium comerciales y
utilizando metodologías de trabajo que Scale Integration – MSI) ALU, manejando
incluyan FPGA y VHDL así como a partir de la hoja de decodificadores
herramientas de simulación datos del fabricante. y multiplexores
computacional. Unidad Aritmética para
Lógica– ALU. visualización de
la solución en
varios displays 7
segmentos

2. FUNDAMENTO TEÓRICO

Los circuitos integrados – IC (Integrated Circuits) son chips semiconductores que integran
un conjunto de circuitos digitales, cuyo objetivo es implementar una aplicación. Son
múltiples las aplicaciones que pueden realizarse con IC, entre ellas están:
1. IC para microcomputadores: incluyen varios tipos de procesamiento de datos.
2. IC para memoria: almacenan datos.
3. IC para lógica estándar: conjunto de circuitos combinacionales para implementar
funcionalidades particulares.
4. IC personalizados: circuitos dedicados a cumplir una función específica requerida por
un usuario.
Hay aproximadamente 600 tipos diferentes de IC para lógica estándar, los cuales van
desde compuertas básicas hasta complejas unidades lógico-aritméticas (ALU). Las
compuertas lógicas (AND, OR, NOT, XOR, etc.) son los IC combinacionales con más baja
escala de integración, seguido por los multiplexores, decodificadores, etc. En esta práctica
GUÍA DE TRABAJO PRÁCTICO - Código FGL 029
EXPERIMENTAL Versión 01
Talleres y Laboratorios de Docencia ITM Fecha 2014-08-20

nos ocuparemos de los IC para lógica estándar con mediana escala de integración y que
comercialmente han estado disponibles.

a) CIRCUITOS COMBINACIONALES MSI

Entre los IC comercialmente disponibles con MSI se encuentran el multiplexor,


demultiplexor, codificador, decodificador, conversores de código, comparador, sumador y
restador.

Multiplexor: son circuitos combinacionales que tienen 2N entradas, una sola salida y N
líneas de selección. Su funcionamiento se asemeja a un conmutador de varias posiciones,
que por medio de las líneas de selección lleva una de las entradas a la salida, esto es, el
multiplexor permite el envío por una sola línea de los datos presentes en múltiples líneas
(véase Figura 1). De acuerdo a su funcionamiento, el multiplexor es ideal como generador
de funciones representadas como suma de productos.

S1 S0 X

0 0 I0
0 1 I1

1 0 I2

1 1 I3

Figura 1: Representación y tabla de verdad para multiplexor 4 a 1.

Demultiplexor: realizan la función inversa a la del multiplexor, es decir, una señal de


entrada única, es obtenida en uno de los 2N canales de salida. El conmutador selecciona
el canal de salida utilizando N líneas de selección (véase Figura 2).

S1 S 0 Q3 Q2 Q1 Q0

0 0 0 0 0 Y

0 1 0 0 Y 0

1 0 0 Y 0 0

1 1 Y 0 0 0

Figura 2: Representación y tabla de verdad para demultiplexor 1 a 4.

Decodificador: activan una de 2N salidas de acuerdo a un código de entrada binario de


N bits (véase Figura 3). Generalmente el decodificador tiene sus salidas activas en bajo,
lo que lo hace ideal como generador de funciones representadas como producto de
sumas.
GUÍA DE TRABAJO PRÁCTICO - Código FGL 029
EXPERIMENTAL Versión 01
Talleres y Laboratorios de Docencia ITM Fecha 2014-08-20

Codificador: este circuito realiza la función inversa de un decodificador. Se diseña para


que por medio de un código de salida de N bits se represente la entrada activa del
conjunto de 2N posibles entradas. Generalmente las entradas tienen prioridad, y cuando
hay dos o más activas, solo la de mayor prioridad se codifica. Si ninguna entrada está
activa, se indica que el código es inválido utilizando una señal de salida V (véase Figura
4).

S S Q Q Q
Q3
1 0 2 1 0

0 0 1 1 1 0

0 1 1 1 0 1

1 0 1 0 1 1

1 1 0 1 1 1

Figura 3: Representación y tabla de verdad para decodificador de 2 a 4.

I S
I2 I1 I0 S1 V
3 0

0 0 0 0 X X 0

0 0 0 1 0 0 1

0 0 1 X 0 1 1

0 1 X X 1 0 1

1 X X X 1 1 1

Figura 4: representación y tabla de verdad para codificador de prioridad de 4 a 2.

Decodificador BCD a 7 segmentos : este circuito recibe un número decimal


codificado en binario – BCD, y a la salida activa los segmentos correspondientes de un
display alfa numérico de siete segmentos para mostrar el decimal correspondiente (véase
Figura 6). Dado que existen display de ánodo común y display de cátodo común, los
decodificadores BCD a 7 segmentos deben seleccionarse de acuerdo al display a utilizar.
Si la salida del decodificador es activa en bajo, el display es de ánodo común, en caso
contrario el display es de cátodo común. Para la tabla de verdad de la Figura 6, el
decodificador es el adecuado para display de cátodo común.
La Nexys 3 posee cuatro displays, mientras que la Nexys 4 cuenta con ocho displays. Si
se quiere activar un segmento, simplemente se pone un ‘0’ lógico en el cátodo apropiado
y un ‘0’ lógico en el ánodo del display que se quiere activar.
Conmutación de Display
La FPGA, Nexys 3 y Nexys 4, cuenta con una señal de reloj externa de 100MHz que
puede ser usada para conmutar entre los ánodos de los displays que se quieren activar.
GUÍA DE TRABAJO PRÁCTICO - Código FGL 029
EXPERIMENTAL Versión 01
Talleres y Laboratorios de Docencia ITM Fecha 2014-08-20

Es posible generar una señal de reloj de menor frecuencia a partir de la señal de reloj
externa, con el fin de poder percibir visualmente la conmutación de los displays.
La Figura 5 muestra la implementación de un reloj de baja frecuencia, slowClock, a partir
de uno de más alta frecuencia, fastClock, donde la frecuencia está dada por (1).

Figura 5: Implementación de reloj de baja frecuencia a partir del reloj base de alta
frecuencia.

f fastClock
f slowClock = (1)
2 ∗ prescaler

Por ejemplo, para un reloj rápido con frecuencia f fastClock =100 MHz y con un
prescaler=50000000 , se puede obtener un reloj lento con frecuencia
f slowClock =1 Hz . Si el prescaler es 25000000 , 5000000 o 100000 se puede
obtener frecuencias de 2 Hz , 10 Hz y 500 Hz respectivamente.

Ejemplo: Como ejemplo implementaremos un sistema que permite visualizar en un


display de 7 segmentos cuál de los 10 interruptores de entrada se activó. Los
interruptores tienen prioridad. Se tiene un sistema con 10 conmutadores de entradas,
X[9:0], donde X[9] tiene la prioridad más alta y X[0] la prioridad más baja. Se desea
mostrar en un display de 7 segmentos cuál de los 10 conmutadores se activó.
Implementar en VHDL la solución con estilo de programación estructural.
GUÍA DE TRABAJO PRÁCTICO - Código FGL 029
EXPERIMENTAL Versión 01
Talleres y Laboratorios de Docencia ITM Fecha 2014-08-20

D C B A a b c d e f g

0 0 0 0 0 0 0 0 0 0 1

0 0 0 1 1 0 0 1 1 1 1

0 0 1 0 0 0 1 0 0 1 0

0 0 1 1 0 0 0 0 1 1 0

0 1 0 0 1 0 0 1 1 0 0

0 1 0 1 0 1 0 0 1 0 0

0 1 1 0 0 1 0 0 0 0 0

0 1 1 1 0 0 0 1 1 1 1

1 0 0 0 0 0 0 0 0 0 0

1 0 0 1 0 0 0 0 1 0 0

Otros 1 1 1 1 1 1 1

Figura 6: representación y tabla de verdad para decodificador BCD a 7 segmentos.

Solución: el diagrama de bloques del sistema se muestra en la Figura 7. Se definen dos


componentes: un codificador de prioridad decimal a BCD (denominado
vhdlEncoder10ToBCD) y un decodificador BCD a 7 segmentos (denominado
vhdlDecoBCDTo7Seg).
El codificador vhdlEncoder10ToBCD recibe 10 entradas tipo STD_LOGIC (X[9:0]) y
entrega una salida correspondiente al código BCD de la entrada activa (signal
Y_bcd[3:0]), según Tabla 1.

Figura 7: Diagrama de bloques del sistema propuesto.

El módulo VHDL para la implementación del componente vhdlEncoder10ToBCD puede


verse en la Figura 8. Las señales de entrada y salida definidas en la entidad son mudas, y
se denomina respectivamente I y Code. El codificador está implementado por medio de
una arquitectura funcional, y le da a I[9] la prioridad más alta mientras que a I[0] le da la
prioridad más baja.
GUÍA DE TRABAJO PRÁCTICO - Código FGL 029
EXPERIMENTAL Versión 01
Talleres y Laboratorios de Docencia ITM Fecha 2014-08-20

Tabla 1: Tabla de verdad del codificador de prioridad decimal a BCD.


X[9 X[7 X[5 X[3 X[1 Y_bcd[3:0]
X[8] X[6] X[4] X[2] X[0]
] ] ] ] ]
1 x x x x x x x x x 1001
0 1 x x x x x x x x 1000
0 0 1 x x x x x x x 0111
0 0 0 1 x x x x x x 0110
0 0 0 0 1 x x x x x 0101
0 0 0 0 0 1 x x x x 0100
0 0 0 0 0 0 1 x x x 0011
0 0 0 0 0 0 0 1 x x 0010
0 0 0 0 0 0 0 0 1 x 0001
0 0 0 0 0 0 0 0 0 1 0000
0 0 0 0 0 0 0 0 0 0 1111

entity vhdlEncoder10ToBCD is
Port ( I : in STD_LOGIC_VECTOR (9 downto 0);
Code : out STD_LOGIC_VECTOR (3 downto 0));
end vhdlEncoder10ToBCD;

architecture archEncoder10ToBCD of vhdlEncoder10ToBCD is


begin

process(I)
begin

if(I(9) = '1') then Code <= "1001";


elsif(I(8) = '1') then Code <= "1000";
elsif(I(7) = '1') then Code <= "0111";
elsif(I(6) = '1') then Code <= "0110";
elsif(I(5) = '1') then Code <= "0101";
elsif(I(4) = '1') then Code <= "0100";
elsif(I(3) = '1') then Code <= "0011";
elsif(I(2) = '1') then Code <= "0010";
elsif(I(1) = '1') then Code <= "0001";
elsif(I(0) = '1') then Code <= "0000";
else Code <= "1111";
end if;

end process;
end archEncoder10ToBCD;

Figura 8: Código en VHDL del codificador de prioridad decimal a BCD.

El segundo componente, vhdlDecoBCDTo7Seg, recibe una entrada BCD (signal


Y_bcd[3:0]) y entrega las salidas necesarias para representar el decimal correspondiente
en el display cero, de los ocho que tiene la Nexys 4 (véase Figura 6). Y_out[7:0] se
conectan a los cátodos de los segmentos, por lo tanto son activas en ‘0’, mientras que
An_out[7:0] se conectan a los ánodos, y también son activas en ‘0’. El bit Y_out[7]
corresponde al segmento a, Y_out[6] al segmento b y así sucesivamente hasta el bit
GUÍA DE TRABAJO PRÁCTICO - Código FGL 029
EXPERIMENTAL Versión 01
Talleres y Laboratorios de Docencia ITM Fecha 2014-08-20

Y_out[0] que corresponde al punto p. Los bits 7 a 0 de An_out corresponden a los ánodos
de los ocho display, donde An_out[7] es el display de la izquierda mientras que An_out[0]
el de la derecha.
El módulo VHDL para la implementación del componente vhdlDecoBCDTo7Seg puede
verse en la Figura 9. La señal de entrada y las dos de salida definidas en la entidad son
mudas, y se denominan respectivamente BCD, Ka y An. Con la sentencia An <=
“11111110” solamente se activa el display cero, correspondiente al de más a la derecha.
Si el código de entrada no es BCD, esto es un número entre 0 y 9, en el display solo
prenderá el segmento correspondiente al punto, LSB de Ka[7:0].

entity vhdlDecoBCDTo7Seg is
Port ( Ka : out STD_LOGIC_VECTOR (7 downto 0);
An : out STD_LOGIC_VECTOR (7 downto 0);
BCD : in STD_LOGIC_VECTOR (3 downto 0));
end vhdlDecoBCDTo7Seg;

architecture archDecoBCDTo7Seg of vhdl vhdlDecoBCDTo7Seg is

begin

An <= "11111110";

Ka <= "00000011" when BCD <= "0000" else


"10011111" when BCD <= "0001" else
"00100101" when BCD <= "0010" else
"00001101" when BCD <= "0011" else
"10011001" when BCD <= "0100" else
"01001001" when BCD <= "0101" else
"01000001" when BCD <= "0110" else
"00011111" when BCD <= "0111" else
"00000001" when BCD <= "1000" else
"00001001" when BCD <= "1001" else
"11111111";

end archDecoBCDTo7Seg;

Figura 9: Decodificador BCD a 7 segmentos con activación del únicamente del display
cero.

El módulo VHDL vhdlSistema que implementa la solución a partir de los componentes


previamente definidos puede verse en la Figura 10. En este módulo se declara la entidad
con las señales de entrada y salida que se asociarán a los pines de la FPGA y que
corresponden a las relacionadas en la Figura 7. Posteriormente en la arquitectura se
declaran los componentes, tal cual se definieron en su archivo de implementación (véase
Figura 8 y Figura 9). Si el sistema requiere señales este también es el momento de
declararlas, para nuestro caso son las que vinculan a los dos componentes, esto es,
Y_bcd[3:0].
Finalmente, luego del begin de la arquitectura se instancian los componentes en el orden
adecuado para obtener la solución esperada. Cada instancia de un componente debe
etiquetarse, para nuestro caso Encoder_1 y Codificador_1.
GUÍA DE TRABAJO PRÁCTICO - Código FGL 029
EXPERIMENTAL Versión 01
Talleres y Laboratorios de Docencia ITM Fecha 2014-08-20

Nótese que en el archivo principal la arquitectura es meramente estructural, mientras que


en los archivos de los componentes la arquitectura es por flujo de datos o funcional. Esta
es una buena práctica de programación.

entity vhdlSistema is
Port ( X : in STD_LOGIC_VECTOR (9 downto 0);
Y_out : out STD_LOGIC_VECTOR (7 downto 0);
An_out : out STD_LOGIC_VECTOR (7 downto 0));
end vhdlSistema;

architecture archSistema of vhdlSistema is

-- Components

component vhdlDecoBCDTo7Seg is
Port ( Ka : out STD_LOGIC_VECTOR (7 downto 0);
An : out STD_LOGIC_VECTOR (7 downto 0);
BCD : in STD_LOGIC_VECTOR (3 downto 0));
end component;

component vhdlEncoder10ToBCD is
Port ( I : in STD_LOGIC_VECTOR (9 downto 0);
Code : out STD_LOGIC_VECTOR (3 downto 0));
end component;

-- Signals

signal Y_bcd: STD_LOGIC_VECTOR (3 downto 0);

begin

Encoder_1: vhdlEncoder10ToBCD
port map(I => X,
Code => Y_bcd);

Codificador_1: vhdlDecoBCDTo7Seg
port map(Ka => Y_out,
An => An_out,
BCD => Y_bcd);

end archSistema;

Figura 10: Implementación basada en componentes de la solución del sistema.


GUÍA DE TRABAJO PRÁCTICO - Código FGL 029
EXPERIMENTAL Versión 01
Talleres y Laboratorios de Docencia ITM Fecha 2014-08-20

b) UNIDAD ARITMÉTICA LÓGICA– ALU.


La aritmética binaria está compuesta por procesos muy básicos pero muy útiles para la
implementación de otros procesos altamente complejos como los empleados en
computación científica, computación gráfica, minería de datos, etc. Afortunadamente, las
bases de la aritmética binaría son bastante simples y con poca práctica rápidamente se
pueden poner en marcha pequeños sistemas lógico aritméticos.
Para utilizar la aritmética entera binaria es necesario conocer la representación de
números con y sin signo y los algoritmos que se emplean para la implementación de las
operaciones básicas: suma, resta, multiplicación, división, operaciones lógicas, etc. Estas
operaciones típicamente las realiza un circuito especializad: la Unidad Lógico Aritmética
(ALU – Arithmetic Logic Unit). Los sistemas digitales de uso en la actualidad cuentan con
una ALU: Smartphone, calculadora, Tablet, etc., por lo que su conocimiento y comprensión
es esencial para el tecnólogo y el ingeniero en electrónica y telecomunicaciones.

3. OBJETIVO(S)
 Utilizar VHDL para representar exactamente IC combinacionales comerciales de
media escala de integración a partir de la información entregada por los
fabricantes.
 Implementar en VHDL sobre FPGA ALUs con operaciones lógico/aritmética.

4. RECURSOS REQUERIDOS

 Estación de trabajo.
 ISE Design Suite.
 Nexys 2, Nexys 3 o Nexys 4.
 Librería IEEE.NUMERIC_STD.

5. PROCEDIMIENTO O METODOLOGÍA PARA EL DESARROLLO


a. Diseño de ALU usando MSI

Todos los grupos de estudiantes deben realizar el diseño de la ALU representada


por la Figura 11 y la Tabla 2.

Figura 11: ALU


GUÍA DE TRABAJO PRÁCTICO - Código FGL 029
EXPERIMENTAL Versión 01
Talleres y Laboratorios de Docencia ITM Fecha 2014-08-20

Tabla 2: Funciones de la ALU

La ALU puede ser vista como la unión de dos etapas, un circuito aritmético y un circuito
lógico, donde S2 realiza la selección de cada etapa a través de un MUX. S 1 y S0
seleccionan las operaciones internas de cada etapa, ver Figura 12.

Figura 12: Etapas de la ALU, circuito aritmético y circuito lógico


GUÍA DE TRABAJO PRÁCTICO - Código FGL 029
EXPERIMENTAL Versión 01
Talleres y Laboratorios de Docencia ITM Fecha 2014-08-20

Diseño del circuito aritmético


El circuito puede ser implementado usando un sumador para realizar las operaciones.
Use la hoja de datos del sumador de 4 bits 74LS83 proporcionada por el fabricante para
implementarlo apoyándose en el ejemplo de la Guía No 2 del diseño del sumador.
También es necesario diseñar un multiplexor 4 a 1 de 4 bits. Use el 74LS157 como base
siguiendo el diseño del Ejercicio 1 de la Guía No 2 para realizar las conexiones para
obtener un multiplexor 4 a 1 a partir del 74LS157. La figura muestra el diseño del circuito
aritmético. La Figura 13 muestra el diseño y la Tabla 3 las funciones del circuito
aritmético.

Figura 13: Circuito aritmético

Tabla 3: Funciones del circuito aritmético


GUÍA DE TRABAJO PRÁCTICO - Código FGL 029
EXPERIMENTAL Versión 01
Talleres y Laboratorios de Docencia ITM Fecha 2014-08-20

Diseño del circuito lógico


El circuito lógico puede ser implementado de manera sencilla usando un multiplexor 4x1
de 4 bits como se ve en la Figura Figura. Use el multiplexor 4x1 basado en el 74LS157
diseñado anteriormente para implementar el circuito.

Figura 14: Circuito lógico

Visualización del resultado


Use el 74LS157 para completar la ALU como muestra la Figura Figura. La salida de la
ALU debe ser visualizada en los Display 7 segmentos en formato decimal sin importar si
la salida proviene del circuito aritmético o lógico. Diseñe un circuito que permita convertir
la salida de la ALU de 4 bits a un numero decimal de 0 a 9. Los números mayores que 9
deben ser mostrados en 2 display, para esto use el ejemplo visto al principio de esta guía
pero realice una conmutación del ánodo para poder obtener la visualización simultanea de
los valores en los 2 display.
GUÍA DE TRABAJO PRÁCTICO - Código FGL 029
EXPERIMENTAL Versión 01
Talleres y Laboratorios de Docencia ITM Fecha 2014-08-20

b. Diseño de ALU usando librerias de VHDL para operaciones aritméticas

Se le asignará a cada grupo la implementación de una ALU con 8 operaciones


lógico/aritmética según las líneas de selección S2S1S0 y de acuerdo a la Tabla 4. El diseño
debe ser implementado usando las librerias en VHDL para facilitar la programación de las
operaciones. Las operaciones aritméticas no consideran acarreo de entrada. Las entradas
son representadas por interruptores (switches): los operando A y B cada uno de 8 bits (en
complemento a dos) y las 3 líneas de selección S 2S1S0. El resultado de la operación se
puede interpretar como un número en complemento a dos, sin importar si la operación es
lógica o aritmética, y representarse en 3 display de siete segmentos y 1 display debe
mostrar el signo (-) cuando el resultado es negativo. Igualmente, el sistema debe tener
dos leds adicionales que serán las banderas de acarreo de salida y desborde.

Tabla 4: Descripción de las operaciones de las 4 ALUs.


S2S1S0 ALU 1 ALU 2 ALU 3 ALU 4 ALU 5 ALU 6
000 Á ´
AB AB A ⨁B ´
AB Á
001 Á + B́ Á B Á + B B́ Á + B A ⨁B
010 Á ⊕ B́ A ⨁B A A+B A B́ A + B́
011 B A + B́ Á ⊕ B́ A B́ A + B́ A B́
100 A minus 1 A plus A B∗2 A /2 B∗2 AB minus 1
101 B /2 AB plus A AB minus 1 B∗2 A plus A A plus AB
110 A ∗2 B /2 A /2 A plus A B́ A ∗2 A /2
111 A plus B A ∗2 A plus A A minus 1 A minus 1 B plus B

6. PARÁMETROS PARA ELABORACIÓN DEL INFORME

Al inicio del semestre se entrega una plantilla para la elaboración del informe.

7. BIBLIOGRAFÍA

Brown, S., & Vranesic, Z. (2007). Fundamentos de lógica digital con diseño VHDL.
México, 2a.

Floyd, T. L., Caño, M. J. G., de Turiso, E. B. L., & Herrero, L. P. (1997). Fundamentos de
sistemas digitales (Vol. 7). Prentice Hall.

Mandado, E., Acevedo, J., & Fernández, C. (2009). Autómatas programables y sistemas
de automatización. Marcombo.

Mano, M. M., & Sánchez, G. D. (2003). Diseño digital. Pearson Educación.

Tocci, R. J., & Widmer, N. S. (2003). Sistemas digitales: principios y aplicaciones. Pearson
Educación.
GUÍA DE TRABAJO PRÁCTICO - Código FGL 029
EXPERIMENTAL Versión 01
Talleres y Laboratorios de Docencia ITM Fecha 2014-08-20

Wakerly, J. F. (2001). Diseño digital: principios y prácticas. Pearson educación.

Elaborado por: David Márquez – Sergio Serna


Revisado por:
Versión: 1.0
Fecha:

También podría gustarte