Procedimiento digital de señales. Microprogramación

Lógica digital. Microarquitectura

  • Enviado por: Javier Rivero Campos
  • Idioma: castellano
  • País: España España
  • 22 páginas
publicidad

TEMA 4º EL PROCESADOR.

MICROPROGRAMACIÓN.

4.1 Introducción

4.2 Lógica digital

4.3 Microarquitectura

La frontera entre el hardware y el software, no se encuentran bien definida; al principio, las computadoras tenían instrucciones para hacer operaciones aritméticas, booleanas, desplazamientos, comparaciones, etc.; y otras que eran realizadas directamente por el hardware. Para cada instrucción había un circuito especifico que la ejecutaba, de tal forma que si se abría un computador se veían los circuitos que la realizaban.

En las computadoras modernas existen distintos niveles de circuito en los cuales ya no se pueden diferenciar fácilmente cada uno de los circuitos específicos. La única forma de ver dicho circuito sería accediendo a un listado del microprograma y examinar la porción que interpreta dicha instrucción.

En este tema estudiaremos como el microprogramador controla los componentes del hardware e interpreta el nivel de la máquina ordinaria. Se entiende por microprogramación como el diseño de sistemas más o menos razonables por medio de la interpretación de la máquina sobre máquinas irracionales.

4.2 Lógica digital.-

El trabajo del microprogramador es escribir programas que controlen los registros, buses, ALU, memoria. En este punto veremos los distintos componentes lógicos.

  • Registros.-

Es dispositivo capaz de almacenar información, al nivel de microprogramación, siempre se dispone de un conjunto de ellos. La diferencia principal entre los registros y la memoria principal, es que los primeros se encuentran siempre ubicados en el procesador, y esta es una de las razones por lo que el acceso es mucho más rápido. Normalmente las máquinas mayores y más caras tienen un número superior de registros. Un registro se caracteriza por el número de bits que puede almacenar, en nuestra máquina será de 16 bits, y la opción de lectura no provocará que se afecte su contenido, es decir, no se borrará su información.

  • Buses.-

Es un conjunto de hilos eléctricos que transmiten señales en paralelo. Se utilizan para copiar el contenido de un registro a otro.

Los buses se utilizan porque la transferencia en paralelo es superior a la de serie.

Un bus puede ser unidireccional o bidireccional. Cuando se transfiere información en un único sentido es unidireccional, y será bidireccional cuando la información puede transferirse en los dos sentidos pero no simultáneamente.

Muchos dispositivos tienen la posibilidad de conectarse y desconectarse eléctricamente de los buses a los que está conectados físicamente.

Un bus cuyo dispositivo tenga la propiedad mencionada anteriormente. Se llama bus triestado, porque cada línea puede estar a 0,1 ó desconectada (3 estados).

Arquitectura de un registro de 8 bits:

Se encuentra formado por 8 biestables tipo D conectado cada uno de ellos al bus de salida por medio de un buffer.

El registro tiene 2 señales de control, por una parte se encuentra REL y por otra SAL.

REL.- Nos indica cuando debe cargar el registro, indicado por la señal del reloj.

SAL.- Concede el permiso de salida.

Cuando la señal del reloj (REL) está desactivada, el contenido del registro no es afectado por el hilo de entrada (o señal del bus), en cambio cuando se activa el registro se carga con el contenido del bus de entrada.

Cuando SAL está desactivada el registro está desconectado del bus de salida, y cuando SAL está desactivada, el contenido del registro pasa al bus de salida.

Tanto la señal REL como la señal SAL se transmiten en paralelo a cada uno de los biestables. En muchas ocasiones los registros pueden tener 2 buses de salida, necesitando 2 señales de control SAL para cada una de salida.

  • Multiplexores y Descodificadores.-

Estos circuitos se caracterizan por porque tienen una ó más líneas de entradas, y porque calculan 1 o varios valores de salida determinados, únicamente, por las actuales entradas.

