Claudio Arbib
Università di L’Aquila
Ricerca Operativa
Layout ottimo di dispositivi elettronici ad altissima scala di integrazione
Problema
Realizzare una funzione booleana f: {0, 1}n → {0, 1}m
tramite una matrice logica programmabile (PLA)
Esempio
f = x + y
0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111
000 001 010 011 001 010 011 100 010 011 100 101 011 100 101 110 000 001 010 011 001 010 011 100 010 011 100 101 011 100 101 110 0000
0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111
f3 = (x1 ∧ x2 ∧ y1 ∧ ¬y2)
∨ (¬x1 ∧ x2 ∧ ¬y1 ∧ y2)
∨ (x1 ∧ x2 ∧ ¬y1 ∧ y2)
∨ (x1 ∧ ¬x2 ∧ y1 ∧ y2)
∨ (¬x1 ∧ x2 ∧ y1 ∧ y2)
∨ (x1 ∧ x2 ∧ y1 ∧ y2)
000 001 010 011 001 010 011 100 010 011 100 101 011 100 101 110 000 001 010 011 001 010 011 100 010 011 100 101 011 100 101 110
Esempio
f3 = (x1 ∧ x2 ∧ y1 ∧ ¬y2)
∨ (¬x1 ∧ x2 ∧ ¬y1 ∧ y2)
∨ (x1 ∧ x2 ∧ ¬y1 ∧ y2)
∨ (x1 ∧ ¬x2 ∧ y1 ∧ y2)
∨ (¬x1 ∧ x2 ∧ y1 ∧ y2)
∨ (x1 ∧ x2 ∧ y1 ∧ y2)
0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111
000 001 010 011 001 010 011 100 010 011 100 101 011 100 101 110 000 001 010 011 001 010 011 100 010 011 100 101 011 100 101 110
Esempio
f3 = (x1 ∧ x2 ∧ y1 ∧ ¬y2)
∨ (x2 ∧ ¬y1 ∧ y2)
∨ (x1 ∧ ¬x2 ∧ y1 ∧ y2)
∨ (x2 ∧ y1 ∧ y2)
0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111
000 001 010 011 001 010 011 100 010 011 100 101 011 100 101 110 000 001 010 011 001 010 011 100 010 011 100 101 011 100 101 110
Esempio
f3 = (x1 ∧ x2 ∧ y1 ∧ ¬y2)
∨ (x2 ∧ ¬y1 ∧ y2)
∨ (x1 ∧ ¬x2 ∧ y1 ∧ y2)
∨ (x2 ∧ y1 ∧ y2)
0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111
000 001 010 011 001 010 011 100 010 011 100 101 011 100 101 110 000 001 010 011 001 010 011 100 010 011 100 101 011 100 101 110 0000
0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111
000 001 010 011 001 010 011 100 010 011 100 101 011 100 101 110 000 001 010 011 001 010 011 100 010 011 100 101 011 100 101 110
f1 = (x1 ∧ ¬y1 ∧ ¬y2)
∨ (¬x1 ∧ x2 ∧ y1 ∧ ¬y2)
∨ (x1 ∧ ¬y1 ∧ y2)
∨ (¬x1 ∧ y1 ∧ y2)
Esempio
0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111
000 001 010 011 001 010 011 100 010 011 100 101 011 100 101 110 000 001 010 011 001 010 011 100 010 011 100 101 011 100 101 110
f1 = (x1 ∧ ¬y1 ∧ ¬y2)
∨ (¬x1 ∧ x2 ∧ y1 ∧ ¬y2)
∨ (x1 ∧ ¬y1 ∧ y2)
∨ (¬x1 ∧ y1 ∧ y2)
f3 = (x1 ∧ x2 ∧ y1 ∧ ¬y2)
∨ (x2 ∧ ¬y1 ∧ y2)
∨ (x1 ∧ ¬x2 ∧ y1 ∧ y2)
∨ (x2 ∧ y1 ∧ y2)
Esempio
0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111
000 001 010 011 001 010 011 100 010 011 100 101 011 100 101 110 000 001 010 011 001 010 011 100 010 011 100 101 011 100 101 110
f1 = (x1 ∧ ¬y1)
∨ (¬x1 ∧ x2 ∧ y1 ∧ ¬y2)
∨ (¬x1 ∧ y1 ∧ y2)
f3 = (x1 ∧ x2 ∧ y1 ∧ ¬y2)
∨ (x2 ∧ ¬y1 ∧ y2)
∨ (x1 ∧ ¬x2 ∧ y1 ∧ y2)
∨ (x2 ∧ y1 ∧ y2)
Esempio
Piano OR Piano OR Piano AND Piano AND x
y
s
f f1 = (x1 ∧ ¬y1)
∨ (¬x1 ∧ x2 ∧ y1 ∧ ¬y2)
∨ (¬x1 ∧ y1 ∧ y2)
f3 = (x1 ∧ x2 ∧ y1 ∧ ¬y2)
∨ (x2 ∧ ¬y1 ∧ y2)
∨ (x1 ∧ ¬x2 ∧ y1 ∧ y2)
∨ (x2 ∧ y1 ∧ y2)
Esempio
x1 y1 x2 y2
f3 f1
s1 s2 s3 s4 s5 s6 s7 f1 = (x1 ∧ ¬y1)
∨ (¬x1 ∧ x2 ∧ y1 ∧ ¬y2)
∨ (¬x1 ∧ y1 ∧ y2)
f3 = (x1 ∧ x2 ∧ y1 ∧ ¬y2)
∨ (x2 ∧ ¬y1 ∧ y2)
∨ (x1 ∧ ¬x2 ∧ y1 ∧ y2)
∨ (x2 ∧ y1 ∧ y2)
Esempio
x1 y1 x2 y2
f3 f1
s1 s2 s3 s4 s5 s6 s7
Esempio
x1 y1 x2 y2
f3 f1
s1 s2 s3 s4 s5 s6 s7
Riduzione dell’area del dispositivo x1 y1 x2 y2
f3
f1 s1 s2 s3 s4 s5 s6 s7
Segnali (righe) compatibili
Partizionare le colonne in due insiemi C1, C2 in modo da massimizzare il più piccolo tra gli insiemi di righe
A, con solo elementi in C1 A
Segnali (righe) compatibili
Partizionare le colonne in due insiemi C1, C2 in modo da massimizzare il più piccolo tra gli insiemi di righe
A, con solo elementi in C1 A
B
Segnali (righe) compatibili
Partizionare le colonne in due insiemi C1, C2 in modo da massimizzare il più piccolo tra gli insiemi di righe
A, con solo elementi in C1 B
A
Segnali (righe) compatibili
Segnali (righe) compatibili
Grafo di compatibilità
1
2
3
4
5
6
7
8
3 5
6
Problema (folding semplice): 7
Dato un grafo G, trovare un sottografo isomorfo a Km,m con m massimo.
1 2 3 4 5 6 7 8
Riduzione dell’area Riduzione dell’area
Una diversa tecnica di folding
Partizionare le colonne in due insiemi C1, C2 in modo da massimizzare il più piccolo tra gli insiemi di righe
A, con solo elementi in C1
La riga verde e quella bianca sono compatibili, ma la partizione di colonne scelta non consente di sfruttare questo fatto per ridurre
ulteriormente l’area. Un risultato migliore di quello ottenuto mediante folding semplice si può ottenere permutando le colonne e
interrompendo la traccia sulle righe a livelli differenti
Una diversa tecnica di folding
1 2 3 4 5 6 7 8 9 10 11 12 13 14 12 9 1 7 2 3 13 8 5 4 6 10 11 14
12 9 1 7 2 3 13 8 5 4 6 10 11 14
Una diversa tecnica di folding
Riduzione dell’area Riduzione dell’area
12 9 1 7 2 3 13 8 5 4 6 10 11 14
Una diversa tecnica di folding
Siamo riusciti in questo modo a compattare ulteriormente il dispositivo.
In termini di grafo di compatibilità il problema però non è più quello di individuare un sottografo bipartito completo e bilanciato.