Puedo entender el circuito del sumador izquierdo, pero el de la derecha tiene la red nmos y pmos exactamente igual. He aprendido que el pmos y el nmos son redes duales entre sí. ¿Cómo se llega al esquema del circuito de la mano derecha en ese caso?
Hay dos problemas aquí. En primer lugar, muchas tablas de verdad se pueden lograr a través de múltiples combinaciones de funciones lógicas. Considera la función not ((A and B) or (B and C) or (A and C))
. Esa función será verdadera y falsa en los mismos casos que not ((A or B) and (B or C) and (A or C))
, pero la primera incluye un and
de tres términos y la última incluye un or
de tres términos. En consecuencia, una forma puede usarse más eficientemente cuando se evalúa la red del lado alto y la otra puede usarse más eficientemente cuando se evalúa la red del lado bajo. Como una nota interesante, las dos funciones son duales entre sí, pero su equivalencia hace que cada función sea también la dual de sí misma.
El otro problema en el trabajo aquí es que muchos circuitos pueden simplificarse si uno mueve "invirtiendo burbujas" de salidas a entradas. Los circuitos para cualquier función no trivial cuya entrada sea verdadera cuando todas las entradas son verdaderas, o falsas cuando todas las entradas son falsas requerirán al menos dos etapas lógicas, a menos que se le permita alimentar corriente desde la entrada y la salida [ una "función" que siempre produce una salida alta o una salida baja, por supuesto, no necesitaría ninguna etapa lógica]. En consecuencia, a menudo puede ser más fácil calcular la inversa de una función deseada que la función en sí. Si lo que va a usar la salida de la función podría diseñarse para que acepte la forma invertida o no invertida, hacer que la etapa posterior acepte la forma más barata puede ahorrar costos.
Puede ser más útil mirar no un sumador de un solo bit, sino un sumador de dos bits. Si el generador de acarreo para un solo bit necesita aceptar un arrastre activo-alto y necesita generar un arrastre activo-alto, será necesario que haya dos etapas lógicas entre el acarreo y la ejecución. Sin embargo, si la función puede aceptar un arrastre activo-alto y producir un arrastre activo-bajo, se puede realizar en una etapa. Sin embargo, hacer que la función produzca una ejecución activa-baja requerirá la modificación de la siguiente etapa. El truco es darse cuenta de que (1) si todas las entradas y salidas de datos de la siguiente etapa están invertidas, entonces naturalmente aceptará un arrastre activo-bajo, y puede producir de manera económica un arrastre activo-alto; (2) en muchos casos, las entradas y salidas de ALU provendrán o se enviarán a circuitos de retención; (3) en muchos casos, los circuitos de retención pueden proporcionar salidas tanto invertidas como no invertidas, prácticamente sin cargo adicional, lo que implica que pueden aceptar entradas invertidas o no invertidas sin cargo adicional.
Esencialmente, lo que sucede es que, en lugar de tener que incluir cada etapa a un inversor, de modo que sus entradas y salidas tengan la misma polaridad lógica, las inversiones se desplazan para que las entradas y salidas asociadas con bits alternativos tengan polaridad invertida. Si fuera necesario tener una ALU con entradas y salidas no invertidas, la necesidad de agregar inversores a algunas entradas y salidas contrarrestaría los ahorros realizados anteriormente (aunque eliminar una etapa de inversión de la cadena de acarreo aún reduciría los retrasos de propagación). Sin embargo, el hecho de que los agregadores se utilicen en muchos contextos donde las inversiones están disponibles "de forma gratuita" permite que esos inversores se eliminen por completo.
Lea otras preguntas en las etiquetas digital-logic cmos adder vlsi