diseno~ de unidad i.p. de punto otante de doble precisi on

57
Dise˜ no de unidad I.P. de punto flotante de doble precisi´ on Juan Pablo Amorocho D. Asesor : Fredy E. Segura M.Sc. Co-asesor: Rafael A. Garcia M.Sc. Universidad de los Andes Bogot´ a D.C., julio de 2003

Upload: others

Post on 30-Jul-2022

6 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Diseno~ de unidad I.P. de punto otante de doble precisi on

Diseno de unidad I.P. de punto flotante de

doble precision

Juan Pablo Amorocho D.

Asesor : Fredy E. Segura M.Sc.Co-asesor: Rafael A. Garcia M.Sc.

Universidad de los Andes

Bogota D.C., julio de 2003

Page 2: Diseno~ de unidad I.P. de punto otante de doble precisi on

Resumen

Este Proyecto de grado trata las arquitecturas para sumadores, multiplica-dores y divisores enteros, y su incorporacion en una unidad de aritmeticade punto flotante de 64 bits, para ser implantada en una FPGA. El trabajoexplora el estado del arte de las arquitecturas para estas operaciones basicas,al mismo tiempo repasa a la teorıa de de la representacion de punto flotantey el funcionamiento de su aritmetica. El resultado final de este proyecto degrado fue la creacion de un nucleo de propiedad intelectual (I.P.) tipo ca-ja negra y una descripcion VHDL de las operaciones aritmeticas basicas enpunto flotante.Un resultado intermedio fue la elaboracion de un programapara generacion automatica de sumadores enteros tipo KS y multiplicadoresdel tipo directo lineal.La conclusion mas significativa es el hecho que una FPGA no es apta parala implantacion de dicha unidad de punto flotante debido a la arquitecturapreestablecida de este dispositivo logico programable.

Page 3: Diseno~ de unidad I.P. de punto otante de doble precisi on

Dedicado a Sarah E. Dietrich y Juan David Correa.

Quiero dar infinitas gracias a mis viejos, Enrique y Raquel, por darme la

oportunidad, y a mis amigos Clara, Juan, David y Camilo por estar ahı.

A mi amigo Rafael Garcia ℵ-gracias por su ayuda en este trabajo.

Page 4: Diseno~ de unidad I.P. de punto otante de doble precisi on

Indice general

1. Fundamentos de aritmetica binaria de punto de flotante y elestandar IEEE 754 1

1.1. Representacion de numeros reales en notacion de punto flotante 1

1.1.1. Representacion en punto flotante . . . . . . . . . . . . 2

1.1.2. Numeros normalizados . . . . . . . . . . . . . . . . . . 2

1.1.3. Analisis de error . . . . . . . . . . . . . . . . . . . . . 3

1.2. El estandar IEEE 754 . . . . . . . . . . . . . . . . . . . . . . . 4

1.2.1. El formato de doble precision . . . . . . . . . . . . . . 4

1.3. Aritmetica de punto flotante . . . . . . . . . . . . . . . . . . . 6

1.3.1. Suma y multiplicacion en punto flotante . . . . . . . . 6

1.3.1.1. Multiplicacion en punto flotante . . . . . . . . 6

1.3.1.2. Propiedades algebraicas de la multiplicacionen punto flotante . . . . . . . . . . . . . . . . 7

1.3.1.3. Suma en punto flotante . . . . . . . . . . . . 7

1.3.1.4. Propiedades algebraicas de la suma binariaen punto flotante . . . . . . . . . . . . . . . . 8

1.3.2. Resta y division en punto flotante . . . . . . . . . . . . 8

2. Componentes combinacionales y de almacenamiento 10

2.1. Selectores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10

2.2. Decodificadores de prioridad . . . . . . . . . . . . . . . . . . . 12

3

Page 5: Diseno~ de unidad I.P. de punto otante de doble precisi on

2.3. Comparadores de magnitud . . . . . . . . . . . . . . . . . . . 12

2.4. Registros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12

2.5. Registros de corrimiento . . . . . . . . . . . . . . . . . . . . . 15

3. Implantacion en componente fısico de operaciones aritmeti-cas 18

3.1. Sumador binario . . . . . . . . . . . . . . . . . . . . . . . . . 18

3.1.1. Sumador RCA . . . . . . . . . . . . . . . . . . . . . . . 19

3.1.2. Sumadores de propagacion mınima de acarreo . . . . . 19

3.1.2.1. Sumadores tipo CLA . . . . . . . . . . . . . . 20

3.1.3. Sumadores tipo PPA . . . . . . . . . . . . . . . . . . . 22

3.2. Multiplicadores . . . . . . . . . . . . . . . . . . . . . . . . . . 23

3.3. Division . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25

4. Arquitecturas finales y resultados 29

4.1. Arquitecturas basicas ecogidas . . . . . . . . . . . . . . . . . . 29

4.1.1. Sumador/Restador . . . . . . . . . . . . . . . . . . . . 29

4.1.2. Multiplicador . . . . . . . . . . . . . . . . . . . . . . . 30

4.1.3. Divisor . . . . . . . . . . . . . . . . . . . . . . . . . . . 30

4.2. Descripcion de bloques funcionales . . . . . . . . . . . . . . . 30

4.2.1. Sumador . . . . . . . . . . . . . . . . . . . . . . . . . . 30

4.2.2. Multiplicador . . . . . . . . . . . . . . . . . . . . . . . 31

4.2.3. Divisor . . . . . . . . . . . . . . . . . . . . . . . . . . . 31

4.3. Generacion de codigo VHDL . . . . . . . . . . . . . . . . . . . 34

4.3.1. Ejemplo . . . . . . . . . . . . . . . . . . . . . . . . . . 34

5. Conclusiones 39

A. Apendices 41

A.1. Codigo multiplicador . . . . . . . . . . . . . . . . . . . . . . . 41

A.2. Codigo sumador . . . . . . . . . . . . . . . . . . . . . . . . . . 44

4

Page 6: Diseno~ de unidad I.P. de punto otante de doble precisi on

Indice de figuras

1.1. Representacion punto de flotante en la recta real . . . . . . . . 5

1.2. Formato punto flotante de doble precision . . . . . . . . . . . 5

3.1. Circuito de un Full Adder. Tomado de [1] . . . . . . . . . . . . 21

3.2. Sumador RCA . . . . . . . . . . . . . . . . . . . . . . . . . . . 21

3.3. Sumador CLA de 4-bits con generador CLA. Tomado de [1] . 21

3.4. Vertice de grafica. . . . . . . . . . . . . . . . . . . . . . . . . . 27

3.5. Sumador Brent-Kung tomado de [3] . . . . . . . . . . . . . . . 27

3.6. Sumador Kogge-Stone tomado de [3] . . . . . . . . . . . . . . 27

3.7. Sumador KSA de 8 bits . . . . . . . . . . . . . . . . . . . . . 27

3.8. Dos multiplicadores rapidos de 8 bits. (a) lineal (b) arbol.Tomado [8] . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28

4.1. Diagrama de bloques de la arquitectura de sumador de puntoflotante . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32

4.2. Diagrama de bloques de la arquitectura de multiplicador depunto flotante . . . . . . . . . . . . . . . . . . . . . . . . . . . 33

4.3. Diagrama de bloques de la arquitectura de divisor de puntoflotante . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33

4.4. Resultados de simulacion de multiplicador directo lineal de 16bits. Simulacion realizada en Max+Plus II 10.1 . . . . . . . . 38

5

Page 7: Diseno~ de unidad I.P. de punto otante de doble precisi on

Indice de cuadros

1.1. Formato doble precision . . . . . . . . . . . . . . . . . . . . . 5

1.2. Esquema para la multiplicacion en punto flotante . . . . . . . 7

1.3. Esquema para la suma en punto flotante . . . . . . . . . . . . 8

1.4. Esquema para la division en punto flotante . . . . . . . . . . . 9

2.1. codigo fuente de un selector 2-a-1 . . . . . . . . . . . . . . . . 11

2.2. codigo fuente de un selector 4-a-1 . . . . . . . . . . . . . . . . 11

2.3. Implementacion VHDL de un decodificador de prioridad 16-a-4 13

2.4. Implantacion de comparador de magnitud universidad de 16bits en configuracion paralela . . . . . . . . . . . . . . . . . . 14

2.5. Descripcion VHDL de un registro de 4 bits . . . . . . . . . . . 15

2.6. Tabla de operacion de registro de corrimiento con carga paralela 16

2.7. Descripcion VHDL tipo RTL de un registro de corrimiento.Circuito tomado de [1] . . . . . . . . . . . . . . . . . . . . . . 17

3.1. Algoritmo para multiplicacion binaria basado en corrimientos . 24

3.2. Resumen de las caracterı sticas en tiempo y area para algunossumadores, multiplicadores y divisores . . . . . . . . . . . . . 26

0

Page 8: Diseno~ de unidad I.P. de punto otante de doble precisi on

Capıtulo 1

Fundamentos de aritmeticabinaria de punto de flotante yel estandar IEEE 754

Para la completa compresion de la aritmetica de punto flotante no solo bastacon saber como se realizan las operaciones basicas, es tambien necesario sabercuales son las propiedades de dicha representacıon, cuales son sus ventajas ydesventajas de dicha representacion . Una de dichas ventajas es el estandar IEEE754, el cual posibilita un unico tratamiento de esta representacion. Este capıtuloexpone las propiedades de la representacion en punto flotante, la teorıa de laaritmetica de punto flotante y algunos apartes del estandar IEEE 754.

1.1. Representacion de numeros reales en no-

tacion de punto flotante

Para realizar la operacion 8/3−5/8 en una calculadora comun es necesariointroducir estos operandos dentro de la maquina. ¿Como se almacenan estossımbolos dentro de la calculadora? Este dispositivo almacena la informacionde las operaciones en una memoria de acceso aleatorio, RAM . 8/3 = 2, 6no puede ser representado exactamente en una memoria de capacidad finitadado que este numero tiene un periodo infinito igual a 6. Por otro lado, el

1

Page 9: Diseno~ de unidad I.P. de punto otante de doble precisi on

1.1. REPRESENTACION DE NUMEROS REALES EN NOTACION DEPUNTO FLOTANTEIEL2-2003-I-02 2numero de dıgitos de −5/8 posee una parte decimal finita.

¿Como representar, con una misma tecnica, estos dos numeros? Existenvarias representaciones como el palote flotante [Matula y Kornerup (1995)],el logaritmo signado [Swartzlander y Alexopoulos (1975)] y el punto flotante.Sin lugar a dudas la representacion mas conocida y utilizada es la represen-tacion de punto flotante[2].

1.1.1. Representacion en punto flotante

La representacion de punto flotante consta de una base β y una precisionp. De esta manera un numero real q se representa como ±b0•b1 . . . bp−2bp−1β

