Estaba implementando la ALU a partir de las especificaciones dadas en mi libro de los sistemas de Elementos de Computación. Estoy atrapado en un solo problema. ¿Cómo puedo encontrar si un número dado es cero o no? Una cosa que puedo hacer es o cada bit en el autobús, y luego aplicar una puerta no en eso. Pero tiene que haber alguna otra solución elegante.
16
Respuestas:
Simplemente no hay forma de evitar ORing todos los bits, por más insatisfactorio que parezca. Sin embargo, tampoco está restringido a dos puertas de entrada en silicio. Puede construir una puerta NOR de 4 entradas en la lógica CMOS colocando 4 transistores tipo p de la serie en la red pullup y 4 transistores paralelos de tipo n en la red pulldown. Eso reduce la profundidad de la topología de su árbol y, por lo tanto, su retraso de propagación. Sin embargo, solo puede llevar esa teoría hasta el momento antes de que la caída de voltaje acumulada a través de los transistores en serie haga que el pull-up no sea lo suficientemente pull-up como para ser un "1" ... cuatro es una buena regla general si no recuerdo mal.
fuente
La función lógica es la puerta NOR. Esa es la función lógica más simple que existe.
fuente
La solución típica con máquinas de 8 bits era que la ALU produciría una cantidad de bits de 'bandera' que representarían el resultado de la operación más reciente. Si bien sería posible tener cualquier número de bits de bandera (es decir, podría tener una bandera 'Z' para cada registro en su CPU), generalmente es lo que acaba de calcular en el que es más interesante, por lo que tiene cierto sentido hacerlo de esa manera.
Algunas de esas CPU antiguas establecerían automáticamente bits de marca para casi cada movimiento de datos, mientras que otras requerirían que pegue una instrucción específica de 'comparación' en su código si de repente necesita saber si un registro determinado era cero. Y ya sea que proporcione una verificación de cero para cada registro o solo para lo que se acaba de calcular, realmente no hay una forma más simple de verificar "es esta palabra cero" que simplemente O todos los bits juntos.
fuente
Algunas CPU, MIPS, por ejemplo, tienen un registro que siempre contiene cero, lo que hace que probar otro registro para cero sea muy rápido.
fuente
Soy un gran admirador
or_reduce
: la mayoría de las herramientas de síntesis lo optimizarán para la mejor implementación, ya que saben exactamente lo que está haciendo.fuente