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