Monografias.com > Computación > Hardware
Descargar Imprimir Comentar Ver trabajos relacionados

Microprocesadores: lógica y diseño




Enviado por xaviersierra_



    1. Registros
    2. Unidad aritmético
      lógica.
    3. Memoria de
      programa.
    4. Diseño de un
      microprocesador.
    5. Conclusiones

    1. Registros

    1. Introducción.

    Esencialmente, un microprocesador
    es un circuito de alta escala de
    integración (LSI), compuesto de muchos
    circuitos mas
    simples como son los Fip-flops, contadores, registros,
    decodificadores, comparadores, etc; todos ellos en una misma
    pastilla de silicio, de modo que el microprocesador
    puede ser considerado un dispositivo lógico de
    propósito general o universal. Todos estos componentes que
    llevan a cabo físicamente la lógica
    y operación del microprocesador se denominan el hardware del micro.
    Además existe una lista de instrucciones que puede
    realizar o acciones que
    puede llevar a cabo el micro. Éstas constituyen el lenguaje
    del micro o software.

    Pongamos de ejemplo un micro que puede realizar cuatro
    tareas lógicas: AND, OR, NAND, XOR. Estas cuatro acciones
    serian el lenguaje del
    micro y a cada una le corresponderá una combinación
    binaria de dos dígitos.

    Acción

    Código

    AND

    00

    OR

    01

    NAND

    10

    XOR

    11

    Tabla 1. Operaciones y
    su código

    El hardware quedaría de
    la siguiente manera:

    Fig 1. Ejemplo de procesador de
    operaciones
    lógicas.

    En este ejemplo se puede ver claramente lo que es un
    microprocesador. Las señales de control son las
    que ejecutan cada una de las cuatro instrucciones que el micro
    puede realizar. Los datos se
    presentan en las líneas A y B.

    Sin embargo, en la actualidad se requiere que un
    sistema cuente
    con una unidad de control, unidad
    aritmético / lógica y algunos registros para que se
    le pueda denominar microprocesador. La forma en que están
    conectados estas unidades se denomina la
    organización de un microprocesador.

    Los sistemas
    digitales simples pueden ser diseñados por medio de
    tablas de estado. De
    esta manera se llega a circuitos
    lógicos secuenciales de grado no muy complejo. Sin
    embargo, a la hora de diseñar circuitos lógicos
    complejos las tablas de estado se
    tornan increíblemente complicadas, extensas y poco
    prácticas. Una manera de poder llegar a
    este tipo de circuitos es describir el sistema digital
    desde el punto de vista operacional. De esta manera se encuentran
    cuatro partes fundamentales en los sistemas
    digitales complejos:

    1. Registros
    2. Información en código binario
    3. Operaciones realizadas con la información en los registros
    4. Funciones de control que inician las
      operaciones.

    Esta manera de ver al sistema (operacionalmente) se
    conoce también como lógica de transferencia ente
    registros y fue sumamente útil en el diseño de
    sistemas lógicos complejos como los sistemas de
    procesamiento o procesadores. En
    la lógica de transferencia entre registros la unidad
    registro abarca una gran gama de circuitos lógicos
    como son los contadores, registros de desplazamiento, unidades de
    la memoria,
    etc. Una unidad de memoria se
    considera como una colección de registros de almacenamiento
    donde se guarda la información. De hecho, un flip-flop se
    considera como un registro de un
    bit. La información binaria puede ser código,
    números binarios, decimales codificados en binario, etc.
    Dicha información es guardada en los registros antes
    mencionados. Las operaciones realizadas con la información
    en los registros se conocen como microoperaciones. Una
    microoperación es una operación elemental que se
    realiza en paralelo durante un periodo del pulso de reloj. Por
    ejemplo, sumar, restar, desplazar, borrar, cargar, etc. Las
    funciones de control, son las condiciones que deben de
    prevalecer para iniciar una secuencia de
    operación.

    1. Es necesario a este punto normalizar el
      lenguaje de transferencia que se utilizará de
      aquí en adelante. En nuestro caso utilizaremos los
      siguientes símbolos:

      1.- Letras mayúsculas: Los registros
      son nombrados con letras mayúsculas como puede
      observarse en la figura 1.

      Fig 2. Símbolo de un
      registro
      de 4 bits

      En la figura anterior se muestra
      gráficamente cómo se representa un registro
      de 4 bits. Los números colocados en las esquinas
      superiores del rectángulo son la numeración
      de los bits que tiene el registro. La letra A es el nombre
      del registro.

      2.- Subíndices: En ocasiones es
      necesario conocer la información de cada uno de los
      bits de manera singular, para estos casos se puede dividir
      el registro en cada una de sus celdas numerándolas
      con subíndices.

      Fig 3. Registro A con cada uno de
      sus bits.

      Este tipo de registros se les conoce como
      direccionables bit a bit porque se puede tener control de
      cada uno de sus bits de forma independiente aunque juntos
      formen un solo registro.

      3.- Flechas: Teniendo un registro A y otro
      B podemos denotar la transferencia de la información
      del registro A al B de la siguiente manera:

      B ← A

      4.- Dos puntos: Para que esta transferencia
      pueda llevarse a cabo es claro que se necesita que las
      salidas del registro A deben estar físicamente
      conectadas con las entradas del registro B. Y no es eso lo
      único que se necesita; cada una de las operaciones
      realizadas entre los registros necesitan, como ya hemos
      mencionado antes, de una función de control, por ejemplo
      podría ser:

      X T2: B ←
      A

      Lo que nos indica la expresión anterior es
      que se necesita que la expresión X T2 sea
      verdadera para que pueda darse la transferencia. Esto es, X
      debe tener un valor
      "uno" lógico y también T2.
      ¿Cómo puede implementarse esto
      electrónicamente?

      Fig 4. Representación
      gráfica de la función XT2: B ←
      A.

      Como puede observarse en la figura 3 existe una
      parte de control para determinar en que momento se lleva a
      cabo la transferencia de información. Si solo X
      tiene un valor
      "uno", el circuito de control no manda señal de
      carga al registro B. Es necesario que ambos, X y
      T2 tengan valores
      de "uno". Cada proposición escrita en lenguaje
      de transferencia de registros implica una construcción con materiales electrónicos para
      configurar dicha transferencia.

      5.- Coma: Es posible realizar dos o mas
      operaciones de transferencia entre registros bajo las
      mismas condiciones de una función de control. Esto
      se expresa de la siguiente manera:

      X T2: B ← A, R
      ← A

      Cada microoperación es separada de la
      anterior por medio de una coma. Gráficamente esto se
      representa como muestra
      la figura 4.

      Fig 5. Representación
      gráfica de la función XT2: B
      ← A, R ← A

      Es sencillo, la misma señal de carga sirve
      para activar el registro B y el registro R.
      Lógicamente es necesario que las salidas del
      registro A estén físicamente conectadas con
      las entradas del registro B y R.

      Estas líneas de conexión (alambre
      físicamente) para lograr la transferencia entre los
      registros conforman el bus del
      microprocesador. Para transferencias en paralelo el numero
      de alambres del bus
      será igual al numero de bits de cada registro.
      Existen varias formas de implementar un bus, sin embargo,
      la mas simple en cuanto a su comprensión es utilizar
      un bus multiplexado. Si necesitamos transferir
      información entre tres registro A, B y C como
      muestra la figura 6 necesitaremos multiplexar en ocasiones
      al bus.

      fig 6. Interconexión entre
      tres registros.

      Como se puede observar en la figura 6, el registro
      A puede recibir información de los registro B y C.
      Esto puede crear un conflicto en las líneas del bus. Si
      el registro B tiene en sus salidas 0000, suponiendo que es
      de 4 bits, y el registro C tiene 1111, tendríamos un
      corto circuito en las líneas del bus, ya que el
      registro A solo tiene cuatro bits de entrada, estos cuatro
      bits estarán conectados tanto a la salida del
      registro B como a las salidas del registro C. Para
      solucionar este conflicto se usarán multiplexores .

      Fig 7. Uso de multiplexores en el bus.

      De esta manera, el multiplexor se encargará
      de seleccionar al registro que debe mandar
      información una vez por tiempo
      evitando conflictos en el bus. Claro está que
      esto no lo realiza por si solo el multiplexor pues no
      cuenta con la suficiente lógica interna para
      poder
      desarrollar estas funciones.
      Se requiere de circuitería extra para poder
      manipularlo a nuestras necesidades.

    2. Lenguaje de transferencia.
    3. Microoperaciones básicas.

    Carga en paralelo.

    Quizás la microoperación mas sencilla y
    primordial es la de carga en paralelo ya que es la manera en que
    se transfieren datos de un
    registro a otro. Esta operación se representa por medio de
    las flechas como ya hemos visto anteriormente. Para explicar
    mejor lo que sucede cuando se realiza una operación de
    carga en paralelo supongamos que tenemos dos registros
    independiente como el A y el B. Cada uno tiene información
    como se muestra a continuación:

    Fig 8. Dos registros con contenido
    diferente

    Cada uno de los registros tiene información
    binaria diferente dentro de sí. Cuado nosotros realizamos
    una carga en paralelo B ← A la información que tenga
    el registro A se transfiere al registro B pero de una manera
    ordenada bit a bit. Esto es, el bit mas a la derecha del registro
    A pasará al bit mas a la derecha del registro B, el bit
    mas a la izquierda del registro A pasará al bit mas a la
    izquierda del registro B y así con todos y cada uno de los
    bits. A esto se le llama una carga en paralelo.

    Fig 9. Transferencia en paralelo de
    información

    Desplazamiento.

    En un desplazamiento lógico se desplazan a la
    derecha o a la izquierda los bits contenidos en un registro. En
    un extremo, el bit saliente se pierde al desplazarse. En el otro
    extremo se introduce un cero. Estos desplazamientos son
    útiles para aislar bits dentro de un mismo
    registro.

    Fig 10. Desplazamiento hacia la
    derecha.

    Por ejemplo, si el registro A tiene información
    1101 al realizarle un desplazamiento hacia la derecha
    tendría 0110 como contenido. Si se vuelve a aplicar un
    desplazamiento quedaría 0011. Ahora, supongamos que se le
    hace un desplazamiento hacia la izquierda, el registro A
    tendría 0110, si se le vuelve a aplicar el corrimiento
    tendría 1100. Como puede verse la información
    desplazada se pierde por completo en el caso de que sea un "uno"
    debido a que en el desplazamiento se ingresa un cero. En el
    lenguaje de transferencia entre registros esto se
    expresa:

    Shl A, desplazamiento a la izquierda del registro
    A.

    Shd A, desplazamiento a la derecha del registro
    B.

    Fig 11. Resultado de un desplazamiento
    hacia la derecha

    Rotación.

    En la rotación se preservan todos los bits del
    registro ya que si se hace hacia la derecha el bit mas a la
    izquierda se coloca en lugar del bit mas a la derecha corriendo
    los demás una posición hacia la derecha.

    Fig 12. Rotación hacia la
    derecha.

    Si, por ejemplo, nuestro registro A tiene 0011 y hacemos
    una rotación hacia la derecha quedará la
    información como 1001. En lenguaje de transferencia ente
    registros estas operaciones de rotación pueden expresarse
    de la siguiente manera:

    Rotd A, rotación a la derecha del registro
    A.

    Rotl A, Rotación a la izquierda del
    registro A.

    Aritméticas

    Las microoperaciones básicas son sumar, restar y
    complementar. Todas las demás operaciones
    aritméticas puede obtenerse de una variación o
    secuencia de estas microoperaciones. La operación de
    multiplicación, en la mayoría de las computadoras,
    se ejecuta con una secuencia de microoperaciones de suma y
    desplazamiento. La división se ejecuta con una secuencia
    de microoperaciones de resta y desplazamiento. En la siguiente
    tabla se muestran las operaciones aritméticas consideradas
    básicas con su respectiva simbología.

    Simbología

    Descripción

    F ← A+B

    Suma el contenido de A mas B y carga en
    F

    F ← A-B

    Resta el contenido A menos B y se carga en
    F

    B ← B’

    Complemento a1 del registro
    B

    B ← B’+1

    Complemento a2 del registro
    B

    F ← A + B’ + 1

    Sumar A mas el complemento a2 de B y
    carga en F

    A ← A+1

    Incrementar el contenido de A en uno

    A ← A-1

    Decrementar el contenido de A en uno

    Tabla 2. Microoperaciones
    aritméticas.

    Nota: El apóstrofe delante de un registro indica
    que es el complemento de dicho registro o bien que esta negado su
    contenido.

    Lógicas

    Las microoperaciones lógicas especifican
    operaciones binarias para una cadena de bits almacenados en los
    registros. Estas operaciones consideran cada bit en los registros
    separadamente y lo tratan como una variable binaria. Esto quiere
    decir que las operaciones lógicas se realizan a nivel de
    bit. Por ejemplo, su mi registro A contiene 1011 y mi registro B
    0010 y realiza la operación A and B, el resultado se logra
    de realizar las operaciones 1 and 0 (bits menos significativos) 1
    and 1, 0 and 0 y 1 and 0 cuyo resultado es 0010. Las
    microoperaciones lógicas básicas son:

    A’, negación o complemento del
    registro A

    A٧ B, OR lógica ente A y
    B.

    A٨B, AND lógica entre A y
    B

    AӨB, XOR lógica entre A y
    B

    2. Unidad
    aritmético lógica.

    La ALU es la parte del microprocesador que realiza
    realmente las operaciones aritméticas y lógicas con
    los datos. Se basa, como la mayoría de los componentes de
    una computadora,
    en dispositivos lógicos sencillos. Pero no podemos hablar
    de unidades aritmético lógicas si no sabemos
    realmente como se llevan a cabo operaciones de tipo
    aritméticas y de tipo lógicas. Por lo mismo,
    comenzaremos por determinar operaciones simples como suma y
    resta, siguiendo por la multiplicación y división,
    también realizaremos operaciones en complemento
    a1 y complemento a2 (para simplificar la
    redacción las nombraré de
    aquí en adelante como a1 y a2).

    2.1 Números enteros sin signo

    A continuación se detallan la manera como se
    pueden realizar operaciones aritméticas con números
    sin signo y enteros. Existen maneras para realizar la suma,
    resta, multiplicación y división.

    2.1.1 Suma

    Si sumamos números decimales es común la
    expresión "cinco mas siete es igual a doce, entonces son
    dos y llevo uno". Este "llevo uno" se conoce como el acarreo. De
    la misma manera se realiza una suma binaria de varios bits.
    Unicamente necesitamos recordar las sencillas reglas de la suma
    binaria de un bit.

    1+1 = 0 y llevo 1

    1+0 = 1

    0+1 = 1

    0+0 = 0

    1+1+1 = 1 y llevo 1

    Con estas reglas tenemos por ejemplo.

    Acarreo –> 1 11

    2.1.2 Resta

    La resta se lleva de manera similar en números
    decimales y binarios. Si en la suma existe el acarreo, en la
    resta existe el "préstamo", igual que en
    decimales.

    1. = 0
    1. = 1
    1. = 0

    .0-1 = 1 prestando un uno al bit siguiente.

    Con estas reglas tenemos por ejemplo.

    2.1.3 Multiplicación

    La multiplicación no es en lo absoluto mas
    complicada que las dos operaciones anteriores que hemos visto.
    Simplemente se trata de multiplicar con unas sencillas reglas y
    después sumar. Cuando realizamos multiplicaciones
    decimales de varios numero debemos multiplicar cada uno de los
    numero del multiplicador por cada uno de los del multiplicando
    corriendo el resultado un lugar hacia la izquierda para
    después sumar los resultados.

    Las reglas de la multiplicación son:

    1×1 = 1

    1×0 = 0

    0x1 = 0

    0x0 = 0

    De esta manera tenemos:

    2.1.4 División.

    Es muy simple realizar una división de
    números binarios pues es sumamente similar a la
    división con números decimales. Hay un cociente
    como resultado con un posible residuo, hay un dividendo y un
    divisor y se trata de encontrar múltiplos e irlos restando
    uno por uno. No creo necesario extenderse en la
    explicación paso a paso de la división de
    números enteros positivos en binario. Basta con un
    pequeño ejemplo y recordar las reglas para la
    división de números decimales ya que son
    iguales.

    00001101

    1101 10010011

    1011

    001110

    1101

    001111

    1101

    100

    2.2 Números enteros con signo.

    2.2.1 Complemento a2

    Es interesante lo que se puede hacer con números
    binarios. Como ya vimos hay maneras de realizar sumas, restas y
    multiplicaciones, pero hemos realizado operaciones con
    números enteros y positivos. ¿Acaso se puede hacer
    operaciones con números binarios que representen
    números negativos? Sí se puede y no es tan
    complicado como pareciera ser. Para esto se llegó a una
    notación especial denominada complemento a2. Es mas
    sencillo explicarlo si tomamos en cuenta registros de 8 bits.
    Cuando queremos representar números positivos, el bit mas
    significativo servirá de signo: si es 0 es positivo y si
    es 1 es negativo. Esto nos deja únicamente 7 bits para el
    numero o bien, hasta 64 números se pueden formar. Lo
    importante es que de cada numero positivo se puede encontrar su
    negativo por medio del complemento a2. Esto se hace sacando el
    complemento de dicho numero y sumándole un uno.

    Número positivo: 00000100 = 4

    Complemento: 11111011

    Se le suma uno: 11111011+1=11111100 = -4

    Si alguna de las operaciones aritméticas nos
    arroja un resultado negativo, dicho resultado estará en
    representación complemento a2. Para leer mejor el
    resultado solo tenemos que convertir dicho numero negativo a un
    numero binario normal. Esto se hace calculando el complemento a2
    de dicho numero (que ya esta en complemento a2). Por ejemplo, si
    el resultado de una suma o una resta nos da –18 (11101110)
    tendríamos que complementarlo primero (00010001) y
    después sumarle 1 (10001 + 1) lo cual nos daría
    10010 = 18. Es claro que al convertirlo a notación binaria
    normal el numero nos da posistivo, pero esto solo se hace con
    fines de poder leer mejor el resultado debido a que no nos vamos
    a aprender todos los números en complemento a2. Sabemos
    que el resultado es negativo, solo necesitábamos averiguar
    la magnitud que es 18.

    2.2.2 Suma

    La suma en complemento a2 es sencilla ya que lo
    único que tenemos que hacer es convertir a negativo
    cualquier número que tenga signo negativo. Por ejemplo: Si
    tenemos 6+9 no es complicado ya que ambos son positivos y sabemos
    realizar este tipo de sumas.

    Pero si la suma es –6+9, entonces debemos calcular
    el complemento a2 del 6 que en binario es 110. Dicho complemento
    se obtiene negando primero (11111001) y sumándole 1
    después (11111001 + 1) para lo cual nos queda 11111010. La
    suma quedará como sigue:

    Si tenemos dos números negativos tampoco es para
    desesperarse, simplemente hay que convertir en complemento a2
    ambos números. La suma -9 + (-9) seria:

    2.2.3 Resta

    Cualquier resta decimal puede ser expresada y calculada
    como una suma. Por ejemplo 9-6 puede ser expresada como 9 + (-6).
    De la misma manera las restas binarias se traducen en sumas. Por
    este motivo no creo necesario profundizar ni poner ejemplos
    detallados de las restas que utilizan signos en forma de
    complemento a2.

    2.2.4 Multiplicación

    La multiplicación con signo puede realizarse como
    una multiplicación cualquiera convirtiendo ambos operandos
    en positivos. Simplemente se realiza la multiplicación
    como ya se vio anteriormente. Si los operandos eran de signos
    iguales entonces el resultado ha de ser positivo y correcto a
    nuestro resultado. Pero silos operandos tienen signos diferentes,
    entonces el resultado (que siempre será positivo) es
    incorrecto en cuanto al signo, aunque no en la magnitud. Aun
    así es necesario convertir el numero a su complemento a2
    para dejarlo en su forma negativa. Para reducir estos pasos y
    simplificar sobre todo el hardware al implementar una
    multiplicación con signo su puede utilizar el algoritmo de
    Booth.

    1.-

    A

    Q

    Q-1

    M

    2.-

    0000

    1100

    0

    1110

    Solo despl..

    Primer ciclo.

    3.-

    0000

    0110

    0

    1110

    Solo despl..

    Segundo ciclo

    4.-

    0000

    0011

    0

    1110

    A←A-M

    Tercer ciclo

    5.-

    0010

    0011

    0

    1110

    Despl..

    6.-

    0001

    0001

    1

    1110

    Solo despl..

    Cuarto ciclo.

    7.-

    0000

    1000

    1

    1110

    Tabla 3. Secuencia de una
    multiplicación con el algoritmo de
    Booth

    Supongamos que deseamos realizar la
    multiplicación de dos numero con signo como –2
    (1110) y –4 (1100). Para el algoritmo de Booth debemos
    considerar el multiplicando como un registro o variable M y el
    multiplicador una variable Q. Además existe la variable A
    y el bit Q-1 que representa el bit menos significativo
    de un registro virtual formado por A, Q y Q-1 es ese
    orden estrictamente. De hecho, el resultado aparecerá en
    este registro virtual al que denominaré R (A, Q,
    Q-1) y del cual hay que ignorar el bit Q-1
    a la hora de leer el resultado. El algoritmo de Booth con estas
    variables
    definidas consiste en analizar el bit menos significativo de Q y
    Q-1. Si son idénticos (0-0, 1-1) entonces solo
    hay que realizar un desplazamiento aritmético a la
    variable completa R. En el caso de que sean diferentes se
    realizarán las siguientes operaciones: cuando sea 1-0 se
    hace A←A-M y cuando sea 0-1 se hace A←A+M. Veamos
    nuestro caso representado en la tabla anterior. He numerado las
    filas de la tabla para simplificar su explicación. En la
    fila dos puede observarse los valores
    iniciales de cada una de las variables de
    nuestro ejercicio. La variable A siempre inicia con valores 0000,
    lo mismo que el bit Q-1 . Se comparan el bit menos
    significativo de la variable Q y Q-1 (ambos en rojo) y
    se determina que son iguales por lo que durante el ciclo uno solo
    se realizará el desplazamiento aritmético de la
    variable completa R. En la línea 3 puede observarse el
    resultado de este desplazamiento. Es igual a un desplazamiento
    lógico como ya vimos en la primera parte solo que el bit
    del signo se conserva siempre. Al comparar el la línea
    tres, que es el resultado del ciclo uno, puede observarse que son
    iguales los bits por lo que solo se realizará un
    desplazamiento aritmético durante el ciclo dos. En la
    línea 4 se observa el resultado de este corrimiento. Al
    comparar en la línea 4 los bits vemos que hay una
    diferencia por lo que hay que hacer A←A-M. El resultado de
    este operación puede observarse en la línea 5.
    Después de cada operación es necesario realizar un
    desplazamiento del resultado. En la línea 6 se muestra el
    resultado de dicho desplazamiento. Esta línea 6 es el
    final del ciclo tres. Comparando en la línea 6 los bits
    vemos que son iguales por lo que solo hay que realizar un
    desplazamiento aritmético en el ciclo cuatro. El resultado
    se observa en la línea 7. Como los números con de 4
    bits solo se necesitan 4 ciclos. El resultado se obtiene del
    registro R omitiendo el bit Q-1, esto es 00001000 = 8.
    ¿Cuánto es –2 por –4? Pues
    ocho.

    3. Memoria de
    programa.

    En este capitulo se analizará la función
    de la memoria
    dentro del procesador que
    diseñaremos. En una computadora,
    cada programa que
    ejecutamos se guarda en la memoria principal que es una memoria
    tipo RAM. El
    microprocesador va tomando de la memoria las instrucciones y los
    datos que necesita aleatoriamente de acuerdo al programa o
    programas que
    se estén ejecutando en ese momento. De este mismo modo
    nuestro microprocesador contará con una memoria donde se
    almacenarán los datos y las instrucciones que pretendamos
    que realice.

    3.1 ROM

    Las memorias ROM
    son las "memorias de
    solo lectura". La
    idea de éstas es que se pudiese guardar información
    en ellas y no se pierda dicha información a través
    de los años o cuando se cortara la alimentación del
    integrado. Antiguamente uno mandaba la especificación del
    contenido que deseaba que tuviera una memoria ROM al
    proveedor. Esto era debido a que la información contenida
    en las memorias se fijaba en el proceso de
    fabricación. Sin embargo, esto era un impedimento para
    quienes necesitaban de una memoria para desarrollar
    pequeños proyectos y no
    tenían recursos
    suficientes para pedir a los distribuidores una memoria,
    además que los distribuidores solo hacían pedidos
    grandes.

    Debido a estos inconvenientes se desarrolló una
    memoria de tipo ROM llamada PROM (memoria de sólo lectura
    programable o memoria ROM
    programable). Esta memoria tenia la facilidad que con un aparato
    un poco costoso, cualquier persona
    podía grabar el contenido de una memoria por lo que se
    comenzó a utilizar la tecnología ROM para
    propósitos generales. Desgraciadamente esta tecnología era OTP
    (one time programable) solo se podía grabar una vez. Esto
    representaba un costo elevado
    para la investigación porque si el proyecto tenia un
    pequeño error, la memoria ROM debía ser reemplazada
    por otra sin error. De aquí que se desarrolle la memoria
    EPROM (memoria ROM programable borrable). Dicha memoria
    podría ser grabada eléctricamente y borrada con
    luz
    ultravioleta. Para quienes no tenían un módulo de
    luz
    ultravioleta era necesario que "sacaran al sol" sus memorias que
    tenían una especie de "ventana" por donde entraba la luz
    ultravioleta. En el caso de contar con un generador de luz
    ultravioleta, los programadores se tardaban cuando mucho 8
    minutos en borrar la memoria, pero quienes no tenían esta
    facilidad debían dejar al sol sus memorias aproximadamente
    24 horas. Además, estas memorias únicamente se
    podían grabar y borrar unas 10 veces aprox. Finalmente se
    desarrolló una memoria ROM que podía ser grabada
    eléctricamente y borrada de la misma manera. Se
    podía hacer este proceso mil
    veces (si estaba buena) y no tomaba mas que unos minutos (en la
    actualidad solo se requiere de unos segundos). Esta memoria se
    llama EEPROM (memoria ROM programable borrable
    eléctricamente).

    En las computadoras
    encontramos memorias ROM en lo que se llama el BIOS el cual
    es una memoria donde se guarda la información de la
    tarjeta madre,
    de los conectores y dispositivos de la PC.

    3.2 RAM

    Este tipo de memoria puede ser borrada y grabada las
    veces que deseemos. La única desventaja es que la
    información grabada en ella solo puede ser utilizada
    mientras tenga energía. En cuanto se corte la alimentación, los
    datos que se grabaron se borrarán instantáneamente.
    Se usan solo como almacenamiento
    temporal.

    Existen dos variantes entre las memorias RAM: SRAM y DRAM.
    La SRAM es conocida como la RAM estática,
    en ella los valores
    binarios o información se almacenan utilizando
    configuraciones de compuertas por lo que, mientras tenga la
    alimentación, los datos guardados en ella se
    mantendrán intactos. LA DRAM es conocida como RAM dinámica y esta hecha con celdas, que
    almacenan los datos como cargas en condensadores.
    La presencia o ausencia de carga en el condensador se interpreta
    como el 1 o 0 binarios. Ya que los condensadores
    tienen una tendencia natural a descargarse, las RAM
    dinámicas requieren refrescos periódicos para
    mantener memorizados los datos. Su costo no es muy
    elevado.

    Para nuestro caso utilizaremos una memoria
    RAM.

    3.3 Organización de memorias
    pequeñas.

    Para explicar cómo se guardan los datos en la
    memoria recurriré a la clásica
    representación del librero. Supongamos que tenemos un
    librero con 4 línea para poner libros. En
    cada línea caben hasta 4 libros.

    Línea 1

    Línea 2

      Línea 3

      Línea 4

    Fig 13. Representación de una
    memoria como un librero

    Las líneas representan las direcciones que tiene
    esa memoria, o bien, los espacios disponibles para guardar
    información. Cada libro
    representa un bit de información, por lo nuestro librero
    representa una memoria con cuatro direcciones de cuatro bits de
    capacidad. Cada dirección se representa por un numero
    binario secuencial. Ahora se cambiamos nuestro librero por una
    memoria verdadera y los libros por bits tendremos lo
    siguiente:

    Dirección

    Datos (bits)

    00

    1

    0

    0

    1

    01

    1

    1

    1

    1

    10

    0

    0

    1

    1

    11

    1

    0

    1

    0

    Fig 14. Representación tabular de
    una memoria

    Para memorias pequeñas esta organización resulta práctica y
    simple. Pero para memorias mas grandes es difícil tener
    este tipo de organización. Aunque en el diseño
    de nuestro pequeño procesador no utilizaremos memorias
    grandes, me gustaría profundizar en la
    organización de las memorias grandes sin adentrarnos
    en la organización de módulos de memorias que son
    los que se utilizan en las computadoras.

    3.4 Organización de memorias
    grandes.

    Analicemos la siguiente figura que nos muestra la
    organización de una memoria de 16 Mbits. Esto es, tiene 16
    millones de celdas de memoria con la particularidad de que guarda
    los datos en palabras de 4 bit. Por esto, tiene una matriz de
    celdas de 2048 por 2048 donde cada localidad de la matriz tiene 4
    celdas para formar la palabra.

    Fig 15. Organización de una
    memoria de 16Mb

    Obsérvese que las líneas de direcciones de
    esta memoria van de la A0 a la A10, es
    decir, once líneas de dirección. Recordando el parcial pasado
    tenemos que 211=2048. Realmente solo tendríamos
    capacidad para direccionar 2048 localidades de 4 bits, pero esta
    memoria, como la mayoría, tiene líneas de datos
    multiplexadas. Esto se hace para ahorrar espacio y cableado. El
    microprocesador manda 22 datos que sirven como dirección.
    Sin embargo, las primeras 11 señales sirven para
    seleccionar la fila de la matriz activando la señal de
    control RAS (Row Address Selector). Luego entonces, podemos
    seleccionar una fila entre 2048 existentes en la matriz. Para
    esto sirve el decodificador de líneas en la memoria el
    cual tiene once entradas (las primeras once señales de
    dirección que manda el micro) y 2048 líneas de
    salida. Las siguientes 11 señales de dirección que
    manda el micro sirven para seleccionar la columna de la matriz.
    Por esto se mandan al decodificador de columnas activando la
    respectiva señal de control CAS (Column Address Selector).
    Al ser una memoria DRAM, requiere de refresco cada cierto
    tiempo por lo
    que tiene un contador de refresco (Rerfesh Counter). Ademas, la
    memoria cuenta con dos buffers: de entrada y de salida, de donde
    precisamente entran y salen datos de la memoria (D0 a
    D3 recuerda que es de 4 bits). Las señales WE y
    OE son las que regulan las operaciones de escritura y
    lectura de la memoria (Write Enable y Output Eneable). Si
    tuviésemos una matriz de 8 x 8 x 4 tendría esta
    apariencia ya con datos grabados.

    1010

    0001

    1011

    0101

    1001

    1010

    0011

    0011

    0111

    1001

    0100

    0010

    1000

    1010

    0110

    0111

    1000

    0111

    1010

    1100

    1101

    1111

    1010

    0101

    1100

    0011

    1001

    1011

    1010

    1010

    1100

    1100

    1111

    1000

    0110

    0010

    0001

    0101

    1010

    1100

    0001

    1111

    1000

    1001

    1001

    1001

    1010

    1011

    1100

    1101

    1110

    1111

    0001

    0010

    0011

    0100

    0101

    0110

    0111

    1000

    1001

    1010

    1011

    1100

    Para direccionar la matriz solo requeriríamos de
    3 líneas de dirección. La organización de
    esta memoria tendría la siguiente forma:

    Fig 15. Organización de una
    memoria de 256 bits

    Esta memoria que hemos diseñado ahora tiene una
    capacidad de 256 bits o bien 64 palabras de 4 bits.

    4. Diseño de un
    microprocesador.

    Hasta ahora hemos revisado paso por paso y en separado
    conceptos, procedimientos y
    circuitos que son utilizados en el diseño de microprocesadores. Sin embargo, ya es tiempo de
    que juntemos toda esta información para lograr el fin que
    hemos perseguido desde en inicio de este articulo: el
    diseño del microprocesador. En esta parte es cuando hay
    que poner todos los sentidos en
    alerta y prepararse para algo que, a mi manera de ver, es el
    secreto de la tecnología. Si miramos a nuestro alrededor
    podemos observar un sin fin de aparatos electrónicos de
    diferentes usos, formas y diseños. La mayoría, no
    digo todos, utilizan en su interior un sistema basado en uno o
    mas microprocesadores. Los mas simples podrán
    basarse en microcontroladores, pero los complejos y, sobre
    todo, de propósito general, como las computadoras
    contienen un procesador principal y varios procesadores a su
    alrededor como es el chip set.

    4.1 Organización vs.
    Arquitectura

    Antes de entrar de lleno al diseño de nuestro
    micro creo necesario definir y delimitar dos conceptos que
    aparecen siempre juntos pero que cuesta trabajo decir cuando
    comienza uno y termina el otro. Me refiero al concepto de
    organización y al de arquitectura.
    ¿Por qué en algunos temas nos presentan como
    organización algo que pudiera tomarse como arquitectura, o
    viceversa? A continuación se presentan algunas
    definiciones de arquitectura:

    " Arte de
    diseñar una máquina con la cual sea agradable
    trabajar ". (Caxton Foster – 1970)

    " Determinar componentes, funciones de los
    componentes y reglas de interacción entre los " (N.
    Prassard – 1981).

    " La estructura de
    la Computadora
    que el programador necesita conocer con el objeto de escribir
    programas en
    lenguaje de máquina correctos " (Informe final del
    proyecto CFA
    Arquitectura de Familias de Computadoras).

    Para mi gusto, las definiciones que presenta William
    Stallings en su libro
    Organización y Arquitectura de Computadoras (1996)
    delimitan de manera clara la diferencia entre los dos temas antes
    mencionados.

    Arquitectura: La arquitectura se refiere a los
    atributos de un sistema que son visibles para un programador o
    bien, a aquellos atributos que tienen un impacto directo en la
    ejecución lógica de un programa.

    Organización: La organización se
    refiere a las unidades funcionales y sus interconexiones, que dan
    lugar a especificaciones arquitectónicas.

    Lo interesante de estos conceptos es que para el
    diseño de nuestro microprocesador necesariamente tendremos
    que involucrarnos en su arquitectura (conjunto de instrucciones,
    numero de bits para representar números, instrucciones y
    caracteres, etc.) y en su organización (señales de
    control, memoria, registros, etc). De hecho, en la actualidad
    muchos microprocesadores han conservado su arquitectura de una
    manera u otra pero su organización ha cambiado para
    mejorar su rendimiento. En las mismas compañías que
    ofrecen microprocesadores la arquitectura es la misma o muy
    similar con diferencia únicamente en la
    organización lo que hace variar precios y
    rendimiento.

    4.2 Organización del
    microprocesador

    A continuación veremos la organización del
    microprocesador .

    Fig 16. Organización de un
    microprocesador sencillo.

    Comencemos por definir y explicar cada una de las partes
    de este microprocesador.

    MAR: Este es el registro de direcciones de
    memoria (memory adress register). Debido a que la memoria RAM
    requiere cierto tiempo para encontrar y posicionarse en una
    dirección, dicha dirección debe estar siempre en
    las entradas. Este registro funciona como buffer del
    PC.

    PC: Este es un contador (program counter) que
    sirve para tener la dirección de memoria de la siguiente
    instrucción o dato que se debe de leer. Esto es, si en la
    memoria comenzamos con la localidad 0000, el contador,
    después de apuntar hacia esa dirección y
    después de haber tomado el dato contenido en la memoria,
    debe ser incrementado en uno para que contenga un 0001, o sea,
    apunte a la siguiente dirección de la memoria. En nuestro
    caso, este contador debe ser capaz de cargar datos en paralelo
    para poder realizar instrucciones de salto. Por ejemplo, el
    contador puede tener el numero 0100, y en esa dirección,
    la memoria contiene una instrucción de salto a la
    dirección 1000. El PC debe ser capaz de cargar este nuevo
    número y seguir su cuenta a partir de
    él.

    MBR: Este registro es el buffer de datos de la
    memoria (memory buffer register). Cuando la memoria se posiciona
    en una dirección, muestra el contenido en su bus de datos,
    pero estos datos o contenido cambiaran si se cambia la
    dirección que se pone en las entradas del bus de
    direcciones de la memoria. Es por esto que es necesario un buffer
    de salida en la memoria. También nos servirá como
    buffer para instrcciones de escritura a la
    memoria.

    IR: Este registro el es registro de instrucciones
    (instruction register). Cuando el dato contenido en una
    dirección de memoria es una instrucción (suma,
    resta, salto, etc.) se manda a este registro para decodificarlo y
    mandar las señales correctas para realizar dicha
    instrucción.

    ALU: La unidad aritmético lógica es
    un integrado que puede realizar operaciones aritméticas y
    operaciones lógicas ya sea con un solo operando o hasta
    con dos operandos.

    Acc: Este es el registro acumulador y es de
    propósito general. En nuestro caso será utilizado
    para guardar uno de los operandos del la ALU para llevar a cabo
    operaciones con dos operandos. El segundo se proporcionará
    directamente a la ALU desde el MBR.

    ROP: Este registro contiene el código de
    operación de la ALU. Esto es, se requiere de un
    código binario en las entradas de la ALU para seleccionar
    qué tipo de operación se quiere llevar a cabo
    (suma, resta, complemento,etc.).

    R: Este registro sirve únicamente para
    observar el resultado de las operaciones realizadas en la ALU
    pues está conectado directamente a las salidas.

    Generador de tiempos: Es la parte de nuestro
    microprocesador que se encarga de generar señales de
    tiempos de acuerdo a la frecuencia de reloj que estemos
    manejando.

    Unidad de control: Es la encargada de generar las
    señales correctas para realizar las operaciones deseadas
    por el usuario. Como una analogía tenemos al director de
    una orquesta.

    La idea de esta organización es poder implementar
    cuatro operaciones básicas que nos servirán para
    echar a andar al microprocesador. Cuando veamos las instrucciones
    se comprenderá completamente el por qué de esta
    organización.

    4.3 Códigos de
    instrucción

    Un sistema digital se define por las operaciones que
    puede realizar. Cuando estas operaciones son fijadas de manera
    que solo puede ejecutar las mismas operaciones una y otra vez de
    manera secuencial entonces hablamos de un sistema digital de
    propósito especial. Cuando la secuencia de las operaciones
    que realizará nuestro sistema digital se puede modificar
    para que realice las tareas que deseamos en ese momento, entonces
    tenemos un sistema digital de propósito general. Los
    microprocesadores son sistemas
    digitales de propósito general puesto que cuentan con
    una lista de instrucciones que pueden realizar en el orden que
    nosotros deseemos. Este orden de instrucciones es lo que se
    conoce como programa. Todos nosotros, al menos que estamos en el
    ámbito de las computadoras, sabemos y conocemos los
    programas de computadoras y, quizás, hasta hemos hecho
    algún programilla por nuestra cuenta. Estos grandes
    programas están hechos con un lenguaje fácil de
    interpretar y comprender para los seres humanos. Sin embargo,
    hablando del lenguaje de microprocesadores, solo podemos manejar
    códigos binarios. Para realizar una multiplicación
    tenemos el código 1110, para la suma 1100, etc. Con cuatro
    bits podemos referir hasta 16 códigos de instrucciones.
    Para el microprocesador de una computadora son pocas 16
    instrucciones, pero para nuestro procesador serán
    suficientes. Comenzaremos con cuatro instrucciones:

    LEE: Saca de la memoria el contenido que
    está en la dirección DIR y se lleva el registro
    A.

    GUARDA: Guarda el contenido del registro A en la
    dirección de memoria DIR

    SALTA: Continua la ejecución de las
    instrucción que se encuentra en DIR (2a.
    Palabra).

    OPERA: Realiza la operación
    aritmética lógica que es codificada por tipo entre
    el contenido del registro A y el operando OP.2

    En ocasiones como la nuestra es necesario proporcionar
    no solo el código de operación que se desea hacer
    sino también alguna información extra como son los
    operandos o las direcciones de los operandos. Para nuestra
    instrucción LEE es necesario el código de
    instrucción y la dirección de la memoria que se
    desea leer. En la siguiente tabla se muestra cada una de las
    instrucciones y sus operandos necesarios. Cabe recalcar que los
    códigos de operación son propuestos, podrían
    ser cualquier combinación binaria de cuatro bits, pero
    para fines del diseño de nuestro microprocesador estos
    códigos son fáciles y prácticos.

    Instrucción

    Señal

    Código

    Operando 1

    Operando 2

    Lee

    q1

    0001

    Dirección

    Guarda

    q2

    0010

    Dirección

    Salta

    q3

    0100

    Dirección

    Opera

    q4

    1000

    Código de Operación

    Segundo Operando

    Tabla 4. Instrucciones del
    microprocesador

    De esta manera para hacer un GUARDA es necesario
    proporcionar la dirección en la cual se va a guardar el
    contenido del registro A. Para hacer un SALTA es necesario
    proporcionar la dirección a la cual se saltará el
    programa. Para el OPERA es necesario una combinación
    binaria que determina qué operación se va a
    realizar (suma, resta, and, or, xor, etc.), esta
    combinación será de acuerdo a la ALU que usemos, y
    también hay que determinar el segundo operando ya que el
    primero se encuentra en A y el segundo estará en el MBR.
    Nótese las conexiones que tiene la ALU en el diagrama a
    bloques para poder observar el registro ROP que es el que
    tendrá la combinación que determina qué
    operación se realiza con los datos que hay en A y MBR
    conectados a las entradas de la ALU.

    Traslademos todo esto a una memoria de 16 x 4 bits. El
    microprocesador siempre iniciará buscando en la primera
    dirección de la memoria que contiene el programa. Si
    quisiéramos realizar un LEE la dirección 1000 y
    luego un salta a la dirección 1111
    tendríamos.

    Dirección

    0000

    0001

    0010

    0011

    0100

    0101

    0110

    0111

    1000

    Contenido

    0001

    1000

    0100

    1111

     
     
     
     
     

    Fig 17. Ejemplo de un programa en
    memoria

    En la primera dirección (0000) está el
    código de un LEE (0001) seguido de su dirección a
    leer (1000) en la segunda dirección (0001). En la tercera
    dirección (00010) se encuentra el código de un
    SALTA (0100) seguido de la dirección. De esta manera es
    como se escribe un programa en lenguaje maquina (con unos y
    ceros). Cada instrucción genera una señal para el
    circuito de control. El IR se encarga de decodificar una
    instrucción y enviarle la respectiva señal al
    sistema de control.

    4.4 Macrooperaciones.

    Las operaciones mostradas en el apartado anterior son
    macrooperaciones porque requieren un numero determinado de
    microoperaciones para poder llevarse a cabo. A
    continuación analizaremos cada una de las macrooperaciones
    y de esta manera quedará completamente explicada nuestra
    organización que da lugar a nuestra
    arquitectura.

    4.4.1 Ciclo Búsqueda o Fetch.

    Recordemos que nosotros determinamos el código de
    una instrucción por medio de una combinación
    binaria de n bits que podemos escoger perfectamente al azar.
    Entonces si tengo determinado la combinación 1000 como un
    OPERA ¿por qué no se confunde mi microprocesador si
    uno de los operando es 1000 o bien el código de la
    operación es 1000?

    Un ejemplo de esto puede ser como sigue:

    Dirección

    0000

    0001

    0010

    0011

    0100

    0101

    0110

    0111

    1000

    Contenido

    1000

    1000

    1000

     
     
     
     
     
     

    Fig 18. Ejemplo de un programa con
    contenido aparentemente repetido

    Observa el contenido de la siguiente memoria. Cualquiera
    diría que vamos a realizar tres instrucciones OPERA pero
    no es así, solo se va a realizar una con un código
    de operación 1000 y un segundo operando 1000.

    El microprocesador es un circuito secuencial
    temporizado. Siempre antes de que empiece una nueva
    instrucción los tiempos se inicializan precisamente para
    realizar el ciclo Fetch. Este ciclo es el encargado de tomar un
    código y llevarlo hacia el IR para ser decodificado y asi
    activar la lógica correcta del circuito de control y
    llevar a cabo esta instrucción. Consta de tres tiempos y
    cinco microoperaciones.

    T0: MAR PC.

    T1: MBR M, PC
    PC + 1

    T2: IR MBR, MAR
    PC.

    El PC inicia con 0000 y se lo transfiere a MAR. Esto
    quiere decir que la memoria se ubicará en la primera
    dirección. Después se saca el contenido de la
    memoria y se transfiere a MBR, en ese mismo tiempo de incrementa
    el PC (0001). Se transfiere el contenido de MBR a IR para poder
    decodificar la instrucción y se manda el contenido de PC
    hacia MAR para que la memoria se posicione en la siguiente
    dirección (0001). Una vez codificada una
    instrucción la lógica de control se encarga de que
    el siguiente dato que se encuentra en la memoria no sea tomado
    como una instrucción, sino como un operando mas de la
    instrucción previamente decodificada. De esta manera
    podemos realizar la operación del ejemplo anterior. No
    importa que nuestra instrucción OPERA tenga el
    código 1000 y que el primer operando sea 1000 y el segundo
    también.

    4.4.2 Ciclos de ejecución.

    El ciclo de búsqueda consiste un una serie de
    microoperaciones secuenciales que no cambian nunca. Esto no
    ocurre en un ciclo de ejecución ya que para cada
    instrucción de nuestro procesador existe una serie de
    microoperaciones a realizar de acuerdo con la instrucción
    deseada.

    Lee: q1 T3: MBR
    M, PC PC +1

    q1 T4: MAR
    MBR

    q1 T5: MBR
    M

    q1 T6: A MBR, T
    0.

    La instrucción Lee saca de la memoria la
    dirección que se desea leer y la transfiere al MBR
    incrementando el PC en el mismo tiempo. Después pasa esa
    dirección a MAR para que la memoria se posicione en esa
    dirección. Se saca el contenido de la dirección
    leída hacia MBR y por ultimo se deposita en el registro A
    inicializando los tiempos para realizar el ciclo de
    búsqueda de la siguiente instrucción.

    Guarda: q2 T3: MBR
    M, PC PC +1

    q2 T4: MAR
    MBR

    q2 T5: MBR
    A

    q2 T6: M MBR, T
    0.

    La instrucción Guarda saca de la memoria la
    dirección en la cual se deberá guardar el dato en A
    , lo transfiere al MBR, de ahí se transfiere a MAR para
    que la memoria se posicione en esa dirección. Se pasa el
    dato en A hacia MBR y de ahí se transfiere a la memoria
    que ya esta previamente posicionada en la dirección
    deseada. Al final se inicializan los tiempos para realizar el
    ciclo de búsqueda de la siguiente
    instrucción.

    Salta: q3 T3: MBR
    M. [ PC PC +1 

    q3 T4: PC MBR, T
    0.

    En la operación Salta se transfiere de la memoria
    al MBR la dirección a la cual se quiere saltar para
    continuar con el programa. Esta misma dirección se
    transfiere al PC. Hay que notar que durante el tiempo tres se
    incrementa el PC. Esta microoperación no es necesaria ya
    que en el siguiente tiempo el mismo contenido de PC será
    modificado totalmente. Sin embargo, para simplificar el
    diseño del circuito de control se agrega en este tiempo ,
    con esta instrucción.

    Opera: q4 T3: MBR
    M, PC PC +1

    q4 T4: ROP MBR,
    MAR PC

    q4 T5: MBR M, PC
    PC +1

    q4 T6: R
    A(op.)MBR, T 0.

    Este es el mas complejo. Primero se pasa de la memoria
    al MBR el código de operación que se desea
    realizar, de ahí se manda hacia el ROP para indicarle a la
    ALU la operación a realizar, se pasa de la siguiente
    dirección al MBR el segundo operando y en el tiempo seis
    se realiza la operación deseada transfiriendo el resultado
    al registro R.

    4.5 Diseño de la unidad de
    control

    Ya tenemos hasta este momento las instrucciones que
    podrán utilizarse en nuestro procesador y la secuencia de
    microoperaciones necesarias para cada una. Ahora llega el momento
    de diseñar e implementar el circuito de control que se
    encargará de enviar señales adecuadas para llevar a
    cabo las instrucciones especificadas por el programador. Existen
    gran variedad de técnicas
    para implementar el circuito de control. La mayoría puede
    clasificarse en:

    • Control cableado
    • Control microprogramado.

    4.5.1 Control cableado.

    El control cableado es esencialmente un circuito
    combinacional. Sus señales lógicas de entrada se
    convierten en señales lógicas de
    control.

    Fig 19.Diagrama de
    la unidad de control.

    Para cada una de las instrucciones el decodificador
    enviará una y solo una señal de
    instrucción las cuales ya hemos definido anteriormente.
    De la misma manera el generador de tiempos enviará una y
    solo una señal de tiempo. Estas serán las
    entradas de nuestra unidad de control. Las salidas son
    producidas por circuitos combinacionales simples dentro de la
    unidad de control.

    A cada microoperación le asignaremos una
    señal de control (X1, X2…
    Xn) que será la encargada físicamente
    de que se realice.

    MAR ← PC : à X1

    MBR ←M : à X2

    PC ← PC + 1 : à X3

    IR ← MBR : à X4

    MAR ← MBR :à X5

    A ← MBR : à X6

    T ← 0 : à X7

    MBR ← A : à X8

    M ←MBR : à X9

    PC ← MBR : à X10

    ROP ← MBR : à X 11

    R ←A (op) MBR :à X 12

    En total tenemos doce señales de control. Para
    que cada señal sea verdadera (sea uno) es necesario que
    varias condiciones se den. Por ejemplo en el caso de MAR ←
    PC, puede darse cuando To, T2, y así por el estilo. De
    esta manera se forman las funciones de boole para cada una de las
    señales de control. Estas funciones determinan el circuito
    combinacional de control que debe implementarse.

    MAR ← PC

    X1 = T0 + T2 +
    q3 T4

    MBR ←M

    X2 = T1 + q0
    T3 + q0 T5 + q1
    T3 + q2 T3 + q3
    T3 + q3 T5

    X2 = T1 + T3
    (q0 + q1 + q2 + q3)
    + T5 (q0 + q3 )

    X2 = T1 + T3 +
    (q0 + q3) T5

    PC ← PC + 1

    X3 = T1 + q0
    T3 + q1 T3 + q2 T3
    + q3 T5+ q3 T3

    X3 = T1 + T3
    (q0 + q1 + q2 + q3)
    + q3 T5

    X3 = T1 + T3 +
    q3 T5

    IR ← MBR

    X4 = T2

    MAR ← MBR

    X5 = q0 T4+
    q1 T4= (q0 + q1)
    T4

    A ← MBR

    X6 = q0 T6

    T ← 0

    X7 = q0 T6+
    q1 T6+ q2 T4+
    q3 T6

    X7 = (q0 + q1 +
    q3) T6+ q2
    T4

    MBR ← A

    X8 = q1 T5

    M ← MBR

    X9 = q1 T6

    PC ← MBR

    X10 = q2
    T4

    ROP ← MBR

    X11 = q3
    T4

    R ← A (t) MBR

    X12 = q3
    T6

    La manera como se use cada una de las señales de
    control dependerá de los circuitos
    integrados que utilicemos. Lo importante es saber que, por
    ejemplo, la señal X12 debe hacer que el
    registro R cargue en paralelo las salidas de la ALU, en donde se
    realizó la operación deseada. Todo el circuito de
    control es un circuito combinacional de varios componentes
    electrónicos digitales.

    Fig 20. Diagrama interno de la unidad de
    control.

    4.6 Otras consideraciones de
    diseño.

    Como ya mencioné con anterioridad, el
    microprocesador es un circuito que ejecuta instrucciones de
    manera secuencial. Para lograr esto es necesario una parte de
    temporizador dentro del micro. Aunque pareciera sencillo pensar
    en implementar un circuito temporizador hay que tener algunas
    consideraciones con respecto a los integrados que estemos
    utilizando. Para nuestro caso, los registros que usaremos
    necesitan señales se reloj para poder funcionar. Luego
    entonces nuestro reloj maestro debe de proporcionar no solo los
    tiempos que ingresarán al circuito de control, sino
    también las señales de reloj de nuestros
    integrados. A esto se le llama un circuito
    síncrono.

    Fig 21. Ejemplo de conexión
    eléctrica del temporizador

    Utilizamos un contador 74lLS161 para generar los tiempos
    por medio de un botón de tiempo (será manual). Las
    salidas deberían entrar a un decodificador para que se
    genere un a sola señal de tiempo a la vez. Del mismo
    botón de tiempos saldrá una señal que se
    niega y se dirige hacia los relojes de nuestros registro. Se debe
    negar para que se genere primero los tiempos que ingresan a la
    unidad de control.

    Otra consideración importante es el uso de
    compuertas de tres estados para poder realizar lecturas y
    escrituras de la memoria con seguridad.
    Recordemos que el bus de daos de la memoria es bidireccional.
    Para poder utilizarlo necesitamos de estas compuertas de tres
    estados. Además, hay que notar el uso de unos
    multiplexores a la entrada de las direcciones y de los datos. Son
    colocados porque programaremos la memoria de manera manual con unos
    switches tipo DIP. Por lo tanto debemos de habilitar a la hora de
    programar las entradas de los switches y una vez terminada la
    programación se dejarán habilitadas
    únicamente las entradas del MAR, para el caso de las
    direcciones, y las entradas del MBR, para el caso de los datos.
    Observa que se usan otros multiplexores también. Como
    vimos en el inicio, se usan para poder tener dos entradas a un
    mismo integrado.

    Fig 22. Conexión de la memoria
    usando switches para su programación.

    Como ya pueden estar imaginando, el diagrama
    eléctrico completo es enorme. Creo que con la
    información proporcionada y siguiendo las consideraciones
    de diseño, se puede realizar este microprocesador poco a
    poco y con mucha paciencia.

    5.
    Conclusiones

    El diseño de microprocesadores se estudiaba en
    las universidades de ingeniería con miras a mejorar los
    diseños existentes. Hoy en día se prefiere
    enseñar microprocesadores y arquitectura de computadoras
    desde el punto de vista económico o cuantitativo, desde el
    punto de rendimiento-costo. A mi parecer, no deja de ser
    importante aprender las bases principales del diseño de
    microprocesadores ya que ello llevará a una mejor
    comprensión de los lenguajes de
    programación, segmentación, computadoras de procesadores
    paralelos, microcontroladores, etc. Además, poder
    diseñar un microprocesador sencillo como el que se
    desarrolla en este documento, nos conduce a conocer y comprender
    uno de los secretos de la electrónica mas hermosos y
    enigmáticos. ¿Cómo se procesa la
    información? ¿Cómo es posible que una
    computadora me pueda desplegar imágenes,
    videos, texto, etc?
    Todas estas preguntas son el enigma de las computadoras y los
    estudiantes de una ingeniería relacionada con la computación deben de adentrarse, al menos
    de manera superficial, con las respuestas.

    Bibliografía.

    1.- Arquitectura de computadoras.

    Morris Mano.

    Ed. Prentice Hall.

    2.- Organización y arquitectura de
    computadoras.

    William Stallings.

    Ed. Prentice Hall.

    3.- Arquitectura de computadores: Un enfoque
    cuantitativo.

    Hennessy – Patterson.

    Ed. McGraw Hill.

    4.- Fundamentos de los microprocesadores

    Roger Tokheim.

    Ed. McGraw Hill.

    5.- Arquitectura y organización de
    computadoras.

    Hayes.

    Ed. McGraw Hill.

    Xavier Sierra Canto.

    Ingeniero en electrónica.

    Profesor de arquitectura de computadoras.

    Centro Educativo Latino, A.C.

    Nota al lector: es posible que esta página no contenga todos los componentes del trabajo original (pies de página, avanzadas formulas matemáticas, esquemas o tablas complejas, etc.). Recuerde que para ver el trabajo en su versión original completa, puede descargarlo desde el menú superior.

    Todos los documentos disponibles en este sitio expresan los puntos de vista de sus respectivos autores y no de Monografias.com. El objetivo de Monografias.com es poner el conocimiento a disposición de toda su comunidad. Queda bajo la responsabilidad de cada lector el eventual uso que se le de a esta información. Asimismo, es obligatoria la cita del autor del contenido y de Monografias.com como fuentes de información.

    Categorias
    Newsletter