Circuito digital para verificar la mayoría

Tengo 31 entradas digitales (cada una es alta o baja) y quiero una salida digital que sea alta solo si al menos 16 entradas son altas. ¿Cómo puedo implementar esta función de "mayoría" (que también es el bit más significativo de la suma) con la menor cantidad de transistores MOS?

Como beneficio adicional, también me gustaría saber cuál es la implementación más rápida en el peor de los casos.

Hmm, el olor de la tarea me hace cosquillas en la nariz. Las preguntas sobre tu tarea están bien, siempre y cuando nos muestres lo que has investigado/considerado hasta ahora y tengas una pregunta específica al respecto. Parece que no has hecho nada para ayudarte a ti mismo, así que tampoco te ayudaremos a ti.
No es tarea. Hace mucho que me gradué. Es un problema simple pero difícil de resolver, mi tipo favorito, para el cual se me habían ocurrido las dos respuestas hasta ahora. Simplemente esperaba que alguien tuviera otro truco para resolver esto.
Deberes o no (y también he tenido deberes después de obtener mi Maestría al seguir un curso, un curso adecuado, en el que obtienes deberes ;-) ), el punto más importante es que no mostraste ningún esfuerzo para llegar a una solución por ti mismo.
La versión analógica del circuito "el ganador se lo lleva todo" es de solo 31*2 +4 FET. Toma entradas digitales y obtiene una salida digital, pero el estado intermedio es actual. Algo para archivar en los archivos para una solución alternativa.

Respuestas (4)

Configure 31 transistores MOS como fuentes de corriente conmutables que alimentan un 32 que está configurado como sumidero de corriente a 15 veces las corrientes de la fuente. Luego observe el voltaje del nodo sumador.

EDITAR - No debería jugar juegos. El título decía "Digital", así que es digital, vamos. Una configuración sería

esquemático

simular este circuito : esquema creado con CircuitLab

Esto maneja 15 entradas. Duplícalo y agrega un sumador completo de 4 bits y Bob es tu tío. No he mostrado el último sumador, pero deberías poder resolverlo por ti mismo.

Y, por supuesto, si construye esto con BJT, como con la lógica TTL o ECL, no se utilizarán transistores MOS en absoluto.

Mejor haga que el sumidero sea 15.5x la fuente actual.
Dado que la métrica de diseño es "menos transistores MOS", sería mejor hacer esto con BJT y relés.
Para que conste, probablemente construiría esto con sus 32 transistores más un inversor de cinco series para la etapa de ganancia final. Entonces, el total es de 42 transistores. Esta solución es sensible a las características del MOS analógico, por lo que esperaba que hubiera un truco digital en su lugar ... déjame ver si aparecen otras respuestas.
@bobuhito: dado que los convertidores D/A se fabrican con una precisión mucho mayor (un 12 bits necesita una precisión de conmutación en el rango de 0,025 % frente al 3 % necesario aquí), y una solución monolítica provocará efectos de temperatura coincidentes, lo haría No espero un problema. Pero es verdad que estoy jugando. Una solución digital implicaría 8 sumadores completos de 1 bit, 4 sumadores completos de 2 bits, 2 sumadores completos de 3 bits y 1 sumador completo de 4 bits. Puedes calcular el número de transistores a partir de eso.
Su solución digital tiene al menos 200 transistores (usando sumadores de alta potencia para minimizar el recuento de transistores), por lo que prefiero mejor la respuesta analógica original ... pero aún espero ver un truco y podría darle a alguien una "señal de reloj" gratuita para ayudar . En cuanto a @ThePhoton que sugiere BJT/relés, por supuesto que no están permitidos; ¡También podría haber sugerido usar a un ser humano para conectar un cable manualmente dependiendo de cuántas entradas causen una descarga!

Conecte las 31 entradas (0-30 en el diagrama a continuación) a cuatro registros de desplazamiento de salida en serie y entrada en paralelo de 8 bits, como el 74HC597, que están conectados en cascada en serie (solo se muestran dos). Registre la salida en serie del último registro en un contador binario como el 74HC4024. Use otro contador 74HC4024 para realizar un seguimiento de cuándo se han producido 32 pulsos de reloj que luego repiten el ciclo.

ingrese la descripción de la imagen aquí

Por alguna extraña razón, el CD4024 original y el 74HC4024 posterior comenzaron a numerar sus flip-flops con Q1 en lugar de Q0. Muy confuso. Así que estoy mostrando la parte NXP (HEF4024B) que corrigió esta anomalía.

