LABORATORIO DE ESTRUCTURA DE COMPUTADORES Y FUNDAMENTOS DE ARQUITECTURA Curso 2005/2006

UNIDAD ARITMÉTICO-LÓGICA Introducción
Se han encontrado dos modelos diferentes provechosos en la descripción y el diseño de los sistemas digitales: el modelo de sistema y el modelo algorítmico. El modelo de sistema es adecuado para introducir los conceptos básicos y para analizar y diseñar sistemas simples, que se usan como componentes de sistemas más complejos. El modelo algorítmico es atractivo para describir estos sistemas más complejos. Un sistema digital combinacional está definido por un alfabeto de entrada I, un alfabeto de salida O y una función F de I en O. El valor de la salida en cualquier instante depende sólo del valor de la entrada en el mismo instante. Esto es, z  t = F  x  t  donde x(t ) pertenece al conjunto de entrada I (alfabeto de entrada) y z (t ) al conjunto de salida O (alfabeto de salida), siendo finitos ambos conjuntos. En consecuencia, un sistema combinacional se especifica por la terna (I, O, F), con F: I → O. Puesto que la función F no depende del tiempo podemos eliminar la t y escribir z= F  x Por ejemplo, un sistema combinacional tiene como entrada un dígito decimal y como salida el resto cuando la entrada se divide por 3. Los conjuntos de entrada y salida son I = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}, O = {0, 1, 2} Y la función F es x 0 1 2 3 4 5 6 7 8 9 z = F(x) 0 1 2 0 1 2 0 1 2 0 Que también puede describirse usando la expresión aritmética z= x mod 3, 0x9 Un sistema digital secuencial está definido por un alfabeto de entrada I, un alfabeto de salida O, un conjunto de estados internos Q, una función G de I™Q en Q y una función H de I™Q en O. Por ejemplo, un sistema secuencial con entrada x y salida z tiene como conjuntos de entrada y salida a I ={a , b} y O ={ p , q } , respectivamente. El sistema produce una salida en el instante t de valor q siempre que los últimos tres valores de entrada sean una a seguida de dos b's consecutivas. Esto es q si x t − 2= a y x t −1= b y x  t = b z  t = p en otrocaso Para obtener la descripción de estado hemos de determinar primero al conjunto de estados. Para ello hemos de identificar a las clases de secuencias de entrada equivalentes con respecto a las salidas presentes y futuras. En este caso existen tres clases de secuencias, definidas por 1. Aquellas que terminan en ab 2. Las que terminan en a 3. Ninguna de las anteriores De acuerdo con esto definiremos tres estados, S1, S2 y S3, para representar a estas tres clases de secuencias de entrada. La función de transición se obtiene considerando las transiciones desde una clase a otra para una entrada dada. Por ejemplo, si el sistema está en el estado S3

