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

Estoy diseñando un comparador de 4 bits usando 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 binaria sin firmar o complemento de dos. El estado predeterminado, 0, debería significar que la entrada está en binario sin signo, mientras que 1 significa que los números de entrada están en complemento a dos.

Tengo dificultades para entender cómo o dónde implementar el bit de control en el circuito. 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 el uno del otro. Estoy seguro de que tiene que haber una solución más elegante e integrada. Si pudiera indicarme la dirección correcta, ¡se lo agradecería enormemente!

no escribas "y, o, nand, xor, etc ". Indique explícitamente a qué puertas se refiere: "básico" es una palabra realmente relativa y, según la tecnología para la que diseñe, una tabla de búsqueda de 6 bits podría ser el elemento lógico básico.
Obviamente, esta es una tarea y no eres el primero en publicarla, por lo que puedes tener una pista: mira qué hace tu circuito actual cuando ambos números son positivos y cuando ambos son negativos, luego considera cómo lidiar con los otros casos .
¿No se utiliza el intercambio de pila para obtener ayuda con las tareas? Genuinamente curioso, esta es mi primera publicación aquí, y no conozco las reglas/etiqueta.

Respuestas (1)

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

Recordar 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 a dos, el único cambio es que el bit de signo toma un valor posicional negativo:

8 a 3 + 4 a 2 + 2 a 1 + a 0

Ahora, la condición para la comparación de dos números en complemento a dos con signo 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 bit de signo 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 su 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, entonces este "intercambio" se suma a la complejidad de manera no trivial. Así que echemos un vistazo a esa desigualdad de nuevo:

8 a 3 + 4 a 2 + 2 a 1 + a 0 < 8 b 3 + 4 b 2 + 2 b 1 + b 0

Agregar 8 a ambos lados y 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 es solo el operador NOT.

8 a 3 ¯ + 4 a 2 + 2 a 1 + a 0 < 8 b 3 ¯ + 4 b 2 + 2 b 1 + b 0

y esta es nuevamente la lógica de comparación sin signo aplicada a las dos entradas a 3 ¯ a 2 a 1 a 0 y b 3 ¯ b 2 b 1 b 0

Ahora su entrada de control solo necesita seleccionar entre a 3 y a 3 ¯ (y lo mismo para b 3 ), y esta es solo la función XOR.

Finalmente, su comparador de modo dual se hace simplemente tomando su circuito de comparación sin firmar en funcionamiento y alimentando sus entradas con

( a 3 S ) a 2 a 1 a 0
( b 3 S ) b 2 b 1 b 0