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