Aritmética en línea con la adición de la raíz 2

0

Tengo problemas para trabajar con la adición MSDF de Radix 2 SD (dígito con signo) de OLA (adición aritmética en línea) (primero el dígito más significativo primero).

Si tengo un número sin signo de rango de 8 bits y un conjunto redundante y simétrico de \ $ \ left \ {{-1, 0, +1} \ right \} \ $ Con la siguiente tabla:

+1 ---> 01
 0 ---> 00
 0 ---> 11
-1 ---> 10

Si quiero hacer \ $ a-b = c \ $, no entiendo cómo se realiza la operación de \ $ a-b \ $ en binario.

Si tenemos \ $ 25-10 = 15 \ $,

$$ 25_ {10} = 0001 1001_2 $$ $$ 10_ {10} = 0000 1010_2 $$

Si asignamos cada dos dígitos consecutivos a los de la tabla, ¿cómo realizo el cálculo para poder implementarlo en el hardware?

    
pregunta user3368764

2 respuestas

2

En la aritmética de guardar / guardar / tomar prestado, cada posición binaria se representa como dos bits. Los números pueden tener varias representaciones posibles.

+25 = P=11001 / N=00000
-10 = P=00000 / N=01010

El resultado es simplemente:      + 25-10: P = 11001 / N = 01010

P = 1, N = 1 combinaciones se pueden simplificar a P = 0, N = 0.

Entonces:        + 25-10: P = 10001 / N = 00010

Puedes convertir a una representación de complemento a dos tradicionales haciendo la resta real: 10001 - 00010 = 1111 = 15

Para una resta simple, no tiene ningún sentido. Todo el propósito de este lío es que puedes hacer sumas o restas iterativas y solo tienes que realizar un nivel de operaciones binarias en cada paso (algunos XOR o muxes por bit), sin propagar el acarreo.

Por ejemplo, las divisiones (particularmente las divisiones SRT) se pueden hacer con muchas adiciones o restas sucesivas. El uso de representaciones carry-save / loan-save permite reducir el tiempo del ciclo, o calcular más bits por ciclo y, como no hay propagación del carry, no depende del tamaño del operando (por ejemplo, la misma frecuencia de ciclo está adaptada para punto flotante de precisión simple y doble).

Editar

Busque "sumador de préstamos prestados" para implementaciones reales. Por ejemplo: enlace

Editar

Los bloques de FA son "agregados completos"

Tome 3 entradas, A, B y C, cada peso 0 o 1. El resultado es entre 00 y 11. Un sumador completo es:

Carry = (A and B) or (B and C) or (A and C)
Sum = A xor B xor C

Las burbujas alrededor de los agregadores son, obviamente, inversores, 'NOT' gates

La versión 'Online' en el diagrama de la derecha procesa los bits en serie en lugar de en paralelo. Tengo la impresión de que primero se debe proporcionar el bit menos significativo. Los cuadrados son memoria / flipflops, el tiempo de propagación es, por lo tanto, 3 relojes.

El sumador

Este diagrama describe un sumador que toma dos vectores BS (X + / X-) y (Y + / Y-) y genera un resultado de BS (Z + / Z-). También se puede utilizar para calcular la suma de dos diferencias.

El problema que veo es que necesita el valor absoluto para calcular la "suma de las diferencias absolutas". No sé cómo convertir a lo absoluto sin hacer una comparación (llevar propagación).

    
respondido por el TEMLIB
0

Para su ejemplo, primero convierta 10 a -10 volteando bits / agregando 1:

Luego realice la adición de [25 + (-10)] utilizando el complemento de dos bits de 8 bits.

    
respondido por el bornruffians

Lea otras preguntas en las etiquetas