E.Adicionalmente eMAX y eMIN son otros dos parametros de la representa-cion de punto flotante que indican respectivamente el mayor y menor valoradmisible del exponente. Ası por ejemplo con p = 3 y β = 10, el nume-ro 0,1 se representa exactamente, como 1,00 × 10−1. Sin embargo, al elegirp = 24 y β = 2 el numero 0, 1 adopta una nueva representacion aproximada,1,10011001100110011001101101× 2−4. Existen dos razones por las cuales unnumero no logre poseer una representacion de punto flotante exacta, la pri-mera de ellas se observa en el ejemplo de 0.1, aunque este numero posee unarepresentacion decimal finita, 1 × 10−1, su representacion exacta con β = 2es infinita, esto ocurre ya que el conjunto de los numeros punto flotante esno-denso, de esta forma al representar un numero real es posible que este seencuentra entre dos numeros punto flotante. Solo los numeros de la formax/2k tienen representacion exacta en punto flotante. La otra razon para queun numero no tenga representacion exacta es que se encuentre fuera del ran-go de representacion. Esta situacion se da cuando el numero es mayor queβ × βeMAX o menor que 1,0 × βeMIN .

1.1.2. Numeros normalizados

De forma analoga a los numeros racionales, donde un numero q = n/mconm 6= 0 tiene infinitas representaciones de la forma q = kn/(km) donde k es unnumero entero distinto de cero y se dice que q es irreductible si mcd(m,n)=1,en la representacion de punto flotante, un numero p = ±m2E tiene finitas

representaciones de la forma ±m′2E±k donde m′ es la rotacion de m a la

Page 10: Diseno~ de unidad I.P. de punto otante de doble precisi on

CAPITULO 1. FUNDAMENTOS DE ARITMETICA BINARIA DEPUNTO DE FLOTANTE Y EL ESTANDAR IEEE 754IEL2-2003-I-02 3

derecha (izquierda) k veces. Si las k rotaciones ocurren a la izquierda se sumak del valor del exponente y las rotaciones son a la derecha se resta k del valordel exponente. Por ejemplo el numero 6,2510 = 1·22+1·21+1·20+0·2−1+1·2−2

tiene representacion en punto flotante pn = 1,1001× 22 y pd1 = 0,11011× 23

y pd2 = 0,011011 × 24. Se dice que el numero de representaciones son finitaspues el campo de la mantisa es finito y si realizan sucesivas rotaciones, enalgun momento se comenzara a perder informacion residente en la mantisa,de igual forma al realizar sumas varias o restas el exponente se convertira enoverflow o underflow, estos dos conceptos seran estudiados mas adelante. Elejemplo anterior muestra el concepto de numero normalizado. Se dice queun numero en representacion punto flotante esta normalizado si en el campode mantisa b0 6= 0, para β = 2 un numero esta normalizado si b0 = 1. Losnumeros normalizados ayudan a ahorrar espacio, ya que si b0 = 1 , este seda por sobre-entendido y se puede almacenar un bit mas en el campo de lamantisa.

1.1.3. Analisis de error

El errror en la representacion de punto flotante se refiere a la diferenciaque existe entre el numero representado con precision finita y el numero en sı.Las causas de error son dos: (i) el espacio para el almacenamiento de datoses finito, de esta forma un numero con infinitos dıgitos, como un numeroirracional por ejemplo, no puede ser registrado en su totalidad en un sistemadigital, esta fuente de error da lugar a el llamado error de truncamiento;(ii) la naturaleza no-densa de la representacion de punto flotante hace quealgunos numeros tengan que ser representados aproximadamente como semuestra en la seccion 1.1.1, esto se conoce como error de redondeo.

Ejemplo Considere una representacion punto flotante con paranmetrosp = 3 y β = 10. El numero 0,314159 puede ser representado como 3,14×10−2,es claro que existe un error de 0,159 unidades en el ultimo lugar entre elnumero original y su representacion en punto flotante.

En general, si un numero real q es representado por ±b0 • b1 . . . bp−1βE se

incurre en un error de

|b0 • b1 . . . bp−1 − (q/βE)|βp−1

unidades en el ultimo lugar (uul). Si el resultado de un calculo es el numeromas cercano a la respuesta correcta, puede existir hasta un error de maximo

Page 11: Diseno~ de unidad I.P. de punto otante de doble precisi on

1.2. EL ESTANDAR IEEE 754IEL2-2003-I-02 4

0,5 unidades en el ultimo lugar, o 0,5 uul. Existe una forma alterna para medirla diferencia entre un numero real q y su representacion en punto flotante q,llamada medicion de error relativo erl dado por

|q − q|

q.

Utilizando esta ultima formula se puede demostrar que 0.5 uul esta acotadosuperior e inferiormente por

1

2β−p ≤

1

2≤

β

2β−p (1.1)

La cota superior de (1.1),β

2β−p se conoce como el epsilon de la maquina, ε,

este valor permite expresar comodamente valores pequenos de error. Reto-mando el ejemplo anterior, erl = 0,159/0,314159 ≈ 0,0005 y ε = 5(10)−3 asıerl = (0,0005/5(10)−3)ε ≈ 0,1ε.

1.2. El estandar IEEE 754

El estandar IEEE 754, publicado en 1985, es la unificacion de las diferentesimplantaciones de la representacion punto flotante binario. Este estandares implantable tanto en componente fısico como en componente logico. ElIEEE 754 especifica los formatos basicos y extendidos de punto flotante, lasoperaciones de suma, resta, multiplicacion, division, raız cuadrada, moduloy comparacion, y las excepciones propias del punto flotante y su manejo[4].

1.2.1. El formato de doble precision

El estandar define 2 formatos, simple y doble, cada uno de ellos tiene dosversiones, basica y extendida, en este trabajo solo se abarca el formato doblebasico. Como se menciono anteriormente, un formato se define completamen-te con una serie de parametros. Los valores de estos parametros para la dobleprecision se muestran en el cuadro 1.1.

Como muestra la figura 1.2, el bit de signo define si el numero en sutotalidad es positivo o negativo. Sin embargo, ¿Como se sabe si el numero es

Page 12: Diseno~ de unidad I.P. de punto otante de doble precisi on

CAPITULO 1. FUNDAMENTOS DE ARITMETICA BINARIA DEPUNTO DE FLOTANTE Y EL ESTANDAR IEEE 754IEL2-2003-I-02 5

0 1 2 4 5 6 73

1.00 x 2 1.01x2 1.10x2 1.11x22 2 2 2

Figura 1.1: Representacion punto de flotante en la recta real

Parametro Valorp 52eMAX 1023eMIN -1024Longitud del exponente en bits, f 11Longitud del formato en bits 64

Cuadro 1.1: Formato doble precision

s e m

0526263 51Punto binario implicito

Figura 1.2: Formato punto flotante de doble precision

Page 13: Diseno~ de unidad I.P. de punto otante de doble precisi on

1.3. ARITMETICA DE PUNTO FLOTANTEIEL2-2003-I-02 6

menor que 1? Para esto es necesario identificar si el exponente es negativo opositivo. el metodo utilizado por el IEEE 754 se conoce como representacionde exponente sesgado. El sesgo, para el formato de doble precision es de 1023Esto significa que para un valor de exponente sin signo, 0 ≤ k ≤ 1023, elvalor del exponente de punto flotante es k − 1023.

Como se ha visto, eMAX > |eMIN |. La razon para esto es que el reciprocodel numero mas pequeno,1/2eMAX , no overflow. A pesar de esto, el numeromas grande generara underflow.

1.3. Aritmetica de punto flotante

1.3.1. Suma y multiplicacion en punto flotante

Considere dos numeros en representacion de punto flotante en formatoIEEE 754 de doble precision n1 y n2. Estos operandos se representan como

n1 = (−1)s12e1(b10 • b1

1 · · · b1p−1) (1.2)

n2 = (−1)s22e2(b20 • b2

1 · · · b2p−1) (1.3)

donde si es el bit de signo, ei es el valor del exponente entre emin y emax

inclusive y bi = 0 o 1.

1.3.1.1. Multiplicacion en punto flotante

Sea n0 el resultado de multiplicar n1 y n2 es

n0 = (−1)s02e0(b00 • b0

1 · · · b0p−1)

El resultado exacto de la operacion se presenta en el cuadro 1.2. donde Mi

es una abreviacion de (bi0 • bi

1 · · · bip−1).

Dada la naturaleza de la operacion es necesario redondear este resultado paraque este se ajuste al formato de doble precision. Segun el estandar de puntoflotante binario, el redondeo por defecto es el redondeo al mas cercano.

Page 14: Diseno~ de unidad I.P. de punto otante de doble precisi on

CAPITULO 1. FUNDAMENTOS DE ARITMETICA BINARIA DEPUNTO DE FLOTANTE Y EL ESTANDAR IEEE 754IEL2-2003-I-02 7

1.3.1.2. Propiedades algebraicas de la multiplicacion en punto flo-tante

Dada la representacion finita de los operandos, algunas de las propiedadesalgebraicas de la multiplicacion en punto flotante difieren de la multiplicacionen los numeros reales. Cerradura Esta propiedad no siempre se cumple. Sial multiplicar dos numeros en representacion de punto flotante su exponentee es mayor que emax se produce un overflow el cual es interpretado porel estandar con un infinito, Inf. Asociatividad y distribucion bajo lasuma Existen dos razones por las cuales la asociatividad no se cumple enla multiplicacion en punto flotante. La primera se refiere a la inexactituddel resultado de la multiplicacion, al tener esta que ser redondeada. Si serequiere multiplicar tres numeros a, b, c, el redondeo de d = a × b y luego elcorrespondiente redondeo de d × c puede hacer que el resultado final difierasi primero se redondea f = b× c y luego se redondea a×f . La segunda razonradica en un posible overflow que ocurra, por ejemplo, de (a × b)c pero noen a(b× c). Conmutatividad La multiplicacion en punto flotante conmutacomo lo hace la multiplicacion en los numeros reales. Elemento identidadAl igual que en los numeros reales la multiplicacion en punto flotante poseeal numero 1 como elemento identidad.

1.3.1.3. Suma en punto flotante

A diferencia de la suma y multiplicacion en enteros donde la suma es unaoperacion mas sencilla que la multiplicacion, la suma en punto flotante esligeramente mas complicada que la multiplicacion en punto flotante, esto sedebe a que los puntos implıcitos de las dos mantisas de los numeros a sumardeben estar alineados. Esta alienacion de los puntos implıcitos requiere unpre-procesamiento de corrimiento en la mantisa y decremento en el exponente

Parametro Resultados0 s1 ⊕ s2

M0 M1 × M2

e0 e1 + e2

Cuadro 1.2: Esquema para la multiplicacion en punto flotante

