Centro Asociado Palma de Mallorca Arquitectura de Ordenadores Tutor: Antonio Rivero Cuesta Unidad Didáctica 1 Representación de la Inf ormación y Funciones Lógicas Tema 2 Aritmética y Codificación Aritmética Binaria Suma Binaria Acarreo Se define como el desbordamiento que se alcanza al sumar al dígito de mayor valor (el 1) un valor distinto de cero (0). Lo que conlleva al desplazamiento de una unidad en el resultado de la suma. No se puede realizar con sólo el dígito inicialmente existente. Realice la suma de dos números binarios, de valor decimal 7 y 12. 11 Acarreo 111 + 1100 10011 Realice la suma de dos números binarios, de valor decimal 5,5 y 6,75. 111 1 1 0 1, 1 + 1 1 0, 1 1 1 1 0 0, 0 1 Acarreo Resta Binaria Aparece el concepto de préstamo. El préstamo se define como el valor necesario que se cedería al dígito anterior, de forma que éste pueda restar un dígito que de otra forma sería suficiente. Realice la resta de dos números binarios, 1100 y 111. 1 1 1 Préstamo 01 01 10 0 − 1 1 1 0 1 0 1 Realice la resta de dos números binarios, 10000 y 1. 1 1 1 1 Préstamo 01 10 10 10 0 − 1 0 1 1 1 1 Formatos de los Números y su Representación Representación de Números en Coma Fija sin Signo Un número se representa mediante dos partes separadas mediante una coma, que ocupa una posición fija dentro de los dígitos que componen el número. A la izquierda de la coma se encuentra la parte entera, mientras que a su derecha está la parte fraccionaria. Que la parte entera y fraccionaria tenga un número fijo de bits, es el que obliga a que la coma se encuentre en una posición fija, de ahí la denominación de coma fija. Representación de Números Naturales en Binario Puro El sistema de representación en binario puro se realiza mediante coma fija sin signo Es un sistema polinomial de base b = 2 y sin parte fraccionaria. Este sistema permite representar, con palabras de n n bits, todos los enteros positivos desde 0 hasta 2 −1. n Por tanto su rango es de [0, 2 −1] y su resolución es la unidad. Representación de Números en Coma Fija con Signo Los sistemas digitales deben ser capaces de procesar tanto con números positivos como con negativos, es decir, información numérica con signo. En la representación habitual de números se añade un signo a su izquierda, + en los números positivos y – en los números negativos. La solución adoptada para evitar la inclusión de un nuevo nivel para el signo, es añadir un dígito más que indique el signo del número. Este bit denominado dígito de signo, se encuentra situado en el extremo izquierdo de la representación del número. Toma el valor: 0 cuando se trate de números positivos. 1 para los negativos. Los formatos más habituales de representación de los números con signo son: Signo-magnitud. Complemento a la base. Complemento a la base menos uno. Formato de Números Binarios en Signo‐Magnitud Este tipo de representación utiliza uno de los dígitos, el situado más a la izquierda del número, para indicar su signo. Recibe el nombre de signo-magnitud, porque un dígito se dedica al signo y los demás a la magnitud. Con n bits, el valor decimal que se puede representar estará comprendido en el rango simétrico: [± (2 n–1 –1)] Un inconveniente, es la necesidad de utilizar circuitos diferentes para realizar las operaciones de suma y de resta. Complementos Para evitar el inconveniente del sistema de representación en signo-magnitud se utilizan los complementos. Son transformaciones en la representación de números utilizados por las máquinas digitales para convertir restas en sumas. Los complementos pueden ser de dos clases: Complemento a la base b. Complemento a la base menos uno. Complemento a la Base Dado un número positivo N, de n dígitos enteros y representado en base b, se define su complemento a la base, como el número Cb(N) que cumple: N + Cb(N) = bn Para N = 0 su complemento vale Cb(N) = 0. En el sistema decimal recibe el nombre de complemento a diez En el sistema binario se denomina complemento a dos. Calcular el complemento a la base de los números: 2 C10 (72) = 10 − 72 = 100 − 72 = 28(10 C2 (110,01) = 23 − 110,01 = 1000 − 110,01 = 001,11 Complemento a la Base Menos Uno Dado un número positivo N en base b, compuesto por n dígitos en la parte entera y m dígitos en la parte fraccionaria, se define su complemento a la base menos uno, como el número Cb −1(N) que cumple: n N + Cb–1(N) = b − b −m –m 0 Cuando la parte fraccionaria es cero, b = b = 1, siendo en este caso el complemento a la base menos uno igual a: Cb–1(N) = bn –1 –N n Se debe observar que b – 1 es el valor máximo que se puede representar en la base b con n dígitos enteros. Para N > 0, el valor de su complemento a la base menos uno es igual a: Cb(N) = bn – 1 – N. Para N = 0 su complemento vale: n n Cb-1(N) = b – 1 – N = b – 1, Calcular el complemento a la base menos uno: 2 C9 (72) = 10 − 1 − 72 = 99 − 72 = 27(10 C2 (110,01) = 23 – 2–2 − 110,01 = 111,11 − 111,01 = 001,10 Convenio del Complemento a dos en Números Binarios En el convenio del complemento a dos con formato de n bits, incluido el signo, se pueden representar sólo números comprendidos en el rango asimétrico: n–1 n–1 [–2 , 2 –1] Convenio del Complemento a Uno en Números Binarios En el convenio del complemento a uno con formato de n bits, incluido el signo, se pueden representar números comprendidos en el rango simétrico: [–(2 n–1 n–1 –1), 2 –1] Comparación entre las Representaciones Diferentes de Números Binarios con Signo Representación de los Números Reales en Binario Todos los números reales binarios, que se han representado anteriormente, tienen un formato de coma fija. Con este formato un número real se representa mediante dos partes separadas mediante una coma. Modificar la posición de la coma tiene un efecto de multiplicación por un factor que es potencia de dos: −n Negativa 2 . Positiva 2m. Según se desplace n posiciones a la izquierda o m posiciones a la derecha respectivamente. Representar el número 12,25(10 en binario con formato de coma fija. Desplazar, en la representación binaria, la coma una posición a derecha e izquierda y calcular los nuevos valores que toma en cada caso el número binario modificado. 12,25(10 = 1100,01(2 11000,1(2 = 24,5(10 110,001(2 = 6,125(10 Coma Flotante El tamaño de los números binarios o palabras de memoria, con el que operan los sistemas digitales, suele ser demasiado pequeño para representar números reales en coma fija, ya que limita considerablemente su rango de representación. En la notación en coma flotante, un número tiene tres componentes: Una mantisa M. Un exponente E. Una base b. Generalizando, un número N en coma flotante tiene la siguiente composición: N = S M(b)E S: es el signo del número. M: es el valor absoluto de la mantisa. E: es el valor del exponente. b: es la base del sistema de numeración utilizado. La precisión de los cálculos depende directamente del número de dígitos que tenga la mantisa. El rango de representación, o valores extremos que el sistema digital es capaz de manejar, lo determina el número de dígitos que tiene el exponente. La representación de un número en coma flotante no es única, pues tiene tantas variaciones como lugares pueda ocupar la coma. Para evitar representaciones múltiples del mismo número, se adopta el convenio de situar la coma en un lugar fijo de la mantisa. Para mantener el mayor número de dígitos significativos en la mantisa y con ello disponer de la mayor precisión posible, los números en coma flotante se normalizan. Al proceso que transforma cualquier mantisa, en una mantisa normalizada se denomina normalización. Implica el ajuste del exponente para que el valor del número no quede alterado. Un formato de coma flotante muy extendido en los sistemas digitales es el estándar IEEE 754: Un bit de signo S, que es el signo de la mantisa. El campo del exponente E de 8 bits (incluido implícitamente el signo del exponente). El campo de la mantisa m de 23 bits. S N = (−1) · 2 E−127 · (1,m) El estándar IEEE 754 también establece un formato de 64 bits, 11 bits en el campo del exponente y 52 bits en el campo de la mantisa, cumpliéndose la expresión: N = (−1)S · 2E−1023 · (1,m) Representar el número −6,125(10 según el estándar IEEE 754 con formato de 32 bits. El número −6,125(10 se representa, su valor positivo en binario, como 110,001. Según el estándar IEEE 754, el número propuesto, debe cumplir la expresión: S N = (−1) · 2 1 N = (−1) · E−127 · (1,m) = 129−127 (2 (10) · (1,10001(2) = N = (–1) · (4(10) · (1,53125(10) = –6,125 Su almacenamiento, según el estándar IEEE 754 para números de 32 bits en coma flotante, es: 31 23 0 11000000110001000000000000000000 Casos especiales de representación mediante el estándar IEEE 754: El cero se representa mediante una secuencia de 32 ceros. Los números en los que el exponente E = 255 representan valores infinitos o expresiones de la forma 0/0. El último caso trata de cubrir el hueco dejado por la representación en coma flotante con mantisa normalizada, y conseguir una representación cercana al cero que tenga una distribución de errores uniforme. Para ello este estándar emplea la representación no normalizada para E = 0 y M ≠ 0, cumpliendo el número N representado la siguiente expresión. N = (−1)S · 2−126 · (0,m) Determinar el valor decimal del número siguiente expresado en el formato binario de coma flotante de 32 bits, según el estándar IEEE 754: 0000 0000 0001 1101 0100 0000 0000 0000 El número representado en coma flotante es un caso especial de los representados en la Tabla 3.6, donde el exponente E = 0 y la mantisa M ≠ 0. Aplicando la expresión correspondiente a este caso especial, se obtiene: N = (−1)0 · 2–126(0,001110101(2) = N = 1,175494 · 10−38 · 0,228515 = N = 2,686188 · 10 −39 Definiciones y Codificación de la Inf ormación Propiedades de Interés de los Códigos UNIFORMIDAD: Un código es uniforme si a cada símbolo fuente le corresponde una palabra código. A los códigos que cumplen esta propiedad también se les denomina código bloque. NO SINGULARIDAD: Un código uniforme es no singular si a cada símbolo fuente le corresponde palabras de código distintas. DECODIFICACIÓN UNÍVOCA: Un código es unívocamente decodificable si, y sólo si, su extensión de orden n es no singular para cualquier valor finito n. DECODIFICACIÓN INSTANTÁNEA: Se denomina instantáneo, a un código unívocamente decodificable, cuando éste permite decodificar sin ambigüedad las palabras contenidas en una secuencia de símbolos del alfabeto código, sin necesitar el conocimiento de los símbolos que les suceden. Códigos Binarios PONDERADOS: Son aquellos códigos que a cada dígito binario se le asigna un peso y a cada palabra código la suma de los pesos de los dígitos binarios con valor uno, siendo el resultado igual al número decimal al que representan. La distancia entre dos palabras de código, se define como el número de dígitos que deben ser invertidos en una de ellas para obtener la otra. DISTANCIA DEL CÓDIGO BINARIO: se define como la menor de las distancias entre dos cualesquiera de sus palabras código. Dos palabras de código son adyacentes si su distancia es uno, es decir, sólo difieren en un bit. CONTINUOS: Son aquellos códigos cuyas palabras consecutivas son adyacentes; es decir, si dos cualesquiera de sus palabras de código consecutivas sólo difieren en un bit. CÍCLICOS: Son aquellos códigos que además de ser continuos, la primera y última palabra de código también son adyacentes. DENSO: Se define a un código como denso si teniendo una longitud de palabra de n bits está n formado por 2 palabras de código. AUTOCOMPLEMENTARIOS AL NÚMERO N: Son aquellos códigos, cuya palabra de código y su complementada suman N. Los códigos con esta propiedad posibilitan efectuar más fácilmente las operaciones de resta mediante el complemento a N. Tipos Códigos Numéricos Código Binario Natural Este código representa los valores decimales en el sistema de base dos. En la Tabla 3.15 se representa, a modo de ejemplo, el código binario natural, para el caso de longitud de palabra de cuatro bits. Códigos BCD En aplicaciones de introducción de información digital en forma decimal y en su visualización, como son por ejemplo los displays, resulta aconsejable, para simplificar los circuitos digitales, el empleo de códigos que representen por separado cada uno de los dígitos del número decimal. Este tipo de códigos se denomina decimales codificados en binario (Binary Coded Decimal, códigos BCD en lo sucesivo). El número de dígitos binarios necesarios para la codificación es cuatro. Pueden ser códigos: Ponderados. No ponderados. Dentro de los códigos ponderados se pueden destacar el BCD Natural o BCD 8421. La conversión de un número decimal a código BCD se realiza expresando cada dígito decimal mediante la combinación binaria correspondiente del código BCD elegido. La conversión del código BCD a un número decimal se realiza dividiendo el número, a partir de la coma, en grupos de cuatro bits, expresando en cada grupo su valor decimal correspondiente del código BCD elegido. La representación del número decimal 37,6 en el código BCD natural es: 3 7 , 6 0 0 1 1 0 1 1 1 , 0 1 1 0 El valor decimal 1001010011,011 es: del código BCD natural: 1 0 0 1 0 1 0 0 1 1 , 0 1 1 0 2 5 3 , 6 Representar el número decimal 127,25 en los códigos BCD natural, Aiken 2421, exceso 3 y en binario natural. Determinar el número decimal del código: 0100 0101 1000,0011 cuando está expresado en: BCD natural, Aiken 2421, exceso 3 y en binario natural. La ventaja que presentan los códigos BCD, como ya se ha indicado anteriormente, es que al efectuarse codificaciones independientes para cada dígito, se facilita la conversión decimal-binario. La desventaja que presentan es que se necesitan más bits para ser representados. Códigos Continuos y Cíclicos Los códigos cíclicos por definición son continuos. Garantizan que entre dos palabras de código adyacentes solamente cambiará un bit. Se evita la aparición de palabras transitorias de código debidas a la imposibilidad de conmutación de dos o más dígitos. Una de las aplicaciones importantes de estos códigos está en los sistemas de conversión de digital a analógico y de analógico a digital. Código Gray El código Gray es uno de los códigos cíclicos más usados. También recibe el nombre de código reflejado, debido al reflejo que se debe realizar en las palabras código al construirlo. TABLA 3.25 Construcción del código Gray o código reflejado TABLA 3.26 Código Gray de cuatro bits TABLA 3.27 Propiedades del código Gray Conversión de Binario a Gray 101011, en código binario natural, a código Gray. Conversión de Gray a Binario 111110, en código Gray, a código binario natural. Código Johnson El código Johnson es continuo y cíclico. Este código recibe también el nombre de código progresivo, debido a que el número de unos aumenta y disminuye progresivamente de una combinación a la siguiente. Presenta la desventaja de tener una capacidad de codificación para n bits de tan sólo 2 · n símbolos fuentes distintos, por lo que no es denso. TABLA 3.28 Código Johnson TABLA 3.29 Propiedades del código Johnson TABLA 3.30 Propiedades de los códigos Códigos Alfanuméricos Se caracterizan porque permiten representar tanto números como caracteres alfabéticos. Incluyen caracteres especiales y de control, necesarios, estos últimos, para la transferencia de información. Podemos destacar: EBCDIC ASCII Código ASCII Códigos Detectores de Error Cuando se transmite información digital por un medio físico, tal como cable, radio, fibra óptica, etc., se pueden producir errores, debido a la presencia de ruido, interferencias electromagnéticas, fallo de componentes, falsos contactos, etc. En un código denso no es posible la detección de un error. Es necesario que las palabras código no presenten todas las posibles combinaciones. Esta condición es necesaria, pero no suficiente. La condición necesaria y suficiente para que un código binario permita detectar errores en un bit es que su distancia sea superior a la unidad. Para ello, se añade información redundante (bits de chequeo) a la palabra a transmitir aumentando su distancia. Códigos de Paridad Se define la paridad de una combinación o palabra de código binario, como el número de unos que contiene. Si el número de unos: Es par, la configuración tendrá paridad par. En caso contrario, tendrá paridad impar. Los códigos de paridad se forman partiendo de cualquier código cuya distancia mínima sea uno. A cada combinación del código base se le añade un bit llamado bit de paridad. El bit de paridad toma un valor tal que hace que el número total de unos en el grupo sea siempre par o impar. Si se desea obtener un código de paridad par, dicho bit será tal que el número de unos en cada palabra del nuevo código sea par. Por el contrario, para obtener un código de paridad impar, dicho bit será tal que el número de unos en cada palabra del nuevo código sea impar. TABLA 3.32 Código de paridad correspondiente al código base BCD natural La detección de errores requiere que el transmisor genere el código de paridad, a partir del código base, añadiendo el bit de paridad (par o impar) y enviando esta información por el medio de transmisión. El receptor, en el otro extremo del medio de transmisión, debe comprobar si la paridad se mantiene igual a la prefijada en el transmisor (par o impar), detectando el error cuando ésta no se cumpla. Códigos de Peso Fijo Cabe destacar el código 2 entre 5 y el código biquinario. Este último es ponderado y consta de dos partes, una de dos bits y otra de cinco bits, de ahí su nombre. Los dos códigos indicados se caracterizan por tener una distancia de código igual a dos (lo que permite la detección de un bit de error) y todas sus palabras código tienen exactamente dos unos (paridad par). TABLA 3.33 Códigos Correctores de Error Además de detectar la presencia de un error, proporcionan información, indicando los bits en los que se ha producido el error. Una vez identificados los bits erróneos basta con invertir su valor y así obtener el valor correcto de los datos. Estos códigos, se utilizan principalmente en la transmisión de información, y en especial en aquellos casos donde la transmisión se realiza una sola vez, existiendo la imposibilidad de volver a repetirla cuando se detecta que se ha producido el error. Tal es el caso de los sistemas que trabajan en tiempo real, en los que la información que se transmite es utilizada por el sistema receptor en el mismo instante en el que se recibe. La condición necesaria y suficiente para que un código permita corregir errores en un bit es que la distancia mínima debe ser superior a dos. Código Hamming Para detectar F bit erróneos la distancia mínima ha de ser: 2·F+1 A una palabra de n bits habrá que añadir k bits de paridad tal que: k 2 ≥n+k Se dice que es óptimo cuando cumple la igualdad: 2k = n + k + 1 Procedimiento: Numerar de derecha a izquierda los bits con 1,2,3,4... Los bits de paridad ocuparán las posiciones: 0 1 2 3 2 , 2 , 2 , 2 ,... 1,2,4,8,... Los bits del test Ti deben de cumplir que el conjunto evaluado tenga paridad par. TABLA 3.34 Palabra de test de paridad, en función de la posición del error, para el código Hamming Generador Hamming Corrector Hamming El valor señalado por los bits de test, representa la posición (T3 T2 T1) = (011). El bit de la posición tercera del mensaje recibido (0110111) se debe invertir. Obteniéndose el mensaje correcto 0110011 del dígito decimal 6. Tabla Hamming Determinar si el dato 1010101 recibido en código Hamming, es correcto o bien corregirlo si es necesario. Posición Pi Mensaje P7 ⨁ P5 ⨁ P3 ⨁ P1 P7 ⨁ P6 ⨁ P3 ⨁ P2 P7 ⨁ P6 ⨁ P5 ⨁ P4 B4 B3 B2 C3 B1 C2 C1 P7 P6 P5 P4 P3 P2 P1 1 1 1 1 0 0 0 1 1 1 0 0 1 1 1 0 0 Ti 1 1 T1 = 0 T2 = 0 T3 = 0 Tabla Hamming Determinar si el dato 1000010 recibido en código Hamming, es correcto o bien corregirlo si es necesario. Posición Pi Mensaje P7 ⨁ P5 ⨁ P3 ⨁ P1 P7 ⨁ P6 ⨁ P3 ⨁ P2 P7 ⨁ P6 ⨁ P5 ⨁ P4 B4 B3 B2 C3 B1 C2 C1 P7 P6 P5 P4 P3 P2 P1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 1 1 Ti 0 0 T1 = 1 T2 = 0 T3 = 1 El valor señalado por los bits de test, representa la posición (T3 T2 T1) = (101). El bit de la posición 5 del mensaje recibido se debe invertir. 1010010