Entonces, cada 32 pulsos de reloj (cuando Q5 del segundo contador sube), si al menos 16 entradas estaban altas (lo que significa que Q4 del primer contador es 1), entonces este estado se bloquea en un flip-flop tipo D (74HC74) y recordado hasta el próximo conjunto de 32 pulsos de reloj completo. Mientras tanto, las entradas se recargan en paralelo a los registros de desplazamiento.

Este es un caso algo especial, ya que el umbral de mayoría es una potencia de dos, por lo que solo se debe consultar un pin (en este caso, Q4, que representa 16-31). Si, en cambio, el umbral fuera 14/27, por ejemplo, sería necesario agregar un decodificador de direcciones para separar los valores 14 y 15 además de 16.

Con un reloj de entrada de 90 MHz, habrá un retraso máximo de 355 ns desde un cambio en la entrada hasta la actualización del estado mayoritario en la salida.

Nota: no se muestra necesariamente toda la "lógica de pegamento", pero esto debería transmitir la idea.

Me gustaría ver un esquema de nivel de transistor para contar, pero calcule que esto es más de 200 transistores si se usan flip-flops JK estándar. Este enfoque es bueno si solo hubiera una forma hábil de serializar y contar un montón de entradas.

Parece que estás confundiendo algunos conceptos aquí. Estás diciendo que quieres un circuito de votantes mayoritarios. En cuyo caso podría hacer una tabla de verdad muy grande y reducir el circuito utilizando técnicas de reducción. Por ejemplo:

De entrada y salida

000 / 0

001 / 0

010 / 0

011 / 1

100 / 0

101 / 1

... así sucesivamente y así sucesivamente. Luego, cuando tenga las puertas lógicas finales, simplemente desmonte la puerta en su recuento de transistores. No podrá hacer esto con 32 bits a menos que tenga mucho tiempo libre. Suponiendo que te tomó 1 segundo hacer cada combinación, aún te tomará 2^32 segundos, o 136 años. Habiendo vivido tanto tiempo, tendría que hacer algún tipo de reducción de puerta.

Cuando dices "La parte más significativa de la suma", es un poco confuso. Considere que tiene 3 entradas que son altas, el bit más significativo de la suma es 1, al igual que 2. Si su contador mayoritario tuviera solo 3 bits, esta información no le diría nada.

"La implementación más rápida en el peor de los casos" suena como la suma de los retrasos de puerta que ocurrirían en el peor de los casos; la realización más en cascada tendría el mayor retraso.

Sugerencia: los pestillos y los flip flops también están hechos de puertas lógicas, que también están hechas de transistores. Tal vez podría hacer un registro de desplazamiento y un contador, luego usar un poco de lógica combinacional en la salida del contador.

Buena suerte.

Dado que el circuito está diseñado para manejar 31 circuitos, la suma completa de las entradas será un número de 5 bits. Si, como en su ejemplo, hubiera solo 3 entradas, la suma sería un número de 2 bits y el msb, de hecho, indicaría que 2 o más entradas (la mayoría) eran 1.
¿La suma de un número de 31 bits es un número de 5 bits? Eso no tiene ningún sentido. Además, la suma de todos los bits en 00101 es 00100 + 00001, que es 00101... El MSB es 00100; ¿Cómo notarías la diferencia entre 00101 y 00111 con solo mirar el bit más significativo?
No, pero 31 se puede expresar como un número de 5 bits, 0b11111. La suma de todos los bits en el campo de bits 00101 es 2 (dos bits son altos), que es 10. El resto de tu pregunta no tiene mucho sentido.
Me perdiste. Pensé en lo que quiso decir con "31 entradas digitales" que pueden ser altas o bajas, así que pensé que estos son bits individuales en una palabra; y el objeto era determinar si la mayoría de estos bits eran altos.
No importa si un bit es msb o lsb. Si es alto, es alto. Si los 16 msbs son altos, la mayoría de los 31 bits son altos. Si los 16 lbs son altos, la mayoría de los 31 bits son altos. Su valor no importa. ¿Por qué crees que lo hacen? La pregunta no se aplica ni remotamente al valor de los bits. Solo pregunta si la mayoría de ellos son altos o no.

Soy principalmente una persona analógica, así que haría esto usando técnicas analógicas.

Sume todas las entradas juntas en un amplificador sumador. Alimente la salida del amplificador a un comparador que se dispare cuando el número deseado de entradas sea HI.

Esto se puede simplificar a un verano resistivo (no se necesita un amplificador operacional) y un comparador.

El título de la pregunta de OP es " Circuito digital para verificar la mayoría ". (¡Aunque no te voté negativo!)