Por favor, sea amable. Tengo una pregunta espinosa e importante de otro campo de la ingeniería cuya respuesta puede ser bastante conocida en ingeniería eléctrica. Hice una pregunta similar en StackOverflow
Supongamos que tengo una tabla de verdad de 5 entradas y 1 salida. He utilizado el algoritmo Espresso (por ejemplo, Logic Friday) para minimizar la tabla y escribir un VHDL eficiente. Todo funciona bien.
En lugar de minimizar y mapear la tabla de verdad a puertas NAND, me gustaría mapear a una función lógica ternaria arbitraria. No me interesa la lógica multivaluada, sino las funciones lógicas que tienen 3 variables de entrada. Hay 256 de estas funciones, y 3-en NAND es sólo uno de ellos. No todas estas 256 funciones pueden ser interesantes: algunas se reducen a sus hermanas de 2 variables de entrada.
Pregunta Cómo se puede mapear una tabla de verdad (por ejemplo, con 7 entradas) a cualquiera de estas funciones 3-in. Una herramienta que haga algo similar sería genial, pero un método sobre cómo simplificar a funciones ternarias arbitrarias sería lo mejor.
Antecedentes: Las CPUs modernas pueden realizar operaciones lógicas ternarias arbitrarias en registros de 512 bits (por ejemplo, la instrucción vpternlog ), pero debido a la complejidad, los compiladores lo dejan en manos del programador, que no tiene ni idea de cómo optimizarlo.
0 votos
Ni siquiera hay una manera formal de "mapear" a un binario función. Y no todas las funciones binarias comprenden un sistema funcional completo. Lo mismo ocurre con las ternarias.
1 votos
Creo que esto es NP difícil para las funciones binarias.
0 votos
@user110971 No lo creo.. Creo que confundes con el problema del SAT.
1 votos
@EugeneSh. Creo que el problema se reduce a la minimización booleana, que es NP difícil, porque si no se podría resolver el problema SAT. Al menos esto es lo que creo que pide el OP.
0 votos
He leído la pregunta original en SO y todavía no estoy seguro de lo que está tratando de lograr exactamente. ¿Necesitas tiempos de simulación más rápidos? He simulado sistemas muy grandes, por ejemplo, FPUs, controladores de memoria, y una pila de comunicación en la parte superior, sin mucho problema. El factor limitante parece ser la velocidad de acceso a la RAM, no el procesamiento de la CPU.
0 votos
@user110971 Cuando reordeno mi estructura de datos de tal manera que el primer bit de 512 enteros se almacena consecuentemente en la memoria, lo mismo para el segundo bit, el tercero, etc., puedo reducir el número de accesos a la memoria (recopilaciones) considerablemente. Mi programa informático contiene ahora una gran tabla de verdad que me gusta simplificar. No simulo hardware, escribo software HPC.
0 votos
@HJLebbink Entonces, ¿por qué no utilizar uno de los algoritmos estándar? ¿Qué tamaño tiene tu tabla? ¿Qué proporción de las entradas requiere una salida alta?
2 votos
@user110971 Los algoritmos estándar (que yo sepa) no reducen a funciones lógicas ternarias arbitrarias (que es la pregunta). Simplifican las NANDs de 3 en 3, y las ANDs de 3 en 3, pero no todas las demás funciones lógicas de 3 en 3 que permitirían una reducción mucho más compacta.
0 votos
Normalmente los EE podrían utilizar un chip de lógica programable de fuerza bruta para reducir 256 funciones y crear un mapa de conexión con conjuntos de puertas OR,AND,XOR de 3 entradas, 2 entradas e inversores para entradas o salidas para producir una salida lógica de 1 bit a partir de una función hexadecimal de 1 byte.. Probablemente todavía no entiendo
0 votos
Para 4 entradas se necesita un máximo de dos tablas de 3 entradas seleccionadas por la 4ª entrada para generar cualquier función posible. El selector puede ser hecho por una tercera tabla de 3 entradas, así que el peor caso para 4 entradas es 3. Aunque no estoy seguro de cómo generalizar esto o reducirlo.
0 votos
En realidad 2 conjuntos de tablas con combinaciones de 2 de 3 funciones(or,and,xor) sin contar sus complementos de entrada/salida y 0/1