Page 15: Diseno~ de unidad I.P. de punto otante de doble precisi on

1.3. ARITMETICA DE PUNTO FLOTANTEIEL2-2003-I-02 8

del numero mas pequeno entre estos dos. La suma de (1.2) y (1.3) asumiendon1 > n2 esta dada por

n0 = (−1)s1(m1 + m2 × 2e2−e1) × 2e1 (1.4)

esta ultima ecuacion seala dos puntos: el calculo del nuevo exponente e2 − e1

y la rotacion de la mantisa e2 − e1 posiciones; adicionalmente, esta ecuacionmuestra el valor del exponente del resultado, e0 = e1 ası como el valor delsigno s0 = s1.

Parametro Resultados0 s1

M0 Alinear y sumare0 e1

Cuadro 1.3: Esquema para la suma en punto flotante

Al igual que con la multiplicacion de punto flotante, la suma de puntoflotante tambien necesita de redondeo.

1.3.1.4. Propiedades algebraicas de la suma binaria en punto flo-tante

La suma binaria en punto flotante se asemeja a un grupo abeliano. Lapropiedad de cerradura no se cumple cuando el resultado a almacenar sobre-pasa la capacidad de memoria o cuando el resultado es un NaN. La sumaes conmutativa al igual que en la multiplicacion mencionada arriba, y la su-ma no es asociativa por razones similares en el redondeo como ocurre en lamultiplicacion.

1.3.2. Resta y division en punto flotante

La idea de la resta y la division surge de manera natural y se les consideracomo las operaciones inversas a la suma y la multiplicacion respectivamente.De hecho la resta de dos numeros binarios n1 y n2 se puede realizar por elllamado procedimiento del complemento a 2. Si se realiza el calculo n1 − n2

Page 16: Diseno~ de unidad I.P. de punto otante de doble precisi on

CAPITULO 1. FUNDAMENTOS DE ARITMETICA BINARIA DEPUNTO DE FLOTANTE Y EL ESTANDAR IEEE 754IEL2-2003-I-02 9

este es equivalente a realizar la suma n1 + n2 + 1, donde x = NOT(x). Ladivision presenta un importante problema en el momento de su computo: eldenominador no puede ser cero. La division punto flotante es muy parecidaa la multiplicacion, se dividen las mantisas y se restan los exponentes comose muestra en la tabla 1.4.

Parametro Resultados0 s1 ⊕ s2

M0 M1/M2

e0 e1 − e2

Cuadro 1.4: Esquema para la division en punto flotante

Page 17: Diseno~ de unidad I.P. de punto otante de doble precisi on

Capıtulo 2

Componentes combinacionalesy de almacenamiento

Para la implementacion fısica de las operaciones es necesario contar con cir-cuitos digitales que realicen operaciones de seleccion, comparacion, alineacion,almacenamiento,rotacion entre otros. En este capitulo se expone la implementa-cion de dicho componentes. La mayorıa de estos circuitos son inspirados en [1].

2.1. Selectores

Una translacion del componente virtual (software) a un componente fısi-co de un condicional es un selector, mas conocido como mutiplexor (MUX).En general un MUX posee 2n entradas, las cuales pueden ser vectores o esca-lares binarios, y una sola salida, que corresponde al tipo de entrada: vectoro escalar binario. Para seleccionar una sola de estas entradas se requierenn lıneas de de control o seleccion. En particular para este trabajo se imple-mentaron selectores de 2 y 4 entradas, tanto vectoriales como escalares. Unaimplemetacion de estos selectores en VHDL se muestra en los cuadros 2.1 y2.2.

10

Page 18: Diseno~ de unidad I.P. de punto otante de doble precisi on

CAPITULO 2. COMPONENTES COMBINACIONALES Y DEALMACENAMIENTOIEL2-2003-I-02 11

ENTITY mux2 IS

PORT(

sel : IN STD_LOGIC; --if sel==0 then y:=d0

d0 : IN STD_LOGIC; --else y:=d1

d1 : IN STD_LOGIC;

y : OUT STD_LOGIC);

END mux2;

ARCHITECTURE arq_estruct_mux2 OF mux2 IS

BEGIN

y<=((NOT sel) AND d0)OR (sel AND d1);

END arq_estruct_mux2;

Cuadro 2.1: codigo fuente de un selector 2-a-1

ENTITY mux4 IS

PORT(

s0,s1: IN STD_LOGIC;

d0,d1,d2,d3 : IN STD_LOGIC;

y : OUT STD_LOGIC);

END mux4;

ARCHITECTURE arq_comp_mux4 OF mux4 IS

BEGIN

PROCESS(s0,s1)

BEGIN

IF (s0=’0’ AND s1=’0’) THEN

y<=d0;

ELSIF (s0=’1’ AND s1=’0’) THEN

y<=d1;

ELSIF (s0=’0’ AND s1=’1’) THEN

y<=d2;

ELSE

y<=d3;

END IF;

END PROCESS;

END arq_comp_mux4;

Cuadro 2.2: codigo fuente de un selector 4-a-1

Page 19: Diseno~ de unidad I.P. de punto otante de doble precisi on

2.2. DECODIFICADORES DE PRIORIDADIEL2-2003-I-02 12

2.2. Decodificadores de prioridad

Un requierimiento esencial en las operaciones de punto flotante es la nor-malizacion de datos. Para tal fin es necesario determinar la posicion del unologico mas significativo. Tal tarea es realizada por un decodificador de prio-ridad. Este bloque combinacional recibe un dato de n bits y una salida delog2 n bits. En la salida se retorna la localizacion del bit mas significativo.Una implementacion VHDL para una entrada de 16 bits se muestra en elcuadro 2.3.

2.3. Comparadores de magnitud

Para complementar la implantacion fısica de un condicional de la formaif(x==y) else if(x==z) a un condicional que permita realizar tareas comoif(x≥ y) else x < z, es necesario un comparador de magnitud. [1] propone uncomparador universal entre x e y que permite establecer las comparaciones≥,>,≤,< y == a partir de dos salidas G y L; donde G=’1’ si x > y e iguala ’0’ si x ≤ y; y L=’1’ si x < y e igual a ’0’ si x ≥ y. La unidad basica es uncomparador de 2 numeros de 2 bits, a1a0 y b0b1. Las ecuaciones booleanaspara G y L son:

G = a1b′

1 + a1a0b′

0 + b′1a0b′

0

L = a′

1b1 + a′

1a′

0b0 + b1a′

0b0

A partir de este bloque se puede implantar un comparador de magnitudde 16 bits en configuracion paralela para reducir el tiempo de retardo. Suimplantacion en VHDL se muestra en el cuadro 2.3.

2.4. Registros

Un requerimiento esencial en la unidad aritmetica es el almacenamientode informacion. Este almacenamiento se implanta en bloques combinacionalesllamados registros. Una descripcion VHDL de un registro se muestra en elcuadro 2.5.

Page 20: Diseno~ de unidad I.P. de punto otante de doble precisi on

CAPITULO 2. COMPONENTES COMBINACIONALES Y DEALMACENAMIENTOIEL2-2003-I-02 13

ENTITY priority_encoder IS

PORT(

n : IN STD_LOGIC_VECTOR(15 DOWNTO 0);

y : OUT STD_LOGIC_VECTOR(3 DOWNTO 0);

idle: OUT STD_LOGIC);

END priority_encoder;

ARCHITECTURE arq_priority_encoder OF priority_encoder IS

COMPONENT cnor

PORT(

x : IN STD_LOGIC_VECTOR (15 DOWNTO 0);

y : OUT STD_LOGIC);

END COMPONENT;

BEGIN

y<= "1111" WHEN n(15)=’1’ ELSE

"1110" WHEN n(14)=’1’ ELSE

"1101" WHEN n(13)=’1’ ELSE

"1100" WHEN n(12)=’1’ ELSE

"1011" WHEN n(11)=’1’ ELSE

"1010" WHEN n(10)=’1’ ELSE

"1001" WHEN n(9)=’1’ ELSE

"1000" WHEN n(8)=’1’ ELSE

"0111" WHEN n(7)=’1’ ELSE

"0110" WHEN n(6)=’1’ ELSE

"0101" WHEN n(5)=’1’ ELSE

"0100" WHEN n(4)=’1’ ELSE

"0011" WHEN n(3)=’1’ ELSE

"0010" WHEN n(2)=’1’ ELSE

"0001" WHEN n(1)=’1’ ELSE

"0000" WHEN n(0)=’1’ ELSE

"----";

x0: cnor PORT MAP(n,idle);

END arq_priority_encoder;

Cuadro 2.3: Implementacion VHDL de un decodificador de prioridad 16-a-4

Page 21: Diseno~ de unidad I.P. de punto otante de doble precisi on

2.4. REGISTROSIEL2-2003-I-02 14

ENTITY mag_cmp IS