Un multiplexor se caracteriza porque tiene 2n entradas de datos y 1 única salida, así como 1 entrada de control de n bits.

Tanto las entradas como la salida no tienen que tener 1 bits, sino que pueden ser de n bits distintos.

El inverso del multiplexor es el demultiplexor, que encamina su única entrada a una de las 2n salidas según el valor que tengan sus n líneas de control.

Si tienes 2n salidas, tienes n entradas de control. Si hay 4 salidas hay 4 = 2n 2 entradas de control.

El decodificador es un circuito combinacional que tiene n líneas de entrada y 2n salidas, numeradas desde el 0 hasta 2n-1:

Dependiendo de la entrada sólo se encuentra activa 1 salida.

El inverso del decodificador es el codificador, que tiene 2n entradas y n salidas. Se caracteriza porque sólo puede haber 1 línea de entrada a 1 y su número en binario aparece en la salida:

Esto es así porque la entrada 5 es la que está a uno, por lo tanto a la salida va a estar el nº de la puerta 5 en binario, o de la puerta que está a 1.

  • Unidades aritmético-lógicas y desplazadores.-

Todo ordenador necesita algún medio donde realizar las operaciones aritméticas y lógicas. El punto más simple es un sumador de n bits, que toma dos entradas de n bits, y produce su suma a la salida (igual que un sumador binario)

Un circuito más general será una ALU que se caracteriza por poseer 2 entradas y una salida, igual que el sumador, pero además contiene entradas y salidas de control. La ALU que realizaremos tendrá 2 entradas de control F0 y F1, de tal forma que:

F0

F1

C

0

0

A+B

0

1

A and B

1

0

A

1

1

Ā

Estas son las cuatro operaciones que realizará la máquina.

Van a existir 2 salidas de control N y Z, de modo que N se activa cuando el resultado es negativo y Z se activa cuando el resultado ha sido 0.

Aunque algunas ALU pueden realizar operaciones de desplazamiento, utilizaremos un desplazador para realizar dicha función:

Tiene una entrada de n bits y una salida del mismo tamaño, de modo que tenemos 2 señales de control, de modo que:

D0

D1

0

0

No desplaza

0

1

1 bit a la derecha.

1

0

1 bit a la izquierda.

1

1

____

La entrada 11 no se encuentra contemplada.

  • Relojes.-

Los circuitos de las computadoras funcionan normalmente al ritmo de un reloj, que es un dispositivo que emite una secuencia periódica de impulsos. Estos impulsos definen los ciclos de máquina. Durante cada ciclo tiene lugar alguna actividad básica, como la ejecución de una instrucción.

A menudo es útil dividir los ciclos en subciclos, debido a que las distintas partes de la microinstrucción puedan realizarse en 1 orden bien definido:

Tenemos una secuencia de 31 bits. Si esta instrucción se ejecuta en un único ciclo, esto se va a dividir en subciclos porque ha de pasar por la ALU.

Por ejemplo las entradas en la ALU deben estar disponibles y estabilizadas antes de poder almacenarse en su salida.

  • Memoria principal.-

La memoria principal es el lugar físico de almacenamiento de datos. Todas las memorias deben soportar las operaciones de lectura y escritura.

A tener en cuenta, un acceso a memoria es siempre, considerablemente más largo que el que se necesita para ejecutar una sola instrucción (microinstrucción). En consecuencia, el microprograma debe mantener los valores correctos en los buses de datos y dirección durante varias microinstrucciones, para no perderse la información. Para resolver este problema se utilizan 2 registros intermedios conocidos como RDM y RIM (registro de direcciones de memoria y registro de intercambio de memoria)

El RDM nos dice lo que hay que leer y todo son entradas, mientras que el RIM lleva esos datos y es un bus v del que se pueden extraer o introducir datos.

  • Encapsulado de los componentes.-