{

LEYFA - Curso 2005/2006

Práctica: “ALU”

página 1 de 6

Curso 2005/2006 p= x · y=x · ∑ Y i · 2 = ∑ x · 2 · Y i i i i =0 i =0 n−1 n−1 Práctica: “ALU” página 2 de 6 . Ponemos LEYFA . X n− 2 . Salida En principio. En tanto que la suma y la resta son fácilmente implementables mediante circuitos combinacionales. p S3. La Unidad Aritmético-Lógica La Unidad Aritmético-Lógica es la parte del sistema computador donde se efectúan las operaciones aritméticas y lógicas sobre los datos. la multiplicación y la división resultan excesivamente complejas para la implementación combinacional. cualquier sistema digital podría ser modelado en forma de sistema secuencial: el conjunto Q representa todos los estados físicos en los cuales puede encontrarse el sistema. la función G describe los cambios de estado en función del estado actual y de las entradas. en la representación binaria habitual en la que el valor del número es x=∑ X i⋅2i . Q es el conjunto de todos los posibles contenidos. y de hecho existen circuitos integrados que realizan estas operaciones. y la función H define el valor de las salidas también en función del estado actual y de las entradas. Desglosando suficientemente el algoritmo se puede llegar a pasos implementables mediante módulos combinacionales o secuenciales existentes. la componente de datos y la componente de control. En cambio estas operaciones permiten ser implementadas mediante Máquinas Algorítmicas. En un circuito como una ALU con dos registros de 16 bits. lo que permite representar números en el rango 0…2n−1. p S3. El método habitual para diseñar estos sistemas se apoya en las dos siguientes características: a) El estado se descompone en dos partes. la función G debería definir para cada uno de esos estados y su combinación con el conjunto de entradas cuál sería el nuevo estado interno. x= X n−1 . Entrada x(t) Estado Presente a b S1 S2. p Estado Siguiente. p S3 S2. lo cual asciende a 65536² (más de cuatro mil millones). i =0 n−1 El producto de dos números de n bits ocupa 2n bits. es decir. Las ALUs de cualquiera de los procesadores actuales son capaces de realizar una amplia variedad de operaciones entre las que. mediante un algoritmo. X 1. puesto que ahora la secuencia termina con una a. Los números los representaremos mediante vectores de n bits. sencillamente ello es imposible. especificando una secuencia de cálculos o transformaciones más simples. X 0  . Las funciones de transición de estado (G) y de salida (H) se especifican en la tabla siguiente. Sin embargo.(correspondiente a la clase (3)) y la entrada es a la nueva clase será S2. multiplicación y división). con toda seguridad. Sea la multiplicación de números enteros positivos. resta. o lo que es lo mismo. . en muchos casos las funciones H y G se definen de forma implícita. b) Si la transformación de los datos es demasiado compleja para hacerla en un solo paso. se encuentran las cuatro operaciones aritméticas elementales (suma. Sin embargo no deja de ser una definición teórica. q S2 S2. p S1. Se llaman Máquinas Algorítmicas a aquellos sistemas digitales que realizan un algoritmo. Veamos un posible algoritmo para calcular p=x·y. Esta secuencia es controlada por la componente de control. se descompone en una secuencia de transformaciones más simples.

los n+1 bits en el segundo paso. n−1. n−1 2 (n) que cumple p = x ⋅ y . Se propone. Ahora bien. la siguiente Unidad de Datos de nuestro multiplicador: LEYFA . y también un sumador de n bits con acarreo. …. y luego sumar. También podemos ir sumando conforme se calculan los productos parciales de la siguiente forma: s 0 =0 . …. El factor 2n que multiplica a x sólo indica que el número ha de estar alineado n bits a la izquierda. El producto se obtiene en n pasos. n−1. En cada iteración del algoritmo se realiza la operación A[2n:n] := A[2n−1:n] + M (i) o bien A[2n:n] := A[2n−1:n] + 0 (ii). y así sucesivamente. de esa forma por el bit Q[0] van apareciendo sucesivamente Y0. seguida por una suma de dos operandos: los n bits de más a la izquierda de p ( j ) con los n bits del producto parcial x ⋅ Y j (lo cual puede producir un acarreo y hay que prever un bit adicional a la izquierda de p ( j ) ). A su vez. …. 1. es decir que los productos parciales pi y los acumulados parciales s(i) deben de ser de 2n bits. Como p tiene 2n bits las operaciones hay que hacerlas con ese ancho de palabra. según que el bit Q[j] (≡ Y j ) sea 1 (i) o cero (ii). del registro Q se debe extraer en cada iteración un bit empezando por el de más a la derecha. Una forma más eficiente es hacer que el desplazamiento lo haga el acumulado parcial. o sea con la mitad izquierda del producto parcial. Yn-1. i s i1 =s i  pi . …. el término x·Yi tiene n bits. se va llenando desde la izquierda un bit en cada etapa y el registro Q se va vaciando al mismo ritmo se pueden solapar ambos registros. y sucesivamente un bit más de la mitad derecha a cada paso. un registro Q de n bits donde guardar el multiplicador y.Es decir que hay que realizar la operación p i= x · 2 · Y i n veces para i = 0. los n bits de la izquierda en el primer paso. luego el siguiente. Obteniendo p=s(n). de izquierda a derecha. los bits A[n−1:0]. Y1. 1. y por último se hace un desplazamiento aritmético a la derecha de un bit (el factor ½). un registro M de n bits donde guardar el multiplicando x. se dejan fijos los productos parciales y se desplazan a la derecha los acumulados parciales: p (0) = 0 1 p ( j+1) = ( p ( j) + 2n ⋅ x ⋅ Y j ) para j = 0. Para facilitar la comprobación es conveniente hacer que Q sea un registro de desplazamiento hacia la derecha y en cada etapa se desplaza un bit. haciendo que A[n−1:0] haga las veces de Q. Como la mitad derecha de A. Cada paso consiste en la multiplicación de x por un dígito binario (0 ó 1) para formar x ⋅ Y j . y el factor 2i sólo indica que hay que desplazar al producto x·Yi en i bits a la izquierda. pues. El registro A se pone a cero inicialmente y luego se va llenando.Curso 2005/2006 Práctica: “ALU” página 3 de 6 . 1. para i = 0. Para realizar este algoritmo es necesario: un registro de desplazamiento a la derecha A de (2n+1) bits donde guardar los acumulados parciales p ( j ) .

M[n−1:0]. END. 5: A[2n−1:0]← A[2n:1] ║ if (SC <> 0) goto 3 ║ if (SC = 0) goto 1 . 2: M[n−1:0]←x ║ A[n−1:0]←y ║ A[2n:n]←0 ║ done←0 ║ SC←’n−1’. Output p vector_de_bits[2n]. done boolean.y C A[2n−1:n] x A[n−1:0]≡Q M[n−1:0] A[0] Cout SUM 0 El algoritmo a realizar se puede formalizar de la siguiente forma: MULTIPLICADOR {Input x.Curso 2005/2006 Práctica: “ALU” página 4 de 6 . 0). 4: A[2n:n]←ADC(A[2n−1:n]. 3: SC←DEC(SC) ║ if A[0]=0 goto 5. LEYFA . SC contador[k] } BEGIN 1: if NOT(start) goto 1 ║ done ←1. M registro[n]. start boolean. Se han introducido algunos elementos nuevos en el algoritmo que se discuten a continuación. Local A registro[2n+1]. y vector_de_bits[n].

start y done. que depende de tres señales de condición. comprobándose si ha llegado a cero en el paso 5. También hay dos señales nuevas. Debe tener un tamaño (nº de bits) k suficiente para contar n. 2k −1 < n ≤ 2k .Curso 2005/2006 Práctica: “ALU” página 5 de 6 . carga en paralelo de este mismo registro A[2n:n] con el resultado de la suma con acarreo. puesta a cero del registro A[2n:n]. una externa (start) y dos que provienen de la Unidad de Datos.Dado que los n pasos por los que debe pasar el algoritmo son repetitivos conviene tener un elemento contador (SC) que los cuente. el método tradicional requiere de tres biestables. escribiéndose la tabla de próximo estado así: EP S1 S2 S3 S4 S5 000 S1 S3 S5 S5 S3 001 S1 S3 S5 S5 S1 010 S1 S3 S4 S5 S3 Entradas: start – A[0] – SC=0 011 100 101 S1 S2 S2 S3 S3 S3 S4 S5 S5 S5 S5 S5 S1 S3 S1 ES (estado siguiente) 110 S2 S3 S4 S5 S3 111 S2 S3 S4 S5 S1 La tabla de salida (máquina de Moore) con las señales de control que corresponden a cada estado: Estado LoadM ClearA LoadA ShiftA DecSC Done S1 0 0 0 0 0 1 S2 1 1 0 0 0 0 S3 0 0 0 0 1 0 S4 0 0 1 0 0 0 S5 0 0 0 1 0 0 A partir de aquí hay que asignar un código a cada estado. Queda por diseñar la Unidad de Control que secuencie al algoritmo y genere las señales de control. Este elemento contador se inicia en el paso 2 al valor (n−1) y luego se decrementa en el paso 3. El diseño de una máquina de estados que responda al diagrama anterior se puede hacer de muchas not start A[0]=1 start S4 A[0]=0 S1 S2 S3 SC!=0 SC=0 S5 formas. Directamente del “listado” anterior ponemos el diagrama de estados. Por ejemplo. desplazamiento a la derecha de todo el registro A. Las operaciones que hay que realizar sobre los registros son: carga en paralelo de los factores x e y en los registros M[n−1:0] y A[n−1:0] respectivamente. una para arrancar el cálculo y la otra para señalar su conclusión. elegir el tipo de biestable y hallar las ecuaciones de excitación de los mismos. Estas operaciones se realizan mediante señales de control activadas en los momentos adecuados. LEYFA . es decir. Igualmente sobre el contador las operaciones de carga en paralelo y descontar.

multiplicación de números con signo. antirrebote de los pulsadores. Un pulsador dará la señal start y la señal done se mostrará mediante un LED. John Wiley & Sons. 1 contador 74LS161. Gajski. como parte de una ALU. algoritmo de la división. o bien como máquina de estados diseñada expresamente. el sumador con dos circuitos 74LS382. 1985. Prentice-Hall Iberia. La sección de datos se realizará según el diagrama de bloques explicado anteriormente. responder a los pulsadores y realizar las operaciones requeridas sin excepciones. puertas. La sección de control se realizará según el método que se prefiera. Enunciado Se realizará el diseño y montaje de una unidad multiplicadora de números binarios sin signo de 8 bits. memoria para preprogramar los datos de entrada y salida. Miloš D. 1 registro 74LS373. implementándose el registro A con 4 circuitos 74LS294 y un biestable ½·74LS74 (17 bits). uso de registros y visualizadores montados en puntos críticos para ayudar a la depuración del circuito. junto con el resultado. y también. “DIGITAL SYSTEMS AND HARDWARE/FIRMWARE ALGORITHMS”. mediante módulos TIL311 directamente en hexadecimal (un total de 6 módulos visualizadores). Los datos se introducen a mano mediante interruptores y se visualizarán. pulsadores. etc. biestables 74LS74. etc. La valoración de la práctica se basará en los siguientes puntos: • funcionamiento. Daniel D. La teoría se puede encontrar en varios libros. como muestra el esquema siguiente. construir el reloj. el circuito montado debe funcionar correctamente. • ampliaciones. ampliación del ancho de palabra (a 12 ó 16 bits).Curso 2005/2006 Práctica: “ALU” página 6 de 6 . 1997. Ercegovac / Tomás Lang. LEYFA . 4 registros de desplazamiento de 4 bits 74LS194. por ejemplo. minimizando los biestables y optimizando la circuitería combinacional. o bien según el esquema de un biestable activo propuesto antes. • recursos. Material: 2 protoboards Fuente de alimentación Componentes necesarios: 2 ALUs 74LS382. el registro M con un circuito 74LS373 (ó 74LS574). o lo que es lo mismo un biestable activo por estado.Una técnica más inmediata de diseño de la unidad de control es la conocida por “one-hot”. Información necesaria Hojas de datos de todos los componentes (libro de la familia TTL). y el contador con un circuito 74LS161 (ó 74LS163). módulos visualizadores TIL311. “PRINCIPIOS DE DISEÑO DIGITAL”.