¿Cómo diseñar un bit de control para convertir el binario sin firmar en el complemento de dos?

1

Estoy diseñando un comparador de 4 bits utilizando solo puertas lógicas básicas (y, o, nand, xor, etc.) En su forma actual, el comparador toma dos números binarios sin signo de 4 bits (A y B) y compara cada valor de bit de más a menos significativo y determina una salida: A > B, A < B, o A = B. Bastante simple.

Sin embargo, estoy tratando de agregar un bit de control para indicar si la entrada es binario sin signo o complemento de dos. El estado predeterminado, 0, debe significar que la entrada está en binario sin signo, mientras que 1 significa que los números de entrada están en el complemento de dos.

Tengo dificultades para entender cómo o dónde en el circuito implementar el bit de control. Entiendo que un método es implementar un sumador, pero no estoy seguro si tendría que existir fuera del circuito que ya he diseñado, y el bit de control cambiaría entre dos circuitos que existen casi independientemente uno del otro. Estoy seguro de que tiene que haber una solución más elegante e integrada. ¡Si pudiera señalarme en la dirección correcta, lo apreciaría enormemente!

    
pregunta Marg

1 respuesta

2

En su intuición, tiene razón en que hay una mejor solución que un multiplexor que selecciona entre dos circuitos completamente independientes.

Recuerde el significado de un sistema numérico posicional, para una entrada sin signo \ $ a_3 a_2 a_1 a_0 \ $ el valor es $$ 8 a_3 + 4 a_2 + 2 a_1 + a_0 $$

Para el complemento de dos, el único cambio es que el bit de signo toma un valor de posición negativo: $$ - 8 a_3 + 4 a_2 + 2 a_1 + a_0 $$

Ahora, la condición para la comparación de dos números complementarios de dos firmados es

$$ - 8 a_3 + 4 a_2 + 2 a_1 + a_0 < -8 b_3 + 4 b_2 + 2 b_1 + b_0 $$

Agregue los términos de signo-bit a ambos lados, para obtener

$$ 8 b_3 + 4 a_2 + 2 a_1 + a_0 < 8 a_3 + 4 b_2 + 2 b_1 + b_0 $$

que es la comparación sin signo entre \ $ b_3 a_2 a_1 a_0 \ $ y \ $ a_3 b_2 b_1 b_0 \ $

Es decir, puede usar la entrada de control para intercambiar el bit de signo y luego alimentar la lógica de comparación normal.

Si un multiplexor no es una de sus puertas fundamentales, este "intercambio" se agrega de manera no trivial a la complejidad. Así que volvamos a ver esa desigualdad:

$$ - 8 a_3 + 4 a_2 + 2 a_1 + a_0 < -8 b_3 + 4 b_2 + 2 b_1 + b_0 $$

Agregue \ $ 8 \ $ a ambos lados y al grupo:

$$ 8 (1 - a_3) + 4 a_2 + 2 a_1 + a_0 < 8 (1 - b_3) + 4 b_2 + 2 b_1 + b_0 $$

Tenga en cuenta que \ $ 1-x \ $ no es más que el operador NO.

$$ 8 \ overline {a_3} + 4 a_2 + 2 a_1 + a_0 < 8 \ overline {b_3} + 4 b_2 + 2 b_1 + b_0 $$

y esto es nuevamente la lógica de comparación sin signo aplicada a las dos entradas \ $ \ overline {a_3} a_2 a_1 a_0 \ $ y \ $ \ overline {b_3} b_2 b_1 b_0 \ $

Ahora su entrada de control solo necesita seleccionar entre \ $ a_3 \ $ y \ $ \ overline {a_3} \ $ (y también para \ $ b_3 \ $), y esto es solo la función XOR.

Finalmente, su comparador de modo dual se hace simplemente tomando su circuito de comparación no firmado y alimentando sus entradas con

$$ (a_3 \ oplus S) a_2 a_1 a_0 $$ $$ (b_3 \ oplus S) b_2 b_1 b_0 $$

    
respondido por el Ben Voigt

Lea otras preguntas en las etiquetas