Células sumadoras prefijas paralelas en negabinario

14

Estoy tratando de diseñar un sumador de prefijo paralelo para un sumador basado en negabinary. Negabinary es base 2 lugar del familiar binario base 2 . Cada sumador de 1 bit genera una suma y dos acarreos (en lugar de uno en binario) que van al siguiente sumador.

Para que el sumador sea más rápido, quiero usar una estructura de prefijo paralela, como la estructura Ladner-Fischer que se muestra a continuación. Estoy familiarizado con la funcionalidad de la celda púrpura en el sistema binario, pero no estoy seguro de cómo podría obtener la misma funcionalidad en el sistema negabinario.

La razón por la que hago esto es solo por diversión, todavía no he encontrado ningún uso para negabinary.

Fórmulas para calcular la suma y lleva:

si=aibi(ci++ci)

ci+1+=ai¯bi¯ci+¯ci

ci+1=aibici¯+aici+ci¯+bici+ci¯

Ladner-fischer lleva estructura de árbol:

ingrese la descripción de la imagen aquí

Si algo no está claro, no dude en preguntar.

gilianzz
fuente
Si bien esta puede ser una pregunta interesante, no parece ser una pregunta eléctrica, y es posible que tenga más suerte llevándola al SE de matemáticas.
Redja
3
Lo pongo aquí porque creo que la gente de EA tienen más experiencia con la lógica de transporte, etc. sumadores diseño
gilianzz
Esto es totalmente una pregunta de EE
Voltaje pico
Parece que necesita más de dos salidas por acarreo. ¿No necesita generar y propagar tanto para llevar como para pedir prestado?
rígido
Supongo que estás hablando de la estructura Ladner-fischer. Fue solo un ejemplo para mostrar un árbol de prefijos paralelo. Cada sumador negabinario de 1 bit genera una suma, un carry positivo y uno negativo. No estoy seguro si podemos usar los conceptos de generar y propagar con negabinary.
gilianzz

Respuestas:

1

Probablemente he dedicado más tiempo a esta pregunta de lo que debería, pero aquí están mis hallazgos.

No puedo encontrar ningún ejemplo de un sumador de prefijo paralelo "puro" para números negabinarios. También creo que es un problema abierto, ya que no he visto ninguna prueba de que no sea posible.

Lo más cerca que puedo llegar es usando una adición negabinaria negativa de dos pasos (comúnmente abreviada nnba en la literatura). Se basa en la siguiente propiedad:

f(x)=xn1¯xn2...x1¯x0g(x)=xn1xn2¯...x1x0¯0xAA...AA0x55...55

(a+nbb)=g(f(a)+f(b)+1)

Where the left side is the negabinary sum +nb, while the + on the right side is a normal binary sum.

The negative sum can then simply be inverted using the same property but with a zero operand:

x=g(f(x)+f(0)+1)

So in order to find the sum using parallel prefix adders, you can:

  1. Compute f(a) and f(b), ie. by inverting every odd bit of the negabinary numbers
  2. Compute the regular binary sum while setting the carry bit for the LSB (the +1), leading to a first intermediary sum s1.
  3. Invert all bits of s1 (this is f(g(s1))). This is the finish of the first sum, while also starting the inversion.
  4. Increment the result by 0xAA...AB (=f(0)+1) using a parallel prefix adder, yielding the second intermediary sum s2
  5. Compute g(s2) (inverting each even bit) to find the final negabinary sum.

I have actually tried to find a "pure" parallel prefix adder, but I considered it too complex for the time I was willing to spend on it. Here's why:

The whole point of parallel prefix adders is to find some operation of {0,1}n×{0,1}n{0,1}n that allows you to easily calculate the (in this case 2) carries from these bits. As an added constraint, the operation needs to be associative to be computed in parallel. For example, this basically excludes any NOT operator (that is not part of a double negation). For example: ab=ab¯ is not an associative operator, because

(ab)c=ab¯c¯a(bc)=abc¯¯

Note that the boolean operator for the carries in your question includes the mixed terms ci+ci¯ and cici+¯, making it impossible to use it as-is. For a single carry in normal binary addition, it became quite obvious how to construct this operator when thinking about it in terms of generation and propagation, but it seems to be not so obvious for negabinary carries.

Sven B
fuente
My current understanding is that it is in fact impossible to construct this "pure" parallel prefix adder. It would seem that a parallel prefix adder can get an efficiency of O(log(N)), whereas a negabinary equivalent seems to always have complexity O(2*log(N)) (2x n.n.b.a).
gilianzz
I didn't find any literature proving or stating that it was impossible. I'd be happy to be proven wrong either way though. But the 2-step n.n.b.a. does seem to be the standard currently for negabinary addition as far as I can tell.
Sven B