Resumen ACO
Resumen ACO
Resumen ACO
ARQUITECTURA DE
COMPUTADORAS
Hecho por: Nicolás Aguirre
2020
Apunte extraoficial de ACO Nicolás Aguirre
Sistemas de numeración
Definición de sistemas de numeración: es el conjunto de reglas que permiten nombrar y escribir cualquier
número a partir de un número finito de símbolos.
Definiciones varias pero importantes:
I. Cantidad o Número: conjunto o grupo con una cardinalidad determinada y exacta de objetos o
elementos.
II. Símbolo o signo: representación (escrita, visual, auditiva, etc...) que puede usarse para hacer
referencia a una cantidad o número.
III. Numeral: conjunto o grupo escrito de símbolos, ordenado de una manera determinada y única, que
representa una cantidad.
En todos los sistemas de numeración combinar el 1 con el 0 conforman la base del sistema.
Apunte extraoficial de ACO Nicolás Aguirre
Los números también se pueden representar de la forma polinómica, siendo este un polinomio de potencias
de la base, se escribe poniendo el digito n-1 multiplicado por la base elevado al mismo número n-1 +
digito n-2 elevado al mismo número n-2. Y así sucesivamente hasta llegar a la base a la 0 que nos da
como resultado 1 y luego de eso finaliza la parte entera. En la parte fraccionaria de la representación
en la forma polinómica se escribe realizando el mismo cálculo pero en vez de ir desde el digito más
significativo arrancamos desde el menos hacia el más, sería como hacerlo al revés.
N = número valido en el sistema de numeración
b = base del sistema de numeración representado (número de símbolos permitidos en el sistema)
d = símbolo cualquiera de los permitidos en el sistema
n = número de dígitos de la parte entera
, = coma fraccionaria. Símbolo utilizado para separar la parte entera de un número de su parte
fraccionaria
k = número de dígitos de la parte decimal
Como ustedes sabrán hay una forma de demostrar (esto viene del
primario) que la división fue realizada correctamente. Esto es
expresando que el dividendo es igual a el cociente por el divisor más
el resto. Precisamente esto se puede aplicar en cada instancia de las
sucesivas divisiones que ocurrieron para hacer esta conversión.
Si nosotros sustituimos el valor de E2 en la parte del cociente en E1 y
hacemos la distributiva obtenemos
la siguiente expresión:
La parte fraccionaria como tal no tiene una demostración, solo se usa el concepto práctico que escapa a
este apartado que solo desarrolla el aspecto teórico de la materia.
Apunte extraoficial de ACO Nicolás Aguirre
En este caso disponemos de 8 bits, estamos en un contexto de palabra de 8 bits. Esto quiere decir que si
querés guardar un número en un espacio pero te sobra espacio los vas a rellenar con ceros a la izquierda.
En el lugar más significativo colocamos el signo.
Lo único que cambia es el signo, pero el modulo del
número es el mismo.
La ventaja de este sistema es poseer un rango simétrico (igual número de positivos y de negativos).
Es decir si vos tenés una longitud de palabra dada vas a poder escribir la misma cantidad de números
positivos y negativos.
La desventaja es que posee dos representaciones para el numero 0. Gráficamente:
Alguien si escribe esto estaría diciendo que es +0 o –0 lo cual no tiene
sentido, pero ocurriría lamentablemente en este sistema.
Complemento a 1 (C-1)
En este sistema también el bit que está situado más a la izquierda representa el signo y su valor será 0 para
el signo m+ y 1 para el signo -. El resto de bits representan el módulo del número.
El negativo de un número positivo se obtiene complementando todos sus dígitos y eso significa de forma
práctica cambiar 0 por 1 y 1 por 0 incluido el bit de signo.
Ejemplos: supongamos que queremos
representar los números 10 y -10.
Nuevamente disponemos de 8 bits, es
decir n= 8.
Vemos como el complemento del
número para representar el negativo
en este formato es cambiar 0 por 1 y 1
por 0.
Complemento a 2 (C-2)
Como 2 es la base del sistema binario a este sistema le decimos complemento a la base, o complemento a
2.
En este sistema, también el bit que está situado más a la izquierda representa el signo y su valor será 0 para
el singo + y 1 para el signo -. El resto de bits representa el modulo del número,
El negativo de un número se obtiene en dos pasos, el positivo es igual que siempre, para hacer entonces la
representación negativa tenés que:
1) Hacer complemento a 1 ( cambiar 0 por 1 y 1 por 0)
2) Al resultado del paso 1 le sumas un 1 en binario, despreciando el ultimo acarreo si es que existe.
Apunte extraoficial de ACO Nicolás Aguirre
Ejemplo: queremos representar los números 10 y -10. Disponemos de 8 bits, es decir n=8
La ventaja de este sistema es poseer una única representación para el número cero.
El ultimo acarreo se desprecia por lo tanto, el 0 y el -0 tienen la misma representación en un
complemento a 2.
Exceso a 2^n-1
En este método la representación no usa bits para signo, por tanto todos los bits representan el modulo o
valor. Este valor se corresponde con el numero representado más el exceso, que para n bits viene dado por
2^n-1.
El exceso por ejemplo si n = 4 entonces 2 ^ 4 es 16, vos vas a tener 16 valores para representar los números.
Pero 2^n-1 que sería 2^3 = 8, eso quiere decir que de los 16 valores para representar los primeros 8 serán
números positivos y los otros 8 serán negativos, eliminando así la necesidad del bit de signo.
No hay un ejemplo a la mano :(
Complemento a la base y a la base -1
El complemento a1 y a2 hacían alusión siempre a números binarios, pero nosotros podemos aplicar estos
conocimientos a todos los sistemas conocidos, por eso veremos estas dos formas de representación junto
a sus demostraciones. Entenderemos de donde viene lo de cambiar los 1 por 0 y los 0 por 1.
Complemento a la base -1
En todo sistema de numeración de notación posicional, para un número “y” de n dígitos, o sea en un contexto
de longitud de palabra n, existe un número “y’” (y prima) que es si complemento a la base -1 tal que la suma
de ese número en cuestión más el otro prima da como resultado siempre 10^n -1 siendo 10 la base en todo
sistema o en cualquier sistema de numeración, cuando vos venís contando con los símbolos, cuando se te
acaban la primera combinación que haces es el 1 con el 0, eso vale para todas las bases.
Luego despejamos el famoso número “y” prima, pasando la y restando al otro lado
y entonces así te queda la definición. Y prima entonces es el complemento a la
base -1 de y.
Para hacerlo general como les gusta a los del teórico lo vamos a escribir con esta notación que parece
complicada pero no lo es:
Siendo la C dice que es el complemento a la base -1.
Entonces si decimos que la base es 8, en el subíndice
de la C le pondremos un 7 para que la gente sepa que
hablas de complemento a 1 y no de complemento a 2.
Arriba en la “n” decís la longitud de palabra y en el
paréntesis pones el número es cuestión.
Este es el complemento a la base -1 y así se lo obtiene, ahora veremos un ejemplo, aplicando la misma
fórmula.
Apunte extraoficial de ACO Nicolás Aguirre
Para escribirlo de forma generalizada sin hacer referencia a ninguna base ponemos.
La definición práctica es: se define el
complemento a la base como el complemento a
la base -1 más la unidad, esto debido a que si
uno compara la fórmula de este complemento
con la del anterior que vimos si a la anterior le
sumamos un 1 se convierte en esta nueva.
Apunte extraoficial de ACO Nicolás Aguirre
Sistemas de codificación
Un código establece una correspondencia entre un conjunto de información y otro conjunto de símbolos o
señales que la representan, pudiendo existir reglas para pasar de un conjunto al otro. Tenemos por un lado
información y por el otro un conjunto de símbolos o señales que la representa a esa información y se pasa
de un conjunto a otro con reglas que la iremos estudiando.
Estos códigos digitales pueden ser considerados como los lenguajes digitales que permiten almacenar,
manipular y comunicar la información.
Tal como existen numerosos lenguajes hablando, también existe una gran variedad de códigos digitales.
Así que cuando dos computadoras o dispositivos se tienen que comunicar se deben poner de acuerdo de
que código van a usar como dijeran dos personas en que lenguaje vamos a hablar y en esos se basa el
código de codificación.
Categorías de los códigos
Categoría 1: es el código binario base que usan los circuitos electrónicos, llámese computadoras, iPod,
cualquier circuito electrónico, etc.
Categoría 2: son los códigos utilizados para convertir números decimales del 0 al 9 en forma digital. Estos
serían los códigos utilizados para transferir números entre un dispositivo y otro. Ejemplo: BCD (Decimal
codificado en binario “Binary-Coded Decimal”)
Categoría 3: son utilizados para convertir números decimales, las 26 letras del alfabeto, símbolos y
operaciones. Ej: ASCII, EDCDIC, etc.
Categoría 4: es más especializada en los fabricantes de computadoras, porque las instrucciones de
máquina, nativas del procesador, están escritas en binario. Dicen que 1 y 0 representan a cada instrucción.
Categoría 1
El sistema binario usa solo dos símbolos, el 0 y el 1, cada uno de los cuales se le llama digito binario o bit.
Es usual denominar ponderado a los sistemas binarios en los que se puede asignar a cada posición de los
dígitos una potencia de 2 ordenada desde el digito menos significativo hasta el más significativo
denominando a la potencia peso.
Categoría 2: códigos BCD
Convierten números decimales en binario, codifican los símbolos que conocemos del 0 al 9 en paquetes de
1 y 0. Consiste básicamente en representar la estructura decimal del número representado en binario sus
cifras
Cada dígito se representa mediante 4 dígitos binarios. Ya que queremos representar solo 10 cifras distintas
del sistema decimal (0 al 9) necesitaríamos 2^n dígitos en el sistema binario. Ahora para n = 3 tenemos 9
símbolos distintos por lo tanto no son suficientes, mientras que para n = 4 tenemos 16 símbolos distintos
sobrando 6 solamente, usaríamos 10 y nos sobran 6.
Entonces se lo conoce como BCD natural o puro ya que sus pesos coinciden con los 4 primeros pesos en
sistema binario o natural.
Apunte extraoficial de ACO Nicolás Aguirre
Código de redundancia
Que pasa cuando vos transmitís una señal de un lado a otro y la misma se corrompe por un ruido electrónico,
o cualquier razón y se te cambia un 1 por un 0, es un problema porque si el 1 por el 0 que se cambia se te
cambia otro paquete de 1 y 0, sonamos, el receptor lo va a tomar sin saber que hay un error y eso es grave
si se trata que estamos mandando información importante como por ejemplo una información bancaria de
mucho dinero y se cambia el bit más significativo. Para evitar esto se hace lo que se explicará a continuación.
Si se usa un código cuyos elementos tengan más información que la necesaria, esto lo hace resisten a
errores y perdida de información, esta información por encima de la necesaria se la conoce como
redundancia.
Esto se arregla con los códigos detectores de errores con paridad, una de las formas pero no la única aunque
la más famosa es que ahora temes los 4 pesos como el binario natural, le agregamos un bit más que se
llama paridad. Ahora en vez de transmitir 4 bits transmitido 5, lo cual baja la velocidad de transmisión, pero
gano en seguridad.
Vos podes elegir que la paridad sea par o impar. El receptor cuando
recibe cuenta la cantidad de 1 sin importar su posición, entonces si yo
antes había decretado que la paridad iba a ser impar por ejemplo y recibo
una cantidad impares de 1 entonces se puede inferir que el número fue
transmitido sin errores.
Entonces el bit p se lo va a completar estratégicamente de modo tal que
la palabra total que va a transmitir, este paquete de símbolos 0 y 1 tenga
una cantidad impar de 1.
Si el transmisor tuviera que mandar 0 0 0 0 el completaría con un 1 lo que
trasmite así el receptor cuando reciba y cuente todos los 1 se dé cuenta
de que 1 es impar, un solo 1 es impar entonces el dato puede estar bien,
aunque obviamente solo se van a tomar los números en negro como los
verdaderos en el mensaje que se envió.
Y así sucesivamente con el resto de números. La columna roja no sirve
para nada más que para comprobar si está bien el mensaje.
Apunte extraoficial de ACO Nicolás Aguirre
Códigos de categoría 3
Son los usados para convertir números decimales, las 26 letras del alfabeto, símbolos y operaciones.
Si vos agarras y te fijas en el teclado de tu maquina vas a ver la cantidad de letras, símbolos, signos, etc.
que lo conforman, tiene que haber una muy buena codificación para que no se confundan ninguna de estas
teclas cuando yo mando información. Entonces eso se lo conoce como los códigos que mandan todo este
tipo de información numéricas y de símbolos y letras se llaman los alfanuméricos y están en la categoría 3.
El más famoso es el ASCII
Código ASCII
Quiere decir Código Americano Estandarizado Para el Intercambio de Información (American Standard Code
for Information Interchange) fue establecido por la ANSI en 1915.
Cuando nació este código era del teclado QWERTY original y estaban definidas las letras (solo mayúsculas)
después los números (sin “ñ” ni nada aporque era americano) y los caracteres de puntuación y de control
(retorno de carro, etc.),
Existen versiones de 6 bits que es la original y la de siete y ocho bits que es la corriente actualmente que
incluyen un montón de símbolos más.
Apunte extraoficial de ACO Nicolás Aguirre
Luego con esto tenemos que hacer otra tabal poniendo en que
posiciones hay colocados 1.
En este caso hay 1s en el 15, 12, 10, 9,5 y en 3.
A continuación escribiremos al lado de los lugares donde
encontramos 1 como se escriben en binario.
Luego debo sumar la cantidad de 1s en cada columna y obtener el
resto al dividirlo por 2.
Esos números son los que irán rellenando los espacios vacíos
que dejamos antes para los bits de control.
Ahora vamos a cambiar un número adrede para mostrar cómo es que este código puede detectar el error.
Supongamos que el 14 en vez de mandar un 0 mandamos un 1.
Entonces volvamos a realizar la operación de poner todos los lugares donde hay un 1 y después hacer mod
2 es decir, obtener el resto de sumar la cantidad de unos por columna y dividir ese resultado por 2.
Si debajo de todo en vez de 1 1 1 0 me hubiese dado 0 0 0 0, entonces
el receptor entiende que el mensaje está bien, pero en su lugar como hay
un error nos informa cuál es el número que está mal, en este caso el 1 1
1 0, que corresponde al 14 en binario que habíamos decidido alterar.
Distancia de Hamming
Sean los elementos de un código a y b, donde pertenecen al grupo del
código, la probabilidad de que a y b se confundan disminuye mientras
más distintos sean de ellos. Es decir, en un trasmisión si son bien distintos
es más difícil que uno se confunda por el otro.
La medida de la diferencia entre dos términos contiguos de un código se
la llama distancia de hamming del mismo, mientras más distancia exista
entre los caracteres de un código menor es la posibilidad de error cuando
se los usa.
Supongamos tenemos dos letras a = 11011 y b = 11101, la distancia de
Hamming entre ellas será de dos porque si vos comparas los bits, cambia
dos veces, hay dos números que son distintos, por tanto se entiende a la
distancia de Hamming como la cantidad de cambios que existen entre dos
números. Mientras más robusto es un código, más distancia de Hamming habrá.
Apunte extraoficial de ACO Nicolás Aguirre
La representación de los números en los sistemas de computación son un compromiso entre las
necesidad de elevada exactitud, esto es, elevado números de dígitos, con las restricciones
tecnologías que establecen los costos.
Esto se traduce en que los procesadores usan un conjunto de dígitos de longitud fija para representar
las variables. Este conjunto de dígitos de longitud fija recibe el nombre de palabra de datos.
La palabra es la longitud del registro del procesador, los primeros procesador tenían registro de 8 bits, hoy
en día son de 64, por eso decimos que la palabra, es decir, donde vamos a anotar los números son de 64
bits.
Al representar un número de coma fija tendríamos un dato de 8 bits, a modo de ejemplo, porque 64 es muy
largo. De los cuales se han destinado dos bits para la parte fraccionaria y 6 bits para la parte entera. La
coma se ha dejado en un lugar fijo, de esta forma podríamos nosotros imaginar que se podrían anotar los
datos en los registros destinando otra vez un compromiso, una parte para la parte entera y otra para la parte
fraccionaria. Esa coma la ponemos imaginariamente en algún lugar y se va a quedar fija.
Si se opera con una longitud de palabra de 8 bits, la coma se asigna de forma arbitraria en cualquiera de las
posiciones pero una vez elegida no se modifica.
La principal ventaja es que los algoritmos de realización de las diferentes operaciones son los mismos que
para los números enteros.
El algoritmo de la suma es el mismo a que si
sumara el numero como si fuese un entero.
El principal inconveniente de este formato es
que no se aprovecha la capacidad de los
operadores aritméticos, el número máximo sería
nada más que 6 unos en la parte entera y 2 unos
en la parte fraccionaria (111111,11) y el número
mínimo es el 0,01 aunque la capacidad de los
operadores permitirían operar el número
máximo como 8 unos (11111111) o corriendo la
coma al otro extremo 0,00000001.
No puede representar números muy grandes ni muy pequeños, esa es la desventaja, por eso no se lo usa
mucho.
La solución a este problema es:
Representación de los números fraccionarios en coma flotante
Es así como se representan hoy en día los números fraccionarios.
La representación de los números en coma flotante en un sistema de numeración de base B se realiza
mediante una mantisa m y un exponente e tal que:
La mantisa multiplicada por la base elevada al exponente.
M = número en coma fija que se denomina mantisa.
E = número entero que se denomina exponente.
B = base del sistema de numeración.
Apunte extraoficial de ACO Nicolás Aguirre
Ejemplo
Apunte extraoficial de ACO Nicolás Aguirre
Arranca desde el 0 hasta el 22 son 23 bits y esto es para guardar la mantisa, el exponente va desde el 23
hasta el 30 son 8 los bits y por ultimo hay un solo bits para el signo que tiene la mantisa. En total da un
tamaño de 32 bits. En vez de definir una coma fija en algún lugar y poner parte entera y fraccionaria lo que
se hace es anotar los números de la manera anterior descrita.
La mantisa se va a tener que truncar en algún momento porque solo tenes 23 bits, los bits que estén más
allá se quedaran afuera y vos no tendrás una representación característica.
Con el tamaño del exponente vos podrás elevar con 8 bits exponentes positivos y negativos pero no muy
muy muy grandes, en ese caso debería cambiar el tipo de precisión.
El exponente se lo representa en exceso a la 2n-1--1, este es un número, es el exceso y con el exceso lo que
se hace es no tener el bit de signo sino que directamente es como que vos tenes una gran tabla de verdad
que la partís en dos y desde la línea para arriba tenes los exponentes negativos y para abajo los exponentes
positivos. En este caso n vale 8 bits, haces 8-1 = 7, por ende 2^7 -1 = 127 que es la mitad de la tabla cuando
vos haces 2^8 que da 256, que dividido 2 da 128 -1 127, prácticamente estas en la mitad de la tabla, de esa
mitad para arriba tenes exponentes negativos y para abajo los exponentes positivos. Vas a poder elevar a
la -127 y a la +127 en binario.
El exponente es un número escrito en formato exceso 127, lo que significa que 2^0 (o sea el 1) es el número
127 que es el 7Fh en hexadecimal. De esa forma nos ahorramos a usar el bit de signo, hacer complementos
y demás
El rango dinámico entonces el conjunto de valores que pueden ser representados, es de:
La precisión numérica usando una mantisa de 24 bits es de 6 ½ dígitos, vos tenes 24 bits pero son nada
más que 6 dígitos y un ½ en decimal, ½ quiere decir que algunos dígitos de 7 bits los vas a poder representar
bien (después de la coma) y otros números de 7 dígitos después de la coma no lo vas a poder representar
bien, entonces vas a tener 6 dígitos representativos después de la coma y algunos de 7. En el práctico se
analizará por qué se habla de 24 bits (tema de bit implícito) y no de 23 para la mantisa.
Apunte extraoficial de ACO Nicolás Aguirre
Precisión doble
Se ponen dos registros de 32 bits pegaditos entonces el número tendrá un registro de 64 bits. Es 1 bit para
el signo (s) del número, 62 bits para la mantisa (m) y 11 bits para el exponente (exp). Se pueden representar
números mucho más grande con esta precisión.
El bit 53 de la mantisa es un 1, que es implícito, lo hacen para ganar un espacio.
El exponente es un numero de 11 bits codificado en exceso 1023 (2^10 -1), la misma fórmula de antes (2^n-
1 -1), entonces se dice que se parte en dos la tabla de exponentes y se divide en dos la cantidad de
exponentes que podes elevar.
El rango dinámico es que vos podrías elevar de la siguiente forma:
Precisión cuádruple
Cuando se requiere un cálculo muy exacto se usa este método, que sigue la misma idea que siempre:
Ahora son 128 bits, 1 solo bit para el signo de la mantisa, exponente de 15 y para la mantisa dejan 112 bits,
quedando un exceso de 16383 que sale siempre de la misma formula (2^n-1 -1)
Apunte extraoficial de ACO Nicolás Aguirre
Función lógica
Una funcion logica del algebra de boole es una variable binara, cuyo valor es igual al de una expresion
algebraica, en la que se relacionan entre si variables binarias por medio de las operaciones suma logica (+),
producto logico (.) e inversion, se puede representar como:
Es una expresion en la cual las variables se relacionan
entre si mediantes la operaciones que habiamos dicho
antes. Son las unicas operaciones permitidas en el
Algebra de Boole son sumar y multiplicar logicamente,
que difiere de la comun, siendo que acá 1 + 1 = 1.
Funciones y formas canonicas
Termino canonico
Definimos termino canonico de una funcion logica a toda suma binaria (+) o producto binario (.) en la cual
aparecen todas las variables ya sea en su forma directa o inversa.
Supongamos una funcion de tres variables f(a,b,c) los siguientes terminos se conocen como:
Cualquier variable podria estar negada o
directa, se dice que el termino es canonico
porque si yo se que de antemano la
funcion tiene 3 variables, aquí ya tengo
todas. Si le llegase a faltar alguno no sería
canonico
Formas Canónicas
Tienen que estar compuestas por terminos productos o por terminos sumas no mezclados, o son todos
productos o son todas sumas, en ese caso se llaman funciones canónicas.
Cuando una funcion se expresa como suma de productos canonicos o como producto de sumas
canonica se dice que la misma se encuentra en su forma canonica.
Ejemplo de sumas de productos canonicos.
Por convencion diremos que una variable
negada (raya arriba) se le asigna valor
cero y a una sin negar (sin raya arriba) se
le asigna valor 1. Se llama negar una
variable cuando le pones la raya y directa
en caso contrario.
Ejemplo de producto de sumas
Apunte extraoficial de ACO Nicolás Aguirre
Método Algebraico
Obtencion de sumas de productos canonicos
Supongamos que yo tenga una expresion pequeña que no sea canonica, no son todos terminos canonicos,
la misma puede ser llevada a una función canónica.
1) Se le aplica a la funcion logica la propiedad distributiva del producto respecto de la suma llevando a
la expresion a una suma de productos no canonicos
2) A cada termino no canonico se lo multiplica por la suma de las variables que faltan y sus inversos
3) Finalmente se aplica nuevamente la propiedad distributiva del producto respecto de la suma llevando
ahora a cada termino a su forma canonica
Ejemplo:
Supongamos que queremos escribir la función de sumas de productos, tenemos que anotar cuando la
función toma valor 1 y escribir la combinación de variables que permitió dicha salida,
Simplifación
Criterio de Simplificación o minimizacion
Obtener una expresión en forma de suma de productos o producto de sumas que contenga la “menor
cantidad de términos posibles con la menor cantidad de variables en cada uno de ellos”, tratar de agarrar
algunas de esas canónicas que vimos que tienen montonazos de letras y tratar de llevarla a una suma ya
no canónica, ahora a una suma de productos o productos de sumas pero con pocos términos y pocas letras.
Cada término con la mínima cantidad de letras
La propiedad se llama adyacencia lógica
Se dice que dos términos canónicos son lógicamente
adyacentes cuando difieren en el estado de una de las
variables.
Por ejemplo la variable “a” difieren, una está negada y otra
no.
Si tenes dos términos lógicamente adyacentes los podes escribir como un solo termino en el cual se ha
eliminado dicha variable. Dos términos son lógicamente adyacentes cuando solo difieren en una de las
variables, en el estado de solo una y ¿Qué se hace con dos términos lógicamente adyacentes? Se escribe
un único término en el cual se ha eliminado dicha variable.
Esto se juega como la batalla naval, cuando a vale 0 y b vale 0, o sea la primera línea de la tabla (a vale 0
por arriba y b vale 0 por la horizontal) el casillero que se forma es el casillero 0, que corresponde a la primera
línea de la tabla.
Compuertas Lógicas
Las compuertas lógicas son símbolos entonces que sirven para entender las operaciones lógicas como la
suma (compuerta or), multiplicación (Compuerta and) e inversión (compuerta not).
Son dos niveles de tensión en la lógica positiva, el 1 era de 5 volteos en la antigüedad, luego se bajó a 3,3
volteos, y actualmente la tensiones son tan bajas como 1 volteo o menos, entonces el nivel lógico 1 es la
tensión de alimentación y 0 volteos representa al nivel lógico 0.
Tomemos la tensión de 5 volteos y fijemonosno que hay un margen de funcionamiento. Por ejemplo,
tensiones comprendidas entre dos y cinco van a ser entendidas como el 1 lógico. Si vamos a tomar esa
tensión hay un margen para decir que cualquier valor que más o menos se halla entre esto es un 1 y luego
cualquier valor cercano al cero hasta casi un volteo (si trabajamos con el 5) es un intervalo para el 0. Lo que
queda es un intervalo de transición que no es ni 1 ni 0 lógico.
Apunte extraoficial de ACO Nicolás Aguirre
Función OR exclusiva
La función or exclusiva te vale uno cuando son distintas las variables de entrada, la podes escribir como
suma de producto o productos de sumas. No son adyacentes, no se puede eliminar nada, hay que gastar
muchas puertas para armar todo esto, por tanto armaron esta compuerta para no gastar tanto.
Si ahora tenes que hacer una or exclusiva de muchas entradas sonaste, no se puede, para hacerlo deberías
ir conectando una a continuación de la otra en cascada. Se debe aplicar primero a dos variables y luego el
resultado de este a la tercera variable y así sucesivamente.
La función se prende cuando hay números impares de 1 (tabla de
la derecha) y cuando hay par te da 0 (tabla de la izquierda). Sirve
para hacer el cálculo de bit paridad, o para el código de hamming.
Apunte extraoficial de ACO Nicolás Aguirre
Sistemas Combinacionales
Ustedes ven ese diagrama de bloques, del lado izquierdo hay entrada, y del derecho salida. Y adentro del
sistema está lleno de compuertas electrónicas conectadas de alguna forma astuta para resolver un problema
particular.
Son aquellos sistemas en los cuales en cada instante el estado lógica de la salida depende solamente del
estado lógico de las variables de entrada. Cambia la entrada y por ende cambia la salida. Podemos tener
muchas salidas que dependen de las mismas variables de entrada.
Pasos para diseñar un sistema combinacional
1) A partir de los requerimientos de un usuario (enunciado) identificar y codificar las variables de entrada
y salida. Esto es, detectar cuáles son las variables de entrada y salida y asignarles nombres y un
nivel lógico correspondiente. Declarar que es el 0 y que es el 1.
2) Obtención de la tabla de verdad. A partir de las variables vos sabes que a la izquierda pones todas
las variables de entrada y a le derecha las salidas y empezás a confeccionar la tabla de verdad
3) Con la tabla de verdad sacás las canónicas (Suma de Producto y Producto de sumas)
4) Simplifcás con métodos analíticos o por métodos gráficos como karnaugh
5) Implementar el circuito lógico con compuertas conocidas (And, Or, etc.).
Todo eso se ve en el práctico.
Apunte extraoficial de ACO Nicolás Aguirre
Multiplexor
Es un circuito que posee n + N entradas
y una salida.
n = entradas de selección
N = 2^n entradas de datos
1 salida
Ejemplo de su funcionamiento
Esto es muy usado en las
comunicaciones con fibra óptica. Vos
tenes una sola fibra óptica y muchos
canales de entrada que representa a cada persona, y una sola salida porque fibra óptica hay 1 sola, entonces
todas tienen que hablar al mismo tiempo por una única fibra óptica. Vas a usar un multiplexor para asignarle
un tiempito a cada uno de ellos, cuando el señor del canal 0 quiera hablar lo vas a conectar por un instante
a la salida, luego cambiamos la llave de posición al siguiente canal y así hasta llegar al último. Cambiamos
de lugar la llave de posición con una combinación binaria que está en las entradas de selección. Cuando la
entrada de selección sean todas 0 elegimos el primer canal que va a estar pasando a la fibra óptica, cuando
todas las entradas de selección tengan 1 estarás eligiendo la última persona y así con cada combinación
elige una persona diferente, así funciona el multiplexor.
Apunte extraoficial de ACO Nicolás Aguirre
Si vos seleccionas 0 0 en las entradas de selección, y el canal 0 tiene un 0 lógico, que pasa por tanto a la
salida. Y los otros canales dan igual lo que tengan porque el elegido en este momento es el canal 0 así que
no le voy a dar importancia a lo que tengan los demás, por eso le pone x ahí.
Si vos pones 0 0 y el canal 0 tenía un 1 te dice que ese 1 pasa a la salida. Cuando se elige entonces 0 0 las
dos primeras líneas te dice que si el canal 0 tiene un 0 pasa un 0 y si tiene un 1 pasa un 1.
Si seguís con el resto de la tabal te vas a dar cuenta que es más de lo mismo, pero con los diferentes
canales.
La ecuación dice que si vos tenes 0 0 en la selectora entonces se van a hacer 1 porque están negadas y
por tanto responden a lo que tenga el canal cero debido a la multiplicación lógica. De esta forma podemos
observar como el resto de términos dan todos 0 haciendo que si la entrada selectora es 0 0 nomás se tome
en cuenta el valor del canal 0.
El diagrama lógico se entiende analizando las variables de entrada para las selectoras y analizando con
quien está conectado y de qué forma (si usa el inversor o no), para cada combinación solo un canal se va a
usar y para que eso suceda le tienen que llegar todos 1.
Apunte extraoficial de ACO Nicolás Aguirre
Demultiplexor
Hace la tarea inversa al multiplexor, posee una
entrada de datos, n entradas de selección y N
canales de datos. Con N = 2^n
Si acá llega la fibra óptica con un chorro de 1 y 0
de altísima velocidad, el selector lo que hace es
ir pasándole al canal 0, al 1, al 2 y a las n salidas
le va dando, un tiempito a cada uno un paquete
de 1 y 0 y así repite y le va dando. Podemos
relacionarlo con la telefónica, cuando una
persona A quiere hablar con otra se disponen los
selectores de cierta forma para que A pueda hablar con quien desee por un lapso de tiempo. Por cada ráfaga
de comunicación que dura la comunica solo 8 1 y 0 viajan, para mandar la voz humana con 8 bits está muy
bien, la conversión de señal analógica a digital lo hace el micrófono de nuestros celulares.
Apunte extraoficial de ACO Nicolás Aguirre
Si el selector pone 0 0 el canal que pasa a la salida entonces es el 0, que va a recibir la información que
entra por I, si pones 0 1 entonces el canal elegido es el 1, si pones 1 0 entonces el canal elegido es el
número 2, por donde va a salir la información que entra y por ultimo si pones 1 1 el canal elegido es el último.
En el diagrama lógico toda la información le llega a la compuerta, pero solo aquello que tengan la selección
correcta, como poner 0 0, como ahí está negado en la formula, y el multiplexor lo niega se hace 1 1 y por
tanto se activa la compuerta del canal 0.
Apunte extraoficial de ACO Nicolás Aguirre
Comparador binario
Otro de los circuitos
lógicos muy
utilizados, compara
dos números binarios
de muchos dígitos y
te da como salida,
A>B, A=B o A<B. que
son las tres salidas
que tiene este
circuito.
En la primera línea veo que son iguales a y b, por tanto es decir, prendo la salida e indicándole que son
iguales los datos que han entrado.
En la segunda línea a vale o y b vale 1 por tanto b es más grande por tanto tiene que prenderse X.
En la tercera línea a vale 1 y b vale 0 indicando que a es más grande que b por tanto se prende Z.
En la última a y b valen lo mismo por tanto se prende nuevamente Y.
Apunte extraoficial de ACO Nicolás Aguirre
Sumadores
Los sumadores son muy importantes en los sistemas donde se procesan datos numéricos, realizan la suma
aritmética de números binarios.
Las reglas básicas para la suma aritmética binaria son:
Se le ha puesto acá un dato A que vale a3a2a1a0 (el número más grande que podes escribir es el 15 en
decimal) 15 + 15 podrías hacer, pero a izquierda y a derecha hay unas entradas conocidas como carry o
arrastre, quiere decir que si copias y pegas muchos módulos y lo vas enganchando en cascada, uno a
continuación del otro como las fichas del domino que cae, vas a ir colocando estos circuitos y esta salida de
carry se la conectas a otra entrada y así vas a poder empezar a expandir y hacer ya si pones uno más suma
de números de 8 bits y si seguís poniendo vas a poder hacer sumas de números muchos más grandes
llegando a la cantidad de 64 bits que es en la actualidad.
Tenes dos números A y B que se representan en binario, en la salida te sale la suma. Adentro está lleno de
compuertas, entonces el diseñador solo toma el bloque y lo va pegando para hacer las sumas que requieran.
Es un circuito de mediana escala de integración.
Semi-sumador (Half Adder)
El semisumador tiene carry de salida pero no tiene carry de entrada, un semisumador admite dos dígitos
binarios en sus entradas y genera dos bits binarios en sus salidas: un bit de suma y uno de acarreo.
En la entrada tenes los dos bits, (1 bit por cada entrada) y entonces serían estas todas las posibilidades de
sumar:
Si haces 0 + 0 la suma te da 0 no te llevas nada en el acarreo
Si haces 0 +1 o 1 + 0
entonces la suma te
da 1 pero no te llevas
nada
Si haces 1 +1 pones
en la salida un 0 y en el carry de salida un 1.
Es muy poco útil porque nomas suma de a 1 bit debido que no tenes carry de entrada y por ende no podes
poner en cascada para sumar más números.
Apunte extraoficial de ACO Nicolás Aguirre
Vamos a ver cómo se construye esto para lo cual tomaré una tajada de la suma anterior.
Viendo la tabla de verdad me doy cuenta que son 3 variables de entrada que son
los datos propiamente dichos de cada uno de los números de la columna que
queres sumar, que son el ai y el bi y el carry que viene de la etapa anterior.
En la primera fila de la tabla asumimos que ai y bi valen ambos 0 y por último que
la etapa que venía anterior mando un 0, diciendo: “no se llevó nada”. Entonces
hago la suma: 0+0+0 el resultado es 0 para la suma y no me llevé nada, por eso
coloco 0 en la salida y en el carry. Y así se hace con el resto de la tabla
En la segunda línea a y b valen 0 pero parece que la columna de al lado se
había llevado, entonces si hago la suma es: 0+0+1 = 1 entonces pongo el 1
en la suma y como no me llevo nada, pongo cero en el carry de salida.
Después hacemos el karanugh, haciendo una función para la Si y otra para
el Ci, teniendo dos karnuagh distintos y paso los 1 y resolviendo como se vió
en el práctico.
Apunte extraoficial de ACO Nicolás Aguirre
Como puede verse, en el karnaugh de Si son todos diagonales los 1 por tanto no se puede simplificar, me
veo obligado a hacer áreas todas de 1, haciendo que te de lo mismo
que haber hecho o no el karnaugh, obteniéndose así la función
canónica:
Ahora hacemos el Karnaugh de la segunda (la del acarreo ci) pasando las posiciones donde hay unos.
En los dos primeros terminos se saca factor común ci-1 y en los últimos dos términos saca factor común ai,
bi, quedando de la siguiente manera:
Dentro del primer parentesis te queda una Or exlcusvia
y en el segundo parentesis se eliminan porque una es
negada y la otra es directa.
Reescribiendose así:
Apunte extraoficial de ACO Nicolás Aguirre
Como nosotros ya teníamos de antes la OR exclusiva entre ai y bi, la vamos a reutilizar de forma parcial
para así poder crear el circuito de Ci, ahorrando con eso una compuerta, aumentando la velocidad.
En este caso usamos dos cuádruples de comienzo, con un 0 en la entrada se transforma en un sumador y
con 1 se transforma en un restador. Las b son datos que están entrando y el dato a entra mediante el
cuádruple con el bit de signo, el bit de signo se procesa todo igual a cualquier bit de la resta.
Pone una OR exclusiva porque es un inversor inteligente, entonces el bit que se mete junto a b en la OR
exclusiva es el bit de control, cuando ponías 0 hace que pase por la OR exclusiva los bits de las entradas b,
pero cuando vos pones un 1 entonces los bits de control cambian los 0 por 1 de b, y entonces vas a sumar
a el complemento a-1 de b, luego le sumas un 1 que viene del carry (de donde nosotros poníamos el 1 o 0
para seleccionar entre suma o resta) y lo convertís en complemento a-2 al número b, entonces al sumar esto
con a obtenemos la resta entre ellos, porque sumar a más el complemento de b es lo mismo a efectuar la
resta entre a y b.
Apunte extraoficial de ACO Nicolás Aguirre
En el dibujo de la izquierda (Generador de paridad) tomamos los datos de entrada que van a ser variables,
no importa cuales, que van ser los que vos en BCD queres trasmitir, en este caso 6, la pregunta es cuál es
el bit que se tiene que crear. Si queremos paridad impar el circuito va a crear haciendo las cuentas siguientes:
si los valores que están conectados a la OR exclusiva son distintos te va a largar un 1, un 1 con un 1 son
iguales, si son iguales te mando un 0 a la salida, por lo tanto lo negué al resultado porque quiero paridad
impar y entonces ese uno es el que se grabó ahí en la P. Si hubiera querido paridad par solo debía correr
el switch para este otro lado y tenía paridad par, el switch es el grupo al final que invierte o no invierte, según
tus necesidades, moviendo la llave entre la no inversión y la inversión.
Esta información se trasmite y viaja al dibujo de la derecha, pudiéndose meter ruido y cambiando algún bit.
El detector de paridad es otra cadena de OR exclusivo que hacen todas las cuentas incluyendo a P, para
terminar dándote un bit de salida que te dice que E es el bit de error, si te da 0 quiere decir que es sin error
y si te da uno quiere decir que tiene un error, en este caso el receptor debería recibir paridad impar. En este
caso el número recibido parece que está bien porque tiene 3 unos en total, siendo esto impar.
En la primera tanda, si son distintos te da un uno, en la segunda como son iguales arroja un cero, volviendo
a ser iguales en la siguiente OR exclusiva por lo tanto te da un 0 y como son distintos con el bit de paridad
la última OR exclusiva arroja un uno y un uno pasado por el inversor da un 0, por tanto se lo toma como que
llegó bien al número.
Apunte extraoficial de ACO Nicolás Aguirre
Sistemas secuenciales
Las variables de entrada aparecen una a continuación de la otra, la salida no depende nomas de las entradas
sin importar el tiempo, en este sistema depende del estado de las entradas pero también de los estados
internos que se encuentran almacenados en la memoria de la máquina. La máquina se fija en lo que está
entrando, pero también lo que había entrado en el tiempo pasado, que está guardando en la memoria.
Cuando se procesa información, hay gran cantidad de acciones que se realizan en forma secuencial, es
decir una a continuación de la otra.
Estas acciones que se suceden en el tiempo dependen de un conjunto de condiciones previamente
establecidas.
Por lo tanto, los sistemas combinacionales no nos permiten por si solos resolver el problema de almacenar
el estado de las entradas en un instante y utilizarlo para tomar decisiones posteriormente cuando cambie el
estado de aquellas.
Los sistemas que puedan actuar de la forma anteriormente descrita han de ser capaces de memoriza el
estados de las entradas y convertirlo en un estado interno del propio sistema.
Definición de sistemas secuenciales
Un sistema secuencial reacciona ante secuencias de estados de entrada de una forma determinada que
depende de su construcción física y por tanto es un sistema automática, que recibe el nombre de autómata
finito debido a poseer un número finito de estados internos.
La denominación de secuencial es debida a que el valor de su salida en un instante determinado no depende
solamente de los estado s lógicos de las entradas en dicho instantes sino de la secuencia de estados de las
entradas.
Los estados lógicos de las entradas se almacenan en la memoria del sistema, por tanto es necesario en los
sistemas secuenciales tener en cuenta la noción del tiempo.
Todo sistema secuencial posee:
1) Un conjunto finito de 2^n estados de entrada siendo n el número de variables de entrada x1,x2,…,xn,
son todas las combinaciones que uno tiene, siendo n el número de variables de entradas
2) Tenes un conjunto finito de 2^k de estados internos siendo k el número de bits de memoria Q1, Q2,
Qk, 2 elevado a la k es la cantidad de cosas que te podes acordar, porque vas haciendo una
combinación binaria de todos estos estados.
3) Tenes un conjunto finito de 2^m estados de salida siendo m el número de variables de salida S1,
S2,….Sm.
Apunte extraoficial de ACO Nicolás Aguirre
Tenes las entradas que son las x, las salidas que son las s, y acá adentro tenemos la memoria, que son
esos casilleros que tiene una Q y una D, donde cada casillero permite recordar 1 bit, entonces tenemos k
memorias, vos te podes acordar 2^k con esas memorias.
Los pulsos de reloj llegan a la máquina para decirle cuando la memoria va a camíbar, le dice cuando toma
la decisión, mientras mas rápido ande el reloj más rápido será el circuito.
Arria tenes circuitos combinacionales que ya habíamos vistos.
Las variables de entrada van a ir apareciendo de a una, y se van a hacer las cuentas en función de lo que
antes estaba guardado en la memoria, que sale por Q, y esos son los valores que junto con las entradas se
recalculan para poder volver a guardar en la memoria a través de estos cables de nuevo a la memoria con
los nuevos valores. Hay datos en la memoria viejos que desaparecen para guardar datos nuevos, porque
no son necesarios.
El reloj
La sincronización de los circuitos secuenciales se logra mediante un dispositivo de tiempo llamado generador
de pulso de reloj (clock) que produce un tren periódico de pulsos de reloj a la salida de ese circuito para
dárselo a la máquina.
Los pulsos de reloj se distribuyen a través del sistema de manera tal que los elementos de almacenamiento
(memorias) se afectan solo con la llegada del pulso de sincronización.
Apunte extraoficial de ACO Nicolás Aguirre
El reloj es parte vital de la maquina porque la va diciendo la cadencia de cómo va funcionado, como van
pasando el tiempo y cuando tiene que hacer los cambios. La memoria hace los cambios justamente con el
pulso de reloj.
Analizando el dibujo el reloj tiene un nivel lógico que puede ser un 0 o un 1, entonces el reloj esta en cero y
pasa en uno, si vos lo vieras como una lamparita y te la imaginas, ella se encendería y luego se apagaría,
regularmente. Pasa de 0 a 1 y de 1 a 0, lo hace a espacios de tiempo regulares, la reciproca de este tiempo
es la frecuencia, que es la velocidad con la que se repiten los pulsos, es una onda periódica. Si el cambio
entre estados lógicos se hace en periodos de un segundo se diría que ese reloj trabaja a 1 Hertz, si este
pulso se hace mil veces en un segundo estarías en un kilo Hertz, si vos haces en un segundo un millón de
cambios, tenes un Mega Hertz, las maquinas actuales les agregamos tres ceros más, teniendo en un
segundo mil millones de cambios, teniendo un Giga Hertz.
El tiempo que tarda (t) si haces la reciproca porque entre periodo y frecuencia se relacionan la inversa uno
del otro, entonces el tiempo sería de un nanosegundo, es decir, es 1x10^-9 de segundo, eso sería el tiempo
que tarda en hacer un ciclo correspondiente a una frecuencia de un Giga Hertz actual.
Elementos de memoria
Los elementos de almacenamientos o memorias que se emplean en circuitos secuenciales controlados por
reloj reciben el nombre de flip-flops o multivibradores biestables, los cuales son dispositivos de
almacenamiento binario que pueden contener un bit de información. Son 4
Apunte extraoficial de ACO Nicolás Aguirre
FLIP-FLOP RS
El truco para que estas memorias se acuerden del valor, estuvo en cruzar los cables (esa x que se forma),
esas líneas de retroalimentación que toma información de la salida para ingresarlo en la entrada, son el
secreto de por qué el circuito puede recordar en su interior. Las compuertas del inicio (Que tienen como
entradas R y S) están multiplicadas por el reloj, mientras el reloj diga 0 ni S ni R son los comandos de la
memoria podrían entrar al sistema, solamente se permitirá que S y R ingresen o hagan cuentas cuando el
reloj valga 1, pero el reloj vale 1 en pequeños instantes de tiempo, quiere decir que el reloj es el jefe, dice
cuando los comandos de cierre puede ingresar al interior de las células de memoria. S yR son los comandos
que se utilizan para grabar el valor deseado del bit dentro de la máquina, son los comandos para decirle a
la memoria, escribí un 0, escribí un 1 o quédate como estás.
La salida tiene el valor Q y el Q negado abajo, los Q son las salidas por donde se va a leer el estado del bit
que está guardado ahí dentro de la memoria.
El reloj se la pasa en 0, porque está más tiempo en 0 en 1, si está en 0 la memoria no hace cambios y se
queda recordando el valor que tenía antes, mientras tanto S y R se podrán mover, total da igual porque van
a multiplicarse por 0 que es el valor del reloj en este momento.
Entonces como conclusión si el reloj vale 0 conserva el valor que no sé quién había guardado en la memoria
antes. Mientras el reloj esté en 0 la salida un tiempo después (Qt+1) va a mantener el valor anterior.
¿Qué pasa cuando el reloj valga 1? Ahí si van a funcionar los comandos S y R, teniendo entonces cuatro
posibilidades para los comandos: 0 0; 0 1; 1 0; 1 1.
En el caso de que S y R tengan 0 0, tendré 0 x 1 quedará 0 pero negado un 1, queda exactamente igual a
cuando teníamos al reloj que valía 0 por tanto no hace falta
demostrar nada y asumimos que cuando S y R valen 0 0, se
mantiene el valor que estaba guardado en el tiempo anterior.
Si S vale 0 y R vale 1 la salida va a ser 0 (pueden intentar hacer
la demostración ustedes mismos siguiendo el circuito). Cuando
vos aplicas reset la salida se pone en 0 sin tener en cuenta lo
que había antes.
Cuando S vale 1 y R vale 0 la salida va a ser 1 (intenten
razonarlo y cuando lo hagan usen la compuerta de arriba que
tiene el 0 haciendo que lo que venga de abajo no importe).
Si vos pones que S vale 1 y R vale 1 ustedes verán que la salida Qt es 1 y la salida de abajo Qt negado,
quedan ambas 1, en vez de tener valores opuestos puesto que son complementarios, es una incoherencia,
por eso esa última condición no se lo toma como válido, porque la memoria dice cosas ilógicas para la
memoria 1 y1, es como pedirle que prenda y apague al mismo tiempo.
EN RESUMEN HAY 3 COMANDOS:
0 0 RECORDÁ
0 1 RESETEA (PASALO A 0)
1 0 SETEA (PASALO A 1)
Tabla de Transición
Si la memoria está en 0 y vos queres que un tiempo después se quede en 0, pones 0 0, pero también podes
usar 0 1 por tanto en la tabla de transición pones 0 X porque ambas condiciones pueden ser.
Si quisieras ir de 0 a 1 tenes que accionar pones 1 0
Si quisieras ir de 1 a 0 pones 0 1, no hay otra chance
Si tenes un 1 quisieras mantenerlo podes poner 1 0, y también podes poner 0 0, por tanto usas la X porque
da igual que pongas en S y te queda X 0
Apunte extraoficial de ACO Nicolás Aguirre
Flip Flop JK
Debido a la indeterminación que se produce en el flip flop SR cuando la entrada aparece la combinación 1
1 se ha ideado otro tipo de flip flop que levanta esa indeterminación que se llama JK, debido a su creador
Jack Kilby.
Jack propone que agarremos un SR que todos conocemos como anda y le clavamos dos compuertas de
entrada AND y las reconectamos de nuevo, estableciendo una retroalimentación (tomar de la salida para
reingresar en la entrada).
En el dibujo del circuito la puerta A está multiplicando a J con Q negado que es la información que toma de
la salida de la memoria y la puerta B está multiplicando a K por Q que también es información que toma de
la salida de la memoria. Entonces con el resultado se lo mete adentro de la memoria, que con 0 0 mantiene
con 0 1 se receta con 1 0 se prende (Setea).
Primero hacemos la tabla de verdad grande que tiene las entradas J K Q y Q negado. Luego ponemos una
línea intermedia como un cálculo auxiliar intermedio que son las salidas de las compuertas que ingresan al
flip flop, por eso pone la columna S y R y finalmente me pregunto a donde va a ir a parar la salida con todas
estas combinaciones de entrada.
Esta tabla no tiene 16 valores, a pesar de tener 4 letras, pero no es así, porque tiene a Q y Q negado, por
tanto no pueden valer lo mismo al mismo tiempo. Por tanto la primera línea no es 0 0 0 0, sino que es 0 0
para J y K y acá la salida (Q) podría estar en 0, por tanto la otra tiene que estar en 1 ya que es su
complemento negado.
La segunda línea de nuevo poner 0 0 en J K y las salidas poner 1 0. O sea que con J y K en 0 0 podes tener
0 1 y 1 0 como valores de las salidas.
La siguiente combinación es 0 1 para J K con el valor de 0 1 o con el valor de 1 0 (se ve en la fila siguiente
ya que esos son los dos valores que pueden tener la salida).
El siguiente valor será entonces 1 0 para J K y devuelta repetiremos lo anterior de que puedan haber salidas
tanto 0 1 como 1 0. Y así se arma sucesivamente.
Para determinar los valores de S R tenemos que tener en cuenta que S son los valores de la salida al hacer
la multiplicación J por Q negado, entonces tengo que buscar a J y Q negado en la tabla y hacer la
Apunte extraoficial de ACO Nicolás Aguirre
multiplicación (multiplicar los extremos) entonces en la primera línea de las entradas S R, en S colocaremos
un 0 ya que J = 0 multiplicado por Q negado = 1, dando eso un resultado de 0.
Decimos que para poner lo que va a ir en R en la tabla de verdad tenemos que hacer K multiplicado por Q,
entonces como en la primera fila K = 0 y Q = 0 entonces pondremos que R es 0. Y así iremos completando
sucesivamente la tabla.
Para la línea de la salida (Qt + 1) yo tengo que seguir mirando el dibujo del circuito, le tengo que preguntar
al flip flop S R qué decisión va a tomar, qué valor va a poner en la salida en función de los valores S y R que
pongo en la entrada.
En la primera línea S y R vale 0 , por tanto yo recuerdo que cuando tenían esos valores la salida no cambia,
entonces agarro y me fijo para atrás y veo que tiene Q, que tiene un 0, entonces si no va cambiar en la
primera línea de la salida voy a colocar 0.
En la segunda línea S y R tienen 0 quiere decir que no cambia, entonces antes tenía un 1 en Q entonces,
ese 1 se va a mantener en la salida.
En la tercera línea (la numero 2) le ponemos un 0 porque 0 0 no cambia, antes tenía un 0 en Q por ende se
queda con ese valor que tiene Q.
En la cuarta línea, si S vale 0 y R vale 1 quiere decir que la salida (Qt +1) va a tener un valor de 0 porque
se resetea, no se fija en lo que había antes. Vale 0 porque R lo dijo
En la próxima va un 1, porque se S tiene 1, por tanto setea y se coloca un 1. Y así se arma el resto de esta
columna.
Entonces habiendo hecho la tabla grande, ahora la podemos resumir en la tabla pequeña (Tabla De verdad
del FF-JK), ponemos las dos entradas J K, la salida Qt + 1 y las posibles cuatro combinaciones: 0 0; 0 1; 1
0; 1 1.
J K en la tabla grande 0 0 son las dos primeras líneas, nos fijamos en la salidas que hay, que tienen un 0 y
un 1, que es lo que tenía antes, por eso se lo llama Qt, o sea que mantiene el dato que le habían grabado
en el anterior.
Si te fijas en las otras dos líneas que es cuando J K valen 0 1, podes observar que la salida vale 0 por tanto
en la tabla de verdad resumida ponemos que cuando J K valen 0 1 la salida es 0.
Cuando J K valen 1 0 entonces en la salida ponemos 1, porque en las dos líneas donde J K valen 1 0 en la
tabla grande tienen ambas líneas en la salida el valor 1.
En el ultimo se coloca Q negado, porque cuando tenemos 1 1 yo acá veo que esta el 1 y el 0, y no puedo
poner eso, por tanto me fijo, antes en Q había un 0 y en la salida hay un 1 y en la línea siguientes antes en
Q había un 1 y en la salida hay un 0 por tanto podemos ver que son opuestos los valores por tanto decimos
que es el complemento de Q el valor de salida cuando J K valen 1 1.
En el símbolo lógico no hay nada extraño, entradas J K y salidas Q y Q negado pero se le agregan dos
nuevos elementos que son el Preset y el Clear, que ambas son señales que sirven para prender la salida en
el caso que pongas un 1 lógico en preset en cualquier momento y en clear sirve para apagar la salida en
cualquier momento, digo en cualquier momento porque no necesitas hacer las combinaciones y esperar al
pulso de reloj para que realice el cambio. Lo hace de manera asíncrona, sin depender del pulso del reloj.
Preset setea a Q en 1 y clear lo borra y pone 0.
Apunte extraoficial de ACO Nicolás Aguirre
Tabla de transición
Si la salida la tenes en 0 y queres que en el siguiente pulso se mantenga en 0 a J K le tenes que colocar un
0 X, ya que podemos poner 0 0 para mantener y 0 1 porque de esa forma reseteamos y queda 0 lo mismo.
Si de 0 queres ir a 1 tenes que poner 1 X porque podes poner 1 0 para setear y el 1 1 porque 1 1 te hubiera
cambiado de un 0 a un 1 porque 1 1 pone el valor contrario.
El siguiente para pasar de 1 a 0 tenes que poner X 1, porque podes poner 0 1 para resetear, y también 1 1
para que adopte el valor contrario.
La última opción para mantener el 1 se pone X 0 porque podes usar el 1 0 para setear y el 0 0 para mantener,
así que se coloca X 0 porque en la X podría ir tanto 0 como 1.
Una vez que tenes el circuito físico, necesito una ecuación porque me gustaría implementarlo por software.
Para hacer la función tengo que escribir Qt+1 que este en función de las entradas J K y de Q, por tanto hago
un Karnaugh, no tomamos en cuenta a Q negado porque depende de Q. Voy a pasar al mapa los 1 que se
encuentran en la línea 1, 4, 5,6, y realizo las agrupaciones y luego escribo la ecuación que representa al
circuito físico.
Flip Flop D (Delay, Data)
Se lo hace tomando un J K, y poniendo la entrada D en J y colocando un inversor entre J y K restringiendo
entonces a valer entonces el valor contrario entre J y K.
Repetimos la tabla del J K y al poner el inversor solo restrinjo el funcionamiento en las líneas 2 3 4 5, de la
tabla grande usamos solo esas que son justamente los lugares donde J K tienen valor contrario.
Nos damos cuenta que la entrada D es J, si J tiene 0 la salida 0, y si J tiene 1 la salida tiene 1 , entonces la
tabla de verdad es bien sencilla, porque con esta restricción el flip flop es tan fácil como si le pones un 0 a
la entrada D le das un pulso de reloj por aquí la salida se te va a grabar en 0 y si le queres poner un 1
entonces a Q metes en D un 1 le das un pulso y el 1 queda atrapado en la salida y la ecuación de
funcionamiento es tan sencilla como que la salida Qt +1 va a adquirir el valor que pongas en D en la entrada.
Apunte extraoficial de ACO Nicolás Aguirre
Entonces para el flip flop T usamos de la tabla las líneas donde J y K tienen el mismo valor. Cuando T vale
0, serían las primeras dos líneas, la salida vale Qt, si vale cero no cambia. Si T vale 1 toma siempre el valor
contario del estado anterior. Así que la gente utiliza el flip flop t mandándole un 1 a la entrada así cada vez
que le tira un pulso prende y apaga o hace siempre lo contrario de lo que tenía antes.
La tabla de verdad es tan sencilla como que a si a T le mandas un 0 pueden venir los relojes que quieran,
la salida se queda inmóvil, queda lo que tenía antes, pero cuando a T le pongas un 1 entonces la salida va
a empezar a cambiar, de 0 pasa a 1 de 1 a pasa a 0 y así.
Contadores binarios
Un contador es un circuito digital capaz de contar sucesos electrónicos tales como impulsos, avanzando a
través de una secuencia de estados binarios. Un contador entonces cuenta pulsos, o pulsos que provienen
de un reloj o de algún contador de eventos
Se dice que el contador binario de “n” bits es un registro de n flip flops y compuertas asociadas que siguen
una secuencia de estados determinada en cada transición de los impulsos del reloj. Es un sistema secuencial
formado por flip flop memorias y algunas compuertas pueden tener y cuenta pulsos de reloj, se dice tienen
“n” bits cuando vos tenes “n” flip flop.
La cuenta binaria o módulo de contador es la cantidad máxima de estados que puede tener la secuencia
contada. Generalmente, se determina por medio de 2^n donde n es el número de los flip flops. Supongamos
que vos tenes 2 flip flop entonces 2^2 = 4 cuentas diferentes, entonces ese contador podría contar por
ejemplo 0 1 2 3, ponele que sea cíclico (0 1 2 3 0 1 2 3 3…) ese sería un contador de módulo 4 porque la
cantidad de cuentas máxima son cuatro. Se calcula como dijimos haciendo 2^n, entonces ustedes vieron
que la cuenta es 4 pero como parto desde el 0 nomás llegue hasta el 3, entonces se dice que por otra parte,
la cantidad máxima contada se determina por 2^n -1.
La salida del contador es el conjunto de salidas (Q) de los flip flops que forman el contador. Entonces si vos
tenes un contador que tiene adentro n flip flops haces una línea y cada una de las salidas del flip flop
Apunte extraoficial de ACO Nicolás Aguirre
constituyen la salida del contador. La entrada del contador es el reloj de todos los flip flops que forma parte
de la cuenta de los impulsos.
Pueden ser cíclicos si se repiten periódicamente su cuenta o se detiene solo, cíclico por ejemplo es 0 1 2 3
0 1 2 3…. Y se va repitiendo la cuenta, y si no llega hasta el tope y ahí se queda, es decir: 0 1 2 3 y se
terminó. El contador de productos de una maquina por ejemplo le podes pedir 1000 piezas y llegarás hasta
ahí. Cuenta ascendente o descendente o según una secuencia determinada.
Pueden ser operaciones síncronas o asíncronas. Un contador síncrono es un tipo de contador en el que
todas las etapas o flip flops utilizan el mismo impulso del reloj. El clock de los flip flops están unidos juntos y
reciben el impulso al mismo tiempo y se dice entonces que es un contador síncrono. En cambio el contador
asíncrono es el cual donde el reloj no afecta a todos los flip flops y unos conmutan tras otros, es decir, el
impulso en el asíncrono solo un flip flop va a recibir el impulso del reloj, luego como están enganchados en
cascada, entonces uno entrega el pulso del reloj al siguiente y así sucesivamente se lo van pasando.
Ejemplo: diseñar un contador ascendente, cíclico, de módulo 8 asíncrono:
Ascendente: cuenta del 0 en adelante
Cíclico es que se repite
Módulo 8 es que son 8 cuentas y según la formula entonces 7 será la cuenta máxima (del 0 al 7)
En un contador asincrónico la transición de salida de un flip flop sirve como fuente de activación de otros flip
flops.
Acá se ha puesto tres flip flops y se lo
han conectado de la siguiente
manera: el reloj solamente ataca al
primero, fíjense que la salida del
primero acciona al segundo, la salida
del segundo ingresara al clock del
tercero. Las salida del contador son
los Q, que son todas y cada una de las
salidas de los flip flops. En este caso
están ordenados al revés, el 0 va al
último por ser menos significativo, así que recuerden que el q2 iría primero y q0 al último, por ser el menos
importante. Se le llama LSB (Less Significative Bit) o séase (Bit menos significativo) al que está almacenado
en la primera memoria conectada al reloj en nuestro dibujo y MSB (Most Significative Bit) o séase (Bit más
significativo) al que está almacenado en la última memoria en nuestro dibujo. Si vos queres hacer contadores
más grandes básicamente tenes que copiar y pegar sucesivamente.
Fíjense que por otro lado todas las entradas están conectadas a un 1 lógico, o sea se puso en 1 haciendo
la función Toggle, como el flip flop, que va a ir cambiando cada vez que recibe un pulso la salida si esta en
0 pasa a 1 y si esta en 1 pasa a 0.
Esa es una serie de pulsos de reloj que van a ir
llegando al contador (la que dice reloj) tiene 8 pulsos
para ver una vuelta completa del contador.
Después tiene dibuja todas las salidas del contador (Q0
Q1 Q2) en diagramas temporales. Voy a ir viendo que
mientras el tiempo transcurre puedo ver que la salida
va pasando de 1 a 0 de 0 a 1 y así sucesivamente.
En el primer momento todas las salidas Q valen 0,
vamos a suponer que todos los flip flops se accionan con el flanco decreciente de la señal de reloj, cuando
el flanco cae los flip flops realizan los cambios, no hay mucho que pensar porque los cambios que van a
hacer es cambiar las salidas pasar de 0 a 1 y de 1 a 0 porque las entradas están congeladas a 1 todas.
Apunte extraoficial de ACO Nicolás Aguirre
Cuando viene el primer pulso del reloj, el único que cambia el primero porque de 0 va a pasar a 1, mientras
los otros dos flip flops se van a quedar en 0 porque es un reloj que no se mueve, al menos no hay caída de
los flancos. Cuando el primer pulso del reloj cayo, el Q0 sube de estado, al subir no le provoca ningún cambio
al siguiente, porque el siguiente reacciona con el flanco de caída del primero.
Cuando viene el segundo pulso del reloj, cuando cae el flanco del reloj, cae también el flanco de Q0,
haciendo que tras esto le haga un disparo al segundo flip flop (Q1), haciendo que el mismo suba su estado
lógico, pasando de 0 a 1. Obviamente que levantar la salida del segundo no le provoca cambio a la salida
del tercero (Q2) porque solo provocan cambio cuando cae el flanco, por eso el tercero sigue en 0.
Cuando viene el pulso el 3 vuelve a levantarse el primero, pero no le ocasiona ningún cambio al segundo
debido a que eso ocurre solo cuando cae el flanco del primero.
En el pulso número 4, cuando cae el mismo hace que cambie (Q0) cayendo, y eso provoca cambios en el
segundo (Q1) y el segundo también cae y esto provoca por primera vez que cambie el tercero (Q2).
Si se sigue analizando se vuelve a repetir este patrón en los pulsos subsiguientes.
Finalmente en el curso numero 8 todos caen, haciendo que provoquen cambios y la cuenta se vuelve a cero,
y si vuelve a cero se vuelve a repetir todo este proceso nuevamente.
Un contador se lo usa en un procesador para que lleve un conteo de las instrucciones por ejemplo.
La ventaja de este contador que acabamos de ver es que está muy bueno, es sencillo y siempre hace lo
mismo. Si queres hacer un contador más grande copia y pega y tenes un contador gigante.
El problema se da en pulsos como el ultimo, cuando el reloj vino y cayo, se hace una reacción en cadena
donde caen todos, evidentemente, esto no se hace en tiempo real por más rápido que sea el circuito, porque
entre que cambia el primero y el ultimo pasa un tiempo y el fabricante tiene que considerar que ese tiempo
va a ser considerado como el máximo, que es la suma de todos los tiempos, es como un efecto domino,
todos van cayendo uno tras otro, mientras más fichas tenes más tarda en caer. Habría que tener un margen
de error para no tener problemas en la posibilidad de que la maquina cometa un error en ese lapso de
tiempo.
Un contador síncrono tiene como desventaja que cuesta más construirlo pero va a ser más rápido porque el
reloj ataca a todos los flip flops al mismo tiempo, el tiempo para cambiar de un estado al otro va a ser el
retardo de un solo flip flop.
Registro de desplazamiento
Se usa en las interfaces de comunicación, como en el USB que transporta los datos a una impresora que
está allá lejos, a través de un cable, de un alambre, tanto la computadora como la impresora trabajan con
datos en paralelo, estos circuito electrónicos de desplazamiento hacen una transformación generalmente de
serie a paralelo y de paralelo a serie porque los dos elementos son necesarios en cada uno de las interfaces
de comunicación para la trasmisión y para la recepción.
Es como cuando en la calculadora vos pones un número y desplaza los otros, eso sería un registro y está
desplazando porque cada número nuevo desplaza hacia a la izquierda a los otros.
Es un circuito digital secuencial, hay 4 tipos
Serie-Serie (SISO): tiene una entrada serie y una salida serie (Serial In Serial Out), la importancia que puede
tener es que al tomar una señal y trabajar adentro y después podes liberarla con un delay, retardarla por
algún motivo que vos quieras, y entonces ese registro será útil para eso. Solo la entrada del primer flip flop
y la salida del ultimo son accesibles externamente, todo lo demás esta internamente. Se emplea como líneas
de retardos digitales y en tareas de sincronización.
El último en entrar es el primero en salir.
Apunte extraoficial de ACO Nicolás Aguirre
El reloj (el primer punto negro debajo de entrada) es activado por flanco, le llega a todos los flip flop
simultáneamente. Si vos en la entrada le pones un 1 lógico entonces el set va a tener un 1, y el reset va a
tener lo contario por el inversor teniendo un 0, sería como un flip flop de tipo D. Cuando vos mandes el primer
pulso de reloj, si vos asumís que todos los flip flops en este comienzo estaban en 0, entonces ahora te das
cuenta que cuando venga el primer pulso de reloj, le doy la orden a todos de que tomen lo que tienen en la
entrada y lo pasen a la salida. Entonces como dijimos que todos los de arriba tenían 0, los de abajo tendrán
1 debido al inversor. Primer pulso, el de arriba dice que se ponga en 1 porque tiene un 1 set, entonces pasa
de 0 a 1 el primero. Como yo tenía 0 1 en ese flip flop le da la orden de que se resetee, por tanto manda a
la salida un 0 y hace que se desplace ese cero al siguiente flip flop, y entonces ocurrirá lo mismo en el
siguiente y ese 0 se irá desplazando hasta llegar a la salida.
Se produjo un desplazamiento, porque el primer uno se metió adentro y el 0 se trasladó hacia allá y así se
fueron todos corriendo como una oruga, se va corriendo toda la información.
Si el próximo paso es colocar un 0 en la entrada, te vas a dar cuenta que el 1 se va a correr y que el 0 nuevo
va a tomar su lugar y ves como todos se van corriendo.
Apunte extraoficial de ACO Nicolás Aguirre
Le voy a mandar 5 pulsos de reloj, y con eso vamos a recibir los 5 ceros y uno que van viniendo del cable o
la fibra óptica. En cada pulso del reloj un uno o un cero ira ingresando en la entrada y se va a ir desplazando
en el interior hasta que después de los 5 pulsos, la información que has capturado en forma serial se ha
quedado en la salida de cada uno de los flip flops acomodadita y esperando que venga el procesador de la
impresora y tome el caracter que tiene en la salida QA, QB, etc. Y lo toma de una sola vez porque lo toma
en paralelo, todos los 1 y 0 están disponibles en las salidas de los flip flops. Este es un chip que se usa en
la interface de la comunicación para convertir la entrada serie a salida en paralelo.
Registro con entrada paralelo y salida serie (PISO) (Paralell In, Serial Out)
Apunte extraoficial de ACO Nicolás Aguirre
Tiene una entrada de comando que se llama carga y desplazamiento, cuando vos le pones un 1 al punto
negro que está debajo de carga desplazamiento, se produce la carga y cuando le pones un 0 se produce un
desplazamiento. Carga significa que vos vas a cargar primero el estado lógico adentro de los flip flops que
vos queres transportar. La entrada de los flip flops son en paralelo, se hacen por la parte superior A B C D
E. Una vez que la información este adentro de la memoria entonces vos la vas a poder hacer salir por donde
dice salida serie, a modo de un 1 bit por vez.
Primero lo pones en carga poniendo el 1 lógico. El 1 le pone un 0 por el inversor, entonces el reloj que se
está moviendo no va a poder pasar adentro de la maquina porque se está multiplicando por cero, entonces
ninguno de los flip flops se va a mover porque mientras esté en modo carga, el reloj no puede entrar.
Sigamos el camino del 1, se va a ir para arriba y abajo, permite la entrada o el pasaje de los datos A B C D
E de los bits, suponiendo que el número a trasmitir sea 1 0 1 1 0 (inventado), el primero hace 1 x 1 = 1
entonces la salida tiene un 1, entonces el preset que está abajo hace fijar la salida en un 1, y ese 1 con el
negador le pone un 0 y hace que pase un 0 ya que todo multiplicado por 0 es 0, haciendo que a Clear le
ponga un 0 para que no lo borre.
La entrada B vale 0, 0 multiplicado por 1 es cero, entonces no se acciona a preset, pero con el inversor tiene
un 1 que viaja hasta abajo, y si se fijan, el primer 1 que pusimos a su vez también está conectado con cada
una de las compuertas AND que están debajo de los flip flops entonces ese 1 que se hizo gracias al inversor
se multiplica por el 1 lógico del principio haciendo que por la compuerta AND pase un 1, poniéndole un 1 al
clear haciendo que recién en ese momento la salida se guarde en cero.
Entonces e esa forma los que son 1 se van a guardar como 1 y los que son 0 se guardan como 0 cuando
está en modo carga este registro.
Apunte extraoficial de ACO Nicolás Aguirre
Ahora pasamos al modo desplazamiento con un 0 que estará en otro color. El 0 le pone un 1 en la compuerta
AND de abajo debido al inversor, entonces ahora si se va a activar el pulso de reloj, cada pulso de reloj que
reciba el flip flop van a impedir que los valores de carga ingresen puesto que son todos 0 multiplicando a las
variables de entrada, haciendo que la misma no pasen. En los impulsos que pones del reloj se suponen que
van a desplazar, todos los valores que habíamos cargado se van a ir desplazando de la misma forma que
habíamos visto antes en el SISO.
Registros con entrada y salida en paralelo
(PIPO) (Parallel In – Parallel Out)
Los buses son caminos de comunicación entre dos o más chips o dispositivos y se los consideran como si
fueran un medio de transmisión, que es compartido ya que la señal es transmitida a todo el sistema, pero
solo dos al mismo tiempo utilizaran estas autopistas de datos. Es la CPU que arbitra a traves del bus de
control con quien se quieren comunicar todos los dispositivos.
El concepto de bus es como el de una gran autopista por donde pasan los datos. Son líneas de alambre que
están uno al lado de otra, la información se manda en paralelo y de acuerdo a la selección solo dos
dispositivos están dialogando a un tiempo. Se hace tan rápido que parece que todo pasa simultáneamente,
no podríamos tener muchos caminos de conexión, porque entonces no habría como construir la placa madre
con todos los alambres.
Apunte extraoficial de ACO Nicolás Aguirre
Sistema de Microcomputador
Arquitetura de Von Neumann
Un sistema de microcomputador está compuesto por 5 partes: La CPU o microprocesador, memoria ROM,
memoria RAM, los dispositivos de entrada y salida (I/0) y el reloj. Siempre toda computadora tiene estos 5
módulos. Se interconectan los módulos con líneas que corren, llamadas buses y tenemos 3 buses: Bus de
Addres (azul), Bus de datos (verde), Bus de control (amarillo). Todos los buses son elementos compartidos
que van a todos los dispositivos simultáneamente, pero es 1 y solo 1 de ellos, generalmente el micro, que
se va a ir comunicando con cada uno de los módulos mediante los buses para intercambiar información.
Memoria ROM: es una memoria que no es volátil, se llama ROM (Read Only Memory, Memoria de Lectura
solamente, su acceso es de forma aleatoria), se encuentran los programas de inicio de la placa madre, que
son instrucciones de máquinas muy elementales y que cuando la maquina hace un arranque en frio hay un
conjunto de programas aquí adentro que le permite chequear que la memoria RAM esté bien, se testean
muchos dispositivos para ver si la comunicación anda bien, generalmente en esta parte se ve el logo del
fabricante cuando se está encendiendo la máquina.
Memoria RAM: se aloja aquí el sistema operativo, es de lectura/escritura y es volátil, es decir que con
ausencia de energía eléctrica la información se va a perder. Se le llama RAM por (Random Access Memory
que significa Memoria de acceso aleatorio), como es de acceso aleatorio acceder a cualquier byte va a tomar
la misma cantidad de tiempo. Es la memoria principal, se alojan según la arquitectura de Von Neumann
programas y datos. Está conectada con el disco rígido mediante el módulo de I/O.
I/O: hay una porción de memoria, de puertos, donde nos deja conectarnos con dispositivos externos, como
el mouse, la pantalla, el teclado, disco rígido, etc. Y por ahí entran los datos de los periféricos.
Reloj: su base de tiempo te va dando la idea temporal de funcionamiento de la maquina
Adentro del procesador existen registros que son arreglos de memorias de un bit todos encadenados y el
tamaño de estos registros son múltiplos de 8 (RA y RB). Hay un registro de instrucción (RC) donde se va a
alojar la instrucción que se está a punto de ejecutar en este momento. En las puertas de entradas del
procesador existen dos registros que no vas a tocar pero van a estar siempre en los procesadores, que son
el Memory Address Register y el Memory Bus Register (MAR) y (MRB)
Apunte extraoficial de ACO Nicolás Aguirre
La RAM es un gran decodificador, donde tiene pocas líneas que le llegan pero que después si son 8GB tiene
8 mil millones de estos bytes almacenados ahí adentro (esas pilas azules), que son lugares donde podes
guardar 8 unos y ceros. Pero no vamos a poder conectar 8 mil millones de alambres, entonces gracias a
este decodificador de Address es que podemos hacer las conexiones para buscar el byte que andemos
necesitando con pocas líneas que funciona de forma exponencial entre las entradas y salidas, ACORDATE
2 elevado al número de líneas de direccionamiento (2^n) te da la cantidad de bytes que va a poder manejar
la máquina.
Volvemos luego de haber ahondado un poco en la RAM a la arquitectura de Von Neumann, para seguir
explicando entonces como hace el bus de Address para poder entonces elegir ese byte con el que nos
queremos comunicar. Las líneas de direccionamiento le llegan a todos los dispositivos en general pero en
este momento estoy eligiendo uno y solo uno de los bytes con una combinación binaria en el bus de address,
o sea que es unidireccional y te permite elegir una y solo una posición de memoria a un tiempo, eligiéndola
o seleccionándola con la combinación binaria que largues en este bus. Si una maquina tiene 32 líneas, la
capacidad de direccionamiento es la capacidad máxima o ancho de banda RAM que va a poder manejar es
2^32 si haces la cuenta corresponde a 4GB de RAM.
Agarrá una calculadora: hace 2^32 y te va a dar un número gigantesco (porque voy a considerar que el bus
de address de esta máquina tiene 32 líneas) una vez que tengas el número, esa es la cantidad de bytes que
la CPU va a poder elegir, uno entre todo ese numeron de bytes va a elegir. Esa es la cantidad de bytes que
maneja la computadora. Pero vos no vas a ir a comprar una memoria con la calculadora en la mano
mostrándole al señor que queres esa memoria para colocarle a tu máquina. Entonces lo que vas a hacer es
dividir a ese número por 1024, cuando haces esto lo pasas a kilobyte, que es una unidad irrisoria de la que
nadie habla. Ahora volves a dividir por 1024, entonces lo pasas a megabyte, pero sigue siendo mucho,
entonces volver a dividir por 1024, pasándolo a gigabyte, dando exactos 4 gigabytes, de esa forma se hacen
las cuentas.
Apunte extraoficial de ACO Nicolás Aguirre
El bus de address es importante porque si sabes la cantidad de líneas que tiene vas a saber cuál es la
memoria máxima expandible que vas a poder expandir a tu computadora. Si vos agregas una línea más
duplica la cantidad de memoria, o sea que es muy importante tener el concepto de líneas de address, porque
solo una línea aumenta al doble la cantidad de memoria, con 33 líneas pasas de 4GB a 8GB.
Las pilas de bytes funcionan como una gran tabla de verdad, vos le ponés una combinación binaria y
entonces podes seleccionar el byte que responda a la misma, vas desde el 0 0 0 0 0, hasta el 1 1 1 1 1 y
para que sea más fácil de entender, en vez de numerarlas en binario lo haces en hexadecimal, entonces si
pones FFFFF estarías seleccionando el último byte (registro) dentro de la RAM.
En la RAM existen líneas que lo tienen todos los chips que vienen desde el bus de control (será explicado
en breve), donde dicen que la van a leer (RD) a ella, que la van a escribir (WR) y la memoria se va a elegir
con una serie de selectores, cuando yo le ponga 111 entonces el microprocesador esta potable de leer a
cualquiera y a través de las líneas amarillas (bus de control) le va a ir a decir, te voy a leer a vos (modulo) o
voy a elegir de la RAM.
Una vez que vos elegiste el comando de la RAM, un dato que queres leer o escribir, el bus de datos se va
a dedicar a transportar o va a tomar un valor que se encuentre en la RAM y lo va a traer entonces a través
del canal verde que es el bus de datos y es bidireccional. Va a tomar el valor que está en la RAM y lo va a
traer pasando a través del registro de memoria del bus, que lo va a dejar ahí almacenado y a su vez ese
dato podría ir a parar finalmente adentro de un registro del procesador del CPU. Y sino al revés, suponga
que una persona tiene un resultado en el registro B y lo quiere guardar en la RAM, entonces lo lleva, lo pone
en el registro de memoria del bus y ahí lo va a transferir eligiendo el lugar donde lo quiere guardar con el
bus de direccionamiento y una vez que elegido el lugar le va a mandar a través de la línea verde desde el
registro hacia uno de los registros de la RAM.
El bus de datos entonces es bidireccional y sirve para mandar información desde la memoria hacia los
registros internos del procesador en caso que sea datos y en la arquitectura que sea la de Von Neumann
también se mandan las instrucciones por acá.
El tamaño de Bus de Address define la capacidad de direccionamiento, capacidad de memoria que podemos
manejar, pero el tamaño de bus de datos coincide con el tamaño del registro. En el pasado los registros de
RA y RB eran de 8 bits, al igual que el bus de datos, entonces todos eran felices, los 8 bits iban y venían por
el bus de datos de 8 bits, pero después fueron evolucionando, cuando los registros pasaron a 32 bits, el bus
de datos fue también de 32.
El bus de control cumple el rol de primero seleccionar con cuál de los dispositivos se quiere comunicar, para
lo cual van a haber señales adentro del bus que no tienen la misma regularidad que los otros buses que
eran todos iguales e iban desde el datos menos significativo (0) hasta el más significativo (n-1). En el bus
de control hay muchas líneas independientes y cada una se llama distinto. Hay líneas para decirle a la
memoria una vez que la seleccionaron tanto el renglón como la información si la vas a leer o escribir. Por
ejemplo Intel para leer pone 0 en la línea read y para escribir pone 0 en write (fíjense en el dibujo de la
memoria RAM en la parte abajo izquierda). Output enable (OE) quiere decir que una vez que haya
seleccionado lo que voy a hacer recién voy a tirar un pulso por la habilitación de la salida para que
físicamente la información salga y hace tanto pasos porque quiero asegurarme que la información no vaya
a ir corrupta. Entonces cuando yo seleccione la acción, por ejemplo Write, dejo pasar un tiempito y después
aplico Output Enable, entonces las cosas van a salir bien. También el Bus de control nos indica qué blíster
se seleccionará dentro de la RAM mediante el chip selector) (averiguar que mierda es un blíster).
En el bus de control también puede pasar que cuando vos vas a buscar información del disco duro para
guardar en la RAM, en el pasado se tomaba un byte, o sea una instrucción, se seleccionaba esa instrucción
a través del bus de address, luego se tomaba el byte que viajaba por el bus de datos y se depositaba
temporariamente en un registro del procesador para que luego en otro tiempo salga del registro del
procesador y vaya a parar a la RAM, se seleccionaba un lugar dentro de ella y se guardaba la instrucción
dentro de ella. Esto es muy retardado, entonces adentro del control bus hay una línea que se llama DMA
(Direct Memory Access) que significa Acceso Directo a Memoria, que la maneja la CPU y el dispositivo
externo como el disco duro. Cuando el disco duro acciona la DMA, accede, toma la memoria y le pasa
Apunte extraoficial de ACO Nicolás Aguirre
directamente los datos, o sea que suelta las líneas de direccionamiento por única vez, con el acceso de
memoria las líneas de direccionamiento las toma el procesador del disco duro y comienza a hacer la
trasferencia el mismo, transfiere directamente a RAM el programa, ahorrando tiempo. Ese arreglo viene por
el bus de control.
Entonces adentro del bus está Read, Write, Chip Selector, Output Enable, DMA, y luego también hay otro
mecanismo. Supongamos que una impresora está imprimiendo y al mismo tiempo estoy escribiendo texto,
no es que yo tengo que dejar de hacer algo porque la impresora está trabajando, entonces da una sensación
de que todo es simultáneo. Lo primero que hago es mandarle a la impresora un grupo de caracteres para
que se ponga a trabajar, ella tiene un buffer, un lugar de memoria RAM a la que le puedo mandar una cierta
cantidad de tareas para que hago, pero luego tengo que preguntarle cada tanto si necesita mas datos. Si
hago ese mecanismo sería muy retardado porque yo estaría a cada rato si necesita, entonces sería mejor
que la impresora indique cuando necesita datos, así no se pierde tiempo en esa operación, por tanto se ideo
un mecanismo llamado interrupción, entonces cuando la impresora ve que su buffer se está vaciando le va
a solicitar a la CPU que le mande más datos mediante este mecanismo. Hay muchas líneas de interrupción
porque puede haber muchos dispositivos periféricos conectados a la computadora, así que a esas líneas se
las llama IRQ (Interrupt Request), cada periférico toma una de ellas para que la CPU sepa quién de todos
le pide atención a la interrupción. Entonces el mecanismo interrumpe al micro para que pueda atenderlo y
eso es de forma asíncrona, aparece en cualquier momento, pero de esa forma la CPU se desentiende de si
los periféricos necesitan algo. Estas interrupciones IRQ son enmascarables, o sea, que la CPU cuando las
reciba le puede decir al dispositivo: “Bueno ya se que necesitas esto, pero ahora estoy muy ocupado en otra
cosa, así que espera”. La enmascarable no es tan prioritario, la CPU la recibe, y cuando se haya
descongestionado y terminado lo que tenia que hacer, atenderá la interrupción de esta característica
enmascarable, siendo todas las IRQ de nuestra computadora enmascarables. Cuando vos enchufas un
periférico entonces el sistema operativo lo detecta y le asigna una IRQ.
Hay otra interrupción que se llama NMI (Not Maskable Interrupt) sería la no enmascarable, y hay solo una,
esa interrupción cuando entra el micro dice: “Ojo, acá se para todo”. Es como el botón de pánico, el
microprocesador deja de hacer todo lo que está haciendo y se pone a ejecutar una rutina de atención a esa
interrupción, algo que estaba previamente escrito y guardado en la RAM según se cargó en el arranque en
frio la rutina de atención de interrupción.
Cuando nos relacionamos con los periféricos el bus de control tiene líneas específicas para ellos), tales
como la I/O Read o la I/O Write. Cuando vos queres leer o escribir los periféricos no usas el mismo Read o
Write que usas para la RAM o ROM. Entonces como vos veras, la señal de control pueden ser bidireccionales
y cada una tiene un sentido distinto en función de lo que le toca hacer.
Apunte extraoficial de ACO Nicolás Aguirre
Para los periféricos se usan en las computadoras las últimas 16 líneas del bus de direccionamiento para
seleccionar el mapa de entrada y salida. Ese mapa que se crea se le llama el Mapa de Puertos de Entrada
y Salida de la PC, es el siguiente:
Si vos querés acceder a un puerto usas dicho mapa siguiendo las direcciones de memoria descritas en él.
Los primeros 15 bytes se destina al controlador de acceso directo memoria por ejemplo.
Los últimos lugares están destinados a nuevos componentes de Hardware que el usuario puede llegar a
expandir, asignándole una dirección nueva a cada nuevo dispositivo.
Apunte extraoficial de ACO Nicolás Aguirre
Ahora vamos a estudiar los registros internos de la máquina que se emplean para el lenguaje de máquina.
Se llaman GPR (General Purpose Register) a los 4 registros que vamos a ver a continuación. Un registro es
una sucesión de flip flops pegados uno al lado de otro que tiene un determinado orden que va desde el
menos significativo hasta el más significativo.
Intel crea en este momento un procesador de 4 registros de 16 bits.
Del 0 al 7 y después del bit 8 al 15, en total 16 bits.
En esa época se utilizaban 8 bits, entonces para que la gente no
descartase el producto por ser de 16 bits se dividió al registro en
dos partes de 8, teniendo entonces la parte alta H (High) y baja L
(Low) en el mismo.
El registro AX se lo llama acumulador, es de 16 bits si lo usas como
un todo, si no a la AX lo cortas en dos y lo usas como dos registro,
AH por High (la parte alta), y AL por Low( la parte baja). Si vos haces esto último ambas partes se
desconocen entre sí.
El registro BX se lo llama base.
El registro CX se lo llama contador o counter.
El registro DX se lo llama data o dato.
Luego vienen dos registros más que los vamos a usar que son punteros y son muy importantes:
El primero se llama Source Index (SI) índice
fuente u origen y el otro se llama Destination
Index (DI) índice destino.
Si vos agarras a la memoria y te la imaginas,
estos dos son punteros en ella. El concepto de puntero viene ligado a estos registros internos del procesador.
Si vos tenes un bloque de memoria RAM conformado por el bloque de bytes con sus respectivas posiciones
de memoria y lo que está adentro es el dato. A veces yo quiero acceder al valor que está adentro, entonces
simplemente voy y le digo al procesador con una instrucción que busque dicho dato y que lo lleve a uno de
los registros de propósito general que vimos antes. Pero en otras necesito acceder a un dato detrás de otro
como en un texto, una cadena de caracteres (string) por tanto si necesitas datos que son secuenciales no
te conviene buscar uno por uno, entonces lo que se hace es usar un puntero en la memoria, que es como
indicar con una flechita cual es el primer carácter a trabajar, con un puntero, señalándola, y para ello se
escribe dentro del registro (le entran 4 cifras) la posición en memoria donde está el dato. Si quisieras
entonces que siga avanzando como una cadena de texto tenes que indicar en el algoritmo (esto ya es más
practico) hasta donde queres que vaya, sumándole 1 y deteniendo en la posición de memoria donde queres
dejar de extraer datos usando el puntero.
El destination point trabaja igual que el SI, mueve datos a un lugar destino
BX también puede usarse como puntero.
Lenguaje de máquina
Instrucción:
Una instrucción de maquina es una operación expresada mediante la codificación binaria de cadenas de 1’s
y 0’s. Se le denomina lenguaje de máquina. Es la categoría 4 de código. Pero a su vez es muy difícil
acordarse la cadena de unos y ceros en una secuencia muy grande, por tanto se emplea un truco que se
llama lenguaje de ensamblador, que es un juego de instrucciones expresados en mnemotecnia que son
fáciles de acordarse. El repertorio de instrucciones o juego de instrucciones son el conjunto de órdenes que
puede ejecutar un computador.
Modos de direccionamiento
Los modos de direccionamiento hacen referencia a las distintas formas que los microprocesadores tienen
para obtener o acceder a los operando. El operando o dato está en la memoria, entonces las instrucciones
tienen distintas formas de ser usadas pero todas tratan de ir a buscar de algún modo u otro los datos que a
veces están en la memoria de la máquina, a veces está en un registro interno, a veces ese dato se lo da de
una porque te lo da en la misma instrucción. Las instrucciones a veces son las mismas, pero de acuerdo al
modo de direccionamiento son las distintas formas de en la que se buscarán los datos.
Modo de direccionamiento INHERENTE o IMPLÍCITO
La instrucción implícitamente contiene la orden a realizar. No hace falta más nada, simplemente con darle
el nombre de la instrucción ya sabe lo que hace.
Ejemplos:
CLC (clear carry) borra la bandera de acarreo.
STI (Set Interrupt flag) fija o enciende la bandera de interrupción.
CLI (Clear Interrupt flag) borra la bandera de interrupción.
NOP (No Operation) no hace nada y solo pierde un tiempo de reloj.
Modo de direccionamiento REGISTRO
El dato u operando está en un segundo registro.
Acá debuta la instrucción mas famosa, se llama MOV, que significa mover datos de un lado a otro, si decimos
MOV AX,BX tenemos dos registros separados por una coma, el de la izquierda (AX) es el registro destino y
el de la derecha (BX) es el registro fuente, se asigna de derecha a izquierda.
Apunte extraoficial de ACO Nicolás Aguirre
El valor que tiene BX se le pasa al registro AX, eso hace la instrucción MOV. Se copia el valor que tiene BX
al valor AX, el 12 34 se pierde para siempre y los dos registros quedan iguales. El hecho de que se mueva
un valor del registro B al A, no quiere decir que B se quede en cero, se hace una “copia”.
Otra instrucción que tiene el modo de direccionamiento registro es la OR, que hace una OR entre dos
registros. Supongamos el siguiente ejemplo:
El procesador va a tomar los datos y los pasa a binario. Luego hace la OR, haciendo una suma lógica entre
los dos números binarios. Recordemos que la suma lógica no es lo mismo que suma binaria, eso explica
que hacer 1+1 no de 10 sino 1, porque si ya estás en el estado lógico 1, según el álgebra de Boole, el que
le sigas sumando tensiones 1 no va a modificar nada. Entonces al final el resultado de la suma lógica se
coloca en AL.
Modo de direccionamiento INMEDIATO
El dato a operar está contenido en la instrucción inmediatamente después del opcode de la instrucción.
Ejemplo:
La misma instrucción, que se llama MOV, el destino va a ser en el registro AX, pero fíjate lo que dice ahí, un
número le puso el tipo 1234, le pasa el valor que él quiere directamente al registro. Directamente le pones
el número que le queres pasar, te tenes que fijar que la cantidad que le quieras introducir coincida con el
tamaño del registro.
Apunte extraoficial de ACO Nicolás Aguirre
Acá en vez de poner un registro puse un puntero, si yo pongo a la izquierda el puntero y a la derecha 2000
y supongamos que el puntero tenga un numero cualquiera después de ejecutar se va a cargar con el número
2000, o sea que va a ir a la posición 2000 dentro de la memoria RAM.
Otro ejemplo es el siguiente:
Esta instrucción lo que hace es sumar aritméticamente, dice que súmele 5 al registro AL, es una forma
inmediata porque el numero 5 ya estaba definido. Si el AL tiene 35, haces 35 + 5 = 3A porque 5 + 5 = 10 =
A en hexadecimal, porque los números en los registros las personas lo usan en hexadecimal porque es una
conversión más eficaz para usar ya que todo son unos y ceros.
Modo de direccionamiento DIRECTO MEMORIA
Este es un modo que se usa para que se vaya a la memoria a buscar un dato y que luego se ponga en un
registro interno del computador.
Ejemplo:
La instrucción de nuevo es MOV, porque estas queriendo ir a buscar a la memoria un dato y lo queres poner
en el AL. Entonces metes entre corchetes, ojota, siempre entre corchetes siempre indicas un LUGAR de
memoria donde está el dato, no es el dato en sí, sino donde se ubica, se le conoce como dirección o posición
de memoria. Entonces lo que hace es ir a la posición citada, toma el dato y lo reemplaza en el lugar destino
que este caso es en AL. Siempre MOV hace una copia del valor que usaste, pero se pierde el que estaba
antes de reemplazar.
Veamos un ejemplo más con una variación:
Apunte extraoficial de ACO Nicolás Aguirre
Ahora la instrucción es la misma pero el registro es más grande, es AX, pero yo hice lo mismo. Te vas a la
posición de memoria 2000 y de ahí para abajo, o sea 2001, 2002… agarras tantos bytes como tamaño sea
necesario para llenar el registro. En este caso tomas el que indicaste y el siguiente para poder llenar el
registro de 16. El orden para acomodar los valores es que como la dirección 2000 es más pequeño que 2001
que es la posición que le sigue va en la parte baja, y como la posición 2001 es más grande va en la parte
alta. Este formato en Intel se lo conoce como “Little Endian”. Pero también pudo haberse hecho lo opuesto
en cuanto al acomodamiento, lo que se conoce como “Big Endian”.
Modo de direccionamiento INDIRECTO MEMORIA
El operando es especificado mediante una combinación de registros índice y base, y puede haber un
desplazamiento.
También hay corchetes, en este caso va a ir a buscar a la memoria, la instrucción es MOV, pero la diferencia
es que adentro del corchete no tenes un números, sino simplemente el puntero “SI”, entonces vos podés
mirar en qué valor está posicionado el puntero y extraer los datos que tenga esa posición de memoria.
Cuando ejecutes la instrucción, en forma indirecta, porque hay un intermediario que es el registro de por
medio, te va a decir dónde está el dato u operando que es el número A4, te va a dar el valor de la dirección
de memoria. Entonces el numero 2B se cambia por A4.
Los únicos registros que pueden estar dentro del corchete son el SI, el DI y el BX, no puede ir ningún otro
(obvio que si pueden ir números como habíamos visto antes).
Ahora supongamos tenemos lo siguiente:
Apunte extraoficial de ACO Nicolás Aguirre
Esta instrucción dice que vas a ir a buscar una memoria de una forma muy sofisticada porque estas usando
2 punteros. La dirección se obtiene fijándonos en donde están los punteros y después sumas esos valores,
cuando sumas todo te das 3003 y buscas dicho lugar en esa memoria. Sacas el 25 de ahí adentro y lo pones
en el AL después.
Modo de direccionamiento RELATIVO
El modo direccionamiento relativo hay varios modos relativos, pero solamente se mencionara uno, que es
el relativo al contador del programa. (IP Instruction Pointer)
Cuando vos empezas a ejecutar un programa, tenes una instrucción debajo de la otra, el modo relativo lo
usas para saltar, para cuando vos tenes que quebrar o romper el orden normal de ejecución y hacer un lazo
por ejemplo, entonces el contador del programa va a empezar a dar vueltas en un bucle cerrado.
Veamos un ejemplo:
CMP es la instrucción Compare que ahí vemos lo que hace (hace una resta ficticia solo para comparar
valores pero sin modificar el valor que tiene en este caso la AL) y si esa resta da un numero 0, entonces se
activa la bandera Z, caso contrario la bandera N.
La instrucción de este modo es la que sigue, la que dice JZ, siendo J una letra que deriva de la palabra Jump
(Saltar) con la condición Z que habíamos mencionado anteriormente. Le dice saltá si es 0, y al lado tiene la
instrucción a la cual se irá, entonces esto es el modo relativo al valor donde estaba antes ahora se corre a
la 0120 y ejecutará la instrucción que allí se encuentre. Si no es cierta la condición sigo normalmente el
curso de las instrucciones.
Apunte extraoficial de ACO Nicolás Aguirre
Del mapa de memoria que tenemos para manejar los distintos bytes y suponiendo que todos los mapas
están llenos de memoria, Intel crea 4 zonas en las cuales van a estar contenidos los registros mencionados
anteriormente.
La primer zona (Segmento de código) está contenido una porción de programa que se está ejecutando en
este momento. O sea, Intel dijo: “Si vas a ejecutar programas, asegúrate de que esa parte del programa que
estas ejecutando este dentro de este segmento”. Segmento de código, es decir, de instrucciones. Este
segmento lo mueve el usuario por Software, vos lo vas posicionando en el lugar donde o vas a colocar una
rutina para el código o estás ejecutando un programa y entonces el segmento de código debe estar
posicionado ahí. En el caso que trabajes en lenguaje de máquina, sos vos el que posicionas el segmento en
el lugar donde esté el trabajo.
Como este programa del que estábamos hablando anteriormente también va a acceder a datos, entonces
vos también en la memoria vas a ir a buscar datos para llevar adentro de los registros o de los registros los
llevas a la memoria. Por eso Intel creo otra zona que se la llama Segmento de datos y ahí los vas a guardar.
Apunte extraoficial de ACO Nicolás Aguirre
Pero como a veces hay que manipular datos y llevarlos de una zona de memoria hasta otra, sería muy
retardado que vos fijes la zona de trabajo para poder buscar un dato y llevarlo a un registro y luego tengo
que fijar ese segmento en un lugar alejado de la memoria para poder transportar ese dato al lugar más
lejano. Entonces previendo eso Intel coloco otro segmento más llamado segmento extra, que también sirve
para el movimiento de datos. Entonces si vos querés mover un bloque o una cadena de caracteres que se
encuentra en una zona de memoria a otra zona más alejada fijarás un segmento en la zona de origen y
después otro segmento en la zona de destino y así trasladarás bloques de un tamaño máximo de 64KB.
El último lugar corresponde a la pila donde se van almacenando los datos esenciales del funcionamiento del
micro cuando se salta a subrutinas o se salta a interrupciones. La pila como habíamos dicho es una memoria
tipo LIFO (Ultima entrar-primero en salir) el puntero que va llevando la cuenta de cuál es la última que entro
es el stack pointer y la maneja el microprocesador, el puntero baja o sube según lo que ocurre en el programa
y regresará cuando hay instrucciones de retorno. El puntero trabaja en el Stack Segment.
Arquitectura Harvard
La arquitectura de Von Neumann en la memoria principal colocaba los programas y los datos, provocando
un cuello de botella en el bus de datos. En la RAM había programas y datos, cuando había que llevar una
nueva instrucción, la misma viajaba por el bus de datos, y se posicionaba en el registro de instrucción, pero
cuando ibas a buscar un carácter o un numero para procesar (dato) también viajaba por el mismo camino,
pero el destino era distinto e iba a parar dentro de uno de los registros de propósito general del procesador.
Entonces se forma un cuello de botella porque inmediatamente después de hacer esa operación necesitas
una instrucción nueva, devuelta a venir por el mismo camino. Por tanto surgió la arquitectura Harvard que
viene de la universidad de EEUU.
Propone que se separe a la memoria en dos, y separar a los buses en dos, uno para memoria y otro para
instrucciones. Entonces se pueden estar trayendo nuevas instrucciones a la unidad de control para que las
ejecute, al mismo tiempo que datos que están en la memoria podrían estar siendo almacenado en los
registros para que después la ALU (Unidad Aritmética Lógica) haga algunas cuentas.
Apunte extraoficial de ACO Nicolás Aguirre
Así entonces la arquitectura HARVARD posee un bus de control, de instrucciones y bus de datos para las
instrucciones y bus de control, bus de datos, bus dirección para la memoria de datos.
Clasificación de instrucciones en lenguaje de máquina
Instrucciones de transferencia
Copian en el destino que es un registro o posición de memoria la información del operando fuente sin
modificar éste.
Cuando se hace un movimiento, se usa una instrucción de esa, no se modifica el estado de la bandera. Solo
se modifica cuando sea una operación sobre la ALU, una suma o resta, si moves datos no alteras banderas.
Generalmente transfieren palabras pero pueden mover fracciones de ellas o bloques enteros.
Ejemplos:
Mov: es por excelencia la instrucción que transfiere el operando fuente al destina.
Push: transfiere el operando fuente a la pila.
Pop: transfiere el último dato de la pila al operando destino.
Instrucciones aritméticas
Dentro de las instrucciones de este tipo tenemos:
ADD: suma sin acarreo. IDIV: división con signo.
ADC: suma con acarreo. INC: incrementar.
SUB: resta sin acarreo. Dec: decrementar.
SBB: resta con acarreo. NEG: cambia de signo dejando el operando en C2
MUL: multiplicación sin signo.
IMUL: multiplicación con signo.
DIV: división sin signo.
Apunte extraoficial de ACO Nicolás Aguirre
Instrucciones lógicas:
AND, NOT, OR, XOR.
Instrucciones de bifurcación
Modifican la secuencia normal de ejecución de un programa.
Actúan sobre el contador de programa (PC o IP), controlan la secuencia de ejecución de un programa.
Instrucciones de comparación:
No almacenan el resultado, solo modifican los flags. Fueron creadas para crear modificaciones en las
banderas y permitir el salto a las instrucciones de salto.
La más famosa es CMP (Compare). Compara números (resta pero no guarda el resultado, solamente
modifica los flags de estado) no guarda el resultado. Tanto SUB como CMP modifican el estado de la
bandera.
Instrucciones de bit
Te permiten prender o apagar una de las banderas por ejemplo simplemente. Tienen la función de modificar
un solo bit o leer su estado. Son típicas en la configuración de los flags. Trabajan sobre un punto, sobre un
bit, por ejemplo en un registro de estado.
Ejemplo:
TEST: comparación lógica a nivel de bits
CLI: clear flag de interrupción
STI: set flag de interrupción
CLC: clear flag de acarreo
STC: set flag de acarreo.
Apunte extraoficial de ACO Nicolás Aguirre
Instrucciones de desplazamiento
Todas las instrucciones de desplazamiento y rotaciones tienen en común que el último valor desplazado se
copia en el flag de acarreo.
SAR: desplazamiento aritmético a la derecha.
SAL: desplazamiento aritmético a la izquierda.
SHL: desplazamiento lógica a la derecha.
SHL: desplazamiento lógica a la izquierda.
ROR: rotación a la derecha.
ROL: rotación a la izquierda.
RCR: rotación a la derecha a través del acarreo.
RCL: rotación de la izquierda a través del acarreo.
Instrucciones de entrada / salida (E/S)
IN: transfiere información desde un puerto de entrada a un registro.
OUT: escribe información en un puerto de salida desde un registro.
Instrucciones de control
WAIT: hace esperar al procesador
HTL: detiene el procesador
NOP: no operation
Formato de Instrucción INTEL
Una instrucción es una orden que se le da a un procesador, la misma tiene dos partes:
Este procesador es del tipo registro memoria, por lo que no puede trabajar, con dos operandos en memoria
Esto hace que la mayoría de las instrucciones tengan un bit que indique quién es el operando fuente: el
registro o el operando en memoria.
Apunte extraoficial de ACO Nicolás Aguirre
En el primer byte tenemos el código de operación, Intel dirá cuáles son los 1’s y 0’s para que sea la
instrucción MOV por ejemplo. Después hay un bit (D) que determina quién es el operando fuente y destino,
si le pones un 0 el operación está en el registro origen, y si le pones un 1 el operando está en el registro
destino. Supongamos que elegís un registro, con D le decís si queres que ese registro sea fuente o destino,
que este a la izquierda o derecha de la coma.
El otro bit (W) determina el tamaño de los operandos, si le pones 0 es media palabra o es un byte, y si le
pones 1 es para la palabra o sea 2 bytes. El 1 es palabra o Word y si es 0 es un byte.
Después viene el modo (MOD) que especifica otro operando como registro o memoria. De acuerdo a la
combinación de bits que son cuatro te va a determinar si el otro operando se encuentra en un registro o en
la memoria. En definitiva define el modo de direccionamiento.
Luego REG es el registro fundamental que siempre tiene que existir y de acuerdo al código binario especifica
un operando como registro. Tiene una combinación binaria y dice a qué registro pertenece.
Una vez que definiste el primer registro, el otro puede ser otro registro, entonces pondrás a MOD en forma
de registro y en R/M escribirás el nombre del otro registro.
En los otros dos bytes pertenecen al desplazamiento en el caso que en vez de elegir registro elijas memoria,
entonces vas a tener que escribir los números en uno o en los dos bytes para poder especificar cuál es la
dirección de la memoria donde querés ir a buscar el dato.
Apunte extraoficial de ACO Nicolás Aguirre
Ejemplo:
La instrucción MOV BL, AL “mueve el byte contenido en el registro fuente AL al registro destino BL”.
¿Cuál será el código de máquina de esta instrucción?
Primero hay que preguntarle a Intel cual es el código de operación de la instrucción MOV, que son los
primeros bits, el código de operación es: 100010.
Rellenamos:
El bit D indica si el registro que señala el campo REG del
segundo byte es el operando fuente o el destino. En este
caso se codificara el registro BL en el campo REG del
segundo byte, por tanto, D será igual a 1. Tengo que poner
a BL (011 su número en Intel) como destino.
Rellenamos lo que dijimos:
Memorias
Memorias RAM
Tenemos dos formas básicas de memorias semiconductoras que son de acceso aleatorio, son las RAM
dinámicas (DRAM) y las RAM estáticas (SRAM). La SRAM son más rápidas, más caras y de menor
capacidad que las DRAM, y son usadas para la memoria caché. Las DRAM son usadas para la memoria
principal.
Las RAM son volátiles porque en ausencia de energía eléctrica se pierde su contenido, son de acceso
aleatorio porque el tiempo que tarda en acceder desde el primer byte al último o uno del medio es siempre
el mismo.
Tenemos una clasificación
de dos categorías, las
estáticas y dinámicas. Las
estáticas son el punto de
memoria, se construye con
6 transistores, esto hace
que este punto de memoria
sea costoso en términos de
área de silicio, porque
cuando pongamos muchos
bytes, o sea, muchos de
estos puntos de memoria
uno al lado del otro van a
ocupar mucho espacio. En
cambio la RAM dinámica se
la forma con un solo
transistor y un capacitor.
La SRAM se coloca en la memoria cache, que está adentro del procesador, es costosa, ocupa mucho
espacio por tanto vamos a hacer chips menos densos, con menor capacidad de memoria pero es la más
rápida de todas y es ahí donde se van e ejecutar las instrucciones y los datos más utilizados en el momento
por el procesador.
El espacio que ocupa el punto de memoria, o sea el lugar donde se va a guardar un uno o un cero en la
DRAM es extremadamente pequeño al lado de la estática, pero su desventaja es que en este capacitor el 1
y el 0 se almacenan en función de la carga que está almacenada adentro del capacitor. Si el capacitor tiene
cargas, diremos que este punto tiene un 1 lógico y si el capacitor lo han dejado descargado se dice que hay
un 0 lógico. El inconveniente es que el capacitor va a perder su carga, hay pérdidas de carga, el nivel va
bajando y entonces corremos riesgo. La carga se va perdiendo aun con fuente de energía, lo que tienen que
hacer es aplicar un pulso de refresco para recuperar cada tanto capacitores que están cargados y volverlos
a recargar para evitar que esto pierda. El capacitor es como un vaso de agua que está pinchado, vos lo
llenaste y decís “ahí hay uno”, pero pasa el tiempo se te empieza a vaciar. Entonces tiene que venir el pulso
de refresco para reponer las cargas que están faltando para que no se pierda ese uno, pero esa acción hace
que se pierda tiempo, lo que la hace más lenta frente a la estática que no tiene dicho problema, pero es más
barata. Esta es pequeña, por tanto podemos hacer chips con cantidad masiva de memoria. Se usa en la
memoria principal.
Memoria Caché
La memoria cache es una solución de compromiso entre la memoria lenta que esta allá en la memoria
principal de la maquina hecha de RAM dinámica y una memoria rápida como lo es la RAM estática, esta
puesta en el medio del camino. Está destinada a proporcionar una velocidad de memoria que se acerque a
la de las memorias más rápidas disponibles y al mismo tiempo proporcionar un tamaño de memoria grande
al precio de memorias menos costosas.
Apunte extraoficial de ACO Nicolás Aguirre
La memoria cache le va a hacer creer a la CPU que todo lo que tiene es memoria RAM estática, y en realidad
no es así, sino que está entre medio, siempre le va proveyendo instrucciones y datos a altísima velocidad,
pero ella la memoria cache los va obteniendo de la memoria que es más lenta y barata. No se va a lograr al
final que todo luzca como si fuera memoria RAM estática pero va a tener un compromiso bastante bueno y
a un precio más bajo que tener absolutamente todo hecho de RAM estática. Es como un compromiso entre
costo y velocidad, para eso se inventó la cache, su nombre viene del francés que significa oculto y le decimos
así porque hasta que no la vemos adentro del chip, nadie la conoce del público en general.
La memoria cache le transfiere a la CPU palabras, por ejemplo, hay dos niveles de caché, una de
instrucciones y otra de datos, van las instrucciones que se están usando una a una, van pasando a la CPU
y también van pasando de la caché de datos, los datos que son más usados por la ALU en este momento.
Son palabras las que van desde la caché a la CPU. Sin embargo, de la memoria principal se transfiere de a
bloques, es decir, si vos estabas ejecutando un programa y dentro de poco vas a seguir con ese programa
porque ya ejecutaste todas estas instrucciones, vas a la memoria principal y traes otro bloque y lo almacenas
adentro de la caché.
Niveles de la Cache
Apunte extraoficial de ACO Nicolás Aguirre
Tienen cache de instrucciones y de datos de nivel 1, es la parte más rápido del microprocesador y después
tenemos un cache de nivel 2, es un poquito más lenta a pesar de ser más grande. Si la unidad de ejecución
está buscando una instrucción en la cache L1, le pasa a la unidad de ejecución y ejecuta. Si no la encuentra
busca en el nivel 2 de cache el bloque y trae un bloquecito con las próximas instrucciones de ese programa.
Si no llega a estar en el nivel 2, se buscará en el nivel 3 que es compartido por todos los núcleo y si no está
acá recurre a la memoria principal, sale afuera del procesador y va hasta a la memoria principal de RAM
dinámica, se busca desde ahí el bloque del programa que se está ejecutando y se lo trae de nuevo adentro
del procesador y esos bloques se copian en la L2, y finalmente en la L1 y ahí continua la ejecución.
Jerarquía de memorias de un computador
En el tope de la pirámide están las memorias más rápidas que puede haber adentro de un procesador y la
caras que puede tener y después bajando más a la base vamos a encontrar las de mayor capacidad, de
almacenamiento masivo y de costo más barato por bit.
Capacidad aumenta hacia abajo y para arriba vamos a tener más velocidad y costo.
En el primer lugar, en el top de la pirámide se encuentran los registros del procesador, es realmente la
memoria más rápida, que tiene más al interior, al alcance de la ALU y de la unidad de control, entonces esos
registros del procesador serian la sucesión de bit uno al lado de otro y que actualmente esos registros tienen
un tamaño de 64 bits, esos son rápidos. Los procesadores de los teléfonos tienen otra tecnología distinta,
son procesadores del tipo risc y los diseñadores se basaron en poner cantidad terrible de registros ahí
adentro del procesador, eso los vuelve muy rápido en el manejo de datos internos.
En el segundo lugar viene la memoria cache, con sus niveles L1, L2, L3. Le siguen en velocidad y encosto,
son un poco más lenta que los registro, pero son rápidas de todas formas.
En el tercer lugar viene la memoria RAM dinámica, son las memorias de la memoria principal del procesador.
Es la más grande dentro de la computadora.
Apunte extraoficial de ACO Nicolás Aguirre
Después viene el disco duro donde ahí tenemos un almacenamiento más masivo, el costo por bit es más
barato, se guardan gran cantidad.
En la base tenemos algunos sistemas de almacenamiento de copias de seguridad, como pueden haber sido
y todavía se usan las cintas magnéticas, algún disco duro extraíble, almacenamientos en una red o en la
nube.
Memoria principal
SDRAM (Synchronous Dynamic random
Access memory)
También pueden estar especificadas como
DIMM dual in-line memory module y eso
significa que es un módulo de memoria con
contactos duales, al contrario de los SIMM en
que cada contacto está unido a su opuesto.
Todas esas chapas doradas establecen una
conexión con alguna señal que se quiere llevar
desde la memoria hacia la placa madre o
procesador. En la foto se ven la línea de
chapas y por debajo si la agarramos y damos
vuelta a la memoria hay otra línea de chapas.
En las primeras memorias cada chapita
superior e inferior que estaban alineadas eran
la misma cosa. Cada señal que aparecían
arriba y abajo se trataban de la misma señal
porque estaban unidas. En cambio cuando apareció la DIMM pusieron en las chapas superiores un tipo de
señal y en la de abajo otras, por eso Dual in line memory, porque eran doble en línea memoria, y este
concepto están en todas en la actualidad.
Apunte extraoficial de ACO Nicolás Aguirre
La memoria que estudiamos recién eran del tipo SDR y después aparecieron las DDR. LA diferencia entre
S y D es que una quiere decir Simple y la otra Doble. En la simple cada vez que el pulso de reloj cae un dato
se transfiere desde la memoria hasta el registro del procesador o viceversa, del procesador a la memoria.
Cada vez que otro pulso de memoria cae, acá el dato 1 se transfiere, avanza un tercer pulso y otro dato 2
se transfiere.
En cambio las DDR cuando el pulso de reloj se levanta el dato 0 es transferido, cuando el pulso cae el dato
1 se transfiere. Hace un doble acceso a datos en el tiempo que la otra lo hacía una sola vez, obviamente
eso duplica la velocidad. Es de Doble Data Rate. Hay transferencia al doble de velocidad que las anteriores.
Con el tiempo surgen nuevas generaciones de DDR, como la DDR2, la frecuencia es la velocidad con la que
se hacen las transferencias, multiplicas la velocidad de la memoria, por la cantidad de bits que vas a transferir
y si luego lo dividís por 8 que son los bytes, te podes dar una idea de a qué velocidad se transferirían los
datos entre la memoria y el procesador.
Apunte extraoficial de ACO Nicolás Aguirre
Son más rápido, la mejora es que tiene mayor velocidad, siempre con respecto a la anterior, reduce el
consumo de energía que es porque al empezar a trabajar más rápido los chips toman mucha temperatura,
por eso era indispensable ponerle disipador de calor. Si vos a la trasferencia de datos lo multiplicas por 64
bits y lo dividís por 8 te da una máxima capacidad de transferencia de 8,5 a 18 GB/s.
Apunte extraoficial de ACO Nicolás Aguirre
GDDR5
Son usadas para las GPU y consolas de videojuegos, tienen tamaños de buses de 192-256-385, la
capacidad máxima de transferencia es de 224 GB/s. Esta ya es obsoleta.
GDDR6
Es de Octo Data Rate, es decir, trabaja a 8x el clock, tiene un bus de 352 bits.
Si una placa de video con un clock de 1750 MHz pone a la memoria GDDR6 a trabajar a 1750 multiplicado
por 8 que te da un equivalente a 14000 MHz. Está entregando un bandwitch de 616GB/s. Este dato (o sea
la capacidad máxima de trasferencia) se obtenía multiplicando la frecuencia, por el ancho del bus dividido
por 8.
Disco duro
Es la unidad de almacenamiento masivo para nosotros donde la información no se pierde con ausencia de
la energía eléctrica. Se encuentra el sistema operativo y todos los programas que vamos a utilizar. Utiliza
un sistema de grabación magnética para guardar datos digitales.
De la parte superior vas a
notar que hay un plato,
que es como un espejo, si
vos lo abrís y ves te podes
reflejar, y es en esta
superficie donde se
guarda la información.
También se puede
observar un brazo que
está estacionado en este
dispositivo porque está
apagado, está en modo
parking para que el disco
se pueda trasladar de un
lugar a otro sin que se
dañen los cabezas
lectoras que se
encuentran en ese lugar,
Tenemos dos ejes (uno en
el plato y otro en el brazo) ambos giran a velocidades elevadas pero estable, una vez que logra la velocidad
escucharemos como algún soplido que está representando que el plato está girando a una velocidad muy
estable, controlada por un motor que está del lado de abajo. El brazo se mueve por el actuador (la cosa gris)
y cuando comienza a funcionar sale del parking y las cabezas se ponen arriba del disco duro. No hay un
solo plato, pueden haber varios (ya voy a adjuntar una foto con las partes para que se entiendan) el brazo
se mueve por el actuador y hace que las cabezas se paseen por arriba del disco, hacen un movimiento de
pivot sobre el eje.
Apunte extraoficial de ACO Nicolás Aguirre
Estructura Interna
Hay varios platos, también varios cabezales (uno por cada plato) un brazo por un cabezal por la cara superior
y después hay otro brazo por la cara de abajo, accediendo al mismo punto. Para el segundo plato habrá otro
par más de cabezales de la misma forma, los cabezales se mueven controlados por el actuador, en la puntita
están los cabezales que son chips electrónicos que leen o escriben datos en la superficie del disco. Hay un
motor que hace girar a los platos. Hay un chasis que contiene todo el sistema, y una tapa de aluminio que
tapa todo porque una partícula de polvo que caiga puede ser catastrófico porque como el disco gira a altas
velocidades y trabarse esa partícula contra un cabezal puede rayar la superficie del disco y perder la
información.
Apunte extraoficial de ACO Nicolás Aguirre
Funcionamiento de la cabeza: van a grabar di polos magnéticos sobre las superficies, las van a orientar de
modo tal que con una polaridad de esos dipolos (norte, sur) represente un 1 o un 0 de acuerdo a lo que la
bobina haya grabado sobre la superficie. Todo eso es por las leyes físicas del magnetismo, se orientan los
dipolos con el campo magnético. Cuando ese campo magnético pasa por debajo de la cabeza a gran
velocidad crea una tensión proporcional a los 1 y 0 entonces las cabezas van a poder leer y recuperar la
información que está sobre la superficie.
Mientras los discos más rápidos giran más información manejan pero elevan mucho más temperatura y
hacen más ruido.
Si das vuelta el disco duro vas a encontrar la controladora electrónica, con conectores para que se conecten
hacia la placa madre por donde van a ir los datos, también maneja el motor y controla su velocidad exacta.
Tiene un microprocesador que se ponía de acuerdo para hacer acceso directo memoria el disco duro con la
memoria RAM, también tiene una memoria cache, un buffer para poner en esa memoria los datos más
utilizados en disco, de forma que de golpe el usuario le vuelve a pedir algo y en vez de ir a buscar al plato
se lo entrega en un pelín, ahí nomás porque ya tenía esta memoria llena de datos de los más usados
haciendo astutos algoritmos. Lo importante de un disco duro es la velocidad sostenida, no la de la caché,
porque ponele queres buscar un dato que la caché no tiene y ahí ya no te sirve para nada.
Funcionamiento de un disco duro
El actuador de cabezales desplaza los cabezales de Lectura/ escritura hasta el lugar donde empiezan los
datos. Del modo parking se va hasta algunas de las posiciones del plato que queres acceder. Luego se
espera a que el primer dato que gira con los platos llegue al lugar donde están los cabezales, los que se
mueven son los datos que están parados arriba del disco y los cabezales están quietos, solo se mueven de
un lado al otro eligiendo el lugar del disco donde están los datos. Una vez que se posiciono el cabezal con
el brazo actuador en un lugar fijo y se queda quieto, tiene que esperar que el dato pase por debajo del
cabezal. Por último se lee o escribe el dato con el cabezal correspondiente.
Dentro de un disco duro hay varios platos, que giran todos al mismo tiempo. Los cabezales nunca tocan el
disco, flotan en una capa de aire que se forman entre los platos y los cabezales, se conoce como el efecto
Bernoulli, de esa forma no se desgasta ni el cabezal ni los platos. Si la cabeza toca los platos eso, o sea
que “aterriza” sobre el plato, eso se raya y entonces una línea de información se pierde con lo cual vos podes
perder gran volúmenes de datos, porque si es un archivo de un programa, con lo que le dañe un poco de
Apunte extraoficial de ACO Nicolás Aguirre
bytes, ya dañaste todo un archivo. Un aterrizaje puede ocurrir en un golpe que sea sometido el disco mientras
trabaja, es más frecuente que pase en una Notebook.
Los platos o sus caras se dividen en anillos concéntricos donde se guarda la información, se deja un espacio
sin usar que se llama “banda vacía interpista”, a los anillos se los conoce como pistas o track, luego se deja
la banda vacía y se vuelve a generar otra pista. El tamaño de la pista es del mismo tamaño del cabezal,
entonces el cabezal se sitúa justo en el medio de uno de estos anillos y va a esperar que los datos que se
encuentran en los sectores pasen por debajo de la cabeza para ser leídos.
Dicho devuelta: los platos tienen un conjunto de anillos concéntricos llamadas pistas, cada pista es del
mismo ancho que la cabeza, pueden haber miles de pistas por cada cara del platos, las pistas adyacentes
están separadas por bandas vacías, los datos son trasferidos hacia y desde el disco en sectores. La unidad
mínima que vos podes transferir es un sector y hay cientos de sectores por cada una de las pistas, cada uno
de esos sectores tienen una capacidad útil de 512 bytes, este es un valor casi universal, con excepciones a
la regla por supuesto. Esos 512 son útiles pero por cada segmento en realidad gasta 600 bytes ya que 88
bytes se dedican al formateo. Cuando el fabricante le da un formato se van marcando los lugares donde
empieza el sector, para lo cual se gastan esos 88 bytes, entonces 512 es la cantidad limpia que te queda
después de ese descuento. Si ahí no tuvieras información valiosa no sabrías donde buscar el archivo que
queres buscar, por eso se gastan los 88 necesariamente, que están en el inicio de cada sector.
Los sectores se separan entre ellos por otra banda vacía llamada intersector para que la cabeza puede
distinguir que termina un sector y comienzan los 88 bytes de formateo que le está indicando que viene el
siguiente y así sucesivamente.
Apunte extraoficial de ACO Nicolás Aguirre
Será más rápido si hay más velocidad de rotación o es más chico el archivo.
Esa podría ser la velocidad que te importa, no la del caché. El tiempo de acceso total Ta se expresa como
el tiempo de búsqueda + el retardo rotacional + tiempo de transferencia.
Apunte extraoficial de ACO Nicolás Aguirre
El ide lo que tenía de bueno era que se podía poner dos unidas en cada bahía, en total cuatro dispositivos
podían ser manejados, aunque ya no se usa.
La información viaja a través de los pines, donde en cada uno viaja un chorro de bits en forma serial,
seguramente en forma de SISO que van impulsando los datos uno a continuación de otro, ingresando el
conector en la placa madre, mueven datos entre 150 a 600 Mb /Seg.
Apunte extraoficial de ACO Nicolás Aguirre
En el registro de instrucción
se alojará la instrucción.
Entonces como vos tenés un
set de instrucciones vas a
poner un decodificador,
porque para una entrada
dada prende una y solo una
de las salidas, entonces la
unidad de control se dará
cuenta fácil cual es la
instrucción que se quiere
resolver. Supongamos que
es la instrucción numero 1, el
reloj tiene un generador de
temporización que cada vez
que viene un pulso va
prendiendo uno a uno cada
una de las Ts que tiene como
salida, cuando el reloj haya
dado n pulsos, habrá terminado de completar la instrucción, entonces una instrucción cualquiera no se hace
en un solo pulso, sino en varios porque hay que abrir y cerrar muchas llaves para lograr lo que es la
instrucción. Si es una suma por ejemplo se va a ver alterada por los indicadores, por eso también son
entradas a este circuito combinacional.
La salida (C5) se implementa primero definiendo dos señales de control nuevas llamadas P y Q que tendrán
la siguiente interpretación.
Esto resume en que tiempo
del reloj se encuentra,
porque toda instrucción
consta de 4 etapas.
Primero está el ciclo de
captación, donde tengo que
ir y buscar la instrucción
para ponerla adentro del
registro.
Luego sigue el ciclo indirecto que es ir a la memoria (no siempre se hace, por ejemplo, en las instrucciones
con modo de direccionamiento implícito).
Después viene el ciclo de ejecución donde la instrucción hace lo que se supone debe hacer
Por último, se puede prestar el ciclo de interrupción, en caso de aparecer alguna de las interrupciones
enmascarables o no ya vistas anteriormente.
La salida C5 dice que si estas en el ciclo de captación (P y Q negados) y cuando vaya a ser el tiempo 2 (ya
que el tiempo 1 es cargar el programa para seleccionar donde está la instrucción) hay que cerrar la llave 5
porque seguro el tipo va a traer la instrucción. Para el resto de los términos se aplica lo mismo, se tiene que
pensar en qué distintos momentos se abre y se cierra la llave.
Esto es muy retardado, pero cuando está hecha esto vuela porque no hay nada más rápido que un circuito
combinacional tomando valores y dando la respuesta a la salida, por eso fue elegido, no por su grado de
dificultad, ya que hay que hacer tantas situaciones como señales de control existan.
Los microprocesadores que usan este tipo de aplicación de la unidad de control se los conoce como RISC
(Reduced Instruction Set Computer) son computadoras de un set de instrucciones reducidas. Usan pocas y
simples instrucciones.
Apunte extraoficial de ACO Nicolás Aguirre
Los micros de INTEL son todo lo contrario, ponen un set de instrucciones gigantesco y esperan que los
compiladores sean inteligentes y después usan adentro las mejores de las instrucciones. Por eso los micros
RISC toman la delantera porque agarran un set de instrucciones sencillo ya definido y llenan con muchos
registros internos, y como ya está todo definido las instrucciones que entran se ejecutan rapidísimo y los
compiladores no tienen que pensar mucho.
Implementación microprogramada
Es una alternativa a la unidad de control cableada.
Una microinstrucción es una instrucción muy elemental que especifica microperaciones.
Un conjunto de microinstrucciones que permiten la ejecución de una sola instrucción de máquina se llama
microcódigo, vos agarras una instrucción que habías estudiado y que vos pensaste que era lo más indivisible
que había, estabas equivocado, ya que esta a su vez se divide en muchas microperaciones, y entonces un
conjunto de microinstrucciones hacen un programado llamado microcodigo y este microcodigo es lo que
conocemos como la instrucción de máquina, por ejemplo, MOV. Una microinstrucción por ejemplo es cerrar
una llave. De muchas de estas microinstrucciones se hace una instrucción de máquina.
Como en la unidad de control cableada las señales de control generadas por una microinstrucción se usan
para producir transferencias entre registro y operaciones en la ALU.
Memoria ROM
La ROM tiene un decodificador, con
unas líneas de direccionamiento
para poder seleccionar cúal es la
palabra que se quiere leer. En la foto
se ve una palabra de 4bits.
Utiliza una memoria llamada
memoria de control, donde por
ejemplo se pone 0 0 0 en las líneas
de entrada y se selecciona la
primera palabra y si en ese
momento para esa microinstrucción
tenía que prender el C3 se clava un
1 en la memoria y le va a poner un 0
a todos los otros, entonces no se
quiebra la cabeza como al armar un
circuito combinacional. De esa
forma irá recorriendo una a una las
líneas.
Esto fue propuesto por Wilkes en el año 1951, alegando que si pudiéramos tener una memoria de control
donde un montón de bits pudieran ser manejados a un tiempo y estos fueran manejados por unos registros
que le van haciendo secuencialmente barrera una a una las líneas tendríamos otra forma de implementar
una unidad de control distinta a las cableadas.
Apunte extraoficial de ACO Nicolás Aguirre
Ahora veamos cómo serían los ciclos de instrucción con esta forma de implementación.
Con este sistema le podés poner un set de
instrucciones gigantescos, se los conoce como
arquitectura CISC (Complex Instruction Set
Computer) Computadoras de set de
instrucciones complejos. Esta es una máquina
secuencial.
Apunte extraoficial de ACO Nicolás Aguirre
Periféricos
Monitores
El monitor es la pantalla donde se ve la información suministrada por la computadora mediante un interfaz,
muestra los resultados de un proceso, una aplicación que estemos ejecutando, pero antes los monitores que
existían eran de tubos de rayos catódicos (CRT) y anteriormente eran del tipo monocromático. Hoy en día
la tecnología empleada es la de monitores por diodos de emisiones de luz (LED).
La información se representa mediante pixeles, un pixel es la unidad mínima de información para la luz,
representada en un monitor. Cada pixel se enciende con un determinado color para formar la imagen,
cuando mayor cantidad de pixeles puedan ser representados en una pantalla mayor resolución se tendrá.
Monitor CRT
Están basados en un tubo de rayos catódicos, funciona por medio de un cañón que dispara constantemente
hacia la pantalla rayos de electrones. La pantalla está cubierta de fósforo, que se ilumina al entrar en contacto
con los electrones. Para poder prender estos puntos de fósforos hace un barrido constante de electrones,
entonces por eso cuando estábamos al frente de estaba pantalla éramos expuestos a la radiación de estos
electrones.
No veíamos imágenes, sino solo texto en las primeras versiones de estos tipos de monitores. De esta manera
iluminando cualquier punto con diferentes intensidades de puede obtener un color (modelos posteriores de
este monitor).
Monitor LCD
Este tipo de tecnología se la conoce como cristal líquido, el funcionamiento es una pantalla de cristal líquido
la cual tiene una estructuración delgada y plana ya que no necesitamos electrones, tampoco hay radiación.
Cuenta con un soporte de color como gama de colores y con un retardo de tiempo en mostrar una imagen
en lo que dura un pixel para cambiar de color.
Monitor LED
Es el mismo monitor que el LCD, funciona con cristal líquido, cuando recibe electricidad se ilumina un pixel.
Un led por sí solo no ilumina demasiado, pero muchos de ellos pueden dar una luz pura y eficaz. Están
formados por un conjunto de LED que al recibir un impulso eléctrico se iluminan. Tienen muchas ventajas
ya que no se funden como ocurren con los pixeles, permiten fabricar pantallas extremadamente planas y de
mucha calidad.
Apunte extraoficial de ACO Nicolás Aguirre
Impresoras
Es un dispositivo periférico de la computadora que permite producir textos o gráficos de documentos
almacenados en un formato electrónico imprimiéndolos en medios físicos, generalmente papel, utilizando
cartuchos de tinta o tecnología láser.
Hay que tener en cuenta la velocidad de impresión que se mide en CSP (Caracteres por segundo)
cuando es una matriz de punto y a chorro de tintas lentas y cuando es una impresora láser y a chorro de
tintas rápidas se tiene en cuenta la PPM (Paginas por minutos).
La resolución de una impresora es la cantidad de puntos que puede imprimir en una pulgada PPP o
DPI
Tipos de impresoras
Impresora de matriz de puntos (o matricial)
Tiene un cabezal, que tiene agujas incorporadas y son impulsadas hacia una cinta, empujando la cinta que
impacta contra el papel dejando un punto impreso retornando a su posición de reposo.
Tiene dos motores, uno conectado a la correa que se encarga de desplazar el cabezal en forma horizontal
(mover el papel en forma horizontal para ver si está imprimiendo) y otro que hace un movimiento vertical.
La precisión de este mecanismo y el tamaño del punto generado por el impacto de la cinta impulsada por la
aguja definen la resolución horizontal máxima de la impresora.
Bueno si le ponen onda
se entiende lo que dice la
foto.
Estas impresoras son
lentas y con una
resolución muy baja.
Impresora térmica
Solo posibilita la impresión en monocromo color negro, y únicamente los modelos más recientes mediante
un papel especial adicionan el rojo y el azul. Los costos son muy
bajos ya que no consume más que el propio papel, no hay tinta.
La velocidad de impresión puede tener en este caso en mm/s
refiriéndose a los milímetros de rollo de papel que salen de la
impresora. El cabezal es térmico, la aplicación es por calor, es
la que suelen estar en los colectivos y los cajeros automáticos.
La durabilidad de estas impresoras es relativamente baja puesto
que el desgaste que tiene el papel, en particular en temperaturas
altas, hace que se pierda el texto o imagen escrito en el mismo.
Apunte extraoficial de ACO Nicolás Aguirre
Impresora láser
Hace una impresión fotomecánico similar a la fotocopiadora, la resolución es mucho más alta que las
anteriores. El método de impresión que utilizan las impresoras láser es el fotomecánico y es similar al que
se utiliza en las fotocopiadoras, brinda una excelente resolución, nitidez y altas velocidades de impresión.
La impresora recibe la información a imprimir y la guarda en su propia memoria. A continuación, un cilindro
de cristal (cilindro de impresión) con un recubrimiento especial, generalmente silicio, se carga con
electricidad mediante un anillo de alambre del grosor de un cabello (anillo coronario o corona).
La luz de un rayo láser se desvía mediante un sistema de espejos de altísima precisión para que el rayo se
proyecte en los puntos del cilindro de impresión que se desean descargar, estos puntos del cilindro
descargados serán los que formarán la imagen en el papel.
Finalmente, el tóner (un polvo extra fino de óxido de metal y pequeñísimas partículas plásticas) se carga
eléctricamente de manera que solamente se adhiera a la superficie del cilindro que recibió la proyección del
láser. El cilindro va girando y así se va formando en este la imagen que debe trasladarse al papel.
El papel se carga con electricidad con signo opuesto a la usada para cargar el tóner. Mientras el cilindro
gira, las partículas del tóner que se habían posado en este, son atraídas por las cargas opuestas al papel y
se depositan en este abandonando el cilindro. Para fijar el tóner al papel, se hace pasar al papel por un
rodillo caliente que funde el tóner contra el papel permanentemente.
El fusor de una impresora láser se encarga de fijar el polvo de tóner en el papel mediante la aplicación de
calor a través de dos rodillos. Compuestos por rodillo cerámico de calor y rodillo de presión.