Algoritmo Espresso - Quelli di Informatica
Transcript
Algoritmo Espresso - Quelli di Informatica
Algoritmo Espresso Quando il numero di ingressi tende ad aumentare tecniche quali Quine-McCluskey algoritmo Espresso è uno standard diventano sempre meno ecienti. L' per la minimizzazione logica su due livelli: si prendono in ingresso gli implicanti primi di una funzione e si manipolano seguendo la procedura in gura 1. Figure 1: Algoritmo Espresso • Reduce: alcuni implicanti primi vengono tagliati e resi non più primi (lasciando inalterate le proprietà della copertura di partenza) • Expand: alcuni implicanti non primi vengono espansi e resi primi (las- ciando inalterate le proprietà della copertura di partenza, ossia facendo in modo che non coprano alcun valore dell'o-set) • Irreduntant: gli implicanti ridondanti vengono eliminati Riduzione Partendo da una copertura prima si giunge ad una non prima ma di uguale cardinalità. In gura 2 si nota che • Il passaggio da a→b è lecito poiché il letterale x2 è parzialmente sovrap- posto da due implicanti. Questi ritornerà nell'espressione della funzione con una sua versione naturale o negata • Il passaggio da b→c non è lecito poiché implicherebbe un aumento della cardinalità 1 Figure 2: Esempi di riduzione: valida (a → b) e non valida (b → c) Per la scelta degli implicanti da ridurre si fa uso della tecnica positional-cube che viene riportata nel paragrafo successivo: in tal caso la scelta ricadrà prima sugli implicanti con rank maggiore. Espansione L'espansione procede nché un implicante risulta primo, ossia, nché una successiva espansione generi un implicante non valido. Ciò è mostrato in gura 3. Figure 3: Fase di espansione L'ordine di scelta degli implicanti da espandere di solito è ssato apriori e vericato aposteriori. Sono altresì utilizzate tecniche euristiche. Una buona tecnica per la scelta dell'ordine degli implicanti da espandere è la codica positional-cube che codica ciascun letterale Letterale Codica 1 01 0 10 - 11 come in tabella 1. Table 1: Codica positional-cube Si costruisce in seguito una tabella denita come matrice delle codiche e si sommano algebricamente (non mediante algebra booleana) i bit dei simboli codicati, come in gura 4. 2 Implicante x0 x1 x2 x3 x0 x02 x03 x00 x01 x2 x3 01 11 10 10 10 10 01 01 x1 x2 x3 x0 x01 x2 x03 11 01 01 01 01 10 01 10 Totali 23 32 13 22 Figure 4: Creazione della matrice delle codiche Il peso di ciascun implicante è calcolato come il prodotto scalare tra il vettore risultante e la matrice delle codiche (tabella 2). 01 11 10 10 10 10 01 01 11 01 01 01 01 10 01 10 11 · 23 32 13 22 T 10 = 12 11 Table 2: Calcolo del peso degli implicanti Il rank fornirà l'ordine di scelta degli implicanti: quelli con peso minore saranno scelti per primi e, quindi, avranno un rank più basso (tabella 3). Implicante x0 x0 x02 x03 x00 x01 x2 x3 x1 x2 x3 01 11 10 10 11 3 10 10 01 01 10 1 x1 x2 x3 x0 x01 x2 x03 11 01 01 01 12 4 01 10 01 10 11 2 Totali 23 32 13 22 Peso Rank Table 3: Rank degli implicanti Copertura non ridondante Si rimuovono gli implicanti ridondanti, ossia quelli che, una volta tolti, non lasciano mintermini scoperti. 3 Terminologie Implicante: che f in una forma di tipo P (somma di prodotti) è un mintermine tale abbia valore Implicante primo: 1 sono implicanti che contengono il numero minimo di let- terali possibili. Sono un sottoinsieme degli implicanti e bastano da soli a denire la funzione. Rete a due livelli: rete per cui partendo da qualunque ingresso, sul percorso per giungere all'uscita si incontrano al più due porte logiche (un AND e un OR i NOT non vengono tenuti in conto nel computo del numero di livelli). 4