PORT(

x,y : IN STD_LOGIC_VECTOR(15 DOWNTO 0);

G,L : OUT STD_LOGIC;

END mag_cmp;

ARCHITECTURE arq_mag_cmp OF mag_cmp IS

COMPONENT mag_cmp_unit

PORT(

a1,b1,a0,b0 : IN STD_LOGIC;

Gu,Lu : OUT STD_LOGIC);

END COMPONENT;

SIGNAL l0oG : STD_LOGIC_VECTOR(7 DOWNTO 0);

SIGNAL l0oL : STD_LOGIC_VECTOR(7 DOWNTO 0);

SIGNAL l1oG : STD_LOGIC_VECTOR(3 DOWNTO 0);

SIGNAL l1oL : STD_LOGIC_VECTOR(3 DOWNTO 0);

SIGNAL l2oG : STD_LOGIC_VECTOR(1 DOWNTO 0);

SIGNAL l2oL : STD_LOGIC_VECTOR(1 DOWNTO 0);

BEGIN

X0: FOR i IN 0 TO 7 GENERATE

BEGIN

level0: mag_cmp_unit PORT MAP (x(2*i+1),y(2*i+1),x(2*i),

y(2*i),l0oG(i),l0oL(i));

level1: IF i<4 GENERATE

BEGIN

X1: mag_cmp_unit PORT MAP (l0oG(2*i+1),l0oL(2*i+1),

l0oG(2*i),l0oL(2*i),l1oG(i),l1oL(i));

END GENERATE level1;

level2: IF i<2 GENERATE

BEGIN

X2: mag_cmp_unit PORT MAP(l1oG(2*i+1),l1oL(2*1+1),

l1oG(2*i),l1oL(2*i),l2oG(i),l2oL(i));

END GENERATE level2;

level3:IF i=1 GENERATE

BEGIN

X3: mag_cmp_unit PORT MAP(l2oG(i),l2oL(i),l2oG(i-1),

l2oL(i-1),G,L);

END GENERATE level3;

END GENERATE X0;

END arq_mag_cmp;

Cuadro 2.4: Implantacion de comparador de magnitud universidad de 16 bitsen configuracion paralela

Page 22: Diseno~ de unidad I.P. de punto otante de doble precisi on

CAPITULO 2. COMPONENTES COMBINACIONALES Y DEALMACENAMIENTOIEL2-2003-I-02 15

ENTITY mregister IS

port(

din : IN STD_LOGIC_VECTOR(3 DOWNTO 0);

clk,w_l,clr : IN STD_LOGIC;

dout: OUT STD_LOGIC_VECTOR(3 DOWNTO 0));

END mregister;

ARCHITECTURE arq_register OF mregister IS

BEGIN

PROCESS(clk)

BEGIN

IF (clk’event AND clk=’1’) THEN

IF (w_l=’0’) THEN

dout<=din;

ELSIF (clr=’1’) THEN

dout<="0000";

END IF;

END IF;

END PROCESS;

END arq_register;

Cuadro 2.5: Descripcion VHDL de un registro de 4 bits

2.5. Registros de corrimiento

Una ventaja del sistema binario es que multiplicar (dividir) un numero npor 2k (1/2−k) se logra facilmente a nivel fısico al hacer k corrimientos haciala izquierda (derecha) e insertar un 0 en cada corrimiento a la izquierda (de-recha). Este proceso se logra mediante un registro de corrimiento. En Gajskise encuentra un registro de corrimiento con carga de paralela cuya tabla deoperacion se muestra en el cuadro 2.6. Dicho registro de corrimiento tienecomo elementos base un flip-flop tipo D y un selector de 4-a-1. La descripcionVHDL de este bloque es de tipo RTL, eliminando ası la posibilidad de sınte-sis inteligente por parte de las distintas herramientas EDA. La descripcionVHDL se muestra en el cuadro 2.5.

Page 23: Diseno~ de unidad I.P. de punto otante de doble precisi on

2.5. REGISTROS DE CORRIMIENTOIEL2-2003-I-02 16

Lıneas de seleccion OperacionS1 S00 0 NOP0 1 LOAD1 0 SHL1 1 SHR

Cuadro 2.6: Tabla de operacion de registro de corrimiento con carga paralela

Page 24: Diseno~ de unidad I.P. de punto otante de doble precisi on

CAPITULO 2. COMPONENTES COMBINACIONALES Y DEALMACENAMIENTOIEL2-2003-I-02 17

LIBRARY ieee;

USE ieee.std_logic_1164.ALL;

ENTITY shift_register IS

PORT(

clock : IN STD_LOGIC;

sel0 : IN STD_LOGIC;

sel1 : IN STD_LOGIC;

d_in_l : IN STD_LOGIC;

d_in_r : IN STD_LOGIC;

d_in_v : IN STD_LOGIC_VECTOR(3 DOWNTO 0);

d_out_v : OUT STD_LOGIC_VECTOR(3 DOWNTO 0));

END shift_register;

ARCHITECTURE arq_shift_register OF shift_register IS

SIGNAL mux_out_v : STD_LOGIC_VECTOR (3 DOWNTO 0);

SIGNAL Q_v : STD_LOGIC_VECTOR (3 DOWNTO 0);

COMPONENT mux4

PORT(

s0 : IN STD_LOGIC;

s1 : IN STD_LOGIC;

d0 : IN STD_LOGIC;

d1 : IN STD_LOGIC;

d2 : IN STD_LOGIC;

d3 : IN STD_LOGIC;

y : OUT STD_LOGIC);

END COMPONENT;

COMPONENT ffd

PORT(

clk : IN STD_LOGIC;

d : IN STD_LOGIC;

q : OUT STD_LOGIC);

END COMPONENT;

BEGIN

X0: FOR i IN 0 TO 3 GENERATE

first_block: IF(i=0) GENERATE

X1: mux4 PORT MAP(sel0, sel1,Q_v(i),d_in_v(i),d_in_r,Q_v(i+1),mux_out_v(i));

X2: ffd PORT MAP(clock,mux_out_v(i),Q_v(i));

END GENERATE;

main_block: IF (i>0 AND i<3) GENERATE

X3: mux4 PORT MAP(sel0, sel1,Q_v(i),

d_in_v(i),Q_v(i-1),Q_v(i+1),mux_out_v(i));

X4: ffd PORT MAP(clock,mux_out_v(i),Q_v(i));

END GENERATE;

last_block: IF(i=3) GENERATE

X5: mux4 PORT MAP(sel0, sel1,Q_v(i),d_in_v(i),

Q_v(i-1),d_in_l,mux_out_v(i));

X6: ffd PORT MAP(clock,mux_out_v(i),Q_v(i));

END GENERATE;

END GENERATE;

d_out_v<=Q_v;

END arq_shift_register;

Cuadro 2.7: Descripcion VHDL tipo RTL de un registro de corrimiento. Cir-cuito tomado de [1]

Page 25: Diseno~ de unidad I.P. de punto otante de doble precisi on

Capıtulo 3

Implantacion en componentefısico de operacionesaritmeticas

Una vez analizado el estandar para la aritmetica binaria y la teorıa detras dela aritmetica de punto flotante para la suma, multiplicacin y division, se estudianlas distintas formas de de implantar estas operaciones en componente fısico. Elestudio comprende tres aspectos: Complejidad en tiempo T (n), complejidad enarea A(n) y disposicion fısica de arquitecturas.

3.1. Sumador binario

El procedimiento de sumar en base 2 se puede dividir en dos fases: lageneracion de los bits del resultado y el calculo del acarreo. El problema esel calculo del acarreo ya que el i-esimo bit de acarreo ci depende del bit deacarreo anterior ci−1. Esta dependencia da lugar al problema de la propa-gacion de bit de acarreo, que ha sido tratado ampliamente en la literatura,es ası como se conocen varias familias de sumadores que aproximan dichoproblema desde distintas opticas, estas familias pueden ser clasificadas segunsu complejidad de tiempo, T (n) y area A(n). Otra forma de clasificar las di-versas soluciones es por la forma en que se manipula el acarreo. Al combinarestas dos clasificaciones se obtiene la clasificacion propuesta por Irwin [5].

18

Page 26: Diseno~ de unidad I.P. de punto otante de doble precisi on

CAPITULO 3. IMPLANTACION EN COMPONENTE FISICO DEOPERACIONES ARITMETICASIEL2-2003-I-02 19

Teniendo en cuenta estas clasificaciones se expone dos tipos de sumadores:RCA y PPA. Existen diversos tipos de sumadores PPA, entre ellos el KSA,BKA, LFA, KA, entre otros [3].

3.1.1. Sumador RCA

El Ripple Carry Adder es el sumador mas pequeno y lento de todos lossumadores. Un RCA de n-bits, entre x y y es un arreglo serial de unidadesfuncionales FA o Full Adder. Esta unidad funcional es una funcion booleanafa definida partir de dos variables gi o generador y pi o propagador como

(si, ci) = (p ⊕ ci−1, gi + pici−1) (3.1)

donde

gi = xiyi (3.2)

pi = xi ⊕ yi (3.3)

Las dos variables, gi y pi son esenciales para la descripcion del funcionamientode los sumadores PPA.

Como se menciono el RCA es el sumador mas pequeno y a la vez maslento. Tanto su complejidad en tiempo como en area son O(n), de esta formael producto AT es O(n2).

3.1.2. Sumadores de propagacion mınima de acarreo

Los sumadores tipo Parallel Prefix Adder presentan un buen productoarea-tiempo, AT . Este producto puede ser considerado un indicador de efi-ciencia para una familia cualquiera de circuitos logicos.

Segun [10] esta familia de sumadores presentan gran regularidad en su dis-posicion fısica lo cual los hace adecuados para sıntesis e implantacion VLSI.Adicionalmente, presenta gran flexibilidad al poder intercambiar su veloci-dad de computo o tiempo de retardo; tambien muestran un gran despempenoarea-tiempo.

Para un mejor entendimiento de este tipo de sumadores, es convienienteresaltar algunos aspectos de los sumadores Carry Look Ahead o CLA.

Page 27: Diseno~ de unidad I.P. de punto otante de doble precisi on

3.1. SUMADOR BINARIOIEL2-2003-I-02 20

3.1.2.1. Sumadores tipo CLA

La motivacion para este tipo de sumador es el hecho que el retardo en lacadena de acarreo puede reducirse; tal reduccion ocurre gracias a que partede dicha cadena puede ser pre-calculada. Segun la ecuacion (3.1) se puedeexpresar la cadena de acarreo como

ci+1 = gi + pici

ci+2 = gi+1 + pi+1(gi + pici)

= gi+1 + pi+1gi + pi+1pici

ci+3 = gi+2 + pi+3gi+2 + pi+2pi+1gi +

= +pi+2pi+1pici

ci+4 = gi+3pi+3gi+2 + pi+3pi+2gi+1 +

= +pi+3pi+2pi+1gi + pi+3pi+2pi+1pici

...

El incremento de tamano y terminos en un sumador CLA a nivel fısico esdiferente a las ecuaciones (3.4) [1]. Para un sumador de n-bits cada variablepk, 0 ≤ k ≤ n− 1 se encuentra (k+1)(n+1) veces. De esta manera, a medidaque aumenta el numero de variables es necesario el incremento del fan-out

de las compertas , lo cual repercute en el tamano y retardo del diseno.Otra forma de escribir la ecuacion (3.4) es

ci+4 = g(i,i+3) + p(i,i+3)ci (3.4)

donde

g(i,i+3) = gi+3 + pi+3gi+2 + pi+3pi+2gi+1 (3.5)

= +pi+3pi+2pi+1gi

p(i,i+3) = pi+3pi+2pi+1pi (3.6)

Estas dos ecuaciones 3.6 y 3.6 junto con 3.4 conforman un bloque logicollamado generador CLA.

Una ecuacion para generalizar este esquema del calculo por bloques de lavariable de generacion y propagacion se encuentra en [3]. La formacion de las

Page 28: Diseno~ de unidad I.P. de punto otante de doble precisi on

CAPITULO 3. IMPLANTACION EN COMPONENTE FISICO DEOPERACIONES ARITMETICASIEL2-2003-I-02 21

����

��

��������

pigi

xi yi

ci

si

c(i−1)

Figura 3.1: Circuito de un Full Adder.Tomado de [1]

x0 yox1 y1xn−1 yn−1

s1 s0

cincout

sn−1

Figura 3.2: Sumador RCA

GENERADOR CLA

x(i+3) y(i+3) x(i+2) y(i+2) x(i+1) y(i+1) yixi

s3 s2 s1

g(i+3)

p(i+3)g(i+2)

p(i+2)g(i+1)

p(i+1) pi

g(i,i+3) p(i,i+3)

c(i+3) c(i+2) c(i+1)

cic(i+4)

s0

gi

Figura 3.3: Sumador CLA de 4-bits con generador CLA. Tomado de [1]

Page 29: Diseno~ de unidad I.P. de punto otante de doble precisi on

3.1. SUMADOR BINARIOIEL2-2003-I-02 22

senales de generacion y propagacion entre i e k − 1 se da por las ecuaciones

g(i,k−1) = g(j,k−1) + gi,j−1pj,k−1 (3.7)

p(i,k−1) = p(i,j−1)p(j,k−1) (3.8)

donde i < j < k.

3.1.3. Sumadores tipo PPA

Una vez esbozado los sumadores tipo CLA, la comprension de los suma-dores Parallel Prefix Addition o PPA es mas sencilla. Existe una analogıaentre los sumadores CLA y PPA. Suponga se define una nueva operacion •,(gl

(i,k), pl(i,k)) = (gl−1

(i,j+1), pl−1(i,j+1)) • (gl−1

(j,k), pl−1(j,k)), de la siguiente forma:

(gl(i,k), p

l(i,k))=(gl−1

(i,j+1) + pl−1(i,j+1)g

l−1(j,k), p

l−1(i,j+1)p

l−1(j,k)). (3.9)

Para visualizar los distintos tipos de sumadores de la familia PPA seutiliza sımbolo mostrado en la figura 3.4, este sı mbolo se conoce como vertice

de grafica [10]. Cada sumador de la familia PPA se compone de tres etapaso fases.

Pre-procesamiento: En la fase se calculan los primeras variables g0i y

p0i donde 0 ≤ i < n − 1. El valor de g0

i y p0i son los de las ecuaciones (3.3)

y(3.3).Generacion de carry: Esta es la etapa mas importante de todas. Es la

topologıa de esta fase la que da origen a los distintos tipos de sumadores dela familia PPA. Aquı se calculan las variables gl

(i,k) y pl(i,k) segun muestra la

ecuacion (3.9).Pos-procesamiento: Finalmente, la ultima fase consiste en el computo

de la salida si = p0i ci−1 donde al igual que en el primer bloque 0 ≤ i ≤ n− 1.

Dada la configuracion en arbol de estos sumadores(ver figuras 3.5 y 3.6)estos son llamados sumadores logarıtmicos ya que tanto su A(n) como su T (n)son de orden logarıtmico. Existe una gran variedad de estos sumadores comolo son el Kogge-Stone o KSA(1973), Brent-Kung o BKA (1982), Ladner-Fisher o LFA(1980), Kwowles (1999) y Han-Carlson o HCA (1987) entreotros.

Un aspecto a resaltar es el hecho que la literatura no unifica conceptos

Page 30: Diseno~ de unidad I.P. de punto otante de doble precisi on

CAPITULO 3. IMPLANTACION EN COMPONENTE FISICO DEOPERACIONES ARITMETICASIEL2-2003-I-02 23

sobre cual de estos sumadores es el que presenta mejor desempeno. Una razonpara esto es que aunque su complejidad A(n) y T (n) estan ya calculadas porZimmermann [10] otro factor a considerar es la tecnologıa VLSI sobre la cualse implantan. Para una discucion mas amplia el lector puede referirse a [9],[3] y [10].

Ejemplo. La figura 3.7 muestra un sumador KSA de 8 bits (palabra de 7bits mas un bit de acarreo de entrada). Este sumador tiene una complejidadA(n) = 3n log n y T (n) = 2 log n [10]. Una ventaja de este sumador es laregularidad de su topologıa, su fan out de 2, entre otros. Sin embargo, tieneun gran costo de conexion. La primera etapa se simboliza por los cuadradosy la ultima por los rombos. El procesamiento central sigue la estructura dela figura 3.4.

3.2. Multiplicadores

La multiplicacion binaria presenta retos parecidos al los de la suma enbase 2. Estos problemas seran expuestos en la medida que se desarrolle lateorıa de la multiplicacion binaria.

Aspectos teoricos de la multiplicacion

Primero se define el problema basico de la multiplicacion. Considere dosnumeros binarios A y B si se quiere de longitud distinta. El producto P deestos dos valores se representa como:

P = A × B (3.10)

= A × bm−1bm−2 · · · b0

= A × bm−12m−1 + A × bm−22

m−2 + . . . + A × b020

Esta formula indica que existen m− 1 productos parciales de la forma Abi2i.

Se resaltan aquı dos aspectos importantes de la mutiplicacion binaria:Los productos parciales poseen m corrimientos progesivos hacia la iz-

quierda. Esto significa que si se denomina n la longitud de A, se requiereun sumador de (n × m) bits. Si se asume m = n, entonces es necesario unsumador de 2n bits.

Adicionalmente al corrimiento, el i-esimo producto parcial, PPi, es elmapeo de la funcion AND de A contra bi. Aunque a primera vista esto pueda

Page 31: Diseno~ de unidad I.P. de punto otante de doble precisi on

3.2. MULTIPLICADORESIEL2-2003-I-02 24

P:=0;while B != 0

if lsb(B)=1 −→P:=P+A;

fishr(B,0);shl(A,0);

return P;

Cuadro 3.1: Algoritmo para multiplicacion binaria basado en corrimientos

ser evidente, este mapeo es un factor determinante a la hora de elegir unaimplantacion fısica rapida.

Utilizando corrimientos a la derecha e izquierda, es posible formular unsimple algoritmo para la multiplicacion binaria como se muestra en el cuadro3.1.

Este algoritmo es de naturaleza secuencial que va sumando los productosparciales a medida que los genera. Este algoritmo presenta varios incovenien-tes: requiere un registro de corrimiento de 2n bits para la formacion de losproductos parciales y un bloque de control para el corrimiento de los operan-dos, actualizacion de P y la deteccion de un uno logico en una determinadaposicion. Estos requerimientos no solamente consumen area sino tambien,segun [8], tiene una complejidad T (n) lineal.

Multiplicacion rapida binaria

Existen algoritmos mas eficientes en tiempo que el por ejemplo mostradoen el cuadro 3.1. Estos multiplicadores se basan en dos hechos: (i) en vezde utilizar un solo sumador de gran tamano , utilizan varios sumadores detamano mas pequeno que suman combinacionalmente o en paralelo los (ii)productos parciales ya formados. La figura 3.8 muestra dos tipos de multipli-cadores asıncronos. La figura (a) representa un multiplicador directo lineal[10]. Con complejidad T (n) lineal o logarıtmica segun el tipo de sumadorutilizado [6], segun [10] la complejidad A(n) de este tipo de mutiplicado-res es O(n2). El multiplicador de figura 3.8b se conoce como multiplicadoren arbol; este esquema de multiplicacion se caracterıza por su complejidadT (n) = O(log n) tıpica de circuitos con estructura de arbol; y complejidaden area A(n) = O(n2).

Page 32: Diseno~ de unidad I.P. de punto otante de doble precisi on

CAPITULO 3. IMPLANTACION EN COMPONENTE FISICO DEOPERACIONES ARITMETICASIEL2-2003-I-02 25

Un esquema particular de multiplicacion es el denominado arbol de Walla-ce. Este multiplicador posee complejidades T (n) y A(n) logarıtmica y cuadri-ca respectivamente. Sin embargo, la disposicion fısica, layout, es bastanteirregular y ası su estructura de arbol es bastante difıcil de llevar a nivel VL-SI. El lector que desee una discusion mas amplia sobre multiplicadores puedereferirse a [10].

Ejemplo La figura 3.8 muestra un multiplicador directo lineal de 8-bitscon base en full adders.

3.3. Division

La division es sin lugar a dudas la operacion aritmetica mas compleja. Deesta forma no es extrano que existan distintas aproximaciones al problema.La aproximacion mas reconocida se conoce como el algoritmo de Euclidesde la division. Este algoritmo afirma que si m ∈ Z

+, n ∈ Z entonces existenunicos enteros q y r tales que

n = mq + r 0 ≤ r < m

A partir de la ecuacion anterior se tiene

n

m= q +

r

m

donde q es el cociente y es un numero entero yr

mes la parte decimal que se

encuentra en el intervalo [0, 1).Otra solucion al problema de la division es utilizar el metodo de Newton-

Raphson. Considere la divison de dos numeros A/B, B 6= 0, entonces:

A

B= A ×

1

B.

La idea detras de esta tecnica para division es encontrar el valor de 1/B, xexpresando este problema como una funcion de x igualada a cero, en otraspalabras 1/x − B = 0; el valor de x se encuentra a traves de la ecuacioniterativa:

xi+1 = xi(2 − Bxi). (3.11)

Page 33: Diseno~ de unidad I.P. de punto otante de doble precisi on

3.3. DIVISIONIEL2-2003-I-02 26

SumadoresTipo T (n) A(n)RCA 2n 7nCLA ≈ 4 log n ≈ 14nKSA 2 logn 3n log n

MultiplicadoresIterativo O(log n)/O(n2) O(n)Lineal O(n) O(n2)

DivisoresTipo D.T.1 D.A.2

N/R L(n) = O(log n)3 109 C.L.4

Cuadro 3.2: Resumen de las caracterı sticas en tiempo y area para algunossumadores, multiplicadores y divisores

El metodo de Newton Raphson presenta convergencia cuadratica dado quese inicie en un punto lo suficiente cercano. De esta manera para formato dedoble precision la division entre A y B toma 9 iteraciones para alcanzar 52bits de precision. Segun [7] en la ecuacion 3.11 se puede simplemente calcular−Bx2

i−1 para la i-esima iteracion perdiendo solamente 2 uup.

Page 34: Diseno~ de unidad I.P. de punto otante de doble precisi on

CAPITULO 3. IMPLANTACION EN COMPONENTE FISICO DEOPERACIONES ARITMETICASIEL2-2003-I-02 27

(G ,P )[i,k] [i,k]

l l

(G ,P )[j,k] [j,k]

l-1l-1

(G ,P )[i,k] [i,k]

l l

(G , P )[i,j+1]l-1l-1[i,j+1]

(G ,P )[i,k] [i,k]

l l

(G ,P )[i,k] [i,k]

l-1l-1

(G ,P )[i,k] [i,k]

l l

(G , P )[i,k]l-1l-1[i,k]

Figura 3.4: Vertice de grafica.

Figura 3.5: Sumador Brent-Kung to-mado de [3]

Figura 3.6: Sumador Kogge-Stone to-mado de [3]

Figura 3.7: Sumador KSA de 8 bits

Page 35: Diseno~ de unidad I.P. de punto otante de doble precisi on

3.3. DIVISIONIEL2-2003-I-02 28

++

++

++

+

PP0

PP1

PP2

PP3

PP4

PP5

PP6

PP7 PRDCT

+

+

+

+

+

+

+

PP0

PP1PP2

PP3

PP4

PP5PP6

PP7

PRDCT

(a)

(b)

Figura 3.8: Dos multiplicadores rapidos de 8 bits. (a) lineal (b) arbol. Tomado[8]

Page 36: Diseno~ de unidad I.P. de punto otante de doble precisi on

Capıtulo 4

Arquitecturas finales yresultados

Una vez explorados distintos tipos de sumadores, multiplicadores y divisores,y explorar la aritmetica de punto flotante, se exponen las distintas arquitecturaspara un sumador/restador, multiplicador y divisor de punto flotante, ası comobloque normalizador de numeros en representacion de punto flontante.

4.1. Arquitecturas basicas ecogidas

Las operaciones aritmeticas basicas en punto flotante como la suma, mul-tiplicacion y division se basan en bloques aritmeticos de tipo entero. Un de-sempeno eficiente de bloques aritmeticos tipo punto flotante esta soportadopor un desempeno eficiente de sus bloques aritmeticos enteros.

4.1.1. Sumador/Restador

Considerando las complejidades de tiempo y area de los distintos suma-dores, la familia mas optima es la familia PPA. Existen distintos miembrosdentro de la familia, el sumador mas apropiado segun su producto A ·T y sufacilidad de implementacion VLSI es el sumador KSA.

29

Page 37: Diseno~ de unidad I.P. de punto otante de doble precisi on

4.2. DESCRIPCION DE BLOQUES FUNCIONALESIEL2-2003-I-02 30

4.1.2. Multiplicador

La posibilidad de realizar multiplicadores basados en un solo sumadorde alto desempeno se ve opacada por multiplicadores que utilizan un mayornumero de sumadores de menor tamano e inclusive de menor desempenosen diferentes configuracion los cuales, en teorıa, presentan mejores desem-peno en tiempo pero no en area. De esta forma, la arquitectura final para elmutiplicador es directo lineal con unidad basica sumador FA de 2 bits.

4.1.3. Divisor

Como se expuso anteriormente, existen multiples arquitecturas para ladivision. La implementacion de un divisor que retorne cociente y residuoimplica el calculo de la parte decimal ası como la suma de la parte decimal yel cociente. Esto no solo implica la implantacion de un bloque adicional parala division entera sino tambien gasto en recursos temporales. Una soluciones el calculo de la division en punto flotante en un solo bloque funcional.Con este fin se utiliza el algoritmo de Newton-Raphson para el calculo de ladivison en punto flotante, este esquema, no solo ahorra recursos de espacio,sin contar la tabla de puntos de inicio, sino tambien recursos en tiempo yaque su convergencia es cuadratica.

4.2. Descripcion de bloques funcionales

En general, las arquitecturas propuestas para la aritmertica de puntoflotante se basan en los algoritmos planteados en capıtulos anteriores y sutraduccion en componente fı sico. Esta seccion explica cada uno de los 4bloques funcionales.

4.2.1. Sumador

El sumador de punto flotante es el bloque mas complejo en terminos desu circuiteria. Este bloque se puede dividir en tres partes:

Acondicionamiento Este sub-circuito se encarga de que los datos cum-plan las pre-condiciones establecidas por el algoritmo propuesto para la su-ma en punto flotante. Este sub-circuito se compone de los bloques swap,

Page 38: Diseno~ de unidad I.P. de punto otante de doble precisi on

CAPITULO 4. ARQUITECTURAS FINALES Y RESULTADOSIEL2-2003-I-02 31

magCompE y magCompM . Basado en la informacion dado por los bloquesmagComp, que determinan que operando es mayor, swap intercambia los ope-randos a la entrada de los otros dos bloques restantes.

Alineamiento Una vez cumplidas las pre-condiciones del algoritmo, esnecesario alinear los operandos. Para tal fin se requieren los bloques shiftReg,Addsub10 y counter. Addsub10 calcula el numero de posiciones a despla-zar la mantisa, textttcounter lleva la cuenta de cuantas posiciones faltan pordesplazar la mantisa y shiftReg desplaza la mantisa.

Computo Este bloque se encarga de calcular la suma de las mantisas.

4.2.2. Multiplicador

El multiplicador en punto flotante es claramente el bloque aritmetico massencillo, pues solo lo componen dos sub-bloques aritmeticos de tipo entero:multiplicador y sumador, el sumador de exponentes es tipo RCA ya que losvalores exactos de las complejidades temporal y espacial son menores quepara sumadores logarıtmicos.

4.2.3. Divisor

La unidad basica del divisor, es un multiplicador de punto flotante. Estopermite la reduccion de bloques operacionales. Se requieren dos selectores yun bloque de complemento-a-1 adicionalmente a registros y por supuesto unaunidad de control. El selector 2-a-1 selecciona entre la primera iteracion y elresto de ciclos. El punto x0 se extrae de una tabla denomina Look-Up-Table

o LUT. El selector 4-a-2 selecciona entre tres datos: ara la multiplicacionfinal de A · (1/B); B para la i-esima iteracion, Bx2

i−1 y z para el calculo delcuadrado de xi.

Page 39: Diseno~ de unidad I.P. de punto otante de doble precisi on

4.2. DESCRIPCION DE BLOQUES FUNCIONALESIEL2-2003-I-02 32

MagCompEGe Le

X Y X Y

Gm LmMagCompM

clr

w_lREGISTER

clr

w_lREGISTER

m1 m2

v1 v2Swap e

swap

d_in_r

d_in_l

s0

s1ShiftReg

−+A B cout

selA BKS52

COUNTER

e

dzero_h

ovr_h

ld

−+A B

selA BAddSub10

cout

clr

w_lREGISTER

’1’

C

cout

a(52...0) b(52...0)a(63...53) b(63...53)

a b

v1(52...0)

v1(63...53) v2(63...53)

v1(64...53)&(A+/−B)

v1(64...53)

v2(64)

v1(64)

v2

CtrlSumpf

A B

Figura 4.1: Diagrama de bloques de la arquitectura de sumador de puntoflotante

Page 40: Diseno~ de unidad I.P. de punto otante de doble precisi on

CAPITULO 4. ARQUITECTURAS FINALES Y RESULTADOSIEL2-2003-I-02 33

Mult. 64 bit RCA 11−bit

A B

C(63...53)C(52...0)Coutm Coute

C(64)

B(63...53)B(52...0)A(52...0) A(63...53)

A(64) B(64)

Figura 4.2: Diagrama de bloques de la arquitectura de multiplicador de puntoflotante

clr

w_l

REG.

MULT. P.F.

clr

w_l

REG. clr

w_l

REG.

MUX S

1−comp e

CtrlDivision

x0

X Y

Z

AB

MUXm

n

z z

Figura 4.3: Diagrama de bloques de la arquitectura de divisor de punto flo-tante

Page 41: Diseno~ de unidad I.P. de punto otante de doble precisi on

4.3. GENERACION DE CODIGO VHDLIEL2-2003-I-02 34

4.3. Generacion de codigo VHDL

Uno de los problemas mas apremiantes es la implantacion de los diferen-tes bloques aritmeticos basicos, dicha implantacion es realizada en FPGA,programando en VHDL. Con el fin de seguir una metodologıa adecuada detrabajo se propuso, en un principio, implantar bloques de menor tamano quelos finalmente requeridos; ası por ejemplo el primer sumador KS no fue de 52bits sino de 32 bits, luego que se valido el funcionamiento de este sumador de32 bits se implanto un sumador de 64 bits. Este hecho, implantar una mismatopologıa varias veces solo variando el numero de bits, era un problema puesla variacion de bits requierıa un descripcion VHDL nueva.

Para agilizar la realizacion de las descripcion VHDL, y dado que los mul-tiplicadores y sumadores presentan una topologıa bastante regular, se deci-dio realizar dos programas, uno que genera sumadores KS y otro que generamultiplicadores directo lineal, en C que crean archivos con extension vhd

donde se describe un sumador y un multiplicador en languaje VHDL. Losapendices muestran el codigo utilizado.

4.3.1. Ejemplo

La siguiente descripcion VHDL corresponde a un multiplicador directo li-neal de 16 bits. Esta descripcion fue generada en su totalidad por el programaextraido del codigo del apendice.12

LIBRARY ieee;

USE ieee.std_logic_1164.ALL;

ENTITY multiplicador IS

PORT(

A : IN STD_LOGIC_VECTOR(15 DOWNTO 0);

B : IN STD_LOGIC_VECTOR(15 DOWNTO 0);

P : OUT STD_LOGIC_VECTOR(31 DOWNTO 0));

END multiplicador;

1Esta descripcion VHDL no se encuentra completa, solo muestra partes mas represen-

tativas del multiplicador.2Igualmente se realizaron simulaciones de todos los demas bloques.

Page 42: Diseno~ de unidad I.P. de punto otante de doble precisi on

CAPITULO 4. ARQUITECTURAS FINALES Y RESULTADOSIEL2-2003-I-02 35

ARCHITECTURE arq_multiplicador OF multiplicador IS

COMPONENT fa

PORT(

a : IN STD_LOGIC;

b : IN STD_LOGIC;cin: IN STD_LOGIC;

s : OUT STD_LOGIC;

cout: OUT STD_LOGIC);

END COMPONENT;

SIGNAL R0 : STD_LOGIC_VECTOR(15 DOWNTO 0);

SIGNAL R1 : STD_LOGIC_VECTOR(15 DOWNTO 0);

.

.

.

SIGNAL R7 : STD_LOGIC_VECTOR(15 DOWNTO 0);

SIGNAL S1 : STD_LOGIC_VECTOR(15 DOWNTO 0);

SIGNAL S2 : STD_LOGIC_VECTOR(15 DOWNTO 0);

.

.

.

SIGNAL S7 : STD_LOGIC_VECTOR(15 DOWNTO 0);

SIGNAL Cout1 : STD_LOGIC_VECTOR(15 DOWNTO 0);

SIGNAL Cout2 : STD_LOGIC_VECTOR(15 DOWNTO 0);

.

.

.

SIGNAL Cout15 : STD_LOGIC_VECTOR(15 DOWNTO 0);

SIGNAL cero : STD_LOGIC;

BEGIN

cero<=’0’;

R0(0)<=B(0) AND A(0);

R0(1)<=B(0) AND A(1);

.

.

.

R0(15)<=B(0) AND A(15);

R1(0)<=B(1) AND A(0);

R1(1)<=B(1) AND A(1);

.

Page 43: Diseno~ de unidad I.P. de punto otante de doble precisi on

4.3. GENERACION DE CODIGO VHDLIEL2-2003-I-02 36

.

.

R1(15)<=B(1) AND A(15);

.

.

.

R15(0)<=B(15) AND A(0);

R15(1)<=B(15) AND A(1);

.

.

.

R15(15)<=B(15) AND A(15);

FA1_0: fa PORT MAP(R1(0),R0(1),cero,S1(0),Cout1(0));

FA1_1: fa PORT MAP(R1(1),R0(2),Cout1(0),S1(1),Cout1(1));

FA1_2: fa PORT MAP(R1(2),R0(3),Cout1(1),S1(2),Cout1(2));

.

.

.

FA1_14: fa PORT MAP(R1(14),R0(15),Cout1(13),S1(14),Cout1(14));

FA1_15: fa PORT MAP(R1(15),cero,Cout1(14),S1(15),Cout1(15));

FA2_0: fa PORT MAP(R2(0),S1(1),cero,S2(0),Cout2(0));

FA2_1: fa PORT MAP(R2(1),S1(2),Cout2(0),S2(1),Cout2(1));

FA2_2: fa PORT MAP(R2(2),S1(3),Cout2(1),S2(2),Cout2(2));

.

.

.

FA2_14: fa PORT MAP(R2(14),S1(15),Cout2(13),S2(14),Cout2(14));

FA2_15: fa PORT MAP(R2(15),Cout1(15),Cout2(14),S2(15),Cout2(15));

.

.

.

FA15_14: fa PORT MAP(R15(14),S14(15),Cout15(13),S15(14),Cout15(14));

FA15_15: fa PORT MAP(R15(15),Cout14(15),Cout15(14),S15(15),Cout15(15));

P(0)<=R0(0);

P(1)<=S1(0);

P(2)<=S2(0);

.

.

Page 44: Diseno~ de unidad I.P. de punto otante de doble precisi on

CAPITULO 4. ARQUITECTURAS FINALES Y RESULTADOSIEL2-2003-I-02 37

.

P(15)<=S15(0);

P(16)<=S15(1);

P(17)<=S15(2);

.

.

.

P(29)<=S15(14);

P(30)<=S15(15);

P(31)<=Cout15(15);

END arq_multiplicador;

En esta descripcion el sub-bloque fa corresponde un full adder con lasiguiente descripcion VHDL.

LIBRARY ieee;

USE ieee.std_logic_1164.ALL;

ENTITY fa IS

PORT(

a,b,cin : IN STD_LOGIC;

s,cout : OUT STD_LOGIC;

END fa;

ARCHITECTURE arq_fa OF fa IS

BEGIN

s<=a XOR b XOR cin;

cout<=(a AND b) OR (cin AND (a XOR b));

END arq_fa;

Al ser compilado en Max+plus II 10.1 en una FPGA FLEX10K referenciaEPF10K70RC240-2, el reporte de utilizacion de recursos fue:

Total dedicated input pins used: 6/6 (100%)

Total I/O pins used: 58/183 (31%)

Total logic cells used: 537/3744 (14%)

La simulacion arroja los siguientes resultados: 3

3El tiempo de retardo para alcanzar la solucion se midio en 137.4 ns.

Page 45: Diseno~ de unidad I.P. de punto otante de doble precisi on

4.3. GENERACION DE CODIGO VHDLIEL2-2003-I-02 38

Figura 4.4: Resultados de simulacion de multiplicador directo lineal de 16bits. Simulacion realizada en Max+Plus II 10.1

Page 46: Diseno~ de unidad I.P. de punto otante de doble precisi on

Capıtulo 5

Conclusiones

Dada la arquitectura fija de una FPGA, las ventajas de los bloquesaritmeticos de tipo entero reflejadas en sus complejidades de tiempo y arease pierde a causa de la reconfiguracion que sufre la descripcion VHDL dearquitectura RTL. Una causa de la deficiente sıntesis es la topologıa de arboly el numero de niveles que posee una FPGA, e.g. Un sumador KS entre 32y 64 bits requiere 5 niveles, mientras que una FPGA puede tener solo 3 o 4niveles. De esta manera la FPGA no puede conservar los 5 niveles del suma-dor como tal sino que adecua sus niveles para lograr una sıntesis que cumplacon los requerimientos funcional mas no los requerimientos topologicos delsumador.

Las herramientas EDA especializadas en el diseno digital en FPGA queposee la Universidad son insuficientes para el desarrollo de un trabajo demediana escala como el propuesto. La herramienta mas utilizada fue el pa-quete de Altera Max+Plus II 10.1 de libre distribucion. Esta herramienta enteorıa no presentaba restricciones importantes para este proyecto, sin embar-go al intentar compilar y sintetizar bloques aritmeticos basicos de un numeroconsiderable de bits (32 en adelante), el paquete se bloqueaba. Al encontrareste problema se decidio trabajar con OrCad 9.1 de Cadence. Este paquetesoportaba la compilacion y sıntesis de descripciones VHDL de entre 32 y 64bits, pero su incoveniente era que sus simulaciones no mostraban los tiemposde retardo que se presentarıan en teorıa en la FPGA seleccionada.

Trabajo futuroEste trabajo presenta fundamentalmente un estado-del-arte en lo que a

arquitecturas de sumadores, multiplicadores y divisores, un posible trabajo

39

Page 47: Diseno~ de unidad I.P. de punto otante de doble precisi on

IEL2-2003-I-02 40

futuro es ta implantacion de esta arquitecturas en VLSI ası como lograr la in-corporacion de estas descripciones VHDL a aplicaciones como el tratamientodigital de imagenes o redes neuronales.

SugerenciasEn la realizacion de este proyecto se encontraron varios inconvenientes de

tipo administrativo tales como la ausencia total de material sobre el tema(Aritmetica de computadores y teorıa de punto flotante) en la biblioteca dela Universidad, se sugiere que la Universidad adquiera material sobre el temapara hacer mas completa la investigacion en este campo del disenno digital.Tambien se sugiere adquirir y/o actualizar las herramientas EDA orientadashacia el diseno digital tales como ModelSim que permitan el diseno de sis-temas logicos basados en FPGA medianamente complejos y que al mismotiempo sean independientes de cualquier arquitectura.

Page 48: Diseno~ de unidad I.P. de punto otante de doble precisi on

Apendice A

Generacion automatica decodigo VHDL para sumadoresy multiplicadores enteros

Este codigo de generacion automatica de codigo VHDL para sumadores y mul-tiplicadores enteros esta implentado en ANSI C. El termino generacion automati-

ca de codigo VHDL se refiere a la generacion de un archivo vhd que contiene obien un sumador tipo Kogge-Stone de o bien multiplicador lineal directo de 4, 816, 32 o 64 bits segun el se requiera. La tolopogıa del multiplicador se extrajode Pollard [8].

A.1. Codigo multiplicador

#include <stdio.h>

#include<stdlib.h>

main()

{

FILE *filePtr;

int i, j, n;

printf("\n\nEntre el maximo orden de los operandos del mulplicador:

\n\n\t\t4, 8, 16, 32 o 64.\n");

scanf("%d",& n);

41

Page 49: Diseno~ de unidad I.P. de punto otante de doble precisi on

A.1. CODIGO MULTIPLICADORIEL2-2003-I-02 42

if(!(n==4 || n==8|| n==16|| n==32|| n==64))

{

printf("Orden maximo incorrecto. Vuelva a correr el

programa y eliga nuevamente.\n");

system("PAUSE");

exit(0);

}

if((filePtr=fopen("multiplicador.vhd","w"))==NULL)

printf("Error de apertura de archivo\n");

else

{

fprintf(filePtr, "LIBRARY ieee;

\nUSE ieee.std_logic_1164.ALL;\n\n");

fprintf(filePtr, "ENTITY multiplicador IS\nPORT(\n");

fprintf(filePtr, "A : IN STD_LOGIC_VECTOR(%d DOWNTO 0);

\n",n-1);

fprintf(filePtr, "B : IN STD_LOGIC_VECTOR(%d DOWNTO 0);

\n",n-1);

fprintf(filePtr, "P : OUT STD_LOGIC_VECTOR(%d DOWNTO 0));

\n",2*n-1);

fprintf(filePtr, "END multiplicador;\n\n");

fprintf(filePtr, "ARCHITECTURE arq_multiplicador

OF multiplicador IS\n");

fprintf(filePtr,"COMPONENT fa\nPORT(\na : IN STD_LOGIC;

\nb : IN STD_LOGIC;");

fprintf(filePtr, "cin: IN STD_LOGIC;\ns : OUT STD_LOGIC;

\ncout: OUT STD_LOGIC);\nEND COMPONENT;\n");

for (i=0;i<n;i++)

fprintf(filePtr,"SIGNAL R%d : STD_LOGIC_VECTOR

(%d DOWNTO 0);\n",i,n-1);

for (i=1;i<n;i++)

fprintf(filePtr,"SIGNAL S%d : STD_LOGIC_VECTOR

(%d DOWNTO 0);\n",i,n-1);

for (i=1;i<n;i++)

fprintf(filePtr,"SIGNAL Cout%d : STD_LOGIC_VECTOR

(%d DOWNTO 0);\n",i),n-1;

fprintf(filePtr,"SIGNAL cero : STD_LOGIC;

\nBEGIN\ncero<=’0’;\n");

Page 50: Diseno~ de unidad I.P. de punto otante de doble precisi on

APENDICE A. APENDICESIEL2-2003-I-02 43

for (i=0;i<n;i++)

{

for (j=0;j<n;j++)

fprintf(filePtr,"R%d(%d)<=B(%d) AND A(%d);\n"

,i,j,i,j);

}

// multiplicador

for (i=1;i<n;i++)

{

j=0;

if(i==1)

{

fprintf(filePtr,"FA%d_%d: fa PORT MAP(R%d(%d),

R%d(%d),cero,

S%d(%d),Cout%d(%d));\n",i,j,i,j,i-1,j+1,i,j,i,j);

for (j=1;j<n-1;j++)

fprintf(filePtr,"FA%d_%d: fa PORT MAP(R%d(%d),

R%d(%d), Cout%d(%d),S%d(%d),Cout%d(%d));\n"

,i,j,i,j,i-1,j+1,i,j-1,i,j,i,j);

fprintf(filePtr,"FA%d_%d: fa PORT MAP(R%d(%d),cero,

Cout%d(%d),S%d(%d),Cout%d(%d));\n"

,i,j,i,j,i,j-1,i,j,i,j);

i++;

j=0;

fprintf(filePtr,"FA%d_%d: fa PORT MAP(R%d(%d)

,S%d(%d),cero,

S%d(%d),Cout%d(%d));\n",i,j,i,j,i-1,j+1,i,j,i,j);

}

else

fprintf(filePtr,"FA%d_%d: fa PORT MAP(R%d(%d)

,S%d(%d),cero,S%d(%d),Cout%d(%d));\n"

,i,j,i,j,i-1,j+1,i,j,i,j);

for (j=1;j<n-1;j++)

{

fprintf(filePtr,"FA%d_%d: fa PORT MAP(R%d(%d)

Page 51: Diseno~ de unidad I.P. de punto otante de doble precisi on

A.2. CODIGO SUMADORIEL2-2003-I-02 44

,S%d(%d),Cout%d(%d),S%d(%d),Cout%d(%d));\n",

i,j,i,j,i-1,j+1,i,j-1,i,j,i,j);

}

fprintf(filePtr,"FA%d_%d: fa PORT MAP(R%d(%d)

,Cout%d(%d),Cout%d(%d),S%d(%d),Cout%d(%d));\n"

,i,j,i,j,i-1,j,i,j-1,i,j,i,j);

}

// PRODUCTO

fprintf(filePtr,"P(0)<=R0(0);\n");

for (i=1;i<n;i++)

fprintf(filePtr,"P(%d)<=S%d(0);\n",i,i);

for(i=1;i<n;i++)

fprintf(filePtr,"P(%d)<=S%d(%d);\n",i+(n-1),n-1,i);

fprintf(filePtr,"P(%d)<=Cout%d(%d);\n",2*n-1,n-1,n-1);

fprintf(filePtr,"END arq_multiplicador;");

fclose(filePtr);

}

return 0;

}

A.2. Codigo sumador

#include <stdio.h>

#include <stdlib.h>

#include <math.h>

int main()

{

double N;

double height;

double j,k,nivel=1;

int i,count=0;

FILE *outPtr;

printf("Entre el orden del sumador. Asegurese que orden sea

Page 52: Diseno~ de unidad I.P. de punto otante de doble precisi on

APENDICE A. APENDICESIEL2-2003-I-02 45

de la forma 2^n-1.\n");

scanf("%lf",&N);

height=log(N+1)/log(2);

if((outPtr=fopen("KS.vhd","w"))==NULL)

{

printf("KS.vhd no pudo ser abierto\n");

system("PAUSE");

exit(0);

}

else

{

fprintf(outPtr,"LIBRARY IEEE;

\nUSE ieee.std_logic_1164.ALL;\n");

fprintf(outPtr,"ENTITY KS%.0f IS\nPORT(\n",N);

fprintf(outPtr,"x : IN STD_LOGIC_VECTOR (%.0f DOWNTO 1);

\n",N);

fprintf(outPtr,"y : IN STD_LOGIC_VECTOR (%.0f DOWNTO 1);

\n",N);

fprintf(outPtr,"cin\t : IN STD_LOGIC;\n");

fprintf(outPtr,"cout\t : OUT STD_LOGIC;\n");

fprintf(outPtr,"z : BUFFER STD_LOGIC_VECTOR

(%.0f DOWNTO 1));\n",N);

fprintf(outPtr,"END KS%.0f;\n\n");

fprintf(outPtr,"ARCHITECTURE arq_KS%.0f OF KS%.0f IS\n",N,N);

//fprintf(outPtr,"\n");

fprintf(outPtr,"COMPONENT in_block\nPORT(\n");

fprintf(outPtr,"a_i : IN STD_LOGIC;\n");

fprintf(outPtr,"b_i : IN STD_LOGIC;\n");

fprintf(outPtr,"g_o_i : OUT STD_LOGIC;\n");

fprintf(outPtr,"p_o_i : OUT STD_LOGIC);\n");

fprintf(outPtr,"END COMPONENT;\n\n");

fprintf(outPtr,"COMPONENT c_block\nPORT(\n");

fprintf(outPtr,"g_l_i : IN STD_LOGIC;\n");

fprintf(outPtr,"p_l_i : IN STD_LOGIC;\n");

fprintf(outPtr,"g_l_j : IN STD_LOGIC;\n");

fprintf(outPtr,"p_l_j : IN STD_LOGIC;\n");

fprintf(outPtr,"g_l1_i: OUT STD_LOGIC;\n");

fprintf(outPtr,"p_l1_i: OUT STD_LOGIC);\n");

Page 53: Diseno~ de unidad I.P. de punto otante de doble precisi on

A.2. CODIGO SUMADORIEL2-2003-I-02 46

fprintf(outPtr,"END COMPONENT;\n\n");

fprintf(outPtr,"COMPONENT s_out\nPORT(\n");

fprintf(outPtr,"p_0_i : IN STD_LOGIC;\n");

fprintf(outPtr,"c_i : IN STD_LOGIC;\n");

fprintf(outPtr,"s_i : BUFFER STD_LOGIC);\n");

fprintf(outPtr,"END COMPONENT;\n\n");

fprintf(outPtr,"\n\n\n--Declaracion de senales\n\n\n");

fprintf(outPtr,"SIGNAL uno : STD_LOGIC;\n",N);

fprintf(outPtr,"SIGNAL g0 : STD_LOGIC_VECTOR

(%.0f DOWNTO 0);\n",N);

fprintf(outPtr,"SIGNAL p0 : STD_LOGIC_VECTOR

(%.0f DOWNTO 0);\n",N);

for(j=1;j<=height;j++)

{

fprintf(outPtr,"SIGNAL g%.0f : STD_LOGIC_VECTOR

(%.0f DOWNTO %.0f);\n",j,N,pow(2,j-1));

fprintf(outPtr,"SIGNAL p%.0f : STD_LOGIC_VECTOR

(%.0f DOWNTO %.0f);\n",j,N,pow(2,j-1));

}

fprintf(outPtr,"SIGNAL g : STD_LOGIC_VECTOR

(%.0f DOWNTO 0);\n",N);

fprintf(outPtr,"SIGNAL p : STD_LOGIC_VECTOR

(%.0f DOWNTO 0);\n",N);

fprintf(outPtr,"BEGIN\n");

fprintf(outPtr,"uno<=’1’;");

//fprintf(outPtr,"--\n");

fprintf(outPtr,"\n\n\n--Asignacion de seales

para g y p\n\n\n");

fprintf(outPtr,"g(0)<=g0(0);\n");

for(i=1;i<=N;i++)

{

fprintf(outPtr,"g(%d)<=g%.0f(%d);\n",i,nivel,i);

count++;

if(count==pow(2,nivel-1))

{

nivel++;

count=0;

}

Page 54: Diseno~ de unidad I.P. de punto otante de doble precisi on

APENDICE A. APENDICESIEL2-2003-I-02 47

}

//Ahora asigna p

nivel=1;

count=0;

fprintf(outPtr,"p(0)<=p0(0);\n");

for(i=1;i<=N;i++)

{

fprintf(outPtr,"p(%d)<=p%.0f(%d);\n",i,nivel,i);

count++;

if(count==pow(2,nivel-1))

{

nivel++;

count=0;

}

}

fprintf(outPtr,"\n\n\n--Generacion de inblock\n\n\n");

for(i=N;i>0;i--)

{

fprintf(outPtr,"inblock_%d: in_block PORT MAP

(x(%d),y(%d),g0(%d),p0(%d));\n",i,i,i,i,i);

}

fprintf(outPtr,"inblock_%i: in_block PORT MAP

(cin,uno,g0(%d),p0(%d));\n",i,i,i);

fprintf(outPtr,"\n\n\n--Generacion de c_block\n\n\n");

for(j=1; j<=height;j++)

{

k=N;

while((k-pow(2,j-1))>=(pow(2,j-1)))

{

fprintf(outPtr,"cblock_%.0f_%.0f: c_block

PORT MAP(g%.0f(%.0f),p%.0f(%.0f),g%.0f(%.0f)

,p%.0f(%.0f),g%.0f(%.0f),p%.0f(%.0f));\n",

j,k,j-1,k,j-1,k,j-1,k-pow(2,j-1),j-1

,k-pow(2,j-1),j,k,j,k);

k--;

}

while((k-pow(2,j-1))>=0)

Page 55: Diseno~ de unidad I.P. de punto otante de doble precisi on

A.2. CODIGO SUMADORIEL2-2003-I-02 48

{

fprintf(outPtr,"cblock_%.0f_%.0f: c_block PORT MAP

(g%.0f(%.0f),p%.0f(%.0f),g(%.0f),p(%.0f),g%.0f(%.0f),

p%.0f(%.0f));\n",j,k,j-1,k,j-1,k,k-pow(2,j-1),

k-pow(2,j-1),j,k,j,k);

k--;

}

k=0;

}

fprintf(outPtr,"\n\n\n--Generacion de sout\n\n\n");

for(i=N;i>0;i--)

{

fprintf(outPtr,"sout_%d: s_out PORT MAP

(p0(%d),g(%d),z(%d));\n",i,i,i-1,i);

}

fprintf(outPtr,"cout<=g(%.0f);\n",N);

fprintf(outPtr,"END arq_KS%.0f;\n",N);

fclose(outPtr);

}

system("PAUSE");

return 0;

}

Page 56: Diseno~ de unidad I.P. de punto otante de doble precisi on

Bibliografıa

[1] Daniel D. Gajski. Principles of digital design. Prentice-Hall, 1997.

[2] David Golberg. What Every Computer Scientist Should Know AboutFloating-Point Arithmetic. ACM Computer Surveys, Vol. 23(Numero1), Marzo 1991.

[3] Timo Hamalainen. 80180 Computer Arithmetic: Addition Through Pa-rallel Prefix Computation. http://www.cs.tut.fi/~timoh/.

[4] IEEE 754 standard for binary floating point arithmetic, 1985.

[5] Mary Jane Irwin. CSE 575-Arithmetic Processor Design and Implemen-tation. Lecture 4 Addition. http://www.cse.psu.edu/~cg575/sp03/

lectures/cse575-4_adders.pdf, 2002.

[6] Mary Jane Irwin. CSE 575-Arithmetic Processor Design and Imple-mentation. Lecture 9 and 10 Multiplication. http://www.cse.psu.

edu/~cg575/sp03/lectures/cse575-9and10_multiplication.pd%f,2002.

[7] Stuart F. Oberman y Michael J. Flynn. Division Algorithms and Im-plementations. IEEE Transactions on Computers, Vol. 46(Numero 8),Agosto 1997.

[8] Howard Pollard. Computer design and architecture, pages 82–121. Pren-tice Hall, 1990.

[9] Matthew Ziegler y Mircea Stan. Optimal logarithmic adder structu-res with a fanout of two for minimizing the area-delay product. ECEDepartment-University of Virgina.

49

Page 57: Diseno~ de unidad I.P. de punto otante de doble precisi on

BIBLIOGRAFIAIEL2-2003-I-02 50

[10] Reto Zimmermann. Computer Arithmetic:Principles,architectureand VLSI design. Integrated Systems Laboratory,ETH Zuri-ch, http:\\www.iis.ee.ethz.ch\zimmi\publications\comp_arith_

notes.ps.gz, March 1999.