Decodificación eficiente de un patrón de entrada de cuatro bits en uno de los 16 patrones de salida de doce bits

0

Tengo un patrón de entrada de cuatro bits. Tengo 16 patrones distintos de salida de 12 bits. Muchos de estos patrones de salida tienen bits que se establecen en 2 o 4 de los patrones.

Si yo (arbitrariamente) asigno cada patrón a un número de cuatro bits, puedo usar varias herramientas de mapas en línea de Karnaugh para generar circuitos lógicos.

Esta asignación arbitraria de patrones a números de cuatro bits agrega restricciones innecesarias al problema.

¿Hay alguna forma de resolver esto, para dar el mejor patrón < - > número de asignaciones, aparte de forzar a los brutos en los 16! pedidos?

(Donde "mejor" es el patrón < - > asignación de números que requiere menos lógica para descodificar la entrada de cuatro bits uno de los patrones de salida de 12 bits.)

Actualización:

Aquí están los patrones de bits que quiero descodificar a números de 4 bits para:

0  0  0  1  0  0  0  0  1  0  0  0
0  1  0  1  0  0  0  0  1  0  0  0
0  0  0  0  0  0  1  0  1  0  0  0
0  0  0  0  0  1  0  0  0  0  0  1

0  0  0  0  1  0  0  0  0  1  0  0
0  1  0  0  1  0  0  0  0  1  0  0
1  0  1  0  1  0  0  0  0  1  0  0
0  0  0  0  0  0  1  0  0  1  0  0

0  0  0  0  0  1  0  0  0  0  1  0
1  0  0  0  0  1  0  0  0  0  1  0
0  0  0  0  0  1  1  0  0  0  1  0
0  0  0  0  0  0  1  0  0  0  1  0

0  0  0  0  0  1  0  1  0  0  0  0
0  0  0  0  0  0  0  0  0  0  0  0
0  0  0  0  0  1  1  1  0  0  0  0
0  0  0  0  0  0  1  1  0  0  0  0

No importa qué número de cuatro bits decodifique a qué patrón de 12 bits, siempre que haya una relación de uno a uno.

¿Cuáles son las pocas puertas lógicas que harán el trabajo?

Si bien la solución de lo anterior puede ser un poco útil, es la solución general que estoy buscando.

    
pregunta fadedbee

2 respuestas

3

Puedes usar una SRAM o una PROM para esto. 4 bits de entrada, 12 bits de ancho. Almacene sus patrones en la memoria, use los 4 bits de entrada como la dirección.

Hay un IC de SRAM de 16 palabras para este propósito. Serían inútiles almacenar datos "reales", pero están diseñados para tablas de búsqueda arbitrarias e implementación de lógica simple.

    
respondido por el pipe
2

Tienes tres opciones:

  1. Use una tabla de búsqueda, como lo indican @Olin y @Pipe. Dado lo pequeño que es (16 palabras), podría hacerlo fácilmente con uno o dos circuitos integrados de memoria paralelos. Por ejemplo, una EEPROM funcionaría.

  2. Determine la lógica requerida. Esto se haría construyendo 12 mapas de Karnaugh, cada uno de los cuales tiene cuatro entradas (su número de 4 bits), y determina la lógica requerida para 1 de los bits de salida (por lo tanto, debe hacer 12 mapas). Luego puede hacer una simplificación de la lógica y ver qué se le ocurre. Sin embargo, con toda probabilidad, necesitará muchos más circuitos integrados, solo una memoria simple. No puedo darte una estimación de cuánto sería ya que no has publicado el aspecto de tus patrones de salida.

  3. Usa un microcontrolador. Sí, parece una idea extraña, pero si estás ejecutando algo lentamente y no te importa un tiempo de propagación alto, puede funcionar. Los MCU son muy baratos en la actualidad y tienen todo lo que necesitan para funcionar (oscilador interno, etc.). Solo necesitaría uno con 16 pines de E / S (4 para entradas, 12 para salidas) y luego escribir un programa simple que lea constantemente las entradas, las convierta usando una tabla de consulta y las escriba en las salidas. Eso sería un solo IC de 20 pines; por ejemplo, ATTiny2313 cuesta apenas $ 2. Estoy seguro de que también hay otras más baratas.

respondido por el Tom Carpenter

Lea otras preguntas en las etiquetas