Determinazione del numero minimo di porte NAND / NOR richieste per realizzare un'espressione booleana


9

Esiste un algoritmo per determinare il numero minimo di porte NAND o NOR

  1. dato numero di ingressi
  2. disponibilità / indisponibilità di input integrato

richiesto per realizzare un'espressione booleana? Possiamo ottenere una forma AND-OR come prime implicazioni tramite le mappe di Karnaugh che è minima (per quanto ne so, l' algoritmo Quine-McCluskey le ottiene in modo deterministico). Esiste una tecnica simile anche per le implementazioni NAND o NOR? Almeno, tale tecnica dovrebbe determinare il numero minimo richiesto di porte NAND / NOR anche senza trovare il diagramma reale?

Applicare la legge di De Morgan sulle prime implicazioni non sembra deterministico,

A ⊕ B = A'B + AB' = ((A'B)'(AB')')' [5 NAND gates]
A ⊕ B = (AB + A'B')' = ((ABAB+ABB') + (A'AB+A'B'))' = (AB(AB+B') + A'(AB+B'))' = ((AB+A')(AB+B'))' = (((AB)'A)'((AB)'B)')' [4 NAND gates by reusing (AB)']

È per un'implementazione a due o più fasi?
Fizz,

@RespawnedFluff L'obiettivo dell'implementazione multilivello è minimizzare il numero di gate, quindi anche l'implementazione minima NAND / NOR dovrebbe essere multilivello.
Samik,

K-map non offre risultati minimi per l'ottimizzazione a più livelli.
Fizz,

Risposte:


10

Puoi trovare il numero minimo di gate in una rete multi-livello risolvendo un problema di programmazione con numeri interi [o equivalenti, vedi sotto]. Questo problema è NP-completo, quindi solo pratico per risolvere fino a una dozzina di porte o giù di lì.

Esistono metodi di approssimazione che non ti daranno il numero minimo ma sono più tracciabili in termini di tempo richiesto ... Questi sono un argomento vasto di per sé, sostanzialmente l'intero campo dell'ottimizzazione a più livelli. Puoi leggere una panoramica [gratuita] qui .

Per le piccole reti di NAND (fino a 4 variabili), il problema è stato completamente risolto da un elenco esaustivo [o metodi equivalenti]. C'è una tesi di dottorato [2009] abbastanza recente di Elizabeth Ann Ernst che sintetizza i risultati antichi e li estende. Ernst usa branch-and-bound, che migliora il metodo esauriente in pratica, ma non asintoticamente. Rileva inoltre che altri metodi impliciti di enumerazione come la programmazione di numeri interi o CSP (soddisfazione del vincolo, risolto via SAT) funzionano peggio nella pratica.

Ovviamente ha scritto del software per il suo metodo (chiamato BESS), ma non sono sicuro che sia disponibile pubblicamente da qualche parte. Il testo completo della sua tesi è disponibile gratuitamente presso umich . E in effetti hai trovato l'espressione minima per xor a 2 input (il tuo secondo ovviamente), quella evidenziata di seguito:

inserisci qui la descrizione dell'immagine

Ha anche confrontato i risultati esatti (per le NAND) con quelli prodotti dall'ottimizzatore euristico di ABC .

ABC è stata in grado di produrre una rete ottimale per 340 delle 4.043 funzioni in cui è nota la rete ottimale. Per quelle funzioni in cui ABC non produceva una rete ottimale, era in media del 36% più grande della rete ottimale [.]

Esistono (ovviamente) alcune reti [più grandi] per le quali BESS non è terminato, ma ha permesso di trovare un limite superiore (nel punto in cui la ricerca è stata abbandonata). Per quelli ABC ha fatto abbastanza bene [bene rispetto ai limiti trovati], come puoi vedere dal 2 ° grafico sotto.

inserisci qui la descrizione dell'immagine


Se sei curioso, ho provato l'ABC sul problema xor ... e dà 5 nand gate, almeno con lo resyn2script. Quindi non è meglio di Logic Friday (che usa misII).
Fizz,

Esistono script e database per ABC che fondamentalmente cercano una grande quantità di funzioni per implementazioni ottimali pre-calcolate ad es. Arxiv.org/pdf/1108.3675.pdf Non l'ho provato, ma anche se funziona, il duro lavoro è stato fatto altrove.
Fizz,

Sto esaminando i materiali che hai fornito e sembrano molto interessanti, ma faccio fatica a capirli. Una volta che li comprenderò correttamente, probabilmente assegnerò la taglia. Nel frattempo, fai un voto.
Samik,

1

Probabilmente ci sono tecniche migliori là fuori, ma molto tempo fa, nei periodi bui, ho scoperto che Karnaugh Maps funzionava perfettamente


Ti dispiacerebbe far luce su quei "secoli bui" su come procedere all'implementazione minima NAND / NOR dall'implementazione AND-OR ottenuta dalle mappe di Karnaugh?
Samik,

1

NAND seguita da NAND è equivalente a AND seguita da OR.

NOR seguito da NOR è equivalente a OR seguito da AND.

La NAND seguita dalla NOR sarebbe equivalente a AND seguita da AND che non ha molto senso. NOR seguito da NAND sarebbe parimenti equivalente a OR seguito da OR.

Non credo che nel caso generale esista un modo fattibile per trovare una soluzione minima per un problema con un numero elevato di input (ovviamente per piccoli conteggi di input è possibile forzare la forza). Quine-McClusky esamina solo le assunzioni a due livelli (l'assolo a due livelli minimo spesso non è l'assolo minimo complessivo) e può diventare computazionalmente impossibile con complesse tabelle di verità e un gran numero di input.


Quindi non c'è modo migliore dello spostamento delle bolle?
Samik,

1

L'algoritmo migliore è l' algoritmo Espresso . In una certa misura questo è implementato nella sintesi FPGA

Logic Friday è un software che puoi utilizzare. NOTA: questo riduce un XOR a 5 porte NAND.


Ma Espresso offre anche l'implementazione AND-OR, no?
Samik,

1
L'espresso è "migliore" solo nel senso che è fattibile per input di grandi dimensioni (formule) [diversamente dalle k-map], ma non fornisce la formula migliore / minima in tutti i casi.
Fizz,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.