Universidad de Costa Rica - Escuela de Ciencias de la Computación e Informática Curso: CI-1203. Introducción a la Organización de Computadores. Sesión 2. 1 Semana 2. Conceptos generales sobre: Sistemas numéricos y códigos. Tomado del libro: Diseño Digital. Principios y prácticas. 2- Sistemas numéricos y códigos. Los sistemas digitales se construyen con circuitos que procesan digitos binarios (0 y 1), aunque pocos problemas de la vida real están basados en números binarios o en cualquier otro sistema numérico. Por tanto, el diseñador debe establecer una correspondencia entre los dígitos binarios procesados por los circuitos digitales y los números, sucesos y condiciones de la vida real. A1. Sistemas numéricos posicionales: números octales y hexadecimales. Sistemas numéricos posicionales. El sistema numérico tradicional que se aprende en la escuela y se usa todos los días, se conoce como sistema numérico posicional. En tal sistema, un número se representa por una cadena de dígitos, donde cada posición de dígito tiene un peso asociado. El valor de un número es una suma ponderada de los dígitos, por ejemplo: 1734 = 1 * 1000 + 7 * 100 + 3 * 10 + 4 * 1 Cada peso es una potencia de 10 correspondiente a la posición del dígito. Un punto decimal permite el uso de potencias de 10 tanto positivas como negativas: 5185,68 = 5 * 1000 + 1 * 100 + 8 * 10 + 5 * 1 + 6 * 0,01 + 8 * 0,01 En general, un número D de la forma d3 d2 d1 d0,d-1 d-2 tiene el valor D = d1* 101 + d0* 100 + d-1 * 10-1 + d-2 * 10-2 Aquí, la cifra 10 se conoce como la base o raíz del sistema numérico. En los sistemas posicionales, la raíz debe ser un entero r, por lo que un dígito en la posición i tiene peso ri. La forma general de un número en tal sistema numérico es: dp-1 dp-2...d1 d0.d-1 d-2...d-n donde existen p dígitos a la izquierda del punto y n dígitos a la derecha del punto conocido como punto decimal en el sistema con base 10. Si se omite el punto, se supone que está a la derecha del dígito de la extrema derecha. El valor del número es la suma de cada dígito multiplicado por la correspondiente potencia de la raíz: p -1 D= d*r i i = -n M. Sc. Sanders A. Pacheco Araya. i Universidad de Costa Rica - Escuela de Ciencias de la Computación e Informática Curso: CI-1203. Introducción a la Organización de Computadores. Sesión 2. 2 Si se exceptúan los posibles ceros anteriores y posteriores, la representación de un número en un sistema numérico posicional es única. (Obviamente que 0185,6300 es igual a 185,63, etc) El dígito que está más a la izquierda de tal número se llama dígito de orden superior o más significativo; el de más a la derecha es el dígito de orden inferior o memos significativo. Como veremos más adelante, los circuitos digitales tienen señales que normalmente están en una de dos condiciones: alto o bajo, cargado o descargado, desactivado o activado. Las señales en estos circuitos representan dígitos binarios (o bits) que tienen uno de dos valores: 0 o 1. De ahí que la base 2 a menudo se use para representar números en un sistema digital. La forma general de un número binario es bp-1 bp-2...b1 b0.b-1 b-2...b-n y su valor es p -1 B= b* 2 1 i i = -n En un binario, el punto se llama punto binario. Cuando se trate con números binarios u otros no decimales, se usará un subíndice para la base de cada número, a menos que ésta sea obvia por el contexto. Algunos ejemplos de números binarios y sus equivalentes decimales son: 100112 1000102 101,0012 = 1*16+0*8+0*4+1*2+1*1=1910b = 1*32+0*16+0*8+0*4+1*2+0*1=3410 = 1*4+0*2+1*1+0*0,5+0*0,25+1*0,125=5,12510 El bit ubicado más a la izquierda de un número binario se llama bit de orden superior o más significativo (MSB, most significant bit); el localizado más a la derecha es el bit de orden inferior o menos significativo (LSB, least significant bit). 2. Números octales y hexadecimales. La base 10 es importante debido a que se usa en la vida diaria y la raíz 2 resulta crucial, ya que los números binarios pueden procesarse directamente mediante circuitos digitales. Los números en otras bases no se procesan a menudo directamente, pero pueden ser esenciales para documentación u otros propósitos. En particular las bases 8 y 16 proporcionan representaciones breves que son convenientes para números con múltiples bits en un sistema digital. El sistema numérico octal usa la base 8, mientras que el sistema numérico hexadecimal emplea la base 16. La tabla 1. Muestra los enteros binarios desde 0 hasta 1111 y sus equivalentes en numeración octal, decimal y hexadecimal. El sistema octal necesita 8 dígitos, así que utiliza los dígitos del 0 al 7 del sistema decimal. El sistema hexadecimal necesita 16 dígitos, así que complementa los dígitos decimales 0-9 con las letras A-F. Los sistemas octal y hexadecimal son útiles para representar números de muchos bits debido a que sus bases son potencias de 2. Como una cadena de tres bits puede tener ocho combinaciones diferentes, cada cadena de tres bits puede representar de manera única a un dígito octal, de acuerdo M. Sc. Sanders A. Pacheco Araya. Universidad de Costa Rica - Escuela de Ciencias de la Computación e Informática Curso: CI-1203. Introducción a la Organización de Computadores. Sesión 2. 3 con la tercera y cuarta columnas de la tabla 1. De manera semejante, una cadena de 4 bits puede representar a un dígito hexadecimal de acuerdo con la quinta y sexta columnas de la tabla. En consecuencia, es muy sencillo convertir un número binario a octal. Si se empieza con el punto binario y se continúa a la izquierda, simplemente se separan los bits en grupos de tres y se reemplaza cada grupo con el correspondiente dígito octal: 1000110011102 = 100 011 001 1102 = 111011011101010012 = 011 101 101 110 101 0012 = 43168 3556518 El procedimiento para la conversión de binario a hexadecimal es similar, excepto que se usan grupos de cuatro bits: 1000110011102 = 1000 1100 11102 111011011101010012 = 0001 1101 1011 1010 10012 M. Sc. Sanders A. Pacheco Araya. = = 8CE16 1DCBA916 Universidad de Costa Rica - Escuela de Ciencias de la Computación e Informática Curso: CI-1203. Introducción a la Organización de Computadores. Sesión 2. 4 Tabla 1. Números binarios, octales y hexadecimales. Binario Decimal Octal Cadena de 3 bits Hexadecimal Cadena de 4 bits 0 0 0 000 0 0000 1 1 1 001 1 0001 10 2 2 010 2 0010 11 3 3 011 3 0011 100 4 4 100 4 0100 101 5 5 101 5 0101 110 6 6 110 6 0110 111 7 7 111 7 0111 1000 8 10 ---- 8 1000 1001 9 11 ---- 9 1001 1010 10 12 ---- A 1010 1011 11 13 ---- B 1011 1100 12 14 ---- C 1100 1101 13 15 ---- D 1101 1110 14 16 ---- E 1110 1111 15 17 ---- F 1111 En estos ejemplos se han agregado libremente ceros a la izquierda para que el número total de bits sea un múltiplo de 3 o 4, según se requiera. Si un número binario contiene dígitos a la derecha del punto binario, se puede convertir a octal o hexadecimal comenzando en el punto y siguiendo hacia la derecha. Tanto en el lado izquierdo como en el derecho pueden agregarse ceros para obtener múltiplos de tres o cuatro bits, como se muestra en el ejemplo siguiente. M. Sc. Sanders A. Pacheco Araya. Universidad de Costa Rica - Escuela de Ciencias de la Computación e Informática Curso: CI-1203. Introducción a la Organización de Computadores. Sesión 2. 5 10,10110010112 = 010 , 101 100 101 1002 = 2,54548 = 0010 , 1011 0010 11002 = 2,B2C16 La conservación en la dirección contraria (de octal a hexadecimal a binario) es muy sencilla. Simplemente se reemplaza cada dígito octal o hexadecimal con la correspondiente cadena de 3 o 4 bits, como se ilustra a continuación: 13578 2046,178 BEAD16 9F,46C16 = 001 011 101 1112 = 010 000 100 110 , 001 1112 = 1011 1110 1010 11012 = 1001 1111 , 0100 0110 1100 El sistema numérico octal fue bastante popular debido a que ciertas minicomputadoras tenían indicadores luminosos e interruptores en su panel frontal, agrupados de tres en tres. Sin embargo, el sistema octal no es muy usado en la actualidad, debido a la preponderancia de las máquinas que procesan bytes de 8 bits. Es difícil extraer valores de cada byte en cantidades de varios bytes por medio de la representación octal, por ejemplo, ¿Cuáles son los valores de los cuatro bytes de 8 bits en el número de 32 bits con la siguiente representación octal 123456701238? En el sistema hexadecimal, dos dígitos representan un byte de 8 bits y 2n dígitos representan una palabra de n bytes; cada par de dígitos constituye exactamente un byte. por ejemplo, el número hexadecimal de 32 bits 5678ABCD16 consiste de cuatro bits con valores 5616, 7816, AB16 y CD16. En este contexto, a un dígito hexadecimal de cuatro bits algunas veces se le llama semibit (nibble); un número de 32 bits (4 bytes) tiene ocho semibits. Los números hexadecimales a menudo se usan para describir el espacio de direcciones de la memoria de la computadora. Por ejemplo, una máquina con direcciones de 16 bits puede considerarse como que tiene una memoria de lectura/escritura instalada en las direcciones 0-EFFF16 y memoria sólo de lectura en las direcciones F000-FFFF16. B- Conversión entre sistemas numéricos posicionales. De manera genérica, la conversión entre dos bases no puede hacerse por simple sustitución; se requiere hacer operaciones aritméticas. Se mostrará cómo convertir un número en cualquier base a base 10 y viceversa, usando aritmética de base 10. Anteriormente se indica que el valor de un número en cualquier base está dado por la fórmula: p -1 D= d*r i i i = -n donde r es la base del número y hay p dígitos a la izquierda del punto y n a la derecha. Por lo que el valor del número puede calcularse al convertir cada dígito del número a su equivalente en base 10 y expandiendo la fórmula mediante la aritmética en base 10. He aquí algunos ejemplos: M. Sc. Sanders A. Pacheco Araya. Universidad de Costa Rica - Escuela de Ciencias de la Computación e Informática Curso: CI-1203. Introducción a la Organización de Computadores. Sesión 2. 1CE816 = F1A316 = 436,58 132,34 1*163 + 12 * 162 + 14 * 161 + 8 * 160 15*163+1*162+10*161+3*160 = 4*82 +3*81+6*80+5*8-1 = 1*42+3*41+2*40+3*4-1 6 = 740010 = 6185910 = 286,62510 = 30,7510 Una forma corta para convertir números enteros a base 10 se obtiene al reescribir la expansión de la fórmula como sigue: D=((...((dp-1)*r+dp-2)*r+...)*r+d1)*r+d0 Es decir, comenzando con una suma de 0, se indica con el dígito de la extrema izquierda, se multiplica la suma por r y se agrega el siguiente dígito a la suma, repitiendo esto hasta que todos los dígitos se hayan procesado. Por ejemplo, puede escribirse F1AC16= (((15)*16+1)*16+10)*16+12 Aunque la fórmula no es muy interesante en sí misma, constituye la base para un método muy conveniente de convertir un número decimal D a una base r. Considere lo que pasa si dividimos la fórmula por r. Ya que la parte de la fórmula que está en paréntesis es divisible por r, el cociente será Q=(...((dp-1)*r+dp-2)*r+...)*r+d1 y el residuo será d0. Por lo que d0 puede calcularse como el residuo de la división larga de D entre r. Además, el cociente de Q tiene la misma estructura que la fórmula original. Por consiguiente, las divisiones sucesivas por r darán dígitos sucesivos de D de derecha a izquierda, hasta que se hayan obtenido todos los dígitos de D. A continuación se dan algunos ejemplos: 179/2=89 residuo 1 (LSB) /2=44 residuo 1 /2=22 residuo 0 /2=11 residuo 0 /2=5 residuo 1 /2=2 residuo 1 /2=1 residuo 0 /2=0 residuo 1 (MSB) 17910 = 101100112 467/8=58 residuo 3 (dígito menos significativo) /8=7 residuo 2 /8=0 residuo 7 (dígito más significativo) M. Sc. Sanders A. Pacheco Araya. Universidad de Costa Rica - Escuela de Ciencias de la Computación e Informática Curso: CI-1203. Introducción a la Organización de Computadores. Sesión 2. 7 46710 = 7238 3417 / 16 = 213 residuo 9 (dígito menos significativo) / 16 = 13 residuo 5 / 16 = 0 residuo 13 (dígito más significativo) 341710 = D5916. La tabla 2. Resume los métodos para la conversión entre las bases más comunes. M. Sc. Sanders A. Pacheco Araya. Universidad de Costa Rica - Escuela de Ciencias de la Computación e Informática Curso: CI-1203. Introducción a la Organización de Computadores. Sesión 2. 8 Tabla 2. Métodos de conversión para las bases comunes. Conversión Método Ejemplo Binario a octal hexadecimal decimal sustitución sustitución suma 101110110012 = 10 111 011 0012 = 27318 101110110012 = 101 1101 10012 = 5D98 101110110012 = 1*1024+0*512+1*256+1*128+1*64+0*32+1*16+1*8+0*4+1*1= 149710 Octal a binario hexadecimal decimal sustitución sustitución suma 12348 = 001 010 011 1002 12348 = 001 010 011 1002 = 0010 1001 11002 = 29C16 12348 = 1*512+2*64+3*8+4*1 = 66810 sustitución sustitución C0DE16 = 1100 0000 1101 11102 C0DE16 = 1100 0000 1101 11102 = 1 100 000 011 01 1 1102 = 1403368 C0DE16 = 12*4096+0*256+13*16+14*1 = 4937410 Hexadecimal a binario octal suma decimal Decimal a binario octal división división división hexadecimal 10810 = 11011002 10810/ 2= 54 residuo 0 (LSB) / 2=27 residuo 0 /2=13 residuo 1 /2=6 residuo 1 /2=3 residuo 0 /2=1 residuo 1 /2=0 residuo 1 (MSB) 10810 = 1548 10810 / 8 = 13 residuo 4 (el dígito menos significativo) / 8=1 residuo 5 /8=0 residuo 1 (el dígito más significativo) 10810 = 6C16 10810+16=6 residuo 12 (el dígito menos significativo) /16=0 residuo 6 (el dígito más significativo) M. Sc. Sanders A. Pacheco Araya. Universidad de Costa Rica - Escuela de Ciencias de la Computación e Informática Curso: CI-1203. Introducción a la Organización de Computadores. Sesión 2. 9 C- Representación de números, suma y resta usando complementos. La suma y resta manual de los números no decimales usa la misma técnica aprendida en la escuela para los números decimales, sólo que las tablas de suma y resta son diferentes. La tabla 3 es para la suma y resta de dígitos binarios. Al sumar los dos números binarios X y Y, sumamos los bits menos significativos con un acarreo inicial (cin) de 0, lo que produce los bits de acarreo (cout) y de suma (s) de acuerdo con la tabla. Se continúan procesando los bits de derecha a izquierda, incluyendo el acarreo de la columna anterior en la suma de la siguiente columna. Tabla 3. Suma y resta binaria. cin o bin x y cout s bout d 0 0 0 0 0 0 0 0 0 1 0 1 1 1 0 1 0 0 1 0 1 0 1 1 1 0 0 0 1 0 0 0 1 1 1 1 0 1 1 0 1 0 1 1 0 1 0 0 0 1 1 1 1 1 1 1 En la figura 1 se muestran dos ejemplos de sumas decimales y las correspondientes sumas binarias; se usa una flecha para indicar un acarreo de 1. Los mismos ejemplos se repiten y se incluyen otros dos más; los acarreos como una cadena C de bits. M. Sc. Sanders A. Pacheco Araya. Universidad de Costa Rica - Escuela de Ciencias de la Computación e Informática Curso: CI-1203. Introducción a la Organización de Computadores. Sesión 2. C 101111000 C 001011000 X 190 10111110 X 173 10101101 Y + 141 + 10001101 Y + 44 + 00101100 X+Y 331 101001011 X+Y 217 11011001 011111110 C C 10 000000000 X 127 01111111 X 170 10101010 Y + 63 + 00111111 Y + 85 + 01010101 X+Y 190 10111110 X+Y 255 11111111 Figura 1. Ejemplos de sumas decimales y sus correspondientes binarios. La resta binaria se realiza de manera similar, usando préstamos (bin y bout) en vez de acarreos entre cada paso y produciendo un bit de diferencia d. La figura 2 muestra dos ejemplos de restas decimales y las correspondientes restas binarias. Al igual que en la resta decimal, los valores minuendo binarios en las columnas se modifican cuando ocurre un préstamo, como se muestra con las flechas y bits en negrita. Los ejemplos de la figura se repiten abajo junto con otros dos; esta vez se muestran los préstamos como una cadena de B de bits. Figura 2. Ejemplos de restas decimales y sus correspondientes binarias. B 001111100 B 011011010 X 229 11100101 X 210 11010010 Y - 46 - 00101110 Y - 109 - 01101101 X-Y 183 10110111 X-Y 101 01100101 010101010 B B 000000000 X 170 10101010 X 221 11011101 Y - 85 - 01010101 Y - 76 - 01001100 X-Y 85 01010101 X-Y 145 10010001 M. Sc. Sanders A. Pacheco Araya. Universidad de Costa Rica - Escuela de Ciencias de la Computación e Informática Curso: CI-1203. Introducción a la Organización de Computadores. Sesión 2. 11 Un uso muy común de la resta en las computadoras es el de la comparación de dos números. Por ejemplo, si la operación X-Y produce un préstamo en la posición del bit más significativo, entonces X es menor que Y; de lo contrario X es mayor que 0 igual que Y. La relación entre acarreos y préstamos en los sumadores y los restadores se explorará más adelante. Pueden construirse las tablas de suma y resta para dígitos octales y hexadecimales o para cualquier otra base. Si deben manipularse números no decimales con poca frecuencia, entonces es bastante sencillo convertirlos a decimales, calcular resultados y luego convertirlos a no decimales. En general, cada columna en una suma (o resta) puede hacerse convirtiendo los dígitos de la columna a decimal, sumándolos en decimal y convirtiendo el resultado a los dígitos correspondientes de suma y acarreo en la base no decimal. (Un acarreo produce siempre que la suma de la columna iguala o excede a la base). Ya que la suma se hace en decimal, confiamos en el conocimiento que posea de la tabla de suma decimal; lo único nuevo que se necesita aprender es la conversión de dígitos decimales a no decimales y viceversa. La secuencia de pasos para sumar mentalmente dos números hexadecimales se muestra abajo. C 1100 1 1 0 0 X 19B916 1 9 11 9 Y + C7E616 + 12 7 14 6 X+Y E19F16 14 17 25 15 14 16+1 16+9 15 E 1 9 F 1. Representación de números negativos. Hasta ahora se ha hablado de números positivos, pero hay muchas formas de representar a los números negativos. En la vida diaria usamos el sistema de magnitud y signo, que se explica en seguida. Sin embargo, la mayoría de las computadoras usan uno de los sistemas de números complementados que presentaremos posteriormente. 1.1. Representación de magnitud y signo. En el sistema de magnitud y signo, un número consiste de una magnitud y de un símbolo que indica si la magnitud es positiva o negativa. Por lo que los números +98, -57, +123,5 y -13 los interpretamos de la manera usual; también suponemos que el signo es “+” si no se escribe ningún símbolo. Hay dos posibles representaciones del cero, “+0" y “-0", pero ambas tienen el mismo valor. El sistema de magnitud y signo se aplica a los números binarios por medio de una posición de bit extra para representar el signo (el bit de signo). De manera tradicional, el bit más significativo M. Sc. Sanders A. Pacheco Araya. Universidad de Costa Rica - Escuela de Ciencias de la Computación e Informática Curso: CI-1203. Introducción a la Organización de Computadores. Sesión 2. 12 (MSB) de la cadena de bits se usa como el bit de signo (0= más, 1 =menos) y los bits de orden inferior contienen la magnitud. Así que escribamos varios enteros en magnitud y signo, de 8 bits y sus equivalentes decimales: 010101012 = +8510 011111112 = +12710 000000002 = +010 110101012 = -8510 111111112 = -12710 100000002 = -010 El sistema de magnitud y signo contiene un número igual de enteros positivos y negativos. Un entero en magnitud y signo de n bits está en el rango de -(2n-1-1) a +(2n-1-1), con dos posibles representaciones del cero. Ahora suponga que se quiere construir un circuito de lógica digital para que sume en magnitud y signo. El circuito debe examinar los signos de los sumandos para determinar que hacer con las magnitudes. Si los signos son los mismos, éste debe sumar las magnitudes y dar el mismo signo al resultado. Si los signos son diferentes, éste debe comparar las magnitudes, restar la más pequeña a la más grande y dar al resultado el signo de la más grande. Todos estos “si”, “sumas”, “restas” y “comparaciones” se traducen en circuitos lógicos bastante complejos. Los sumadores para sistemas de números complementados son mucho más simples, como se mostrarán en seguida. Quizás la característica que compensa el sistema de magnitud y signo es que, una vez que sabemos cómo construir un sumador de magnitud y signo, es casi trivial construir un restador, éste sólo necesita cambiar el signo del sustraendo y pasarlo con el minuendo a un sumador. 1.2 Sistema numérico en complemento. Mientras que los sistemas de magnitud y signo niegan un número al cambiar su signo, un sistema numérico en complemento niega un número al tomar su complemento definido por el sistema. Tomar el complemento es más fácil que cambiar el signo, pero los dos números en un sistema en complemento pueden sumarse o restarse directamente sin verificar la magnitud y signo, cómo lo requiere el sistema de magnitud y signo. Se describirán dos sistemas numéricos en complemento, llamados “el complemento a la base” y el “complemento base disminuido”. En cualquier sistema numérico en complemento, normalmente se trabaja con un número fijo de dígitos, digamos n. (Sin embargo, puede incrementarse el número de dígitos mediante la “extensión del signo”) Si se supone que la base es r y que los números tienen la forma. D= dn-1 dn-2... d1 d0 El punto está a la derecha, así que el número es un entero. Si una operación produce un resultado que requiere más de n dígitos, se descartan los dígitos extra de orden superior. Si un número D se complementa dos veces, el resultado es D. 1.3. Representación en complemento a la base. M. Sc. Sanders A. Pacheco Araya. Universidad de Costa Rica - Escuela de Ciencias de la Computación e Informática Curso: CI-1203. Introducción a la Organización de Computadores. Sesión 2. 13 En un sistema en complemento a la base, el complemento de un número de n dígitos se obtiene al restarlo de rn. En el sistema decimal, el complemento a la base se llama el complemento a 10. Algunos ejemplos con números decimales de 4 dígitos (y la diferencia de 10 000) se muestran en la tabla 4. Tabla 4. Ejemplos de complemento a 10 y 9. Número Complemento a 10 Complemento a 9 1849 8151 8150 2067 7933 7932 100 9900 0988 7 9993 9992 8151 1849 1848 0 10000 (=0) 9999 Por definición, el complemento a la base de un número D de n dígitos se obtiene al restarlo de r . Si D está entre 1 y rn-1, esta resta produce otro número entre 1 y rn-1. Si D es 0, el resultado de la resta es rn, que tiene la forma 100 ... 00, donde hay un total de n + 1 dígitos. Al descartar el dígito extra de orden superior, se obtiene el resultado de 0. Por lo que hay sólo una representación del cero en un sistema de complemento a la base. Por definición, parece necesaria una operación de resta para calcular el complemento a la base de D. Sin embargo, esta resta puede evitarse al rescribir rn como (rn-1 )+1 y rn-D como ((rn-1)D)+1. El número rn-1 tiene la forma mm... mm, donde m = r-1 y tiene n dígitos m. Por ejemplo: 10 000 es igual a 9 999 +1. Si definimos el complemento de un dígito d como r-1-d, luego (rn-1) -D se obtiene al complementar los dígitos de D. Por lo que el complemento a la base de un número D se obtiene al complementar los dígitos individuales de D y sumándole 1. Por ejemplo, el complemento a 10 de 1849 es 8150 + 1 o sea 8151. Deberá confirmar que este artificio también es válido para los ejemplos de los dígitos para los números binarios octales, decimales y hexadecimales. n M. Sc. Sanders A. Pacheco Araya. Universidad de Costa Rica - Escuela de Ciencias de la Computación e Informática Curso: CI-1203. Introducción a la Organización de Computadores. Sesión 2. 14 Tabla 5. Complementos de dígitos. 1.4 Representación en complemento a dos. Para los números binarios, el complemento a la base se llama complemento a dos. El MSB de un número en este sistema sirve como el bit de signo; un número es negativo si y sólo si su MSB es 1. El equivalente decimal para un número binario en complemento a dos se calcula de la misma manera que para un número sin signo, excepto que el peso del MSB es -2n-1 en vez de +2n-1. El rango de números representables comprende desde -(2n-1) hasta +(2n-1-1). Algunos ejemplos de 8 nits se muestran en seguida. 1710 = 000100012 = complementado los bits 11101110 + 1 111011112 = -1710 -9910 100111012 01100010 + 1 011000112 = 9910 En un caso ocurre fuera de la posición del MSB, como se muestra en el último ejemplo. En todas las operaciones en complemento a dos se ignora este bit y sólo se usan los n bits de orden inferior del resultado. En el sistema numérico en complemento a dos, el cero se considera positivo debido a que su bit de signo es 0. Ya que el complemento a dos tiene una única representación del cero, se tiene un número negativo extra, -2n-1, el cual no tiene una contraparte positiva. Podemos convertir un número X en complemento a dos de n bits en uno de m bits, pero hay que tener cuidado. Si m > n debemos agregar m-n copias del bit de signo de X a la izquierda de X. Esto es, se agregan ceros a los números positivos; esto se conoce como extensión de signo. Si m < n, se descartan los n-m bits de más a la izquierda de X; sin embargo, el resultado es válido sólo si todos los bits descartados son iguales al bit de signo del resultado. La mayoría de las computadoras y otros sistemas digitales usan el sistema de complemento a dos para representar números negativos. Sin embargo, para ser completos, también se describirá el complemento a la base disminuida y los sistemas en complemento a 1. 1.5. Representación de complemento a la base disminuida. En un sistema de complemento a la base disminuida, el complemento de un número D de n dígitos se obtiene al restarlo de bn-1. Esto puede hacerse complementando los dígitos individuales de D, sin sumarle 1 como en el sistema complemento a la base. En decimal esto se conoce como complemento a 9; algunos ejemplos se dan en la última de la tabla 4. 1.6. Representación en complemento a uno. M. Sc. Sanders A. Pacheco Araya. Universidad de Costa Rica - Escuela de Ciencias de la Computación e Informática Curso: CI-1203. Introducción a la Organización de Computadores. Sesión 2. 15 El sistema de complemento a la base disminuida para los números binarios se llama complemento a uno. Al igual que en complemento a dos, el bit más significativo es el de signo (0 si es positivo, 1 si es negativo). Por tanto, hay dos representaciones de los números positivos del cero, el cero positivo (00...00) y el cero negativo (11...11). Las representaciones de los números positivos son iguales tanto en complemento a uno como a dos. Sin embargo, las representaciones de los números negativos difieren en 1. Se da un peso de -(2n-1-1), en vez de -2n-1, al bit más significativo cuando se calcula el equivalente decimal de un número en complemento a uno. El rango de números representables va desde -(2n-1-1) hasta +(2n-1-1). A continuación se muestran algunos números de 8 bits y sus complementos a uno. 1710 = 000100012 111011102 = -1710 -11910 = 011101112 100010002 = 11910 -9910 = 100111012 011000102 = 9910 -010 = 000000002 (cero positivo) 111111112 = 010 (cero negativo) La principal ventaja del sistema de complemento a uno es su simetría y su fácil complementación. Sin embargo, un sumador para números en complemento a uno es más artificioso que un sumador en complemento a dos. Asimismo, los circuitos para la detección del cero en un sistema en complemento a uno debe verificar ambas representaciones del cero, o bien siempre debe convertir 11...11 a 00...000. 1.7 Representaciones en exceso. Si, el número de sistemas para representar números negativos es excesivo, pero hay uno más que debe cubrirse. En la representación exceso B, una cadena de m bits, cuyo valor entero sin signo es M (0<= M<2m) representa al entero con signo M - B. Donde B se conoce como el corrimiento del sistema de números. Por ejemplo, un sistema exceso 2m-1 representa al número X en el rango que va desde -2m-1 hasta +2m-1 -1 mediante la representación binaria de m bits de X+2m-1 -1 (que es siempre no negativo y menor que 2m ). El rango de esta representación es exactamente el mismo que el de los números en complemento a dos de m bits. De hecho, las representaciones de cualquier número en los dos sistemas son idénticas excepto por los bits de signo, que son siempre opuestos. (obsérvese que esto es cierto sólo cuando el corrimiento es 2m-1 ). El uso más común de la notación en exceso es en los sistemas de punto flotante. 2. Suma y resta en complemento a dos. 2.1 Reglas de la suma. M. Sc. Sanders A. Pacheco Araya. Universidad de Costa Rica - Escuela de Ciencias de la Computación e Informática Curso: CI-1203. Introducción a la Organización de Computadores. Sesión 2. 16 Una tabla de números decimales y sus equivalentes en diferentes sistemas de números (tabla 6) revela por qué se refiere el complemento a dos para operaciones aritméticas. Si se comienza con 10002 (-810) y se sigue contando, vemos que cada número sucesivo en complemento a dos hasta 01112 (+710) , puede obtenerse al sumar 1 al número previo. ignorando los acarreos más allá de la cuarta posición. No puede decirse lo mismo de los números en magnitud y signo y de los en complemento a uno. Debido a que la suma ordinaria es sólo una extensión del conteo, los números en complemento a dos pueden sumarse mediante la suma binaria ordinaria, ignorando los acarreos más allá del MSB. El resultado en todos los casos será la suma correcta, siempre que no se exceda el rango del sistema numérica. Algunos ejemplos de suma decimal y las correspondientes sumas en complemento a dos de números de 4 bits confirman eso: + 3 0011 + + 4 +0100 + 7 0111 -2 +- 6 -8 M. Sc. Sanders A. Pacheco Araya. 1110 + 1010 1 1000 Universidad de Costa Rica - Escuela de Ciencias de la Computación e Informática Curso: CI-1203. Introducción a la Organización de Computadores. Sesión 2. 17 Tabla 6. Decimales y números de 4 bits. Complemento a uno Magnitud y signo Exceso 2m-1 Decimal Complemento a dos -8 1000 -7 1001 1000 1111 1 -6 1010 1001 1110 10 -5 1011 1010 1101 11 -4 1100 1011 1100 100 -3 1101 1100 1011 101 -2 1110 1101 1010 110 -1 1111 1110 1001 111 0 0 1111 o 0000 1000 o 0000 1000 1 1 1 1 1001 2 10 10 10 1010 3 11 11 11 1011 4 100 100 100 1100 5 101 101 101 1101 6 110 110 110 1110 7 111 111 111 1111 0 2.2 Una representación gráfica. Otra forma de visualizar el sistema de complemento a dos hace uso del "contador" de 4 bits mostrado en la figura 3. Aquí se muestran los números en una representación circular o "modular". La operación de este contador se asemeja mucho a la de un circuito contador real hacia atrás y hacia adelante , el cual se estudiará más adelante. Se comienza con la flecha que señala cualquier número al que puede sumarse +n incrementarlo así n veces cuando se mueve la flecha n posiciones en el sentido de las manecillas del reloj. Es también evidente que puede restarse n de un número al M. Sc. Sanders A. Pacheco Araya. Universidad de Costa Rica - Escuela de Ciencias de la Computación e Informática Curso: CI-1203. Introducción a la Organización de Computadores. Sesión 2. 18 decrementarlo n veces, al mover la flecha n posiciones en el sentido contrario a las manecillas del reloj. Por supuesto que estas operaciones dan resultados correctos sólo si n es bastante pequeño como para que no se cruce la discontinuidad entre -8 y +7. Fig. 3. Representación de conteo modular de números de 4 bits en complemento a dos. Lo más interesante es que también se puede restar n (o sumar -n) al mover la flecha 16 -n posiciones en el sentido de las manecillas del reloj. Obsérvese que la cantidad 16-n es la que definimos como el complemento a dos de -n. Esta representación gráfica apoya la afirmación anterior de que un número negativo en representación de complemento a dos puede sumarse a otro número, al añadir simplemente la representación de 4 bits, usando suma binaria ordinaria. Sumar un número en la figura 1-3 equivale a mover la flecha el número correspondiente de posiciones en el sentido de las manecillas del reloj. 2.3 Desborde. Si una operación de suma produce un resultado que excede el rango del sistema numérico, se dice que ocurre un desborde. En la representación de conteo modular de la figura 1-3, el desborde ocurre durante la suma de números positivos cuando contamos más allá de +7. La suma de dos números con signo diferente nunca produce un desborde, pero la suma de dos números de igual signo puede provocarlo, como se muestra con los siguientes ejemplos: - 3 1101 + - 6 + 1010 - 9 1 0111 = +7 +5 + +6 0101 + 0110 + 11 1011 = -5 Afortunadamente, existe una regla simple para detectar el desborde en la suma: una suma se desborda si los signos de los sumandos son iguales y el signo de la suma es diferente al signo de los sumandos. Algunas veces la regla de desborde se establece en términos de acarreos generados durante la operación de suma: una suma se desborda si los bits de acarreo cin y cout en la posición del signo son diferentes. Un examen cuidadoso de la tabla 1-3 muestra que las dos reglas son M. Sc. Sanders A. Pacheco Araya. Universidad de Costa Rica - Escuela de Ciencias de la Computación e Informática Curso: CI-1203. Introducción a la Organización de Computadores. Sesión 2. 19 equivalentes, sólo hay dos casos donde cin no es igual a cout , y son los dos únicos casos donde x = y y el bit de suma es diferente. 2.4 Reglas de la resta. Los números en complemento a dos pueden restarse como si fuesen números binarios ordinarios sin signo, y pueden formularse reglas apropiadas para detectar el desborde. Sin embargo, la mayoría de los circuitos para resta de números en complemento a dos no realizan la resta en forma directa. Más bien niegan el sustraendo al tomar su complemento a dos y luego lo suman al minuendo con las reglas normales de la suma. Negar el sustraendo y sumar el minuendo puede realizarse con una sola operación de suma como sigue: hágase el complemento bit a bit del sustraendo, luego súmese al minuendo con un acarreo inicial (cin ) de 1 en vez de 0. En seguida se dan unos ejemplos: El desborde en la resta puede detectarse al examinar los signos del minuendo y el sustraendo complementado, usando las mismas reglas de la suma; o bien al usar la técnica de los ejemplos precedentes, los acarreos entrantes y salientes en la posición del bit de signo pueden observarse, y así detectar el desborde independientemente de los signos de entrada y salida, al emplear de nuevo la misma regla que en la suma. Si se intenta negar el número negativo “extra” da como resultado un desborde, de acuerdo con las reglas previas, cuando sumamos un 1 en el proceso de complementariedad: -(-8) = - 1000 = 0111 + 0001 1000 = -8 Sin embargo, este número puede usarse en sumas y restas siempre que el resultado final no exceda el rango: 1 -cin +4 0100 -3 1101 1101 + - 8 + 1000 - - 8 - 1000 + 0111 -4 1100 +5 1 0101 2.5 Números binarios en complemento a dos y sin signo. M. Sc. Sanders A. Pacheco Araya. Universidad de Costa Rica - Escuela de Ciencias de la Computación e Informática Curso: CI-1203. Introducción a la Organización de Computadores. Sesión 2. 20 Ya que los números en complemento a dos se suman y restan como números sin signo de la misma longitud con los mismos algoritmos básicos de suma y resta binaria, una computadora o sistema digital puede usar el mismo circuito sumador para manejar números de ambos tipos. Sin embargo, los resultados deben interpretarse de manera diferente dependiendo de que el sistema esté trabajando números son signo (por ejemplo de -8 a +7) o números sin signo (por ejemplo de 0 a 15). En la figura 3 se introduce una representación gráfica del sistema en complemento a dos de 4 bits. Puede reetiquetarse esta figura (como se muestra en la figura 4) para obtener una representación de los números sin signo de 4 bits. Las combinaciones binarias ocupan las mismas posiciones en el círculo y aún se puede sumar una cifra al mover la flecha el número correspondiente de posiciones en el sentido de las manecillas del reloj, y restarse al mover la flecha en el sentido contrario al de las manecillas del reloj. Una operación de suma excede el rango del sistema de números si la flecha, moviéndose en el sentido de las manecillas, causa la discontinuidad existente entre el 0 y el 15. En este caso, se dice que ha ocurrido un acarreo fuera de la posición del bit más significativo. Figura 4. Representación de conteo modular de números de 4 bits sin signo. De manera semejante una operación de resta excede el rango del sistema numérico si la flecha se mueve en el sentido contrario al de las manecillas del reloj a través de la discontinuidad. En este caso se dice que ha ocurrido un préstamo fuera de la posición del bit más significativo. De la figura 4 es también evidente que puede restarse un número sin signo n al contar en el sentido de las manecillas de reloj 16 - n posiciones. Esto es equivalente a sumar el complemento a dos en 4 bits, de n. La resta produce un préstamo si la suma correspondiente del complemento a dos no produce un acarreo. Para resumir, en la suma sin signo el acarreo o préstamo en la posición del bit más significativo indica un resultado fuera de rango. En la suma con signo en complemento a dos, la condición de desborde definida antes indica un resultado fuera de rango. El acarreo desde la posición del bit más significativo es irrelevante en la suma con signo, en el sentido de que puede o no ocurrir el desborde independientemente de que haya un acarreo o no. 3. Suma y resta en complemento a uno. M. Sc. Sanders A. Pacheco Araya. Universidad de Costa Rica - Escuela de Ciencias de la Computación e Informática Curso: CI-1203. Introducción a la Organización de Computadores. Sesión 2. 21 Otra mirada a la tabla 6 ayuda a explicar la regla de la suma en complemento a uno. Si se comienza en 10002(-710) y se avanza, se obtiene cada número en complemento a uno sucesivo al sumar 1 al número previo, excepto en la transición de 11112 (0 negativo) a 00012 (+110). Para mantener el conteo apropiado, debe agregarse 2 en vez de 1 siempre que se cuente más allá de 11112. Esto sugiere una técnica para sumar números en complemento a 1: hágase una suma binaria normal, pero agréguese un 1 extra siempre que se pase por 1112. El conteo hecho más allá de 11112 durante una suma puede detectarse al observar el acarreo fuera de la posición del signo. Por lo que la regla para sumar números en complemento a uno puede establecerse fácilmente: Hágase una suma binaria normal; si hay un acarreo fuera de la posición del signo, súmese 1 al resultado. Esta regla a menudo se conoce como acarreo en redondo. A continuación se dan ejemplos de sumas en complemento a uno; los últimos tres incluyen acarreo en redondo. Sistema de números Reglas de suma Reglas de negación Reglas de resta Sin signo Se suman los números. El resultado esta fuera de rango, si ocurre un acarreo fuera del MSB. N/A Se resta el sustraendo del minuendo. El resultado está fuera de rango, si ocurre un préstamo fuera del MSB. Magnitud con signo (igual signo) Se suman las magnitudes; ocurre un desborde, si ocurre un acarreo fuera del MSB; el resultado tiene el mismo signo. (Signo opuesto) Se resta la magnitud más pequeña a la mayor; un desborde es imposible; el resultado tiene el signo de la magnitud mayor. Cambie el signo de bit. Cambie el bit de signo del sustraendo y proceda como en la suma. Complemento a dos. Se suma e ignora cualquier acarreo fuera del MSB. El desborde ocurre si los acarreos entrante y saliente al MSB son diferentes. Se complementan todos los bits del sustraendo; se suma 1 al resultado. Se complementan todos los bits del sustraendo y se suman al minuendo con un acarreo inicial. Complemento a uno. Se suma y si hay un Se complementan todos Se complementan todos M. Sc. Sanders A. Pacheco Araya. Universidad de Costa Rica - Escuela de Ciencias de la Computación e Informática Curso: CI-1203. Introducción a la Organización de Computadores. Sesión 2. acarreo fuera del MSB, se suma 1 al resultado. Hay desborde si los acarreros entrante y saliente al MSB son diferentes. los bits del sustraendo. 22 los bits del sustraendo y se procede como en la suma. Tabla 7. Resumen de las reglas se suma y resta para números binarios. Siguiendo la regla anterior de la suma de dos pasos, la suma de un número y de su complemento produce el 0 negativo. De hecho, una operación de suma que use esta regla nunca puede producir un cero positivo a menos que ambos sumandos sean el cero positivo. Al igual que con el complemento a dos, la forma más fácil de hacer la resta en complemento a uno es complementar el sustraendo y sumar. Las reglas de desborde para la suma y resta en complemento a uno son las mismas que las de complemento a dos. La tabla 7 resume las reglas que presentamos en ésta y las secciones previas para la negación, suma y resta en sistemas de números binarios. 4. Multiplicación binaria. En la escuela se aprende a multiplicar sumando una lista de multiplicandos escalonados que se calculaban de acuerdo con los dígitos del multiplicador. El mismo método puede usarse para obtener el producto de dos números binarios sin signo: 11 * 13 33 11 143 1011 multiplicando * 1101 multiplicador 1011 resultado 0000 multiplicandos desplazados. 1011 10001111 producto Formar los multiplicandos escalonados es trivial en la multiplicación binaria, ya que los únicos valores posibles de los dígitos de multiplicador son 0 y 1. En vez de listar todos los multiplicandos escalonados y luego sumarlos, para un sistema digital es más conveniente sumar cada multiplicando desplazado, a medida que se crea, a un producto parcial. Al aplicar esta técnica al ejemplo previo, se requieren cuatro sumas y productos parciales para multiplicar números de 4 bits: M. Sc. Sanders A. Pacheco Araya. Universidad de Costa Rica - Escuela de Ciencias de la Computación e Informática Curso: CI-1203. Introducción a la Organización de Computadores. Sesión 2. 23 En general, cuando multiplicamos un número de n bits por un multiplicador de m bits, el producto resultante requiere a los sumo de n + m bits para expresarse. El algoritmo de corrimiento y suma requiere m productos parciales y sumas para obtener el resultado, pero la primer suma es trivial ya que el primer producto parcial es cero. Aunque el primer producto parcial solo tenga n bits significativos, después de cada paso de suma, el producto parcial gana un digito significativo, ya que cada suma puede producir un acarreo. Al mismo tiempo, cada paso origina un bit de producto parcial extra, en la calidad de la extrema derecha y siguiendo con el que está a la izquierda, que no cambia durante el resto de los cálculos. El algoritmo de corrimiento y suma puede realizarse mediante un circuito digital que incluye un registro de corrimiento, un sumador y cierta lógica de control. La multiplicación de los números con signo puede hacerse con la multiplicación sin signo y las reglas usuales para los signos: efectuar una multiplicación de las magnitudes y hacer el producto positivo si los operandos tienen el mismo signo, o negativo si tienen signos diferentes. Esto es muy conveniente en sistemas de magnitud y signo, donde éstos están separados. En un sistema de complemento a dos, la obtención de la magnitud de un número negativo y la negación del producto sin signo no son operaciones triviales. Esto conduce a buscar una forma más eficiente de hacer la multiplicación en complemento a dos, que se describe en seguida. Conceptualmente, la multiplicación sin signo se realiza mediante una secuencia se sumas sin signo de los multiplicandos desplazados; en cada paso, el corrimiento del multiplicando corresponde al peso del bit multiplicador. Los bits en un número en complemento a dos tienen los mismos pesos que en un número sin signo, excepto por el MSB, que tiene un peso negativo. Entonces se puede realizar la multiplicación en complemento a dos mediante una secuencia de sumas en complemento a dos de multiplicandos desplazados, excepto en el último paso, en el que debe negarse el multiplicando correspondientemente al MSB del multiplicador, antes de que éste se sume al producto parcial. Nuestro ejemplo previo se repite a continuación, esta vez se interpretan el multiplicador y el multiplicando como números en complemento a dos: M. Sc. Sanders A. Pacheco Araya. Universidad de Costa Rica - Escuela de Ciencias de la Computación e Informática Curso: CI-1203. Introducción a la Organización de Computadores. Sesión 2. 24 El manejo del MSB es un poco artificioso, debido a que se gana un bit significativo en cada paso y se trabaja con números con signo. Por lo que, antes de sumar cada multiplicando desplazado y los productos parciales de k bits, los cambiamos a k + 1 bits significativos mediante una extensión de signo, como se señala en el ejemplo. Cada suma resultante tiene k + 1 bits; se ignora cualquier acarreo fuera del MSB de la suma de k + 1 bit . 5. División binaria. El algoritmo de división binaria más simple está basado en el método de desplazamiento y resta que aprendimos en la escuela. La tabla 8 da ejemplos de éste método para números decimales y binarios sin signo. En ambos casos, se comprara mentalmente el dividendo reducido, con múltiplos del divisor para determinar cuál múltiplo del divisor desplazado se restará. En el caso decimal, primero se toma a 11 como el múltiplo más grande de 11 menor que 21, luego se toma 99 como el múltiplo más grande menor que 107. En el caso binario, la elección es algo más simple, ya que las únicas dos elecciones son cero y el divisor mismo. Tabla 8. Ejemplo de división larga. Los métodos de división para los números binarios son un tanto complementarios a los métodos de multiplicación binaria. Un algoritmo de división típico acepta un dividendo de n + m y un divisor de n bit; asimismo produce un cociente de m bit y un residuo de n bits. La división se desborda si el divisor es cero o el cociente toma más de m bits para expresarse. En la mayoría de los circuitos de las computadoras, n = m. La división de números con signo puede hacerse con el algoritmo de división sin signo y las reglas usuales de los signos: efectuar una división sin signo de las magnitudes y obtener el cociente positivo si los operandos tienen el mismo signo, o hacerlo negativo si tienen signos diferentes. El residuo debe tener el mismo signo que el dividendo. Al igual que en la multiplicación, hay técnicas especiales para realizar la división de manera directa de números en complemento a dos; a menudo se implantan estas técnicas en los circuitos de las computadoras. M. Sc. Sanders A. Pacheco Araya. Universidad de Costa Rica - Escuela de Ciencias de la Computación e Informática Curso: CI-1203. Introducción a la Organización de Computadores. Sesión 2. 25 D- Códigos binarios de números decimales. Aun cuando los números binarios son los más apropiados para los cálculos internos en un sistema digital, la mayoría de la gente todavía prefiere trabajar con los números decimales. Como resultado, las interfaces externas de un sistema digital pueden leer o exhibir números decimales, incluso algunos dispositivos digitales en realidad procesan números decimales directamente. La necesidad humana de representar números decimales no cambia la naturaleza esencial de los circuitos electrónicos básicos, éstos aún procesan señales que toman uno de los dos estados que podemos llamar 0 y 1. Por lo que un número decimal se representan en un sistema digital mediante una cadena de bits, donde las diferentes combinaciones de valores de bits en la cadena representan diversos decimales. Por ejemplo, si usamos una cadena de 4 bits para representar un número decimal, podemos asignar la combinación de bits 0000 al dígito decimal 0, 0001 a 2, y así sucesivamente. Un conjunto de cadenas de n bits en que las diferentes cadenas de bits representan diferentes números u otras cosas se llama código. Una combinación particular de valores de n bits se llama palabra del código. Como se verá en los ejemplos los valores de los bits decimales en esta sección, puede que haya o no una relación aritmética entre los valores de los bits en una palabra de código y lo que representa. Además, un código que usa cadenas de n bits no necesita contener 2n palabras de código. Al menos se necesitan cuatro bits para representar los diez dígitos decimales. Hay millones y millones de maneras diferentes para elegir las 10 palabras de código de 4 bits, 1 algunos de los códigos decimales más comunes se listan en la tabla 9. 1 El número de maneras diferentes de elegir m objetos de un conjunto de n está dado por un coeficiente binomial, denotado ( ), cuyo valor es n!/(m!*(n-m)!). para un código decimal de 4 bits, hay ( ) maneras diferentes de elegir 10 de 16 palabras de código de 4 bits, y 10! Maneras de asignar cada elección diferente a los 10 dígitos. Así que hay (16!/(10!*6!))*10! O 29,059,430,400 códigos decimales de 4 bits diferentes. M. Sc. Sanders A. Pacheco Araya. Universidad de Costa Rica - Escuela de Ciencias de la Computación e Informática Curso: CI-1203. Introducción a la Organización de Computadores. Sesión 2. 26 Tabla 9. Códigos decimales. Quizás el código decimal más “natural” es el decimal codificado binario (BCD, siglas en inglés de binary coded decimal), que codifica los dígitos 0 a 9 por sus representaciones binarias sin signo de 4 bits, del 0000 al 1001. Las palabras de código del 1010 al 1111 no se usan. Las conversiones entre las representaciones BCD y decimales son triviales: una sustitución directa de 4 bits por cada dígito decimal. Algunos programas de computadora colocan dos dígitos BCD en un byte de 8 bits en la representación BCD empacada; por lo que un byte puede representar los valores del 0 al 99 en vez de 0 a 255 para un número binario normal de 8 nits sin signo. Los números BCD con cualquier número deseado de dígitos pueden obtenerse usando un byte por cada dos dígitos. Al igual que con los números binarios, hay muchas representaciones posibles de números BCD negativos. Los números BCD con signo tienen una posición de dígito extra para el signo. Los números BCD con cualquier número deseado de dígitos pueden obtenerse usando un byte por cada dos dígitos. Al igual que con los números binarios, hay muchas representaciones posibles de números BCD negativos. Tanto la representación de magnitud y signo como la de complemento a 10 son populares. En la representación BCD de magnitud y signo, la codificación de la cadena de bit de signo es arbitraria; en complemento a 10, 0000 indica más y 1001 indica menos. La suma de dígitos BCD es similar a la suma de números binarios sin signo de 4 bits, excepto que debe hacerse una corrección si el resultado excede 1001. El resultado se corrige sumándole 6; a continuación se dan ejemplos: Observe que la suma de dos dígitos BCD produce un acarreo en la siguiente posición de dígito siempre que la suma binaria inicial o la suma del factor de corrección produzca un acarreo. Muchas computadoras realizan aritmética BCD empacada usando instrucciones especiales que manejan automáticamente la corrección del acarreo. M. Sc. Sanders A. Pacheco Araya. Universidad de Costa Rica - Escuela de Ciencias de la Computación e Informática Curso: CI-1203. Introducción a la Organización de Computadores. Sesión 2. 27 Los números decimales codificados en binarios están en un código pesado, debido a que cada dígito decimal puede obtenerse de su palabra de código al asignar un peso fijo a cada bit de la palabra. Los pesos para los bits BCD son 8, 4, 2 y 1, por esta razón se le llama código 8421. Otro conjunto de pesos resulta en el código 2421 mostrado en la tabla 1-9. Este código tiene la ventaja de que es autocomplementario; esto es, la palabra código para el complemento a 9 de cualquier dígito puede contenerse al complementar los bits individuales de la palabra código del dígito. Otro código autocomplementario que se muestra en la tabla 9 es el código exceso 3. Aunque éste no es pesado, tiene una relación aritmética con el BCD - la palabra código para cada dígito decimal es la correspondiente a la del BCD más 00112. Debido a que las palabras de código siguen una secuencia de conteo binaria estándar, se puede hacer que los contadores binarios cuenten en código exceso 3. Los códigos decimales pueden tener más de cuatro bits; por ejemplo, el código biquinario de la tabla 9 usa siete. Los primeros dos bits en una palabra código indican si el número está en el rango 0-4 o 5-9 y los últimos cinco indican cuál de los cinco números en el rango seleccionado está representado. Una ventaja potencial de usar más del número mínimo de bits en un código está en la posibilidad de detectar errores. En el código biquinario, si cualquier bit en una palabra código accidentalmente cambia al valor opuesto, la palabra resultante no representa a un dígito decimal y por lo tanto puede señalarse como un error. Fuera de las 128 posibles palabras de código de 7 bits, sólo diez son válidas y reconocidas como dígitos decimales, el resto puede señalarse como errores, si aparecen. El código 1 de 10 (como el mostrado en la última columna de la tabla 9) es la codificación menos densa para los dígitos decimales, usando sólo 10 palabras de código de las 1024 posibles. E- Código de Gray. En las aplicaciones electromecánicas de los sistemas digitales (como máquinas herramientas, sistemas de frenado de automóviles y copiadoras), algunas veces es necesario que un censor de entrada produzca un valor digital que indique una posición mecánica. Por ejemplo, la figura 5 es un esquema conceptual de un disco de codificación y el conjunto de contactos que producen uno de 8 valores codificados binarios de 3 bits, según sea la posición rotacional del disco. Las áreas oscuras del disco se conectan a una fuente de señal correspondiente al 1 lógico, y las áreas claras están desconectadas por lo que los contactos las interpretan como el 0 lógico. M. Sc. Sanders A. Pacheco Araya. Universidad de Costa Rica - Escuela de Ciencias de la Computación e Informática Curso: CI-1203. Introducción a la Organización de Computadores. Sesión 2. 28 Fig. 5. Disco de codificación mecánica con un código binario de 3 bits. El codificador de la figura 5 tiene problemas cuando el disco se coloca en ciertas fronteras entre las regiones. Por ejemplo, considere la frontera entre las regiones 001 y 010 del disco; dos de los bits codificados cambian aquí. ¿Qué valor producirá el codificador si el disco colocado en la frontera teórica? Puesto que estamos sobre la frontera, tanto 001 como 010 son aceptables. Sin embargo, debido a que el ensamble mecánico no es perfecto, los dos contactos a la derecha pueden tocar ambos una región “1", dando una lectura incorrecta de 011. De manera semejante, una lectura de 0000 es posible. En general, esta clase de problema puede ocurrir en cualquier frontera donde cambia más de un bit. El peor de los problemas ocurre cuando los tres bits cambian, como en las fronteras 000-111 y 011-100. El problema del disco codificador puede resolverse al diseñar un código digital en el que sólo ocurra cambios de un bit entre cada par de palabras de código sucesivas. Tal código se conoce como Código Gray; un código Gray de 3 bits se lista en la tabla 10. Se ha rediseñado el disco codificador usando este código, como se muestra en la figura 6. Sólo un bit del nuevo disco cambia en cada frontera, así las lecturas en la frontera dan un valor de un lado o el otro de la frontera. Número decimal Código binario Código Gray 0 000 000 1 001 001 2 010 011 3 011 010 4 100 110 5 101 111 6 110 101 7 111 100 Tabla 10. Comparación del código binario de 3 bits y el código Gray. M. Sc. Sanders A. Pacheco Araya. Universidad de Costa Rica - Escuela de Ciencias de la Computación e Informática Curso: CI-1203. Introducción a la Organización de Computadores. Sesión 2. 29 Fig. 6. Disco de codificación mecánico con un código Gray de 3 bits. Hay dos maneras convenientes de construir un código Gray con cualquier número deseado de bits. El primer método está basado en el hecho de que el código Gray es un código reflejado; éste puede definirse /y construirse) inductivamente usando las siguientes reglas: 1. 2. 3. Un código Gray de 1 bit tiene dos palabras código, 0 y 1. Las primeras 2n palabras código de un código Gray de n + 1 bits son iguales a las palabras de un código Gray de n bits, precedidas por un cero. Las últimas 2n palabras código de un código Gray de n +1 bits son iguales a las palabras de un código Gray de n bits, escritas en orden inverso y precedidas por un uno. Si dibujamos una línea entre las hileras 3 y 4 de la tabla 10, podemos ver que las reglas 2 y 3 con ciertas para el código Gray de 3 bits. Por supuesto que para construir un código Gray de n bits para un valor arbitrario de n con este método, también debemos construir el código Gray de cada longitud menos a n. El segundo método permite derivar las palabras del código de Gray de n bits directamente de la correspondiente palabra de código binaria de n bits: 1. 2. Los bits de un binario de n bits o de una palabra código Gray se numeran de derecha a izquierda, de 0 a n-1. El bit i de una palabra del código Gray es 0 si los bits i e i + 1 de la palabra de código binaria correspondiente son iguales, de lo contrario el bit i es 1. (Cuando 1 + 1 = n, el bit n de la palabra de código en binario se considera como cero). De nuevo, una inspección de la tabla 10 muestra que esto es cierto para el código Gray de 3 bits. F- Códigos de caracteres. Como se mostró en la sección precedente, una cadena de bits no necesita representar un número, de hecho la mayoría de los datos procesados por las computadoras no son numéricos. El tipo más común de datos no numéricos es el texto, cadenas de caracteres de algún conjunto de caracteres. Cada carácter está representado en la computadora mediante una cadena de bits de acuerdo a una convención establecida. M. Sc. Sanders A. Pacheco Araya. Universidad de Costa Rica - Escuela de Ciencias de la Computación e Informática Curso: CI-1203. Introducción a la Organización de Computadores. Sesión 2. 30 El código de caracteres más comúnmente usado es el ASCII (American Standard for Information Interchange). ASCII representa a cada carácter por una cadena de 7 bits, dando un total de 128 caracteres diferentes que se muestran en la tabla 11. El código contiene las letras minúsculas y mayúsculas, numerales, signos de puntuación y diversos caracteres de control que no se imprimen. Por lo que la cadena de texto “Yeccch” se representa mediante una lista de siete números de 7 bists: 1011001 - 1100101 - 1100011 - 1100011 - 1100011 - 1101000 - 0100001 M. Sc. Sanders A. Pacheco Araya. Universidad de Costa Rica - Escuela de Ciencias de la Computación e Informática Curso: CI-1203. Introducción a la Organización de Computadores. Sesión 2. Tabla. 11. Código ASCII. Nº X3.4-1968 del American National Standars Institute. M. Sc. Sanders A. Pacheco Araya. 31 Universidad de Costa Rica - Escuela de Ciencias de la Computación e Informática Curso: CI-1203. Introducción a la Organización de Computadores. Sesión 2. 32 1. Códigos para acciones, condiciones y estados. Los códigos que hemos descrito hasta ahora generalmente se usan para representar cosas que quizás consideraríamos “datos” , cosas como números, posiciones y caracteres. Los programadores saben que pueden usarse docenas de tipos diferentes de datos en un solo programa de computación. En el diseño de sistemas digitales a menudo encontramos aplicaciones sin datos donde una cadena de bits debe usarse para controlar una acción, para verificar una condición o para representar el estado presente del hardware. Probablemente el tipo de código más comúnmente usado para tal aplicación es el código binario simple. Si hay n acciones, condiciones o estados diferentes representarlos con un código binario b=[log2n] bits. (Los paréntesis [ ] denotan la función entero mayor, es decir, el entero más pequeño mayor que o igual a la cantidad entre paréntesis. Por tanto b es el entero más pequeño tal que 2bn). Por ejemplo, considérese a un simple controlador de semáforo. Las señales en la intersección de una calle norte-sur (N-S) y este-oeste (E-W) pueden estar en cualquiera de los seis estados listados en la tabla 12. Estos estados pueden codificarse en tres bits, como se muestra en la última columna de la tabla. Sólo se usan seis de las ocho palabras de código posibles de 3 bits, y la asignación de las seis palabras de código elegidas para los estados es arbitraria, de modo que son posibles muchas otras codificaciones. Un diseñador experimentado elige una codificación particular para minimizar el costo del circuito o para optimizar algunos otros parámetros, como tiempo de diseño (no hay necesidad de probar millones y millones de codificaciones posibles). Tabla 12. Estados de un controlador de semáforos. Otra aplicación de un código binario se ilustra en la figura 7(a). Aquí tenemos un sistema con n dispositivos, cada uno de los cuales puede realizar una cierta acción. Las características de los dispositivos son tales que deben habilitarse para operar uno solo a la vez. La unidad de control produce una palabra de “selección de dispositivo” codificada en binario con [log2n] bits para indicar qué dispositivo se habilita en cierto tiempo. La palabra de código “selección de dispositivo” se aplica a cada dispositivo, que la compara con su propia “identificador de dispositivo” para determinar si se habilita. M. Sc. Sanders A. Pacheco Araya. Universidad de Costa Rica - Escuela de Ciencias de la Computación e Informática Curso: CI-1203. Introducción a la Organización de Computadores. Sesión 2. Figura 7. 33 Estructura de control para un sistema digital con n dispositivos: a- usando código binario; b- usando código 1 de n. Aunque sus palabras tienen el número mínimo de bits, un código binario no es siempre la mejor elección para codificar acciones, condiciones o estados. La figura 7 (b) muestra cómo controlar n dispositivos con un código 1 de n, de n bits en el que las palabras del código válidas tienen un bit igual a 1 y el resto de los bits igual a 0. Cada bit de la palabra de código 1 de n se conecta directamente a la entrada de habilitación del dispositivo correspondiente. Esto simplifica el diseño de los dispositivos, ya que no necesitan un número identificador de dispositivo, sólo necesitan un bit de entrada para habilitación. Las palabras de código de un código 1 de n se listaron en la tabla 9. Algunas veces puede incluirse una palabra con sólo ceros en estos códigos, para indicar que no se selecciona ningún dispositivo. Otro código común es el código invertido 1 de n en el que las palabras de código válidas tienen un bit igual a 0 y el resto iguales a 1. Un código m de n es una generalización del código 1 de n en que las palabras de código válidas tienen m bits iguales a 1 y el resto de los bits iguales a 0. Una palabra de código m de n válida puede detectarse con una compuerta AND de m entradas, la que produce una salida de 1 si todas sus entradas son 1. Esto es muy simple y barato de hacer; sin embargo, para la mayoría de los valores de m, un código m de n típicamente tiene muchas más palabras de código válidas que un código de 1 de n. El número total de las palabras código está dado por el coeficiente binomial ( ), que tiene el valor n! m!*(n - m)! M. Sc. Sanders A. Pacheco Araya. Universidad de Costa Rica - Escuela de Ciencias de la Computación e Informática Curso: CI-1203. Introducción a la Organización de Computadores. Sesión 2. 34 Por lo que un código 2 de 4 tiene 6 palabras de código válidas y un código 3 de 10 tiene 120. En los sistemas complejos, puede usarse una combinación de las técnicas de codificación en un solo código. Por ejemplo, considérese un sistema similar al de la figura 7(b), en el que cada uno de los n dispositivos contiene hasta s subdispositivos. La unidad de control puede producir una palabra de código de selección de dispositivo con un campo codificado como 1 de n para seleccionar un dispositivo, y un campo codificado en binario de [log2s] bits para seleccionar uno de los subdispositivos del dispositivo seleccionado. O, si fuera posible habilitar m subdispositivos a la vez, podría usarse un código m de s para seleccionar subdispositivos. 2. Cubos-N y distancia. Una cadena de n bits puede visualizarse geométricamente, como un vértice de un objeto llamado cubo n. La figura 8 muestra cubos n para n = 1,2,3,4. Un cubo n tiene 2n vértices, cada uno de los cuales está rotulado con una cadena de n bits. Las aristas se dibujan entre vértices adyacentes cuyos rótulos difieren del vértice dado en sólo un bit. Más allá de n = 4, los cubos n son realmente difíciles de dibujar. Fig. 8. Cubos n para n = 1, 2, 3 y 4. Para valores razonables de n, los cubos n facilitan la visualización de ciertos códigos y de los problemas de minimización lógica. Por ejemplo, el problema de diseñar un código Gray de n bits es equivalente a encontrar una ruta a lo largo de los vértices de un cubo n, que visite cada vértice exactamente una vez. Las rutas para los códigos Gray de 3 y 4 bits se muestran en la figura 9. M. Sc. Sanders A. Pacheco Araya. Universidad de Costa Rica - Escuela de Ciencias de la Computación e Informática Curso: CI-1203. Introducción a la Organización de Computadores. Sesión 2. 35 Fig. 9. Recorrido de cubos n en el orden del código Gray: a- cubo 3 b- cubo 4. Los cubos también proporcionan una interpretación geométrica para el concepto de distancia también llamada la distancia de Hamming. La distancia entre dos cadenas de n bits es el número de posiciones de bits en que difieren. Para un cubo n, la distancia es la longitud mínima de una ruta entre los dos vértices correspondientes. Dos vértices adyacentes tienen distancia 1; los vértices 001 y 100 en el cubo 3 tienen distancia 2. El concepto de distancia es fundamental en el diseño y comprensión de los códigos detectores de error. Un subcubo m de un cubo n es un conjunto de 2m vértices en los que n-m de los bits tienen el mismo valor en cada vértice, y los restantes m bits toman todas las 2m combinaciones. Por ejemplo, los vértices (000, 010, 100, 110) forman un subcubo 2 de un cubo 3. Este subcubo puede también denotarse con una sola cadena, xx0, donde “x” denota que ese bit particular toma cualquier valor y es llamado un no importa; cualquier vértice cuyos bits coinciden en las posiciones que no son x pertenecen a este subcubo. El concepto de subcubos es particularmente útil para visualizar algoritmos que minimizan el costo de funciones lógicas combinacionales. G- Códigos para detectar y corregir errores. Un error en un sistema digital es la distorsión del valor correcto del dato, a algún otro valor. Un error es ocasionado por una falla física. Las fallas pueden ser temporales y/o permanentes. Por ejemplo, un rayo cósmico puede ocasionar una falla temporal de un circuito de memoria, cambiando el valor de un bit almacenado ahí. Permitir que un circuito se caliente demasiado o se dañe con la electricidad estática puede ocasionar una falla permanente, de modo que ya no trabaje correctamente. Los efectos de las fallas en los datos se predicen mediante los modelos de error. El modelo de erros más simple, que consideraremos aquí, se llama el modelo de error independiente. En este modelo, se supone que una sola falla física afecta sólo a un bit de los datos; el dato distorsionado se dice que contiene un error individual. Múltiples fallas puede ocasionar errores múltiples, dos o más bits erróneos, pero se supone que los errores múltiples son menos probables que los errores individuales. M. Sc. Sanders A. Pacheco Araya. Universidad de Costa Rica - Escuela de Ciencias de la Computación e Informática Curso: CI-1203. Introducción a la Organización de Computadores. Sesión 2. 36 1. Códigos detectores de errores. Un código que usa cadenas de n bits necesita contener 2n palabras de código válidas; éste es el caso de los códigos que consideraremos ahora. Un código detector de error tiene la propiedad de que la alteración de una palabra de código probablemente producirá una cadena de bits que no es una palabra de código (una no palabra de código). Un sistema que usa un código detector de errores genera, transmite y almacena sólo palabras de código. Por lo tanto, los errores en una cadena de bits pueden detectarse mediante una regla simple, si la cadena de bits es una palabra de código, se supone que es correcta; si no es una palabra código, ésta contiene un error. Un código de n bits y sus propiedades de detección de errores bajo el modelo de error independientemente puede explicarse fácilmente en términos de un cubo n. Un código es simplemente un subconjunto de los vértices del cubo n. A fin de que el código detecte todos los errores individuales, ningún vértice de palabra de código puede ser inmediatamente adyacente a otro vértice de palabra del código. Por ejemplo, la figura 10(a) muestra un código de 3 bits con cinco palabras código. La palabra de código 111 es inmediatamente adyacente a las palabras de código 110 y 011. Ya que una falla individual cambiaría 111 a 110 o 011, este código no detecta todos los errores individuales. Si se hace que 111 no sea una palabra del código, se obtiene un código que tiene la propiedad de detectar errores individuales, como se muestra en (b). Ningún error individual puede cambiar una palabra de código en otra. Fig. 10. Palabras de código en dos códigos de 3 bits diferentes: a- distancia mínima = 1, no detecta todos los errores individuales b- distancia mínima =2, detecta todos los errores individuales. La habilidad de un código para detectar errores individuales puede establecerse en términos del concepto de distancia. Un código detecta todos los errores individuales si la distancia mínima entre todos los pares posibles de palabras del código es 2. En general, necesitamos n + 1 bits para construir un código detector de errores individuales con 2n palabras de código. Los primeros n bits de una palabra de código, llamados bits de M. Sc. Sanders A. Pacheco Araya. Universidad de Costa Rica - Escuela de Ciencias de la Computación e Informática Curso: CI-1203. Introducción a la Organización de Computadores. Sesión 2. 37 información, pueden ser cualquiera de las 2n cadenas de n bits. Para obtener un código de distancia mínima 2, se agrega otro bit, llamado bit de paridad, éste es 0 si hay número par de unos entre los bits de información y 1 en caso contrario. Esto se ilustra en las dos primeras columnas de la tabla 13 para un código con tres bits de información. Una palabra código de n + 1 bits válida tiene un número par de unos y a este código se le conoce como código de paridad par. También puede construirse un código en el que el número total de unos en una palabra código de n + 1 bits sea impar; a éste se le conoce como código de paridad impar y se muestra en la tercera columna de la tabla 13. A estos códigos también se les conoce como códigos con 1 bit de paridad, ya que cada uno de ellos hace uso de un bit de paridad individual. Tabla 13. Códigos distancia 2 con tres bits de información. Bits de información Código paridad par Código paridad impar 000 000 0 000 1 001 001 1 001 0 010 010 1 010 0 011 011 0 011 1 100 100 1 100 0 101 101 0 101 1 110 110 0 110 1 111 111 1 111 0 Los códigos con 1 bit de paridad no detectan errores en 2 bits, ya que cambiar dos bits no afecta la paridad. Sin embargo, los códigos pueden detectar errores en cualquier número impar de bits. Por ejemplo, si se cambian tres bits en una palabra de código, entonces la palabra resultante tiene la paridad incorrecta y no es una palabra código. Esto no nos ayuda mucho. Bajo el modelo de error independiente, los errores de tres bits son mucho menos probables que los errores de 2 bits, que no son detectables. Por lo que, para fines prácticos, la capacidad de detección de error de los códigos de paridad 1 bit es útil sólo para errores de 1 bit. Otros códigos, con distancia mínima mayor que 2, pueden usarse para detectar errores múltiples. (Investigar sobre “Códigos para corrección de errores y detección de errores múltiples) H- Otros códigos: transmisión y almacenamiento de datos en serie. M. Sc. Sanders A. Pacheco Araya. Universidad de Costa Rica - Escuela de Ciencias de la Computación e Informática Curso: CI-1203. Introducción a la Organización de Computadores. Sesión 2. 38 1. Datos en paralelo y en serie. La mayoría de las computadoras y otros sistemas digitales trasmiten y almacenan datos en un formato paralelo. En la transmisión paralela de datos, se proporciona una línea de señal para cada bit de una palabra de datos. En el almacenamiento paralelo de datos, todos los bits de una palabra pueden escribirse o leerse simultáneamente. Los formatos paralelos no son costeables para algunas aplicaciones. Por ejemplo, la transmisión paralela de bytes de datos en la red telefónica requeriría de 8 líneas telefónicas y el almacenamiento paralelo de bytes de datos en un disco magnético requeriría una unidad de disco con ocho cabezas de lectura / escritura separadas. Los formatos en serie permiten que los datos que los datos se trasmitan o almacenen a un bit a la vez, reduciendo el costo del sistema en muchas aplicaciones. La figura 11 ilustra algunas de las ideas básicas en la trasmisión serial de datos. Una señal de reloj repetitiva (de nombre RELOJ en la figura), define la velocidad con que los bits se trasmiten, un bit por ciclo de reloj. Por lo que, el flujo de bits en bits por segundo (bps) numéricamente iguala la frecuencia del reloj en ciclos por segundo (hertz, Hz). Fig. 11. Conceptos básicos para la trasmisión de datos en serie. El recíproco del flujo de bits se llama tiempo del bit y numéricamente iguala el período del reloj en segundos (s). Esta cantidad de tiempo en la línea de datos serie (llamada DATOSER en la figura) para cada bit que se trasmite. el tiempo ocupado por cada bit algunas veces se llama celda de bit. El formato de la señal real que aparece en la línea durante cada celda de bit depende del código de línea. En el código de línea más simple, llamado NRZ, se trasmite un 1 al colocar un 1 en la línea durante la celda de bit completa, y un 0 se trasmite como un 0. Sin embargo, hay códigos de línea más complejos que tienen otras reglas. No obstante el código de línea, un sistema de trasmisión o almacenamiento serial de datos necesita alguna forma para identificar el significado de cada bit en el flujo de bits en serie. Por ejemplo, supóngase que se trasmiten en serie bytes de 8 bites. ¿Cómo puede decirse cuál es el primer byte? Una señal de sincronización, de nombre SINC en la figura 11, proporciona la información necesaria; ésta es 1 para el primer bit de cada byte. M. Sc. Sanders A. Pacheco Araya. Universidad de Costa Rica - Escuela de Ciencias de la Computación e Informática Curso: CI-1203. Introducción a la Organización de Computadores. Sesión 2. 39 Evidentemente, necesitamos un mínimo de tres señales para recuperar una cadena de datos en serie; un reloj para definir las celdas de bit, una señal de sincronización para definir las fronteras de la palabra, y el dato serie. En algunas aplicaciones, como en la interconexión de módulos en un sistema de computadora o de telecomunicaciones, se usa un alambre para cada una de estas señales, puesto que reducir el número de alambres por conexión de n a tres es un ahorro considerable. En muchas aplicaciones, el costo de tener tres señales separadas es aún muy alto (por ejemplo, tres líneas de teléfono, tres cabezas de escritura / lectura). Tales sistemas típicamente combinan las tres señales en un flujo de datos en serie único y hacen uso de circuitos analógicos y digitales complejos para recuperar la información de reloj y de sincronización del flujo de datos. 2. Códigos de línea en serie. Los códigos de línea más comúnmente usados para datos en serie se ilustran en la figura 12. En el código de Sin Vuelta a Cero (NRZ del inglés Non Return to Zero), cada valor de bit se envía por la línea durante toda la celda de bit. Este es el esquema de codificación más simple y confiable para distancias cortas de trasmisión. Sin embargo, éste generalmente requiere que se envíe la señal de reloj junto con el dato para definir las celdas de bit. De lo contrario, no es posible para el receptor determinar cuántos ceros y unos están representados por un nivel continuo de 0 o 1. Sin un reloj para definir las celdas de bit, la forma de la onda NRZ en la figura 12 puede ser erróneamente interpretada como 01010. Fig. 12. Códigos de línea comúnmente usados para datos en serie. Un lazo detector de fase digital (DPLL, por las siglas en inglés de digital phase locked loop) es un circuito analógico / digital, que puede usarse para recobrar una señal de reloj de un flujo de datos serie. El DPLL trabaja sólo si el flujo de datos serie contiene suficientes transiciones de 0 a 1 y de 1 a 0 para “sugerir” cuando toman lugar las transiciones del reloj original. Con datos codificados NRZ, el DPLL trabaja sólo si los datos no contienen ningún tramo continuo largo de unos o de ceros. Algunas trasmisiones y medios de almacenamiento serial son sensibles a las transiciones; es decir, no pueden transmitir o almacenar niveles 0 o 1 absolutos, sólo transiciones entre dos niveles discretos. Por ejemplo, un disco o cinta magnética almacenan información al cambiar la polaridad de M. Sc. Sanders A. Pacheco Araya. Universidad de Costa Rica - Escuela de Ciencias de la Computación e Informática Curso: CI-1203. Introducción a la Organización de Computadores. Sesión 2. 40 la magnetización del medio en las regiones correspondientes a los bits almacenados. Cuando la información se recupera, no es factible determinar la polaridad de magnetización absoluta de una región, sólo los cambios de polaridad entre una región y la siguiente. Los datos almacenados en el formato NRZ en medios sensibles a las trasmisiones no pueden recuperarse sin ambigüedad; los datos en la figura 1-16 pueden interpretarse como 01110010 o 10001101. El código Sin Vuelta a Cero con Inversión en unos (NRZI) suprime esta limitación al enviar un 1 si el nivel es el opuesto al que se envió durante la celda de bit previo, y un 0 si es el mismo nivel. un DPLL puede recuperar el reloj de datos codificados en NRZI siempre que los datos no contengan ningún tramo continuo de ceros muy largo. El código Vuelta a Cero (RZ) es similar al NRZ excepto que, para un bit, el nivel 1 se trasmite sólo una fracción del tiempo de bit, usualmente ½ . Con este código, los patrones de datos que contengan muchos unos crean muchas transiciones que se usan para recuperar la señal de reloj. Sin embargo, como en otros códigos de línea, una cadena de ceros no tiene transiciones, y una cadena larga de ceros hace imposible la recuperación de la señal del reloj. Todos los códigos precedentes transmiten o almacenan sólo dos niveles de señales. El código Vuelta a Cero Bipolar (BPRZ) tramite tres niveles de señales: +1, 0 y -1. El código es semejante a RZ excepto que los unos se trasmiten alternadamente como +1 y -1; por esta razón, el código también se conoce como Inversión de Marca Alterna (AMI, por las siglas en inglés de Alternate Mark Inversion). La mayor ventaja de BPRZ sobre los otros códigos es que para cualquier patrón de datos, el nivel de señal promedio del flujo de datos serie BPRZ es cero. Esto mejora la inmunidad al ruido de los circuitos analógicos que reciben señales BPRZ muy atenuadas enviadas a largas distancias. De hecho, el código BPRZ se ha usado por décadas en la red telefónica, cuando las señales de voz analógica se convierten en flujos de 8 000 muestras digitales de 8 bits por segundo que se trasmiten en formato BPRZ por canales en serie de 64 Kbps. Al igual que con un RZ, es posible recuperar la señal de reloj de un flujo BPRZ siempre que no haya muchos ceros seguidos. Aunque la compañía telefónica no tiene control sobre lo que se dice (al menos no por ahora), si posee una buena manera de darle la vuelta al problema. Si uno de los bytes de 8 bits que resulta de muestrear el patrón de habla analógico se compone de puros ceros simplemente cambian uno de sus bits a 1!. M. Sc. Sanders A. Pacheco Araya. Universidad de Costa Rica - Escuela de Ciencias de la Computación e Informática Curso: CI-1203. Introducción a la Organización de Computadores. Sesión 2. 41 El último código de la figura 12 se llama código Manchester o difase. La principal característica de este código es que, independientemente de los patrones de datos trasmitidos, proporciona al menos una transición por celda de bit, haciendo muy fácil la recuperación de la señal del reloj. Como se muestra en la figura, un 0 se codifica como una transición de 0 a 1, a la mitad de la celda del bit, y un 1 se codifica como una transición de 1 a 0. La principal característica del código de Manchester, es también su principal debilidad, ya que éste tiene más transiciones por celda de bit que otros códigos. Además requiere un mayor ancho de banda para transmitir a una tasa de bit dada. El ancho de banda no es un problema en cables coaxiales, el que, por cierto, usan las redes de área local Ethernet para transmitir datos en serie codificados. Manchester a la razón de 10 Mbps. sesion2.wpd M. Sc. Sanders A. Pacheco Araya.