Reti Logiche A ALGEBRA BOOLEANA

Transcript

Reti Logiche A ALGEBRA BOOLEANA
Reti Logiche A
versione 0.3
(7/11/04)
ALGEBRA BOOLEANA
E' un sistema algebrico identificato dalla quintupla (B, +, *, 0, 1):
– B= insieme su cui vengono definite le operazioni;
– +, * sono le operazioni;
– 0, 1 sono gli elementi neutri di (rispettivamente) + e *.
Noi usiamo l'algebra booleana a due valori, quindi B = (0,1).
Le funzioni f che vengono applicate in algebra possono essere rappresentate tramite
tabelle di verità, una tabella che specifica la relazione che esiste tra ogni elemento del
dominio di f e la corrispondente immagine.
definizioni:
• letterale: è una coppia (variabile,valore) --> es: (x,0) è indicato come x' (o !x);
• termine prodotto: è il prodotto logico AND; se un termine contiene tutti i letterali
della funzione e il risultato dà 1, allora è detto mintermine di f, se non contiene tutti i
letterali è detto implicante;
• termine somma: è duale al termine prodotto, è la somma logica OR; allo stesso modo
del termine prodotto è detto maxtermine o implicato, però solo se il risultato della
somma dà 0.
Data una funzione, la soluzione iniziale è data dalle forme canoniche:
forma 1) metto in OR tutti i mintermini, ottengo la forma SoP (somma di prodotti);
forma 2) metto in AND tutti i maxtermini, ottengo la forma PoS (prodotto di somme).
Queste forme derivano dal teorema dell'espansione di Shannon.
E' necessario minimizzare le forme base perchè più sono i letterali, più grandi e numerose
sono le porte necessarie. Uso l'algebra booleana:
Usando queste formule è sempre possibile ridurre l'espressione, ma non esiste una
procedura sistematica che mi assicuri di avere ridotto al massimo la forma canonica
iniziale. Quindi è impossibile identificare un algoritmo che trovi la soluzione ottimale,
per questo ci sono diverse metodologie di sintesi:
– ottime: Karnaugh e Quine-McCluskey;
– euristiche per sintesi a due livelli.
Metodo di KARNAUGH
Si propone di identificare la forma minima usando la regola di riduzione aZ + a'Z = (a+a')
Z = Z.
Si usa il metodo detto delle mappe di Karnaugh, che risolve sia problemi di replicazione
dei termini sia quelli legati all'identificazione dei termini da raggruppare. E' un metodo
grafico utilizzabile al massimo fino a 6 variabili.
Perchè uso le tabelle di K.?
Con l'aumentare delle variabili in gioco [ f(a,b,c,d,) ha 4 variabili], diventa sempre più
difficile rappresentare in forma cartesiana la funzione f. Diventa quindi necessario passare
allo sviluppo nel piano degli n-cubi (n = livelli) che si creano nella rappresentazione
cartesiana. Questo sviluppo nel piano è detto mappa di K..
3-cubo: è molto meglio usare una tabella 4x2...
Metodo:
1) individuo gli implicanti primi e primi essenziali:
- primi: termine prodotto associato a un raggruppamento di dimensione massima;
- essenziali: implicante primo che copre uno o più 1 non coperti da nessun altro
implicante primo.
2) copertura: scelgo il minor numero di implicanti primi e primi essenziali.
E' necessario scegliere prima tutti gli implicanti primi essenziali, per poi proseguire
selezionando il minor numero possibile di implicanti che coprono i restanti 1.
Di solito la funzione f è data sotto forma di ONset ( § ), un insieme contenente tutte le
combinazioni (decimali) in cui la funzione dà come risultato 1 [es: f(a,b,c,)=§
(1,4,6...)].
In certi casi certe configurazioni di ingresso non sono possibili o danno risultati di nessun
interesse. Queste combinazioni costituiscono il DCset (Don'tCare, ¢), i cui valori si
possono considerare 0,1 a scelta.
Metodo di QUINE-MC CLUSKEY
E' un metodo di minimizzazione tabellare facilmente traducibile in un algoritmo,
estensibile a funzioni con più uscite e consente l'utilizzo di funzioni di costo.
Si divide in due fasi:
1) Ricerca degli implicanti primi;
2) Ricerca della copertura ottima.
1. RICERCA IMPLICANTI PRIMI
✗
dato l'OnSet ed eventualmente il DCset (i cui valori considero per ora tutti validi)
scrivo tutti i mintermini in colonna, dividendoli in gruppi a seconda del numero di 1:
§ = (1,9,12,11,13,14,15), divido in 4 gruppi e li confronto tra loro.
Scrivo i termini confrontati in una nuova tabella solo se la distanza di
Hamming tra loro è 1 (es: tra 1100 e 1101 D=1 scrivo il valore 110-),
segnando i due termini accettati.
✗
Passaggio 2:
Eseguo lo stesso algoritmo con i termini trovati nel primo passaggio,
ricordando che il DC (-) DEVE essere nella stessa posizione perchè il
confronto tra due termini sia valido. Se alcuni termini hanno distanza
di Hamming sempre > 1 allora sono implicanti primi (-001 lo è).
✗
Passaggio 3:
Quando non sono più possibili confronti allora i termini restanti
sono implicanti primi essenziali.
Ho così trovato 3 implicanti primi:
In caso di presenza del DCset è necessario NON inserire nella tabella di copertura gli
implicanti primi contenenti solo mintermini Don'tCare.
2. RICERCA COPERTURA OTTIMA
✗
Costruisco una tabella contenente gli implicanti primi come indice di riga e i
mintermini della funzione ONset come indici di colonna.
Segno con una X dove l'implicante copre il mintermine
corrispondente.
Eventualemente si aggiune una colonna per i costi degli implicanti (n° di letterali).
✗
Per ridurre il problema si usano criteri di essenzialità e dominanza:
- Essenzialità: è un criterio di scelta e semplificazione.
Se una colonna contiene una sola X, l'implicante relativo si dice essenziale , posso così
inserirlo nella soluzione e cancellare tutti i mintermini che copre.
P3 è essenziale, solo lui copre il mintermine J.
Cancello dalla tabella tutti i mintermini coperti
da P3, che sono costretto ad avere nella
soluzione.
- Dominanza: è un criterio di sola semplificazione perchè elimina righe/colonne senza
operare scelte.
Dominanza di riga: dipende dalla funzione costo. Un implicante P4 domina un
implicante P1 se copre ALMENO tutti i mintermini di P1.
L'implicante dominato P1 può essere eliminato dalla tabella.
Dominanza di colonna: non dipende dal costo. Un mintermine B domina un
mintermine I se OGNI implicante che copre I copre anche B.
Il mintermine dominante B può essere cancellato dalla tabella.
✗
Quando tutte le righe essenziali e le colonne dominanti sono state rimosse si è trovata
una tabella ciclica (non riducibile), detta tabella degli implicanti primi.
Per scegliere gli implicanti diventa necessario applicare un algoritmo specifico, ad
esempio Branch & Bound (vedi pag 27-29).
Esistono 2 differenti cifre di merito per attribuire il costo agli implicanti:
– Cardinalità: costo di ogni porta è indipendente dal numero di ingressi; il costo di ogni
implicante è 1.
– Letterali: il costo di una porta è maggiore al crescere del n° di letterali.
In caso di funzioni a più uscite è necessario minimizzare le diverse funzioni tenendo
conto delle possibili condivisioni.
Con Quine-McCluskey è possibile collassare tutte le informazioni utili in una tabella:
• si associa ad ogni mintermine un identificatore ci tanti bit quante le funzioni
considerate;
• ogni bit dell'identificatore assume valore 1 solo se la funzione corrispondente contiene
nell'ONset tale mintermine;
• nel caso di presenza del DCset, i mintermini Don'tCare saranno considerati come 1.
ES: data F = f(1) + f(2) = §1 (0,2,12,13) + ¢1(4,5,) §2 (1,4,13) + ¢2(5,11)
La tabella è:
La generazione dell'implicante avviene come nel caso a
singola uscita, mentre il nuovo identificatore si ottiene
dall'AND logico tra gli identificatori considerati.
Importante: se l'AND degli identificatori non contiene 1, il
nuovo implicante non è un'espansione valida (lo cancello).
La tabella diventa:
Importante2: viene “marcata” (metto una V) sugli
implicanti con distanza di Hamming = 1
E con
identificatore uguale al risultato della AND!
Importante3: tutti gli implicanti trovati che coprono SOLO
valori del DCset vengono rimossi.
La tabella di copertura si ottiene allo stesso modo di prima, ma è divisa in N parti a
seconda delle N uscite.
Si considerano i criteri di essenzialità e dominanza di riga
singolarmente per ogni funzione, tenendo conto che se uso
un implicante in una funzione, questo avrà un costo 0 nelle
altre (ormai l'ho inserito nel circuito!!) e non può essere
eliminato con un criterio di dominanza.
Metodi euristici
La minimizzazione esatta che abbiamo visto finora ha due problemi:
1) enorme numero di implicanti primi;
2) intrattabilità del problema di copertura.
Una soluzione consiste nel miglioramento iterativo della soluzione, modificando la
condizione iniziale per cancellazione, aggiunta e modifica di implicanti fino a
raggiungere una condizione di minimalità in cui è impossibile proseguire.
Lo standard per la minimizzazione logica a due livelli è Espresso, che usa 3 operatori :
✗
✗
✗
Expand: espande i cubi rendendoli primi ed eliminando quelli coperti;
Reduce: riduce i cubi per consentire di uscire dai minimi locali ottenuti
precedentemente;
Irredundant:elimina i cubi ridondanti, diminuisce la cardinalità della copertura.
ESEMPIO:
EXPAND.
Ogni implicante è espanso a primo ed eventuali implicanti coperti sono eliminati.
• La qualità del risultato dipende:
- dall'ordine di espansione del singolo implicante (sinistra o destra? Su o giu?)
- dall'ordine degli implicanti da espandere (quale espando prima? Di solito vengono
scelti in base al peso [chi ha < peso, viene espanso prima].
REDUCE.
Trasforma una copertura prima in una non prima ma della stessa cardinalità. In questo
modo con una expand possibile espandersi in un'altra direzione.
IRREDUNDANT.
Viene scelto un sottoinsieme di implicanti parzialmente ridondanti (si sovrappongono in
parte tra loro) tale per cui ogni implicante non è interamente coperto da un altro dello
stesso sottoinsieme.
Sintesi combinatoria a piu' livelli
Nelle reti a due livelli area e ritardi vengono ridotti contemporaneamente tramite
ottimizzazione, mentre nelle reti a più livelli è necessario scegliere un compromesso tra
area e ritardi, perchè sono inversamente proporzionali (si parla di sintesi e non di
ottimizzazione).
I metodi di ottimizzazione esatti sono ora troppo complessi, è necessario usare
procedimenti euristici (non rigorosi):
1) si produce una soluzione ottimale ignorando i vincoli di realizzazione;
- sono usate sequenze di trasformazioni applicate in modo iterativo.
2) si raffina il risultato considerando i vincoli strutturali (library mappng).
Noi studiamo solo come arrivare al punto 1.
MODELLO DELLA RETE
Nella sintesi multilivello si usa un grafo orientato aciclico (DAG) = G(V,E);
con V = insieme dei nodi; E = insieme degli archi.
Questo modello è :
• comportamentale: ad ogni nodo è associata una funzione;
• strutturale: con connessioni;
• bipolare: ogni arco può assumere valori 0,1.
TRASFORMAZIONI
I metodi euristici effettuano trasformazioni che conservano il comportamento I/O del
grafo agendo sia sull'area che sulle prestazioni.
Queste trasformazioni possono essere:
•
•
locali: non cambiano la struttura della rete. [cambiano l'area, il numero di letterali];
globali: modificano la struttura, (es: eliminando un nodo...). [causano variazione
dell'area e delle prestazioni, modificando il n° di nodi].
L'approccio usato è quello algoritmico, tramite cui è possibile verificare se la
trasformazione è possibile e conveniente.
Ecco gli algoritmi base utilizzati:
✗
✗
✗
✗
✗
✗
✗
sweep: sostituisce la variabile del nodo a monte in tutti i nodi a valle;
eliminate: sostituisce l'espressione di un nodo in uno o più nodi a valle, eliminando il
nodo originale (migliora le prestazioni, aumenta l'area);
simplify: manipola l'espressione di un nodo per portarla su due livelli (locale);
factor: raccoglie a fattor comune parte di espressioni di più nodi;
substitute: utilizza un nodo esistente per semplificare un altro nodo, sostituendo una
sua sotto-espressione (minor area, maggior ritardo);
extract: “estrae” da due nodi un'espressione comune (minor area, maggiori ritardi);
decompose: applica il teorema di espansione di Shannon, estrae da un nodo 2^k nodi.
ELIMINAZIONE:
riduce la lunghezza del percorso I/O (< ritardo, > area).
sweep elimina i vertici con un solo ingresso e con costanti;
eliminate cancella un nodo e inserisce la sua espressione nei nodi collegati.
ESEMPIO: eliminate 2 (si può specificare il n°max di incremento dell'area)
si calcola l'incremento con: n(l – 1) – l
l = n° di letterali eliminati; n = n° di nodi che assorbono i letterali
è accettata l'eliminazione, perchè l = 3, n = 2, quindi 2*(3-1) - 3 = 1
< 2
SEMPLIFICAZIONE:
è una trasformazione locale. (< area, > ritardo).
simplify è una semplificazione a due livelli di ogni nodo, factor raccoglie a fattor comune
alcuni termini (si passa da due a più livelli).
L'espressione logica fattorizzata si ottiene usando un'euristica (prima l'elemento pià a
destra). L'insieme dei termini prodotto viene partizionato (blocco della partizione e
blocco residuo) usando il letterale con maggiore frequenza (se ce ne sono più di uno con
la stessa frequenza si raccolgono contemporaneamente)
ESEMPIO fattorizzazione: si parte con:
Ritardo = 4T, costo = 12.
d è il più frequente, lo metto in AND con gli altri termini. Ora il più frequente è b' ,
lo metto in AND con i termini che lo contengono (abc è blocco residuo, resta in OR).
A questo punto rimangono con frequenza 2 c' e a', l'algoritmo sceglie c' perchè è il
più a destra e proseguo...
SOSTITUZIONE:
aumenta la lunghezza del percorso I/O (< area, > ritardi).
Fa uso della divisione algebrica, trova un'espressione in un nodo
(rosso) che è divisore di una sotto-espressione (che viene eliminata) di
un altro nodo (verde). Fatto ciò lega il primo al secondo, aumentando
il percorso I/O, ma diminuendo il numero di letterali usati.
ESTRAZIONE:
aumenta la lunghezza del percorso I/O (< area, > ritardi).
Estrae un'espressione da un gruppo di nodi, fino a quando è possibile.
Si trova un divisore comune a due o più espressioni (verdi), con cui
viene costruito un nuovo nodo (rosso) che ha come successori i due
nodi “padri”.
DECOMPOSIZIONE ALGEBRICA:
aumenta la lunghezza del percorso I/O (< area, > ritardi).
Riduce le dimensioni di un'espressione per aumentare la probabilità di successo della
sostituzione.
Preso un nodo è possibile decomporlo in 2 o più nodi, usando le sue
diverse sotto-espressioni.
DECOMPOSIZIONE DISGIUNTIVA:
riduce le dimensioni di un'espressione come sopra, ma può essere applicata
ricorsivamente. Questo tipo di decompose deriva dall'espansione di Shannon e il risultato
dipende molto da quali variabili vengono decomposte.
ESEMPIO: scomposizione disgiuntiva di f rispetto a b.
(vedi dispense per altri esempi più complessi)
Aritmetica dei calcolatori
Nei calcolatori i numeri sono rappresentati in forma binaria. I numeri positivi e negativi
vengono rappresentati in diverse codifiche:
• modulo e segno: il primo bit indica + o – a seconda che sia 1 o 0;
• complemento a uno: i numeri negativi sono ottenuti invertendo bit a bit il
corrispondente numero positivo;
• complemento a due: i numeri negativi sono ottenuti invertendo bit a bit il
corrispondente numero positivo e poi sommando 1. Consente di realizzare circuiti di
addizione e sottrazione più semplici.
ADDIZIONE SENZA SEGNO
E' identica alla somma decimale, ma si ha riporto solo sommando 1+1.
Usando queste regole è possibile realizzare sommatori modulari.
Circuiti aritmetici di questo tipo sono detti bit-slice.
Un sommatore bit-slice ripple carry è strutturato in modo che il modulo in posizione iesima riceva in ingresso i due operandi x(i) y(i) ma anche il riporto c(i) del modulo
precedente.
Il problema è che il modulo di un numero a n bit necessita di un tempo pari a n volte il
tempo necessario per un modulo di somma (ogni modulo deve attendere la propagazione
dei riporti!).
T (tot) = T (somma) + T (riporti) * (n-1)
ADDIZIONE VELOCE
E' un'addizione ad anticipazione di riporto.
Vengono usate due funzioni, calcolabili in parallelo:
–
–
generazione del riporto: se i due operandi x(i) = y(i) = 1, devo generare riporto;
propagazione del riporto: se x(i) oppure y(i) = 1 e il riporto c(i) = 1, devo propagare
in uscita un riporto.
I sommatori che usano questo meccanismo sono detti CLA Adders (Carry-Look-Ahead).
In questo caso il ritardo è costante e indipendente dalla lunghezza degli operandi = 5
ritardi di porta logica, dovuti a:
– 1 ritardo per il calcolo delle funzioni di generazione e propagazione :
G(i) = x(i)y(i); P(i) = x(i) + y(i);
– 2 ritardi per calcolare il riporto i-esimo;
– 2 ritardi per calcolare la somma i-esima.
Nasce però un problema per la realizzazione circuitale per operandi lunghi (32 bit), che
farebbe uso di porte con un fan-in molto elevato ed impraticabile. Questo viene risolto
dall'addizionatore veloce a blocchi (se ti interessa vedi dispense).
versione 0.3
(7/11/04)
AGGIUNTo
{aritmetica dei calcolatori}
© copyleft: all rights reVerSed
riassunti by ZaX
y