6. Componentes combinacionales básicos Oliverio J. Santana Jaria Sistemas Digitales Ingeniería Técnica en Informática de Sistemas Curso 2005 – 2006 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 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 Estructura del tema Introducción Circuitos aritmético-lógicos Sumador ▫ Sumador con acarreo en cascada ▫ Sumador con acarreo anticipado ▫ Sumador/Restador Unidad lógica Unidad aritmético-lógica Selección/Distribución de datos Circuitos multiplexores Circuitos demultiplexores Convertidores de código Circuitos de paridad Generador de paridad Comprobador de paridad Circuitos comparadores Igualdad Desigualdad Codificación/Decodificación Circuitos decodificadores Circuitos codificadores Buses y salidas triestado Desplazamiento/Rotación Dispositivos programables Matriz lógica programable Matriz lógica genérica Resumen y bibliografía Componentes combinacionales básicos 3 Circuitos sumadores Los sumadores son circuitos importantes para cualquier sistema digital en el que se procesen datos numéricos Las reglas básicas de la suma binaria indican que: 0+0= 0 0+1= 1 1+0= 1 1 + 1 = 10 Al estar sumando números con un tamaño fijo de un bit, no es posible tener un resultado con dos bits Por tanto, la salida de un sumador no es sólo el valor de la suma, ya que también es posible que exista acarreo Componentes combinacionales básicos 4 2 El semisumador Se denomina semisumador a un circuito que admite dos bits como entrada y genera como salida: Un bit que representa la suma de los dos bits de entrada Otro bit que representa el acarreo generado por la suma La tabla de verdad de este circuito puede deducirse a partir de las reglas de la suma binaria A 0 0 1 1 B 0 1 0 1 Co 0 0 0 1 S 0 1 1 0 A,B Co S sumandos acarreo de salida suma Componentes combinacionales básicos 5 El semisumador A partir de esta tabla de verdad se puede observar que la suma puede implementarse con una operación XOR y el acarreo de salida con una operación AND Co = A·B S=A+B semisumador Componentes combinacionales básicos 6 3 El sumador completo La principal diferencia entre un sumador completo y un semisumador es que el sumador completo admite un valor que represente un acarreo de entrada Ci 0 0 0 0 1 1 1 1 A 0 0 1 1 0 0 1 1 B 0 1 0 1 0 1 0 1 Co 0 0 0 1 0 1 1 1 S 0 1 1 0 1 0 0 1 A,B Ci Co S sumandos acarreo de entrada acarreo de salida suma Componentes combinacionales básicos 7 El sumador completo Dado que podemos expresar la suma de dos bits con la operación XOR, podemos expresar la suma de dos bits y un acarreo de la siguiente forma: S = A + B + Ci El acarreo de salida será 1 en dos circunstancias: Cuando las dos entradas A y B sean 1 Cuando la suma de las dos entradas sea 1 y el acarreo de entrada también sea 1 Ci 0 AB 1 00 01 1 11 1 1 10 1 Co = AB +ACi +BCi = AB + Ci(A+B) = AB + Ci(A + B) Componentes combinacionales básicos 8 4 El sumador completo De esta manera se puede implementar el circuito sumador completo usando dos puertas XOR, dos puertas AND y una puerta OR S = A + B + Ci Co = AB + Ci(A + B) sumador Componentes combinacionales básicos 9 El sumador completo También es posible implementar el sumador completo utilizando dos circuitos semisumadores El primer semisumador suma los dos bits El segundo suma el resultado con el acarreo de entrada Habrá acarreo de salida si cualquiera de los dos semisumadores generó un acarreo semisumador semisumador Componentes combinacionales básicos 10 5 Estructura del tema Introducción Circuitos aritmético-lógicos Sumador ▫ Sumador con acarreo en cascada ▫ Sumador con acarreo anticipado ▫ Sumador/Restador Unidad lógica Unidad aritmético-lógica Circuitos comparadores Igualdad Desigualdad Codificación/Decodificación Circuitos decodificadores Circuitos codificadores Selección/Distribución de datos Circuitos multiplexores Circuitos demultiplexores Convertidores de código Circuitos de paridad Generador de paridad Comprobador de paridad Buses y salidas triestado Desplazamiento/Rotación Dispositivos programables Matriz lógica programable Matriz lógica genérica Resumen y bibliografía Componentes combinacionales básicos 11 Sumadores con acarreo en cascada El circuito sumador completo permite sumar dos números de un bit con un acarreo de entrada y generar un acarreo de salida Como regla general, un sumador binario de cualquier número de bits puede realizarse conectando en cascada varios sumadores completos de un bit El proceso puede extenderse usando cualquier sumador como elemento básico: por ejemplo puede hacerse un sumador de 4 bits con dos sumadores de 2 bits Componentes combinacionales básicos 12 6 Sumadores con acarreo en cascada El primero de los acarreos de entrada debe estar siempre a cero, ya que representa el acarreo inicial en la suma de los bits menos significativos sumador sumador 2 sumador Componentes combinacionales básicos 13 Sumadores con acarreo en cascada El principal problema de esta conexión en serie de sumadores es que el retardo del circuito depende de la propagación del acarreo a lo largo de todo el sumador sumador sumador 2 sumador 4 sumador sumador sumador 2 sumador Componentes combinacionales básicos 14 7 Estructura del tema Introducción Circuitos aritmético-lógicos Sumador ▫ Sumador con acarreo en cascada ▫ Sumador con acarreo anticipado ▫ Sumador/Restador Unidad lógica Unidad aritmético-lógica Selección/Distribución de datos Circuitos multiplexores Circuitos demultiplexores Convertidores de código Circuitos de paridad Generador de paridad Comprobador de paridad Circuitos comparadores Igualdad Desigualdad Codificación/Decodificación Circuitos decodificadores Circuitos codificadores Buses y salidas triestado Desplazamiento/Rotación Dispositivos programables Matriz lógica programable Matriz lógica genérica Resumen y bibliografía Componentes combinacionales básicos 15 Sumadores con acarreo anticipado La cadena de acarreos es el camino crítico en el retardo de un sumador en cascada pero, afortunadamente, la mayoría de las expresiones necesarias pueden ser precalculadas, reduciendo el retardo Para poder anticipar el valor del acarreo hay que dividir la función que lo expresa en otras dos funciones Ci+1 = AB + Ci(A + B) Gi Pi propagación de acarreo generación de acarreo Ci+1 = Gi + Ci·Pi Componentes combinacionales básicos 16 8 Sumadores con acarreo anticipado Si suponemos un sumador de 4 bits podemos calcular cada uno de los acarreos intermedios C1 = G0 + C0·P0 C2 = G1 + C1·P1 = G1 + G0·P1 + C0·P1·P0 C3 = G2 + C2·P2 = G2 + G1·P2 + G0·P2·P1 + C0·P2·P1·P0 C4 = G3 + C3·P3 = G3 + G2·P3 + G1·P3·P2 + G0·P3·P2·P1 + C0·P3·P2·P1·P0 Los acarreos pueden calcularse en función de los valores de entrada y el acarreo inicial C0, por lo que la propagación de acarreo no es estrictamente necesaria Componentes combinacionales básicos 17 Sumadores con acarreo anticipado Se ha limitado el cálculo del acarreo anticipado a sumadores de 4 bits porque un número mayor de bits complicaría el circuito Para obtener sumadores con más bits será necesario conectar estos sumadores de 4 bits Para permitir la propagación de los valores es necesario reescribir la última ecuación: C4 = G3 + G2·P3 + G1·P3·P2 + G0·P3·P2·P1 + C0·P3·P2·P1·P0 P4 = P3·P2·P1·P0 C4 = G4 + C0·P4 G4 = G3 + G2·P3 + G1·P3·P2 + G0·P3·P2·P1 Componentes combinacionales básicos 18 9 Sumadores con acarreo anticipado El circuito propagador de acarreo quedaría de esta manera: propagador Componentes combinacionales básicos 19 Sumadores con acarreo anticipado Usando el circuito propagador de acarreo, la estructura de un sumador de 4 bits es como sigue: sumador 4 propagador Componentes combinacionales básicos 20 10 Sumadores con acarreo anticipado Para obtener un sumador de, por ejemplo, 16 bits podríamos conectar en cascada cuatro de estos sumadores En este caso, las salidas P4 y G4 quedarían sin usar sumador 4 sumador 4 sumador 4 sumador 4 Componentes combinacionales básicos 21 Sumadores con acarreo anticipado Es posible utilizar un circuito propagador de acarreo global para evitar que la generación del resultado se vea retardada por la propagación del acarreo En este caso, la salida C4 quedaría sin usar propagador sumador 4 Componentes combinacionales básicos sumador 4 sumador 4 sumador 4 22 11 Estructura del tema Introducción Circuitos aritmético-lógicos Sumador ▫ Sumador con acarreo en cascada ▫ Sumador con acarreo anticipado ▫ Sumador/Restador Unidad lógica Unidad aritmético-lógica Circuitos comparadores Igualdad Desigualdad Codificación/Decodificación Circuitos decodificadores Circuitos codificadores Selección/Distribución de datos Circuitos multiplexores Circuitos demultiplexores Convertidores de código Circuitos de paridad Generador de paridad Comprobador de paridad Buses y salidas triestado Desplazamiento/Rotación Dispositivos programables Matriz lógica programable Matriz lógica genérica Resumen y bibliografía Componentes combinacionales básicos 23 Sumadores / Restadores La resta binaria se realiza sumando al minuendo el complemento a 2 del sustraendo Debido a esto, no es necesario tener un circuito restador separado, ya que se puede modificar el sumador para que también realice la operación de resta El complemento a 2 se obtiene complementando cada bit del número binario y luego sumando 1 al resultado La suma del 1 final se realiza poniendo a 1 el acarreo de entrada del sumador en lugar de a 0 Componentes combinacionales básicos 24 12 Sumadores / Restadores Un circuito sumador/restador tendrá una señal de selección SEL que funcionará de la siguiente manera: SEL = 0 suma SEL = 1 resta Esta señal puede usarse como acarreo de entrada, ya que debe ser 0 para la suma y 1 para la resta Además, aplicando la operación XOR entre un bit de entrada y SEL se complementa el bit SEL = 0 el bit se deja como está SEL = 1 el bit se complementa SEL 0 0 1 1 bit 0 1 0 1 XOR 0 1 1 0 Componentes combinacionales básicos 25 Sumadores / Restadores Un circuito sumador/restador puede hacerse a partir de un circuito sumador (por ejemplo, con acarreo en cascada) si se añade la señal de entrada SEL y unas puertas XOR para complementar el sustraendo sumador 4 Componentes combinacionales básicos 26 13 Estructura del tema Selección/Distribución de datos Introducción Circuitos multiplexores Circuitos aritmético-lógicos Sumador ▫ Sumador con acarreo en cascada ▫ Sumador con acarreo anticipado ▫ Sumador/Restador Unidad lógica Unidad aritmético-lógica Circuitos demultiplexores Convertidores de código Circuitos de paridad Generador de paridad Comprobador de paridad Buses y salidas triestado Desplazamiento/Rotación Dispositivos programables Circuitos comparadores Igualdad Desigualdad Codificación/Decodificación Matriz lógica programable Matriz lógica genérica Circuitos decodificadores Resumen y bibliografía Circuitos codificadores Componentes combinacionales básicos 27 Unidad lógica Dados dos operandos de entrada, una unidad lógica permite realizar una operación lógica entre los dos La implementación de una unidad lógica no es compleja, ya que tan sólo es necesario que realice las 16 operaciones lógicas posibles para dos variables Para esto es necesario utilizar cuatro variables de selección que permitan elegir entre estas funciones AB f0 f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12 f13 f14 f15 00 01 10 11 0 0 0 0 1 0 0 0 0 1 0 0 1 1 0 0 Componentes combinacionales básicos 0 0 1 0 1 0 1 0 0 1 1 0 1 1 1 0 0 0 0 1 1 0 0 1 0 1 0 1 1 1 0 1 0 0 1 1 1 0 1 1 0 1 1 1 1 1 1 1 S0 S1 S2 S3 28 14 Unidad lógica El valor binario de las cuatro variables de selección para una función lógica dada coincide con el número decimal correspondiente a la función Cada variable de selección equivale a uno de los bits del número identificativo de la función Cada variable se corresponde con una de las cuatro posibles combinaciones de entrada Esto da lugar a una expresión booleana sencilla que representa el comportamiento de la unidad lógica F = S0·A·B + S1·A·B + S2·A·B + S3·A·B Componentes combinacionales básicos 29 Unidad lógica Dada esta expresión, el circuito de una unidad lógica de un bit queda de la siguiente manera: F = S0·A·B + S1·A·B + S2·A·B + S3·A·B UL Componentes combinacionales básicos 30 15 Unidad lógica Para implementar una unidad lógica de más de un bit bastará con reutilizar varios de los bloques de un bit de esta forma: UL UL UL UL Componentes combinacionales básicos 31 Estructura del tema Introducción Circuitos aritmético-lógicos Sumador ▫ Sumador con acarreo en cascada ▫ Sumador con acarreo anticipado ▫ Sumador/Restador Unidad lógica Unidad aritmético-lógica Circuitos comparadores Igualdad Desigualdad Codificación/Decodificación Circuitos decodificadores Circuitos codificadores Componentes combinacionales básicos Selección/Distribución de datos Circuitos multiplexores Circuitos demultiplexores Convertidores de código Circuitos de paridad Generador de paridad Comprobador de paridad Buses y salidas triestado Desplazamiento/Rotación Dispositivos programables Matriz lógica programable Matriz lógica genérica Resumen y bibliografía 32 16 Unidad aritmético-lógica ALU – arithmetic-logic unit) Una unidad aritmético lógica ( realiza las operaciones aritméticas y lógicas básicas de un procesador entre dos operandos Las operaciones aritméticas incluyen, por ejemplo, sumar, restar, incrementar y decrementar Las operaciones lógicas incluyen, por ejemplo, la AND, la OR, la identidad y el complemento Todas estas operaciones pueden realizarse utilizando un sumador si se modifican adecuadamente los valores de entrada Componentes combinacionales básicos 33 Unidad aritmético-lógica AE – arithmetic extender) es un El ampliador aritmético ( circuito utilizado para modificar las entradas de una ALU y permitir el cálculo de operaciones aritméticas LE – logic extender) es un circuito El ampliador lógico ( utilizado para modificar las entradas de una ALU y permitir el cálculo de operaciones lógicas La implementación de una ALU consistirá en un circuito sumador que tendrá conectado uno de estos ampliadores a cada una de sus entradas Componentes combinacionales básicos 34 17 Unidad aritmético-lógica Dado que la ALU puede realizar tanto operaciones aritméticas como operaciones lógicas, es necesaria una señal de entrada para controlar el modo de operación M = 0 cálculo de operaciones lógicas M = 1 cálculo de operaciones aritméticas También es necesario añadir variables de selección para distinguir entre los distintos tipos de operaciones aritméticas y lógicas Por ejemplo, si tenemos cuatro operaciones de cada tipo harán falta dos variables de selección: S0 y S1 Componentes combinacionales básicos 35 Ampliador aritmético El funcionamiento del ampliador aritmético puede resumirse con una tabla que incluye Las variables de selección de modo: M, S0, S1 El nombre y la descripción de la función Las modificaciones necesarias sobre los operandos El valor del acarreo de entrada M S1 S2 Función 1 0 0 decremento 1 0 1 1 1 0 1 1 1 incremento Operando X Operando Y Ci A–1 A todo unos 0 suma A+B A B 0 resta A+B+1 A B 1 A+1 A todo ceros 1 Componentes combinacionales básicos 36 18 Ampliador aritmético Con este diseño, la entrada del sumador correspondiente al primer operando no necesita ninguna modificación Por lo tanto, el ampliador aritmético tan solo debe aplicarse a los bits del segundo operando según la siguiente tabla de verdad Sólo tendremos en cuenta la posibilidad M = 1 por lo que, en caso contrario, la salida del ampliador aritmético será 0 M 1 1 1 1 1 1 1 1 S0 S1 0 0 0 0 0 1 0 1 1 0 1 0 1 1 1 1 B 0 1 0 1 0 1 0 1 Y 1 1 0 1 1 0 0 0 Componentes combinacionales básicos 37 Ampliador aritmético Dado que la variable M siempre vale 1, solo hay que tener en cuenta las otras tres variables para simplificar M=1 B 0 S0S1 1 00 1 1 01 1 11 10 1 Y = M·S1·B + M·S0·B Componentes combinacionales básicos AE 38 19 Ampliador lógico El funcionamiento del ampliador lógico puede resumirse con una tabla que incluya Las variables de selección de modo: M, S0, S1 El nombre y la descripción de la función Las modificaciones necesarias sobre los operandos El valor del acarreo de entrada M S1 S2 Función Operando X Operando Y 0 0 0 complemento 0 0 1 AND 0 1 0 identidad 0 1 1 OR A A AND B Ci A 0 0 A AND B 0 0 A 0 0 A OR B 0 0 A A OR B Componentes combinacionales básicos 39 Ampliador lógico El ampliador lógico necesita conocer el valor de B, el cual nunca llegará al sumador en operaciones lógicas Por este motivo, cuando M = 0, el ampliador aritmético siempre transformaba B en un cero Sin embargo, sí que será necesario tener en cuenta el caso M = 1 en el diseño del ampliador lógico M S0 S1 X 0 0 0 0 A A·B A A+B 0 0 1 1 0 1 0 1 1 – – Componentes combinacionales básicos A 40 20 Ampliador lógico A partir de la tabla de verdad podemos simplificar la función del ampliador lógico utilizando un mapa de Karnaugh de cinco variables S0S1 AB 00 M=0 00 01 11 10 1 1 01 11 10 1 S0S1 AB 00 M=1 00 01 11 10 1 1 1 1 01 1 1 1 1 11 1 1 10 1 1 1 X = M·S0·S1·A + M·S0·S1·B + S0·A·B + S1·A + M·A Componentes combinacionales básicos 41 Ampliador lógico Una vez obtenida la expresión minimizada podemos diseñar el circuito ampliador lógico X = M·S0·S1·A + M·S0·S1·B + S0·A·B + S1·A + M·A LE Componentes combinacionales básicos 42 21 Diseño de la ALU El diseño de la ALU puede hacerse bit a bit, utilizando sumadores completos de un bit con un AE conectado a una entrada y un LE conectado a la otra entrada El acarreo de entrada será 1 sólo para las operaciones aritméticas (M = 1) de resta e incremento (S1 = 1) El acarreo de salida del bit más significativo representa un desbordamiento en el caso de aritmética entera En el caso de aritmética en complemento a dos, la señal un XOR de los acarreos de salida de los dos bits más significativos de desbordamiento será Componentes combinacionales básicos 43 Diseño de la ALU Este diagrama muestra una ALU de 4 bits, que sería fácilmente extensible a un mayor número de bits + LE LE LE LE AE AE AE AE + Componentes combinacionales básicos + + 44 22 Estructura del tema Introducción Circuitos aritmético-lógicos Sumador ▫ Sumador con acarreo en cascada ▫ Sumador con acarreo anticipado ▫ Sumador/Restador Unidad lógica Unidad aritmético-lógica Circuitos comparadores Igualdad Desigualdad Codificación/Decodificación Circuitos decodificadores Circuitos codificadores Selección/Distribución de datos Circuitos multiplexores Circuitos demultiplexores Convertidores de código Circuitos de paridad Generador de paridad Comprobador de paridad Buses y salidas triestado Desplazamiento/Rotación Dispositivos programables Matriz lógica programable Matriz lógica genérica Resumen y bibliografía Componentes combinacionales básicos 45 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 46 23 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 47 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 48 24 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 49 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 i i Si A = 0 y B = 1 entonces A < B i i Si se examinan todas las posiciones y no se encuentra ninguna desigualdad, entonces los números son iguales Componentes combinacionales básicos 50 25 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 51 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 52 26 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 53 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 54 27 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 55 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 56 28 Estructura del tema Introducción Circuitos aritmético-lógicos Sumador ▫ Sumador con acarreo en cascada ▫ Sumador con acarreo anticipado ▫ Sumador/Restador Unidad lógica Unidad aritmético-lógica Circuitos comparadores Igualdad Desigualdad Codificación/Decodificación Circuitos decodificadores Circuitos codificadores Selección/Distribución de datos Circuitos multiplexores Circuitos demultiplexores Convertidores de código Circuitos de paridad Generador de paridad Comprobador de paridad Buses y salidas triestado Desplazamiento/Rotación Dispositivos programables Matriz lógica programable Matriz lógica genérica Resumen y bibliografía Componentes combinacionales básicos 57 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 58 29 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 59 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 60 30 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 61 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 62 31 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 63 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 64 32 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 65 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 66 33 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 67 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) 68 34 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 69 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 70 35 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 71 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 72 36 Estructura del tema Introducción Selección/Distribución de datos Circuitos multiplexores Circuitos demultiplexores Circuitos aritmético-lógicos Sumador ▫ Sumador con acarreo en cascada ▫ Sumador con acarreo anticipado ▫ Sumador/Restador Unidad lógica Unidad aritmético-lógica Convertidores de código Circuitos de paridad Generador de paridad Comprobador de paridad Circuitos comparadores Igualdad Desigualdad Codificación/Decodificación Circuitos decodificadores Circuitos codificadores Buses y salidas triestado Desplazamiento/Rotación Dispositivos programables Matriz lógica programable Matriz lógica genérica Resumen y bibliografía Componentes combinacionales básicos 73 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 74 37 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 75 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 76 38 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 77 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 78 39 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 79 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 80 40 Estructura del tema Selección/Distribución de datos Introducción Circuitos multiplexores Circuitos demultiplexores Circuitos aritmético-lógicos Sumador ▫ Sumador con acarreo en cascada ▫ Sumador con acarreo anticipado ▫ Sumador/Restador Unidad lógica Unidad aritmético-lógica Generador de paridad Comprobador de paridad Buses y salidas triestado Desplazamiento/Rotación Dispositivos programables Circuitos comparadores Convertidores de código Circuitos de paridad Igualdad Desigualdad Codificación/Decodificación Matriz lógica programable Matriz lógica genérica Circuitos decodificadores Circuitos codificadores Resumen y bibliografía Componentes combinacionales básicos 81 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 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 n Un multiplexor posee 2 Componentes combinacionales básicos 82 41 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 83 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 84 42 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 85 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 86 43 Generación de funciones lógicas Una aplicación de los multiplexores es la generación de funciones lógicas en forma de suma de productos 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 los términos producto se fijan a 1 El resto de las entradas de datos del multiplexor se fijan a 0, ya que no corresponden a términos de la función Componentes combinacionales básicos 87 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) 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 Componentes combinacionales básicos MUX 88 44 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) C 0 1 00 0 01 1 1 0 0 1 AB 11 0 10 1 D0 D1 MUX D3 D2 Componentes combinacionales básicos 89 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) 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 D3 MUX D2 D6 D7 D5 D4 Componentes combinacionales básicos 90 45 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 91 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 92 46 Estructura del tema Introducción Circuitos aritmético-lógicos Sumador ▫ Sumador con acarreo en cascada ▫ Sumador con acarreo anticipado ▫ Sumador/Restador Unidad lógica Unidad aritmético-lógica Selección/Distribución de datos Circuitos multiplexores Circuitos demultiplexores Convertidores de código Circuitos de paridad Generador de paridad Comprobador de paridad Circuitos comparadores Igualdad Desigualdad Codificación/Decodificación Circuitos decodificadores Circuitos codificadores Buses y salidas triestado Desplazamiento/Rotación Dispositivos programables Matriz lógica programable Matriz lógica genérica Resumen y bibliografía Componentes combinacionales básicos 93 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 94 47 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 95 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 96 48 Estructura del tema Introducción Circuitos aritmético-lógicos Sumador ▫ Sumador con acarreo en cascada ▫ Sumador con acarreo anticipado ▫ Sumador/Restador Unidad lógica Unidad aritmético-lógica Circuitos comparadores Igualdad Desigualdad Codificación/Decodificación Circuitos decodificadores Circuitos codificadores Selección/Distribución de datos Circuitos multiplexores Circuitos demultiplexores Convertidores de código Circuitos de paridad Generador de paridad Comprobador de paridad Buses y salidas triestado Desplazamiento/Rotación Dispositivos programables Matriz lógica programable Matriz lógica genérica Resumen y bibliografía Componentes combinacionales básicos 97 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 98 49 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 99 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 100 50 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 1 0 1 + + + 1 1 0 Componentes combinacionales básicos 101 Estructura del tema Introducción Circuitos aritmético-lógicos Sumador ▫ Sumador con acarreo en cascada ▫ Sumador con acarreo anticipado ▫ Sumador/Restador Unidad lógica Unidad aritmético-lógica Circuitos comparadores Igualdad Desigualdad Codificación/Decodificación Circuitos decodificadores Circuitos codificadores Componentes combinacionales básicos Selección/Distribución de datos Circuitos multiplexores Circuitos demultiplexores Convertidores de código Circuitos de paridad Generador de paridad Comprobador de paridad Buses y salidas triestado Desplazamiento/Rotación Dispositivos programables Matriz lógica programable Matriz lógica genérica Resumen y bibliografía 102 51 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 103 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 104 52 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 105 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 106 53 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 107 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 108 54 Estructura del tema Introducción Circuitos aritmético-lógicos Sumador ▫ Sumador con acarreo en cascada ▫ Sumador con acarreo anticipado ▫ Sumador/Restador Unidad lógica Unidad aritmético-lógica Circuitos comparadores Igualdad Desigualdad Codificación/Decodificación Circuitos decodificadores Circuitos codificadores Selección/Distribución de datos Circuitos multiplexores Circuitos demultiplexores Convertidores de código Circuitos de paridad Generador de paridad Comprobador de paridad Buses y salidas triestado Desplazamiento/Rotación Dispositivos programables Matriz lógica programable Matriz lógica genérica Resumen y bibliografía Componentes combinacionales básicos 109 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 110 55 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 111 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 112 56 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 113 Estructura del tema Introducción Circuitos aritmético-lógicos Sumador ▫ Sumador con acarreo en cascada ▫ Sumador con acarreo anticipado ▫ Sumador/Restador Unidad lógica Unidad aritmético-lógica Circuitos comparadores Igualdad Desigualdad Codificación/Decodificación Circuitos decodificadores Circuitos codificadores Componentes combinacionales básicos Selección/Distribución de datos Circuitos multiplexores Circuitos demultiplexores Convertidores de código Circuitos de paridad Generador de paridad Comprobador de paridad Buses y salidas triestado Desplazamiento/Rotación Dispositivos programables Matriz lógica programable Matriz lógica genérica Resumen y bibliografía 114 57 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 Una operación de rotación es similar a una de m bits del número y se introducen m bits nuevos 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 115 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 116 58 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 117 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 118 59 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 119 Circuitos desplazadores y rotadores Los desplazadores/rotadores en bloques utilizan varios niveles de multiplexores Dado un número de máximo será de n bits, el desplazamiento/rotación 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 n, por lo que combinándolos todos podremos obtener todos los valores entre 0 y n – 1 bits de Componentes combinacionales básicos 120 60 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 121 Estructura del tema Introducción Circuitos aritmético-lógicos Sumador ▫ Sumador con acarreo en cascada ▫ Sumador con acarreo anticipado ▫ Sumador/Restador Unidad lógica Unidad aritmético-lógica Circuitos comparadores Igualdad Desigualdad Codificación/Decodificación Circuitos decodificadores Circuitos codificadores Componentes combinacionales básicos Selección/Distribución de datos Circuitos multiplexores Circuitos demultiplexores Convertidores de código Circuitos de paridad Generador de paridad Comprobador de paridad Buses y salidas triestado Desplazamiento/Rotación Dispositivos programables Matriz lógica programable Matriz lógica genérica Resumen y bibliografía 122 61 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 123 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 124 62 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 125 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 126 63 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 127 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 128 64 Estructura del tema Introducción Circuitos aritmético-lógicos Sumador ▫ Sumador con acarreo en cascada ▫ Sumador con acarreo anticipado ▫ Sumador/Restador Unidad lógica Unidad aritmético-lógica Circuitos comparadores Igualdad Desigualdad Codificación/Decodificación Circuitos decodificadores Circuitos codificadores Selección/Distribución de datos Circuitos multiplexores Circuitos demultiplexores Convertidores de código Circuitos de paridad Generador de paridad Comprobador de paridad Buses y salidas triestado Desplazamiento/Rotación Dispositivos programables Matriz lógica programable Matriz lógica genérica Resumen y bibliografía Componentes combinacionales básicos 129 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 130 65 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 131 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 132 66 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 133 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 134 67 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 135 Estructura del tema Introducción Circuitos aritmético-lógicos Sumador ▫ Sumador con acarreo en cascada ▫ Sumador con acarreo anticipado ▫ Sumador/Restador Unidad lógica Unidad aritmético-lógica Circuitos comparadores Igualdad Desigualdad Codificación/Decodificación Circuitos decodificadores Circuitos codificadores Componentes combinacionales básicos Selección/Distribución de datos Circuitos multiplexores Circuitos demultiplexores Convertidores de código Circuitos de paridad Generador de paridad Comprobador de paridad Buses y salidas triestado Desplazamiento/Rotación Dispositivos programables Matriz lógica programable Matriz lógica genérica Resumen y bibliografía 136 68 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 137 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 138 69 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 139 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 140 70 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 141 Estructura del tema Introducción Circuitos aritmético-lógicos Sumador ▫ Sumador con acarreo en cascada ▫ Sumador con acarreo anticipado ▫ Sumador/Restador Unidad lógica Unidad aritmético-lógica Circuitos comparadores Igualdad Desigualdad Codificación/Decodificación Circuitos decodificadores Circuitos codificadores Componentes combinacionales básicos Selección/Distribución de datos Circuitos multiplexores Circuitos demultiplexores Convertidores de código Circuitos de paridad Generador de paridad Comprobador de paridad Buses y salidas triestado Desplazamiento/Rotación Dispositivos programables Matriz lógica programable Matriz lógica genérica Resumen y bibliografía 142 71 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 143 Bibliografía Fundamentos de Sistemas Digitales (7ª edición) Capítulos 6 y 7 Thomas L. Floyd Prentice Hall, 2000 http://cwx.prenhall.com/bookbind/pubbooks/floyd3/chapter6 http://cwx.prenhall.com/bookbind/pubbooks/floyd3/chapter7 Principios de Diseño Digital Capítulo 5 Daniel D. Gajski Prentice Hall, 1997 Componentes combinacionales básicos 144 72