14. Componentes combinacionales básicos Oliverio J. Santana Jaria Sistemas Digitales Ingeniería Técnica en Informática de Sistemas Curso 2006 – 2007 Introducción Los circuitos combinacionales son aquellos cuyo valor de salida depende única y exclusivamente de los valores de entrada Los circuitos complejos suelen diseñarse reutilizando determinados componentes combinacionales básicos de uso común Los objetivos de este tema son: Describir algunos de los componentes combinacionales básicos más frecuentemente usados en el diseño de circuitos Describir como se implementan estos componentes utilizando puertas lógicas básicas Componentes combinacionales básicos 2 1 Introducción Introducción Circuitos comparadores Codificación/Decodificación Selección/Distribución de datos Convertidores de código Circuitos de paridad Buses y salidas triestado Desplazamiento/Rotación Dispositivos programables Resumen y bibliografía Componentes combinacionales básicos 3 Circuitos comparadores La función básica de un circuito comparador consiste en comparar las magnitudes de dos cantidades binarias para determinar la relación entre ellas En su forma más sencilla, un circuito comparador determina si dos números son iguales o no Resulta frecuente ampliar la funcionalidad de un circuito comparador para que, en caso de que los dos números comparados no sean iguales, sea capaz de distinguir cuál de los dos es el mayor Componentes combinacionales básicos 4 2 Igualdad entre magnitudes La puerta XOR puede ser utilizada como comparador básico, ya que su salida es 0 si las entradas son iguales y 1 si las entradas son diferentes Componentes combinacionales básicos 5 Igualdad entre magnitudes Por ejemplo, para comparar números binarios de dos bits serán necesarias dos puertas XOR Si los números son iguales los dos bits también lo serán Si los números son distintos, alguno de los bits será distinto Este esquema es fácilmente extensible para números con mayor cantidad de bits Componentes combinacionales básicos 6 3 Desigualdad entre magnitudes Además de indicar si los números comparados son iguales, es frecuente que los circuitos comparadores indiquen cuál de los dos números es el mayor Esto implica la existencia de tres salidas en el circuito: Indicación de si los dos números son iguales Indicación de si el primer número es el mayor Indicación de si el segundo número es el mayor Componentes combinacionales básicos 7 Desigualdad entre magnitudes El procedimiento general para comparar dos números consiste en buscar una desigualdad en cualquiera de las posiciones, comenzando por el bit más significativo La relación entre los números queda establecida en el momento en que se encuentre la primera desigualdad Si A = 1 y B = 0 entonces A > B Si A = 0 y B = 1 entonces A < B i i i i Si se examinan todas las posiciones y no se encuentra ninguna desigualdad, entonces los números son iguales Componentes combinacionales básicos 8 4 Desigualdad entre magnitudes También resulta útil tener tres entradas para permitir la conexión en cascada de circuitos comparadores Cuando se realice este tipo de conexión en cascada es importante tener en cuenta que siempre será prioritaria la salida del comparador correspondiente a los bits más significativos Componentes combinacionales básicos 9 Diseño de un circuito comparador Un circuito comparador universal que permita comparar dos números X e Y puede diseñarse conectando módulos sencillos que comparen pocos bits Cada módulo necesitará sólo dos salidas: G y L G=1X>Y L=1X<Y G=0X≤Y L=0X≥Y Si G = 0 y L = 0 al mismo tiempo X = Y La conexión de estos módulos para generar un circuito comparador puede hacerse en serie o en paralelo Componentes combinacionales básicos 10 5 Diseño de un circuito comparador El diseño de un circuito comparador de números de dos bits puede realizarse usando el método de Karnaugh G = A1B1 + A1A0B0 + B1A0B0 L = A1B1 + A1A0B0 + B1A0B0 Componentes combinacionales básicos 11 Diseño de un circuito comparador Dadas estas ecuaciones, el diseño del circuito comparador de números de dos bits queda como sigue: G = A1B1 + A1A0B0 + B1A0B0 L = A1B1 + A1A0B0 + B1A0B0 Componentes combinacionales básicos 12 6 Diseño de un circuito comparador Una implementación en serie de un comparador usaría un módulo de dos bits para comparar cada pareja de bits de ambos números Hay que tener en cuenta que el resultado de la comparación de los bits más significativos siempre es prioritaria respecto a los demás bits Componentes combinacionales básicos 13 Diseño de un circuito comparador El problema de la conexión en serie es que el retardo del circuito global depende de la propagación de la señal por todos los módulos Esto puede resolverse con una conexión paralela en la que primero se comparan parejas, luego parejas de parejas y así sucesivamente Componentes combinacionales básicos 14 7 Introducción Introducción Circuitos comparadores Codificación/Decodificación Selección/Distribución de datos Convertidores de código Circuitos de paridad Buses y salidas triestado Desplazamiento/Rotación Dispositivos programables Resumen y bibliografía Componentes combinacionales básicos 15 Circuitos decodificadores La función básica de un decodificador es detectar la presencia de una determinada combinación de bits, denominada código, en sus entradas Un decodificador indicará la presencia de un código en sus entradas por medio de un determinado nivel de salida, ya sea alto o bajo En su forma más general, un decodificador tendrá n entradas y 2n salidas para indicar cada una de las posibles combinaciones de valores de las entradas Componentes combinacionales básicos 16 8 Activación a nivel alto Por ejemplo, supongamos que queremos indicar cuándo aparece la combinación 1001 en las entradas de un circuito por medio de un nivel alto en la salida Se puede utilizar una puerta AND como elemento básico de decodificación, ya que sólo genera un nivel alto a la salida si todas las entradas están a nivel alto A B X = ABCD C D Componentes combinacionales básicos 17 Entrada de habilitación Los circuitos decodificadores suelen incorporar también una entrada de habilitación E para habilitar o no su funcionamiento Cuando la entrada de habilitación de un decodificador activo a nivel alto esté a 0, todas las salidas serán 0 independientemente de la combinación de valores de las entradas Cuando la entrada de habilitación esté a 1, la salida correspondiente a la combinación de valores de las entradas será 1 y todas las demás salidas serán 0 Componentes combinacionales básicos 18 9 Decodificadores activos a nivel alto Un decodificador de 1 entrada tendrá 2 salidas, tal y como se muestra a continuación C0 = E·A0 C1 = E·A0 Componentes combinacionales básicos 19 Decodificadores activos a nivel alto El diseño anterior puede expandirse fácilmente para obtener un decodificador de 2 entradas y 4 salidas C0 = E·A1·A0 C1 = E·A1·A0 C2 = E·A1·A0 C3 = E·A1·A0 Componentes combinacionales básicos 20 10 Decodificadores activos a nivel alto También resulta posible construir decodificadores mayores, por ejemplo con 3 entradas y 8 salidas, a partir de los bloques anteriores El diseño incluirá varios niveles de decodificadores, donde los de un nivel habilitan o no a los del siguiente Componentes combinacionales básicos 21 Activación a nivel bajo Supongamos ahora que queremos indicar cuándo aparece la combinación 1001 en las entradas de un circuito por medio de un nivel bajo en la salida Se puede utilizar una puerta NAND como elemento básico de decodificación, ya que sólo genera un nivel bajo a la salida si todas las entradas están a nivel alto A B X = ABCD C D Componentes combinacionales básicos 22 11 Decodificadores activos a nivel bajo Por ejemplo, un decodificador activo a nivel bajo con 4 líneas de entrada necesitará 16 salidas para poder decodificar todas las posibles combinaciones de entrada Componentes combinacionales básicos 23 Decodificadores activos a nivel bajo Otro ejemplo es el decodificador BCD a decimal, que tiene 4 líneas de entrada que se corresponden con un código BCD 8421 Este decodificador sólo necesita 10 líneas de salida, correspondientes a los dígitos decimales, ya que hay que ignorar 6 de las posibles combinaciones de entrada Componentes combinacionales básicos 24 12 Decodificadores activos a nivel bajo Otra aplicación es usar un decodificador con 4 líneas de entrada, correspondientes a un código BCD, y 7 líneas de salida que controlen un display de 7 segmentos Componentes combinacionales básicos 25 Generación de funciones lógicas Cada salida de un decodificador se corresponde con un término producto o con un término suma, por lo que podemos usar decodificadores para implementar funciones lógicas A B C F Por ejemplo, dada esta tabla de verdad, podemos obtener una expresión como suma de productos o como producto de sumas Componentes combinacionales básicos 0) 1) 2) 3) 4) 5) 6) 7) 0 0 0 0 1 1 1 1 0 0 1 1 0 0 1 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 F(A,B,C) = ∑(1,3,5,7) F(A,B,C) = ∏(0,2,4,6) 26 13 Generación de funciones lógicas Para generar una función expresada como suma de productos con un decodificador activo a nivel alto será necesario conectar las salidas correspondientes a una puerta OR F(A,B,C) = ∑(1,3,5,7) Componentes combinacionales básicos 27 Generación de funciones lógicas Para generar una función expresada como suma de productos con un decodificador activo a nivel bajo será necesario conectar las salidas correspondientes a una puerta NAND F(A,B,C) = ∑(1,3,5,7) Componentes combinacionales básicos 28 14 Generación de funciones lógicas Para generar una función expresada como producto de sumas con un decodificador activo a nivel alto será necesario conectar las salidas correspondientes a una puerta NOR F(A,B,C) = ∏(0,2,4,6) Componentes combinacionales básicos 29 Generación de funciones lógicas Para generar una función expresada como producto de sumas con un decodificador activo a nivel bajo será necesario conectar las salidas correspondientes a una puerta AND F(A,B,C) = ∏(0,2,4,6) Componentes combinacionales básicos 30 15 Circuitos codificadores Un circuito codificador realiza, en esencia, la función contraria a un circuito decodificador Cuando se activa una de sus líneas de entrada, un circuito codificador generará una salida codificada correspondiente a la entrada En su forma más general, un decodificador tendrá n salidas y 2n entradas que se corresponderán a cada una de las posibles combinaciones de salida Componentes combinacionales básicos 31 Codificadores activos a nivel alto Un codificador activo a nivel alto generará una combinación de salida si la entrada correspondiente está a nivel alto Por ejemplo, un codificador de decimal a BCD 8421 tendrá 10 líneas de entrada, que se corresponden con los dígitos decimales, y 4 líneas de salida para codificarlas Componentes combinacionales básicos 32 16 Codificadores activos a nivel alto Cada una de las líneas de salida se corresponde a uno de los bits del código BCD 8421 A0 = 1 + 3 + 5 + 7 + 9 A1 = 2 + 3 + 6 + 7 A2 = 4 + 5 + 6 + 7 A3 = 8 + 9 Componentes combinacionales básicos 33 Codificadores activos a nivel bajo Un codificador también puede ser activo a nivel bajo, es decir, generará una combinación de salida cuando la entrada correspondiente esté a nivel bajo Por ejemplo, un codificador de octal a binario tendrá 8 líneas de entrada, correspondientes a los dígitos octales, y 3 líneas de salida para codificarlos en binario Componentes combinacionales básicos 34 17 Codificadores con prioridad Si se activa más de una línea de entrada en un circuito codificador, el resultado de salida no será el esperado Para evitar esto es necesario dar un orden de prioridad a las entradas, de manera que siempre que haya varias entradas activadas sólo se tenga en cuenta una de ellas Un codificador con prioridad también puede tener una salida adicional, denominada CUALQUIERA, que se activará si alguna de las entradas está activada Componentes combinacionales básicos 35 Codificadores con prioridad Un codificador con prioridad activo a nivel alto con 2 entradas tendrá 1 línea de salida, tal y como se muestra a continuación A0 = D1 Cualquiera = D0+D1 Componentes combinacionales básicos 36 18 Codificadores con prioridad El diseño anterior puede expandirse fácilmente para obtener un decodificador de 2 entradas y 4 salidas A0 = D1·D2+D3 A1 = D2+D3 Cualquiera = D0+D1+D2+D3 Componentes combinacionales básicos 37 Introducción Introducción Circuitos comparadores Codificación/Decodificación Selección/Distribución de datos Convertidores de código Circuitos de paridad Buses y salidas triestado Desplazamiento/Rotación Dispositivos programables Resumen y bibliografía Componentes combinacionales básicos 38 19 Circuitos multiplexores o selectores Un multiplexor o selector es un circuito que permite dirigir la información digital procedente de varias líneas de entrada hacia una única línea de salida Su principal objetivo es permitir que información procedente de varias fuentes pueda transmitirse a un destino común a través de una línea compartida Un multiplexor posee 2n líneas de entrada y una única línea de salida, además de n entradas de selección que permiten decidir qué entrada se conecta a la salida Componentes combinacionales básicos 39 Diseño de circuitos multiplexores Este diagrama muestra el diseño de un circuito multiplexor con 2 entradas de datos y 1 entrada de selección que permite elegir entre ellas Y = S·D0 +S·D1 Componentes combinacionales básicos 40 20 Diseño de circuitos multiplexores Este otro diagrama muestra el diseño de un multiplexor con 4 entradas de datos, por lo que serán necesarias 2 entradas de selección para elegir entre ellas Y=S0S1D0+ S0S1D1+ S0S1D2+ S0S1D3 Componentes combinacionales básicos 41 Diseño de circuitos multiplexores Un multiplexor con 8 entradas de datos y 3 de selección puede construirse usando varios multiplexores menores Un primer nivel de multiplexores permitirá elegir entre cada dos entradas, el siguiente nivel elegirá entre las parejas anteriores y así sucesivamente Componentes combinacionales básicos 42 21 Diseño de circuitos multiplexores Un multiplexor de 8 entradas de datos también puede implementarse usando un decodificador de 3 entradas para controlar las señales de selección Esta técnica sólo puede usarse para multiplexores pequeños, pues, en otro caso, el coste del decodificador y la puerta OR de salida sería demasiado grande Componentes combinacionales básicos 43 Generación de funciones lógicas Una aplicación de los multiplexores es la generación de funciones lógicas El número de entradas de selección equivale al número de variables de la función El número de entradas de datos equivale al número de posibles combinaciones de entrada Dada una tabla de verdad, las entradas del multiplexor correspondientes a las líneas de la tabla con valor de salida 1 se fijan a 1 El resto de las entradas de datos se fijan a 0 Componentes combinacionales básicos 44 22 Generación de funciones lógicas Dada una función de 3 variables, podemos representarla utilizando un multiplexor con 3 entradas de selección F(A,B,C) = ∑(1,2,4,5) F(A,B,C) = ∏(0,3,6,7) 0) 1) 2) 3) 4) 5) 6) 7) A B C F 0 0 0 0 1 1 1 1 0 1 1 0 1 1 0 0 0 0 1 1 0 0 1 1 0 1 0 1 0 1 0 1 MUX Componentes combinacionales básicos 45 Generación de funciones lógicas Una función de 3 variables también se puede realizar usando un multiplexor con sólo 2 entradas de selección, usando un mapa de Karnaugh como ayuda F(A,B,C) = ∑(1,2,4,5) F(A,B,C) = ∏(0,3,6,7) C 0 1 00 0 01 1 1 0 0 1 AB 11 0 10 1 MUX D0 D1 D3 D2 Componentes combinacionales básicos 46 23 Generación de funciones lógicas También podemos realizar una función de 4 variables con un multiplexor de 3 entradas de selección, siempre dejando en las columnas del mapa una única variable F(A,B,C,D) = ∑(1,2,4,5,9,10,11) F(A,B,C,D) = ∏(0,3,6,7,8,12,13,14,15) D 0 1 000 0 001 1 1 0 0 1 0 0 1 1 ABC 011 0 010 1 110 0 111 0 101 1 100 0 D0 D1 MUX D3 D2 D6 D7 D5 D4 Componentes combinacionales básicos 47 Diseño de circuitos codificadores Los multiplexores o selectores también pueden usarse para implementar un circuito codificador con prioridad a partir de circuitos codificadores simples Un codificador diseñado así tendrá varios niveles formados por codificadores más sencillos que agrupan las líneas de entrada Las salidas CUALQUIERA de los codificadores se propagarán hasta que se obtenga el código de salida Componentes combinacionales básicos 48 24 Diseño de circuitos codificadores La salida CUALQUIERA de los codificadores de un mismo nivel se utilizará como entrada de selección para circuitos multiplexores que generen los bits menos significativos de cada parte del código Componentes combinacionales básicos 49 Circuitos demultiplexores o distribuidores Un demultiplexor realiza la función contraria a la de un multiplexor, es decir, distribuir los datos provenientes de una línea de entrada entre varias líneas de salida Su principal objetivo es permitir que información procedente una fuente común que llega por una línea compartida pueda transmitirse a varios destinos Un demultiplexor posee una única línea de entrada y n 2 líneas de salida, además de n entradas de selección que permiten decidir qué salida se conecta a la entrada Componentes combinacionales básicos 50 25 Diseño de circuitos demultiplexores Este diagrama muestra el diseño de un circuito demultiplexor con 4 salidas de datos y 2 entradas de selección que permiten elegir entre ellas S0 S1 D0 D1 D2 D3 0 0 E X X X 0 1 X E X X 1 0 X X E X 1 1 X X X E Componentes combinacionales básicos 51 Diseño de circuitos demultiplexores La implementación de un demultiplexor puede realizarse usando un circuito decodificador con una entrada de habilitación Las entradas de datos serán usadas como entradas de selección La entrada de habilitación será usada como entrada de datos ▫ Cuando esté a 0, todas las salidas estarán a 0 ▫ Cuando esté a 1, la salida correspondiente al código de entrada estará a 1 Componentes combinacionales básicos DEMUX 52 26 Introducción Introducción Circuitos comparadores Codificación/Decodificación Selección/Distribución de datos Convertidores de código Circuitos de paridad Buses y salidas triestado Desplazamiento/Rotación Dispositivos programables Resumen y bibliografía Componentes combinacionales básicos 53 Convertidores de código A lo largo de los años se ha ido creando una gran cantidad de métodos distintos para convertir un código en otro usando circuitos digitales En general, es posible convertir entre dos códigos cualesquiera planteando las funciones apropiadas y simplificándolas con los métodos habituales A modo de ejemplo nos centraremos en la conversión de código Gray a binario o de binario a código Gray utilizando circuitos sencillos con puertas XOR Componentes combinacionales básicos 54 27 El código Gray El código Gray es un código no 0000 0001 0011 0010 0110 0111 0101 0100 1100 1101 1111 1110 1010 1011 1001 1000 ponderado y no aritmético que puede tener cualquier número de bits Su característica más importante es que es continuo, es decir, sólo varía un bit desde una palabra del código hasta la siguiente También es un código cíclico porque hay continuidad entre la primera y la última palabra 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 Componentes combinacionales básicos 55 Conversión binario – Gray El bit más significativo siempre es el mismo De izquierda a derecha se debe sumar cada par adyacente de bits para obtener el siguiente bit en Gray Los acarreos deben descartarse A continuación se muestra el circuito necesario para la conversión y un ejemplo de su funcionamiento 0 0 Componentes combinacionales básicos 1 1 0 + + + 1 0 1 56 28 Conversión Gray – binario El bit más significativo siempre es el mismo De izquierda a derecha, cada bit del código binario se calcula sumando el correspondiente bit Gray con el bit anterior del código binario y descartando los acarreos A continuación se muestra el circuito necesario para la conversión y un ejemplo de su funcionamiento 0 0 Componentes combinacionales básicos 1 0 1 + + + 1 1 0 57 Introducción Introducción Circuitos comparadores Codificación/Decodificación Selección/Distribución de datos Convertidores de código Circuitos de paridad Buses y salidas triestado Desplazamiento/Rotación Dispositivos programables Resumen y bibliografía Componentes combinacionales básicos 58 29 Errores de transmisión Durante la transferencia de datos digitales desde una parte de un circuito a otra pueden producirse errores debido al mal funcionamiento de un componente o a ruidos eléctricos Estos errores se manifiestan mediante cambios indeseados en los bits que conforman la información codificada: un 0 puede convertirse en un 1 o viceversa Debido a la posibilidad de que aparezcan errores, existen técnicas, como los bits de paridad, que tienen como objetivo detectarlos y corregirlos Componentes combinacionales básicos 59 Circuitos de paridad El objetivo de añadir un bit de paridad a un número binario es que la cantidad total de unos sea par o impar, dependiendo del sistema Las reglas básicas en las que se basan los circuitos generadores y comprobadores de paridad es sencilla: Si se descartan los acarreos, la suma de un número par de unos siempre es 0 Si se descartan los acarreos, la suma de un número impar de unos siempre es 1 Por tanto, para determinar la paridad de un número binario basta con sumar todos los bits del número Componentes combinacionales básicos 60 30 Circuitos de paridad La suma de dos bits, descartando el acarreo, se puede generalizar utilizando una puerta XOR Cuando el número de unos en las entradas sea par, la salida estará a nivel bajo Cuando el número de unos en las entradas sea impar, la salida estará a nivel alto Componentes combinacionales básicos 61 Circuitos de paridad Esta estructura de puertas XOR puede extenderse para formar circuitos más grandes, como el correspondiente al símbolo lógico mostrado en este diagrama El circuito tendrá dos salidas complementarias, una que indica paridad par y otra que indica paridad impar Componentes combinacionales básicos 62 31 Generador de paridad El bloque anterior puede utilizarse como un circuito generador de paridad para un número de hasta 9 bits En caso de paridad par, el bit de paridad se toma de la salida ∑Impar, ya que esta salida es 0 cuando hay un número par de bits en las entradas y 1 cuando hay un número impar de bits en las entradas En caso de paridad impar, el bit de paridad se toma de la salida ∑Par, ya que esta salida es 0 cuando hay un número impar de bits en la entradas y 1 cuando hay un número par de bits en las entradas Componentes combinacionales básicos 63 Comprobador de paridad El bloque anterior también puede utilizarse como un circuito comprobador de paridad para un código de 9 bits, con 8 bits de datos y 1 bit de paridad En caso de paridad par, el número de unos en la entrada deberá ser par, por lo que la salida ∑Par debe ser 1 y la salida ∑Impar debe ser 0, o se habrá producido un error En caso de paridad impar, el número de unos en la entrada deberá ser impar, por lo que la salida ∑Impar debe ser 1 y la salida ∑Par debe ser 0, o se habrá producido un error Componentes combinacionales básicos 64 32 Introducción Introducción Circuitos comparadores Codificación/Decodificación Selección/Distribución de datos Convertidores de código Circuitos de paridad Buses y salidas triestado Desplazamiento/Rotación Dispositivos programables Resumen y bibliografía Componentes combinacionales básicos 65 Buses Es difícil fabricar multiplexores con un gran número de entradas, ya que eso implicaría centralizar un gran número de conexiones en un único lugar Un bus es un elemento de transmisión de datos, fácil de fabricar, que permite solucionar este problema Para implementar un bus se utiliza un componente denominado adaptador triestado, cuya salida puede proporcionar tres posibles valores: un 0, un 1 o un estado de alta impedancia Componentes combinacionales básicos 66 33 Adaptadores triestado Un adaptador triestado tiene una línea de datos (D), una línea de salida (Y) y una entrada de habilitación (E) Siempre que la entrada de habilitación esté a 1, la salida será igual al contenido de la entrada Si la entrada de habilitación está a 0, la salida será un estado de alta impedancia En la práctica, el estado de alta impedancia (Z) puede considerarse como una desconexión eléctrica del bus Componentes combinacionales básicos 67 Adaptadores triestado El funcionamiento de los adaptadores triestado de un bus es equivalente al de un multiplexor Cada bus contiene un conjunto de adaptadores triestado, de forma que se utiliza uno de ellos para cada fuente de datos que se conecta al bus Las entradas de habilitación de los adaptadores deben establecerse de manera que sólo una fuente de datos pueda estar conectada al bus en un momento dado Componentes combinacionales básicos 68 34 Implementación de buses Utilizando los mismos principios se pueden construir buses que tengan más fuentes de datos Por ejemplo, un bus con cuatro fuentes necesitará dos entradas de selección para elegir la fuente que se conecta al bus Estas entradas de selección pueden conectarse a un decodificador, que será el encargado de manipular las líneas de habilitación de los adaptadores triestado Componentes combinacionales básicos 69 Introducción Introducción Circuitos comparadores Codificación/Decodificación Selección/Distribución de datos Convertidores de código Circuitos de paridad Buses y salidas triestado Desplazamiento/Rotación Dispositivos programables Resumen y bibliografía Componentes combinacionales básicos 70 35 Desplazamiento y rotación Una operación de desplazamiento consiste en desplazar un número binario m posiciones de bit a la izquierda o a la derecha Como resultado de un desplazamiento, se mueven fuera m bits del número y se introducen m bits nuevos Una operación de rotación es similar a una de desplazamiento, pero en ella no se pierden bits, ya que los que se mueven fuera son los que se introducen de nuevo por el otro extremo del número Componentes combinacionales básicos 71 Modos de desplazamiento La operación de desplazamiento puede realizarse tanto en modo lógico como en modo aritmético Un desplazamiento lógico siempre introduce ceros para rellenar las posiciones vacías del número desplazado Un desplazamiento aritmético de una posición representa una multiplicación por dos si es a la derecha o una división por dos si es a la izquierda Si se desplaza a la derecha un número en complemento a 2, se rellenan las nuevas posiciones con copias del bit de signo Si se desplaza a la izquierda un número en complemento a 2, el bit más significativo debe ser un duplicado del bit de signo Componentes combinacionales básicos 72 36 Circuitos desplazadores y rotadores La implementación de circuitos desplazadores y rotadores se realiza utilizando multiplexores Por ejemplo, un circuito desplazador/rotador universal necesitaría tres señales de control para manipular los multiplexores Una señal S0 indicará si el circuito debe realizar una operación de desplazamiento o una operación de rotación Una señal S1 indicará si la operación de desplazamiento o rotación debe realizarse a la izquierda o a la derecha Una señal S2 indicará si se realiza la operación de desplazamiento o rotación, o bien si se deja el número sin modificar Componentes combinacionales básicos 73 Circuitos desplazadores y rotadores Este diagrama muestra un circuito desplazador/rotador universal que puede realizar un desplazamiento lógico o rotar una posición a izquierda o derecha Componentes combinacionales básicos 74 37 Circuitos desplazadores y rotadores El circuito anterior solo puede realizar una operación desplazamiento o rotación de una única posición Esto significa que para desplazar o rotar más de una posición habrá que pasar el número al circuito varias veces, lo que ralentizaría el proceso Para evitar esto se puede utilizar un desplazador o rotador en bloques, que es capaz de desplazar o rotar cualquier número de posiciones Componentes combinacionales básicos 75 Circuitos desplazadores y rotadores Los desplazadores/rotadores en bloques utilizan varios niveles de multiplexores Dado un número de n bits, el desplazamiento/rotación máximo será de n – 1 bits, para lo que serán necesarios tantos niveles de multiplexores como bits tenga la representación binaria de n Cada nivel de multiplexores desplazará o rotará el número tantas posiciones como el peso de uno de los bits de n, por lo que combinándolos todos podremos obtener todos los valores entre 0 y n – 1 Componentes combinacionales básicos 76 38 Circuitos desplazadores y rotadores Por ejemplo, un rotador a la derecha en bloques para números de ocho bits, como el mostrado en el diagrama, necesitará tres entradas de selección S0 rota 1 posición S1 rota 2 posiciones S2 rota 4 posiciones Componentes combinacionales básicos 77 Introducción Introducción Circuitos comparadores Codificación/Decodificación Selección/Distribución de datos Convertidores de código Circuitos de paridad Buses y salidas triestado Desplazamiento/Rotación Dispositivos programables Resumen y bibliografía Componentes combinacionales básicos 78 39 Dispositivos lógicos programables Los dispositivos lógicos programables (PLD – Programmable ) se utilizan para reemplazar circuitos complejos, reduciendo el coste y ahorrando espacio Logic Device Un PLD está formado por una matriz de puertas AND y puertas OR que se puede programar para conseguir funciones lógicas específicas Esencialmente, una de estas matrices programables es una red de conductores distribuidos en filas y columnas con un fusible en cada punto de intersección Componentes combinacionales básicos 79 Matriz OR programable Una matriz OR está formada por una serie de puertas OR conectadas a una matriz programable La matriz se programa fundiendo los fusibles para eliminar determinadas variables de los puntos de salida Para cada entrada de una puerta OR sólo quedará intacto el fusible correspondiente a la variable deseada Una vez fundido, un fusible no se puede volver a conectar Componentes combinacionales básicos 80 40 Matriz AND programable Una matriz AND está formada por una serie de puertas AND conectadas a una matriz programable La matriz se programa fundiendo los fusibles para eliminar determinadas variables de los puntos de salida Para cada entrada de una puerta AND sólo quedará intacto el fusible correspondiente a la variable deseada Una vez fundido, un fusible no se puede volver a conectar Componentes combinacionales básicos 81 Clasificación de los PLD Existen cuatro tipos de PLD, clasificados en función de la organización de sus elementos internos Las memorias programables de sólo lectura (PROM – Programmable Read-Only Memory) están formadas por un conjunto fijo de puertas AND conectadas como decodificador y una matriz programable OR Debido a la limitación de las puertas AND fijas, las PROM suelen usarse como memorias direccionables y no como dispositivos lógicos Componentes combinacionales básicos 82 41 Clasificación de los PLD Las matrices lógicas programables PLA (Programmable Logic ) están formadas por una matriz AND programable y una matriz OR programable Array Las matrices lógicas programables PAL (Programmable Array ) están formadas por una matriz AND programable y una matriz OR fija con una lógica de salida Este esquema evita los retardos y la complejidad causada por los fusibles adicionales resultantes de tener dos matrices programables Logic Componentes combinacionales básicos 83 Clasificación de los PLD Las matrices lógicas genéricas (GAL – Generic Array Logic) se forman con una matriz AND programable y una matriz OR fija con una salida lógica programable Las GAL se diferencian de las PAL en que las configuraciones de salida son programables Sin embargo, la principal diferencia es que las GAL se pueden reprogramar una y otra vez debido a que usan una tecnología más avanzada en lugar de fusibles Componentes combinacionales básicos 84 42 Matrices lógicas programables Las PAL están formadas por una matriz programable de puertas AND conectadas a una matriz de puertas OR fijas con una lógica de salida La matriz AND programable está formada por una red de conductores, con cada fila conectada a la entrada de una puerta AND y cada columna conectada a una variable de entrada o a su complemento Cada punto de intersección entre una fila y una columna se denomina celda, siendo éste el elemento programable de la PAL Componentes combinacionales básicos 85 Programación de una PAL Una PAL permite implementar cualquier expresión en forma de suma de productos con un número de variables definido Por ejemplo, este diagrama muestra la estructura básica de una PAL para dos variables de entrada y una salida Componentes combinacionales básicos 86 43 Programación de una PAL El proceso de programación consiste en fundir los fusibles adecuados para obtener la función deseada Cuando se requiere la conexión entre una fila y una columna, el fusible correspondiente queda intacto Cuando dicha conexión no se requiere, el fusible se abre Componentes combinacionales básicos 87 Símbolos simplificados Las PAL reales son circuitos muy complejos, por lo que los fabricantes han adoptado una notación simplificada para representarlos Para evitar cargar el diseño con demasiadas líneas de entrada se utilizan buffers de entrada, que generan tanto el valor de una variable como su complemento Para evitar cargar el diseño con demasiadas filas, las entradas de las puertas AND se representan con una única línea horizontal Para representar los fusibles intactos se utiliza una X, mientras que para los fusibles fundidos no se indica nada Componentes combinacionales básicos 88 44 Símbolos simplificados Este diagrama muestra una expresión lógica en forma de suma de productos implementada con una PAL usando la notación simplificada Componentes combinacionales básicos 89 Lógica combinacional de salida Existen varios tipos de circuitos combinacionales de salida Una salida combinacional, usada para una suma de productos, que puede estar a nivel alto o bajo Una entrada/salida combinacional, que se usa cuando la salida debe realimentarse a una entrada de la matriz Una salida de polaridad programable, que permite seleccionar la función de salida o su complemento usando una puerta XOR y un fusible que se elimina para invertir la salida Componentes combinacionales básicos 90 45 Matrices lógicas genéricas Las GAL están formadas por una matriz de puertas AND reprogramable conectada a una matriz de puertas OR fija con una lógica de salida programable La matriz AND reprogramable está formada por una red de conductores, ordenados en filas y columnas, con una celda E2CMOS (Electrically Erasable CMOS) en cada punto de intersección en lugar de un fusible Cada fila de celdas está conectada a la entrada de una puerta AND y cada columna a una variable de entrada o a su complemento Componentes combinacionales básicos 91 Matrices lógicas genéricas Una celda E2CMOS activada conecta de forma efectiva su correspondiente fila y columna, mientras que una celda desactivada no conecta la fila con la columna La principal ventaja de utilizar celdas E2CMOS en lugar de fusibles es que cada una de estas celdas se puede borrar y reprogramar eléctricamente Dependiendo de la tecnología, una celda E2CMOS típica puede permanecer en el estado en el que se la ha programado durante 20 años o más Componentes combinacionales básicos 92 46 Programación de una GAL Una GAL permite implementar cualquier expresión en forma de suma de productos con un número de variables definido Por ejemplo, este diagrama muestra la estructura básica de una GAL para dos variables de entrada y una salida Componentes combinacionales básicos 93 Programación de una GAL El proceso de programación consiste en activar o desactivar cada celda E2CMOS con el objetivo de aplicar la combinación adecuada de variables a cada puerta AND y obtener la suma de productos Componentes combinacionales básicos 94 47 Programación de una GAL Las salidas de las puertas AND se introducen en macroceldas lógicas de salida (OLMC – Output Logic Macrocells) que contienen puertas OR y lógica programable Estas OLMC proporcionan mucha más flexibilidad que la lógica de salida fija de las PAL, convirtiendo las GAL en un tipo de dispositivo más versátil Componentes combinacionales básicos 95 Introducción Introducción Circuitos comparadores Codificación/Decodificación Selección/Distribución de datos Convertidores de código Circuitos de paridad Buses y salidas triestado Desplazamiento/Rotación Dispositivos programables Resumen y bibliografía Componentes combinacionales básicos 96 48 Resumen La reutilización de módulos combinacionales previamente diseñados resulta ventajosa para la implementación de circuitos digitales Existe un gran número de estos módulos combinacionales que se han usado frecuentemente en los diseños y que se siguen usando, por lo que es importante conocer su estructura y funcionamiento Además, el diseño modular nos permite realizar abstracciones jerárquicas de los componentes del circuito, haciendo posible la implementación de circuitos digitales complejos Componentes combinacionales básicos 97 Bibliografía Fundamentos de Sistemas Digitales (7ª edición) Capítulos 6 y 7 Thomas L. Floyd Prentice Hall, 2000 Principios de Diseño Digital Capítulo 5 Daniel D. Gajski Prentice Hall, 1997 Componentes combinacionales básicos 98 49