Existen 3 formas de encapsular todos los componentes:

  • Utilizando circuitos MSI.- Consiste en combinar en circuito MSI (integrados a media escala) con componentes como un registro, ALU, desplazador... cada uno en una pastilla. Posteriormente se interconexionan para formar la computadora.

  • Ventajas: La gran ventaja es la rapidez y el bajo costo de las pastillas o chips.

    Inconveniente: Gran nº de componentes necesario, igual que consume mucha energía y disipan mucho calor.

  • Pastillas en rodajas de bits.- Cada chip de rodaja de bit tendrá únicamente un bit de cada componente, por ejemplo, tendríamos un bit de la ALU, un bit de registro, etc. Para la construcción de una ALU de 16 bits necesitaremos 16 rodajas de ALU de un bit. El principal inconveniente que tienen es que son muy lentas.

  • Componentes del procesador.- Sería construir en un único chip llamado procesador toda la circuitería de la máquina.

  • 4.3 Microarquitectura.-

    A la hora de construir una máquina, tendremos 2 partes, la ruta de datos y la ruta de control.

  • Ruta de datos.-

  • Es la parte de la CPU que contiene la ALU, sus entradas y sus salidas. La ruta de datos de nuestra máquina será la de la figura del folio siguiente. A continuación se dan las explicaciones:

    • El CP contiene el valor del contador del programa (en el registro de la página siguiente aparece como PC)

    • AC almacena el valor de la salida de la ALU (acumulador)

    • PP o puerto de pila, apunta a la posición de la pila (en el folio aparece como SP)

    • RI (IR en el folio) almacena la instrucción actual que se está ejecutando.

    • RIT (TIR en el esquema) almacena la instrucción actual ligeramente modificada.

    • 0, +1 y -1: el -1 se implementa como 111111111.

    • MASCD y MASCP (AMASK y SMASK) son máscaras de registros del código de operación.

    • A, B, C, D, E, F son 6 registros de la máquina para almacenar ciertos valores.

    En el folio aparecen los siguientes términos: MAR, MBR y latch que se traducen como RDM, RIM y buffer respectivamente. Si no se usa la ALU tampoco se usa el desplazador y si sí se usa, el desplazador también. La operación de lectura ocupa dos ciclos de reloj.

    AQUÍ ESTÁ LA RUTA DE DATOS

    F0

    F1

    C

    0

    0

    A+B

    0

    1

    A and B

    1

    0

    A

    1

    1

    Ā

    La ALU tiene dos códigos de control F0 y F1.

    D0

    D1

    0

    0

    No desplaza

    0

    1

    1 bit a la derecha.

    1

    0

    1 bit a la izquierda.

    1

    1

    ____

    Tenemos 2 salidas en la ALU. N cuando la salida era negativa y Z cuando era 0. La salida de la ALU va a un desplazador que tiene dos señales de control. Esa salida de la ALU va al bus 0. El RIM es bidireccional y la RDM unidireccional. La memoria tiene una señal de control que nos dice si se produce una señal de lectura o una de escritura.

    La salida del desplazador irá al registro o a la memoria. Si por ejemplo quiero trabajar un bit de escritura, éste se almacenará en el RIM, va a la ALU a través de un multiplexor que nos dice si ese valor llega del RIM o del buffer A.

    MA = 0 no buffer A

    MA = 1 RIM

    El RDM se carga a partir del bus B. Necesitamos una señal de control que nos informa si se coge el dato de la RDM o no; esa señal es M0:

    M0 = 1 se carga del RDM

    M0 = 0 no se carga del RDM

    Para decidir si el RIM se carga tendremos otra señal M1:

    M1 = 1 se carga del RIM

    M1 = 0 no se carga del RIM

    En el RIM tendremos otras dos señales de control que llamaremos M2 y M3:

    M2 = 1 es una posición de lectura

    M3 = 1 es una posición de escritura y tiene que llevar lo que tiene aquí a la memoria.

    Tenemos 2 buffer, BA y BB. Estos buffer son necesarios ya que tiene que producirse un asentamiento de los datos. Además necesitamos 2 señales de control TA y TB que nos dicen cuando el dato es correcto, es decir, cuando podemos operar con dicho operando.

    • Instrucciones.-

    Para controlar la ruta de datos necesitamos 61 señales de control que son:

        • 2 de la ALU

        • 2 de desplazamiento

        • 2 para el buffer A y B

        • 4 para RDM y RIM

        • 1 Multiplexor A

        • 2 para las operaciones de memoria R y W (una para cada una)

        • 16 para controlar el bus A

        • 16 para controlar el bus B

        • 16 para controlar el bus C

    Necesitamos 16 por bus para que me diga qué registros almacenan datos en cada caso para los tres buses.

    Las señales de control son demasiadas. Para incluirlas necesitamos algún mecanismo tal como un decodificador con 4 señales de control y así reducimos de 16 señales de control para cada bus a 4.

    Podemos sustituir las señales T1 y T2 por un ciclo de reloj que es un impulso que se puede dividir en subciclos.

    La señal de lectura LEC es igual a M2, entonces se puede quitar M2 y quedo LEC. Lo mismo ocurre con la señal ESC para RDM, donde nos cargamos M3.

    Se añade una señal de control más, para controlar el paso de información al RIM o a los registros. Esta señal de control es Perc.

    La instrucción se va a encontrar de la siguiente forma:

    1

    2

    2

    2

    1

    1

    1

    1

    1

    4

    4

    4

    8

    M

    U

    X

    A

    C

    O

    N

    D

    U

    A

    L

    Desplazador

    R

    I

    M

    R

    D

    M

    L

    E

    C

    E

    S

    C

    P

    E

    R

    C

    A

    B

    C

    Dirección

    0 recoge el dato del bus A

    Mux A

    1 recoge el dato del bus B

    COND nos indica donde se encuentra la siguiente instrucción, es decir, si se va a producir un salto o pasa a la siguiente instrucción.

    0 = No salta

    1 = salta si N = 1

    2 = Salta si Z =1

    3 = Salta siempre al valor dirección (8 bits)

    Desplazador:

    D0

    D1

    0

    0

    No desplaza

    0

    1

    1 bit a la derecha.

    1

    0

    1 bit a la izquierda.

    1

    1

    ____

    0 No se activa el bus C

    PERC

    1 Información circula por el bus C

    AQUÍ ESTÁ LA RUTA DE CONTROL

    • Cronología de las microconstrucciones.-

    La tecnología de nuestra máquina se encontrará formada mediante la carga de los buffer A y B. Posteriormente con la operación de la ALU y por último se almacenará el resultado en los registros o en la memoria. Por tanto, se puede llegar a la conclusión de que nuestra máquina se encontrará formada por un reloj de 4 fases, es decir, 4 subciclos durante cada uno de ellos hará:

  • Carga de la siguiente instrucción a ejecutar en el RIM que es el registro de microinstrucciones.

  • Se produce la salida de los contenidos del registro al buffer A y B y se almacena en los buffer A y B.

  • Cuando las entradas a la ALU están establecidas se realiza la operación 4 se espera un tiempo a que el desplazador estabilice la salida. A la vez carga el RDM si fuera necesario.

  • Una vez que está establecida la salida del desplazador se almacena el bus C en los registros o en la memoria.

  • Nuestra máquina tendrá una memoria de control donde se almacenarán las microinstrucciones. El ancho de palabra de la memoria es igual a la microinstrucción y a las direcciones son 28 = 256 por los bits capaz de direccionar la instrucción. Entonces la capacidad de la memoria es de 256*32.

    En cada subciclo se realiza lo siguiente:

    1er subciclo: la memoria de control almacena en el RIM el contenido de la dirección que apuntaba el CMP (RDM de la memoria de control). El RIM solamente se carga durante el primer subciclo, y durante los otros tres no se altera independientemente de lo que suceda en el CMP (RDM).

    2º subciclo: Una vez que el RMI se encuentra estabilizado, los campos de la microinstrucción A y B hace que los datos salgan a los buses A y B, necesarios para activar el registro o los registros de los que queremos leer. El reloj activa los buffer A y B proporcionando las entradas estables a la ALU durante este ciclo; mientras los datos salen de los buses A y B la unidad de incremento de la sección de control incrementa el CMP en 1, preparándose para la siguiente microinstrucción.

    3er subciclo: se les da a la ALU y al desplazador tiempo suficiente para que produzcan resultados válidos y estables. El campo de microinstrucción MUSA (AMUX en las fotocopias) mete la entrada izquierda a la ALU, que puede venir del bus A o del RIM. Mientras que la ALU y el desplazador están procesando el RDM se carga con el contenido del bus B, siempre y cuando el campo RDM de la microinstrucción esté activo.

    4º subciclo: Una vez realizado el desplazamiento y la operación de la ALU, se debe almacenar el resultado o en el registro (o los registros) o en el RIM dependiendo de los campos PERC y RIM de la microinstrucción. Si el resultado se tiene que almacenar en los registros se anotará siempre cuando:

  • PERC se encuentre a 1 (PERC activo)

  • Nos encontramos en el cuarto subciclo.

  • Tenga un valor el campo C de la microinstrucción.

  • Si, por el contrario, el campo RIM de la microinstrucción está activo se almacenará el resultado en el RIM. Las dos señales que controlen la memoria, LEC y ESC están activas mientras estén presentes en el RIM.

    Uno de los puntos más difíciles de la máquina es cuál es la siguiente instrucción. Por esta razón dotamos a cada microinstrucción de dos campos adicionales:

  • Campo COND

  • Campo dirección.

  • La elección de la siguiente microinstrucción la realiza la caja que se llama lógica de microsecuenciamiento (micro-sec en las fotocopias-logic) durante el subciclo 4 cuando las salidas de la ALU N y Z son válidas (esto no quiere decir que ambos estén a uno sino que son válidas).

    La salida de esta caja controla el mutiplexador Mmux, que nos servirá para decidir si el CMP se carga con la dirección de la siguiente microinstrucción, o por el contrario con el valor del campo dirección.

    El campo condición podía tomar 4 valores: 0 (no realiza un gran salto); 1 (que salta si N = 1); 2 (salta si Z = 1); 3 (salta siempre: se toma el valor del campo de la microinstrucción y se almacena en la siguiente).

    Suponemos que el campo COND se encuentra almacenando I0 e I, entonces se va a producir salto (señal de microsecuenciamiento = 1)

    Vamos a establecer el valor que toma la señal para que se produzca el salto de la dirección:

    I1

    I2

    0

    0

    0

    1

    1

    0

    1

    1

    El que se quiera producir un salto se especifica en el campo COND.

    Sabemos que el campo COND va a la lógica de microsecuenciamiento y queremos saber la lógica de esa caja porque me va a decir ésta cuándo es 0 y cuándo es 1.

    Entonces, ¿cuándo la señal de secuenciamiento vale 1?

    Esto se da cuando: CON 01 y N = 1, COND 10 y Z =1, COND 11 y Z y N dará lo mismo porque salta siempre.

    Esto quiere decir:

    Esta sería la lógica de la que estaría formada la lógica de microsecuenciamiento.

    • Un ejemplo de macroestructura.-

    Normalmente no se realiza propagación a niveles tan bajos de propagación, se utilizan normalmente lenguajes de alto nivel.

    Cuando nosotros nos definimos un nuevo lenguaje estamos creando una máquina virtual sobre la propia máquina, de tal forma que hemos construido una máquina de nivel superior a partir de una máquina básica.

    La máquina virtual tiene un nivel superior y utiliza lenguaje de alto nivel.

    Máquina de nivel superior

    Para pasar de un lenguaje a otro hay que utilizar técnicas de traducción e intérpretes.

    Así nuestra máquina contendrá microinstrucciones como +, mueve, -...

    El juego de nuestra máquina de nivel superior (virtual) va a ser:

    Binario

    nemónico

    instrucción

    Significado

    0000xxxxxxxxxxxx

    CARD

    Carga directa

    ac = M[x]

    0001xxxxxxxxxxxx

    ALMD

    Almacenamiento directo

    M[x] =ac

    0010xxxxxxxxxxxx

    SUMD

    Suma directa

    ac=ac+M[x]

    AQUÍ ESTÁN LAS INSTRUCCIONES

    Las instrucciones que de nuestra nueva máquina, se van a encontrar por un campo cargado de operación de 4 bits y por un campo dirección de 12 bits. El campo de dirección es de 12 bits porque nuestra máquina va a tener un tamaño de 212 = 4096*16 bits.

    Nuestra máquina se encontrará formada por 3 registros accesibles para el programador:

    AC que va a ser el acumulador, AP que va a ser el puntero de pila y CP que va a ser el contador del programa.

    CARD: Carga en el acumulador el valor de la posición de la memoria. Esta instrucción CARD es de nuestro lenguaje superior.

    ALMD: Carga a la memoria el valor del acumulador.

    SUMD: Carga en el acumulador el valor de éste + el valor de la posición de memoria.

    RESD: Carga en el acumulador el valor de éste - el valor de la posición de memoria.

    A partir de 1111000000000000 se utilizan los 0 porque para desepilar no se utiliza ninguna dirección.

    Puntero de pila:

    Voy a tener reservado para la pila un espacio reservado dentro de nuestra máquina entre los 4096. a esa pila tenemos un puntero que va a ser el pp.

    Con este pp voy a bajarlo y salvo en la posición que nos encontramos y a ese espacio apunta pp. Esto se utiliza para los bucles y para los saltos, de modo que por esto es bueno salvar todos los registros del programa cuando hacemos un procedimiento.

    En la página siguiente se muestran todas las instrucciones.

    Las instrucciones de este programa se encuentran en la memoria de datos y no en la memoria de control.

    Procesamiento digital de señales tema 4º El procesador. Microprogramación

    50

    R1

    R2

    n

    n

    registro

    R1

    R2

    R1

    R2

    8

    paralelo

    serie

    Se transmiten 8 bits a la vez

    Se transmite 1 solo bit

    8

    8

    D

    Q

    D

    Q

    D

    Q

    D

    Q

    D

    Q

    D

    Q

    ...

    Contador

    salida

    D0

    D1

    D2

    D7

    Bus de 16 Bits

    Bus A

    Bus B

    REL

    SAL 1

    SAL 2

    Bus C

    MUX

    2n entradas

    ...

    3

    n

    3

    n

    2n salidas

    ...

    DEMUX

    DECODIF

    CODIF

    1 0 1

    ALU

    A

    B

    F0

    F1

    N

    Z

    Desplazador

    n

    n

    D0

    D1

    R

    D

    M

    Memoria

    RIM

    CMP

    MEM

    RIM

    direc

    N

    z

    2

    COND

    M. virtual

    M. básica

    lenguaje

    Lenguaje binario 0, 1

    Transductor para pasar de un lenguaje a otro

    Máquina

    básica

    16

    4096*16

    .

    .

    .

    4096

    pp

    Desplazador

    M

    E

    M

    O

    R

    I

    A

    RIM

    RDM

    mux

    Buffer B

    Buffer A

    16 registros

    LEC

    ESC

    M0

    M1

    M2 M3

    Mux A

    F0

    F1

    N

    Z

    D0

    D1

    T0

    T1

    A

    B