¿Cómo diseñar un circuito combinacional que encuentre el mínimo entre múltiples números dados?

0

Hay bastantes artículos (por ejemplo, este ) que se pueden encontrar en línea para discutir el el diseño de un comparador que toma dos números (por ejemplo, A y B ) como entradas, y genera si A > B , A < B o A = B . Pero, ¿y si quiero comparar varios números?

Digamos que tenemos cuatro números binarios de 4 bits indicados como i0 , i1 , i2 y i3 . Quiero que la salida del circuito sea el índice del valor mínimo entre ellos. A continuación se presentan algunos ejemplos: El valor resaltado en cada fila representa el valor mínimo entre los cuatro a los que debería corresponder la salida.

Pensé en comparar los bits uno por uno a partir de la MSB, pero las cosas se pusieron feas cuando intenté comprender el uso de puertas combinacionales. ¿Hay alguna forma eficiente de hacer esto?

    
pregunta Mike Lee

3 respuestas

2

Un enfoque que es bastante fácil de explicar es la siguiente idea:

  1. Diseñe un bloque funcional que compare dos valores de 4 bits y emita 0 o 1 para indicar cuál de los dos es menor o igual. Esto es esencialmente solo un comparador, excepto que no necesita todos Tres salidas, por lo que la lógica involucrada puede ser un poco menos. La lógica para esto debe estar al alcance de un análisis relativamente fácil.
  2. Aplique el bloque funcional anterior de (1) para aceptar \ $ i_0 \ $ y \ $ i_1 \ $ como entradas y use la salida como la entrada del selector (\ $ s_0 \ $) a 4 bits bus MUX 2 a 1, con \ $ i_0 \ $ y \ $ i_1 \ $ como sus dos entradas de bus de 4 bits. La salida será el arrendador o el mismo de esos dos valores como \ $ o_0 \ $.
  3. Aplique el bloque funcional anterior de (1) para aceptar \ $ i_2 \ $ y \ $ i_3 \ $ como entradas y use la salida como la entrada del selector (\ $ s_1 \ $) a 4 bits bus MUX 2 a 1, con \ $ i_2 \ $ y \ $ i_3 \ $ como sus dos entradas de bus de 4 bits. La salida será el arrendador o el mismo de esos dos valores como \ $ o_1 \ $.
  4. Aplique el bloque funcional anterior de (1) para aceptar \ $ o_0 \ $ y \ $ o_1 \ $ como entradas y use la salida como la entrada del selector (\ $ A_1 \ $) a un bit MUX 2 a 1, con \ $ s_0 \ $ y \ $ s_1 \ $ como sus dos entradas de 1 bit. La salida será \ $ A_0 \ $.

El índice es entonces \ $ A_1..A_0 \ $.

No estoy diciendo que este sea el método más eficiente. Solo que es el método más obvio y más fácil de seguir:

simular este circuito : esquema creado usando CircuitLab

Estoy seguro de que puede elaborar la lógica para la función especial indicada en el paso (1) anterior. No es terriblemente complicado. El resto es solo la lógica mux estándar, que se encuentra en casi todos los lugares donde desea buscar.

Esto puede ser un diseño de benchmark . Dejaré el problema de hacerlo aún más eficiente para usted.

    
respondido por el jonk
0

Comience con el primer bit; si se borran los bits de esa columna, excluya la entrada que tiene configurada para un procesamiento posterior, por ejemplo. por OR'ing con 1111.

Luego repita el circuito para el segundo bit, y así sucesivamente.

Y juntos lo que quede.

    
respondido por el Jasen
0

si quieres una forma sencilla. ejecute las entradas en demultiplexores para convertir los 4 bits en 1 de 16 señales. O esos juntos en las entradas y luego alimenta el resultado a un decodificador de prioridad.

    
respondido por el Jasen

Lea otras preguntas en las etiquetas