Generazione automatica di march test per memorie SRAM

POLITECNICO DI TORINO
III Facoltà di Ingegneria
Corso di Laurea in Ingegneria Informatica
Tesi di Laurea
Generazione automatica di march
test per memorie SRAM
Utilizzo di un algoritmo genetico per la generazione di march test a
partire da informazioni di layout
Relatori:
prof. Paolo Prinetto
prof. Alfredo Benso
ing. Stefano Di Carlo
Candidato:
Alberto Scionti
Luglio 2007
Indice
1 Introduzione
1.1 Gli algoritmi genetici per il design, layout e test di circuiti VLSI . . .
1.2 Obiettivo del lavoro . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1
1
4
2 Memorie
2.1 Architettura di un circuito SRAM . .
2.2 Matrice di memoria . . . . . . . . . .
2.2.1 Cella di memoria statica . . .
2.3 Circuito di precarica . . . . . . . . .
2.4 Address decoding . . . . . . . . . . .
2.4.1 Struttura dell’address decoder
2.4.2 Selezione delle colonne . . . .
2.5 Sense amplifier . . . . . . . . . . . .
2.6 Write driver . . . . . . . . . . . . . .
2.7 Modello sperimentale di memoria . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
5
7
8
9
14
15
16
17
17
19
21
3 Algoritmi genetici
3.1 Struttura di un AG . . . . .
3.2 Selezione . . . . . . . . . . .
3.3 Crossover . . . . . . . . . .
3.4 Mutazione . . . . . . . . . .
3.5 Inversione . . . . . . . . . .
3.6 Elementi teorici . . . . . . .
3.6.1 Teoria degli schemi .
3.6.2 N-point crossover . .
3.7 Adattamento dei parametri
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
26
28
30
32
34
35
36
38
41
43
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
4 Modelli di guasto e algoritmi di collaudo
45
4.1 Modelli di guasto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
4.2 Classificazione delle primitive di guasto . . . . . . . . . . . . . . . . . 48
4.2.1 Guasti di natura statica . . . . . . . . . . . . . . . . . . . . . 50
2
4.3
4.4
4.2.2 Guasti di natura dinamica . . . . . . . . . . . . . . . . . . . . 52
Pattern di collaudo . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
March test . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
5 Generazione automatica di march test
5.1 Architettura dello strumento per la generazione di march test
5.2 Codifica della soluzione . . . . . . . . . . . . . . . . . . . . . .
5.3 Indirizzamento delle celle di memoria . . . . . . . . . . . . . .
5.3.1 Address mode e address order . . . . . . . . . . . . . .
5.4 Algoritmo di generazione dei march test . . . . . . . . . . . .
5.5 Funzione di fitness . . . . . . . . . . . . . . . . . . . . . . . .
5.5.1 La funzione di valutazione . . . . . . . . . . . . . . . .
5.5.2 Calcolo della fitness . . . . . . . . . . . . . . . . . . . .
5.6 Operatori genetici e funzioni specifiche . . . . . . . . . . . . .
5.6.1 Validazione della popolazione . . . . . . . . . . . . . .
5.6.2 Interfacciamento con il simulatore . . . . . . . . . . . .
5.6.3 Incremento della lunghezza delle sequenze di test . . .
5.6.4 Condizione terminale . . . . . . . . . . . . . . . . . . .
5.7 Interfaccia utente . . . . . . . . . . . . . . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
56
56
58
60
61
62
63
63
65
67
67
69
74
75
80
6 Caso di studio
6.1 Difetti nella matrice di memoria
6.1.1 Analisi dei difetti . . . .
6.1.2 Parametri di ingresso . .
6.2 Generazione di march test . . .
6.2.1 Sviluppi futuri . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
83
83
84
86
87
94
.
.
.
.
96
96
97
98
99
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
A Modello sperimentale di memoria
A.1 Modulo circuitale SRAM con matrice 3x3 .
A.2 Cella statica . . . . . . . . . . . . . . . . .
A.3 Circuito di precarica . . . . . . . . . . . .
A.4 Porte logiche . . . . . . . . . . . . . . . .
Bibliografia
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
101
3
Capitolo 1
Introduzione
La disponibilità di nuove tecnologie di fabbricazione permette oggi di realizzare
sistemi integrati su un singolo circuito digitale (system on chip) dotati di tutti i
componenti e le funzioni che in passato erano disponibili a livello di piastra. Le
memorie sono i moduli con la più alta densità di transistor presenti su un circuito
integrato digitale, e negli attuali system on chip la maggior parte dell’area a disposizione sul silicio viene impiegata per la loro realizzazione. La Semiconductor
Industry Association indica che entro il 2015 l’area dedicata alla realizzazione di
dispositivi di memoria coprirà circa il 90% - 94% dell’area totale a disposizione sul
circuito integrato [1]. Attualmente è possibile trovare circuiti digitali con decine di
dispositivi di memoria che differiscono tra loro per dimensioni, tecnologia, protocolli
di accesso e temporizzazioni.
1.1
Gli algoritmi genetici per il design, layout e
test di circuiti VLSI
Data la crescente complessità dei circuiti digitali, la loro progettazione e verifica
richiede l’utilizzo di strumenti EDA (Electronic Design Automation) efficienti, in
grado di agevolarne lo sviluppo. Molti degli strumenti attuali consentono di assistere il progettista nelle diverse fasi del processo di design, in modo da consentire lo
sviluppo del circuito in tempi rapidi. Questi strumenti infatti, sono in grado di svolgere automaticamente diversi compiti complessi quali, ad esempio, la generazione
del layout e il calcolo del routing per i dispositivi presenti sul circuito. In altri casi
1
1 – Introduzione
hanno un intervento limitato e lasciano le decisioni critiche al progettista, come nel
caso dello sviluppo di circuiti full custom in cui la generazione del layout o il calcolo
del routing possono essere eseguiti parzialmente a mano. La figura 1.1 mostra le fasi
principali del processo di design di circuiti digitali complessi. Inizialmente vengono
Figura 1.1.
Processo di design di circuiti VLSI
create le specifiche del circuito in linguaggio naturale o con linguaggi di modellazione
di alto livello, successivamente le specifiche vengono tradotte a livello comportamentale attraverso l’uso di un linguaggio come il VHDL o il Verilog. A partire dalla
descrizione comportamentale uno strumento automatico può generare la descrizione
del circuito a livello RTL (Register-Transfer Level), in altri casi può essere creata
manualmente utilizzando strumenti grafici o linguaggi di alto livello come il VHDL.
Strumenti di sintesi automatica possono essere utilizzati per tradurre la descrizione
RTL a livello gate o a livello elettrico (nuovamente la definizione dell’architettura
di basso livello può essere gestita dal progettista in modo diretto). Una volta che
2
1.1 – Gli algoritmi genetici per il design, layout e test di circuiti VLSI
il circuito è stato sintetizzato, è necessario controllarne il funzionamento, attraverso una fase di verifica funzionale, per garantire che il comportamento rispetti le
specifiche iniziali. A tale scopo possono essere impiegati strumenti automatici per
la simulazione funzionale, cosı̀ come possono essere utilizzati strumenti di verifica
formale. Vengono inoltre eseguite simulazioni del circuito a livello elettrico e delle
tempistiche dei segnali e viene analizzato il consumo di potenza, che rappresenta un
importante vincolo progettuale. Infine la fase di calcolo del layout e del routing e
di generazione delle maschere di incisione può essere parzialmente o completamente
automatizzata per mezzo di strumenti specifici, cosı̀ come la fase di generazione dei
pattern di collaudo.
Nella maggioranza dei casi gli strumenti automatici si avvalgono di euristiche per
poter completare il compito in tempi ragionevoli e spesso queste euristiche utilizzano gli algoritmi genetici. Data la loro efficacia nel risolvere problemi di ottimizzazione complessa, sono stati impiegati in diverse aree del design di circuiti digitali a
larghissima scala di integrazione, quali il routing e il posizionamento di macrocelle,
il partizionamento, il mapping su dispositivi FPGA, la valutazione della potenza
dissipata e la generazione automatica di vettori di collaudo. Ad esempio, presso il
dipartimento di automatica e informatica del Politecnico di Torino è stato sviluppato
uno strumento per la generazione automatica di sequenze di test applicabili a circuiti sequenziali [20, 21]. I difetti fisici presenti nei dispositivi di memoria dipendono
fortemente dal tipo di tecnologia di fabbricazione utilizzata per la realizzazione del
circuito, pertanto l’impiego di nuovi processi di fabbricazione comporta l’insorgere
di nuove tipologie di difetti e di conseguenza di nuovi modelli di guasto per i quali è
necessaria la realizzazione di algoritmi di collaudo. Lo sviluppo di algoritmi efficienti
specifici per i circuiti di memoria, assume un ruolo fondamentale al fine di garantire
un elevato grado di copertura dei guasti e di conseguenza un innalzamento del livello qualitativo nella produzione dei circuiti stessi. Per rispondere adeguatamente
a queste esigenze, negli ultimi anni la ricerca ha portato lo sviluppo di algoritmi e
strumenti in grado di generare in modo automatico sequenze di test ottimali. Dato
l’orientamento del mondo industriale verso l’impiego di soluzioni di collaudo per
memorie denominate march test, la ricerca ha puntato verso lo sviluppo di strumenti di generazione automatica di sequenze di test basate sul modello dei march
test. Questo tipo di algoritmi utilizzano una descrizione logica formale dei difetti
fisici nota come modello di guasto funzionale, definita come sequenza di eccitazione e
3
1 – Introduzione
osservazione del guasto e rappresentata attraverso grafi di transizione o mediante la
notazione dei march test. Questo processo di astrazione risulta essere indipendente
dalla specifica architettura del circuito e si adatta allo sviluppo di architetture di
MBIST (Memory Built-In Self-Test), per le quali è facile implementare sessioni di
test complesse caratterizzate da un elevato grado di programmabilità. Gli attuali
strumenti per la generazione automatica di march test impiegano modelli di guasto funzionali che sono sviluppati in modo non automatizzato, e la cui definizione
richiede spesso una quantità di tempo notevole.
1.2
Obiettivo del lavoro
L’obiettivo di questo lavoro è stato lo sviluppo di uno strumento automatico, basato
su un algoritmo genetico, per la generazione di sequenze di collaudo per memorie
SRAM espresse sotto forma di march test. Lo strumento utilizza la descrizione
a livello elettrico del circuito di memoria non difettoso e di quello difettoso per
determinare la sequenza di collaudo. I difetti sono pertanto inseriti direttamente nel
modello del circuito sotto forma di alterazioni dello schema elettrico. Un simulatore
esterno (a livello elettrico) fornisce l’andamento dei segnali relativi ai due modelli
di memoria, per una data sequenza di operazioni. Lo strumento quindi analizza i
dati forniti dal simulatore al fine di determinare il march test in grado di coprire
il difetto iniettato. Inoltre i march test generati sono in grado di rappresentare i
modelli di guasto funzionali presenti in letteratura [15, 18], e possono essere impiegati
da strumenti tradizionali di generazione di test al fine di massimizzare la copertura
dei guasti.
4
Capitolo 2
Memorie
La progettazione di un moderno circuito digitale VLSI consente l’utilizzo di un elevato numero di moduli di memoria ciascuno dei quali differisce per caratteristiche
quali la tecnica di accesso e di memorizzazione dei dati, le tempistiche di accesso e
la tecnologia di fabbricazione. Circuiti digitali moderni possono arrivare a contenere
anche centinaia di moduli di memoria embedded. Tra le tipologie di memoria embedded che possono essere utilizzate per la realizzazione di circuiti complessi vi sono
moduli ROM, E2 PROM, FLASH, DRAM e moduli SRAM, i quali costituiscono la
maggior parte dei core presenti sul chip. In aggiunta, si sta diffondendo anche l’uso
di moduli CAM sia nella versione standard sia in quella ternaria (TCAM). Tutti
questi tipi di memoria possono essere realizzati con differenti tecnologie produttive,
ciascuna delle quali presenta caratteristiche particolari. La principale tecnologia di
fabbricazione resta quella CMOS, impiegata per la fabbricazione delle memorie statiche e della logica del circuito. Tuttavia la richiesta di prestazioni elevate porta
all’impiego di tecnologie differenti come, ad esempio, la tecnologia SOI (Silicon On
Insulator) che permette di ottenere velocità di commutazione maggiori rispetto al
tradizionale CMOS. Inoltre la tecnologia SiGe (silicio-germanio) impiegata in contesti applicativi come il settore delle telecomunicazioni, richiede sempre più spesso
l’uso di dispositivi di memoria. I moduli di memoria presenti sugli odierni circuiti
digitali possono avere un numero di porte di accesso superiore a uno. In passato
il numero di dispositivi multiporta presenti sul chip era molto basso e i dispositivi
stessi disponevano di un numero molto basso di porte, per contro oggi sia il numero
di dispositivi, sia il numero di porte per dispositivo è aumentato notevolmente e non
5
2 – Memorie
è raro trovare memorie dotate di nove porte. La tecnica di accesso alle diverse porte
costituisce un elemento ulteriore di differenziazione. In alcuni casi infatti si parla
di memorie pseudo-multiporta, in quanto si usa un clock a più alta frequenza per
garantire N accessi sequenziali all’interno di un singolo ciclo di clock di sistema.
L’uso di memorie ad accesso casuale in tecnologia statica (SRAM) è ancora preponderante nei circuiti digitali odierni per via della loro elevata velocità di accesso
ai dati. Basti pensare ai moderni microprocessori la cui area sul silicio è sempre
maggiormente adibita ad ospitare memorie cache, e in cui tutte le tecniche legate
alla predizione dei salti condizionali o alla traduzione da indirizzi virtuali a reali è
realizzata in hardware appogiandosi su blocchi di memoria statica.
Dai dati contenuti nella roadmap tracciata dall’ente International Technology
Figura 2.1.
Previsione di sviluppo dell’area occupata da una singola cella statica
Roadmap for Semiconductor [2], emerge il continuo trend di riduzione delle dimensioni delle celle statiche, come è visibile nella figura 2.1, e il conseguente continuo
aumento nella densità dei transistor visibile in figura 2.2. Da tali dati emerge quindi
il fatto che i dispositivi di memoria, e in particolare quelli realizzati in tecnologia
statica, sono e saranno i dispositivi a più alta densità nei circuiti attuali e di prossima generazione, e che pertanto sia richiesto lo sviluppo di tecniche di test adeguate.
Per questo lavoro si è quindi deciso di focalizzare l’attenzione su questo tipo di
dispositivi, e come primo obiettivo si è realizzato un modello di memoria statica
descritto a livello transistor.
6
2.1 – Architettura di un circuito SRAM
Figura 2.2.
2.1
Densità di transistor per i circuiti SRAM espressa in milioni per cm2
Architettura di un circuito SRAM
Un circuito di memoria ad accesso casuale, realizzato in tecnologia statica (SRAM)
utilizza un insieme di celle realizzate mediante dispositivi latch per immagazzinare l’informazione binaria al suo interno, e poterla successivamente richiamare.
Lo schema rappresentato in figura 2.3 mette in evidenza i principali moduli logici
costituenti un circuito SRAM:
• memory array: contiene il vettore di celle che permettono l’immagazzinamento
dell’informazione e generalmente presenta un’organizzazione matriciale di tipo
N × M;
• address decoder: permette la selezione di una cella all’interno del vettore di
memorizzazione durante un’operazione di lettura o di scrittura, in base alla decodifica dell’indirizzo presente sul bus di ingresso. Poichè il vettore di
memorizzazione presenta in genere un’organizzazione matriciale, l’indirizzo è
suddiviso in due campi, che permettono di selezionare, attraverso la loro decodifica, rispettivamente la riga e la colonna relative alla cella in esame (row
decoder/column decoder);
• precharge circuit: permette di portare allo stesso potenziale le bit line connesse
alle celle della matrice di memoria prima di un’operazione di lettura o scrittura;
7
2 – Memorie
Figura 2.3.
Schema a blocchi di una memoria SRAM
• column selection circuit: permette di isolare le celle della matrice di memoria
dai circuiti di I/O, quando nessuna delle celle è coinvolta in un’operazione di
lettura o di scrittura;
• I/O interface: l’interfaccia di I/O è costituita da circuiti separati per lettura
e per la scrittura dell’informazione nella matrice di memoria. I circuiti che
realizzano le operazioni di scrittura del dato presente sul bus in ingresso sono
indicati come write driver, mentre i circuiti che realizzano la lettura del dato
in una cella sono indicati come sense amplifier;
• R/W logic: questo modulo contiene la logica necessaria a guidare le operazioni
di lettura e scrittura, procedendo ad abilitare le sezioni corrette del modulo di
I/O.
2.2
Matrice di memoria
La struttura principale di un circuito SRAM è rappresentata dalla matrice di memoria (memory array), in quanto fornisce il supporto per l’immagazzinamento fisico dei
dati. Dal punto di vista logico è possibile rappresentare la struttura interna di un
dispositivo di memoria come un vettore lineare di elementi di memoria. Tuttavia
8
2.2 – Matrice di memoria
dal punto di vista progettuale, l’organizzazione delle celle in forma di vettore pone
grossi limiti, legati alla difficoltà di riuscire a trovare un piazzamento corretto del
circuito all’interno dell’area di silicio a disposizione, per via della struttura fortemente allungata che ne deriva. Per questioni legate all’ottimizzazione del layout
del circuito, il vettore logico viene organizzato in una matrice di elementi (vettore a
due dimensioni), pur mantenendo la sequenzialità delle celle, che possono continuare
ad essere rappresentate, dal punto di vista logico, come vettore lineare. Scegliendo un’organizzazione di tipo matriciale l’indirizzo associato a ciascuna cella viene
suddiviso in due campi che permettono la selezione della riga e della colonna relative. L’organizzazione a matrice può essere estesa ulteriormente verso strutture a
tre dimensioni in cui l’indirizzo associato alle celle è suddiviso in tre campi: due
permettono di individuare la riga e la colonna all’interno di una sottomatrice la cui
selezione è fornita dal contenuto del terzo campo. Queste tecniche di partizionamento sono utilizzate per minimizzare in fase di progettazione la presenza di difetti,
in particolare di difetti intraword che si presentano tra i bit di una stessa parola di
dato. In generale i circuiti di memoria permettono l’immagazzinamento di dati sotto
forma di parole di N bit, ciascun elemento del vettore logico immagazzina quindi
N bit di dato. A livello fisico ciascuna cella immagazzina un singolo bit di dato,
pertanto la gestione delle parole di dato ad N bit viene realizzata agendo sulla rete
combinatoria dei decoder di indirizzo, capaci in questo caso di selezionare per ogni
operazione le N celle associate alla parola di dato, e attivare i rispettivi N circuiti
di scrittura o lettura.
2.2.1
Cella di memoria statica
Un circuito di memoria SRAM utilizza una matrice di celle elementari per immagazzinare l’informazione, ciascuna delle quali è costituita da un latch. Rispetto alle celle
di memoria costituite da un condensatore integrato (utilizzate per la realizzazione
dei circuiti DRAM), l’utilizzo di un dispositivo latch non richiede fasi periodiche di
refresh, inoltre il latch garantisce ridotti tempi di accesso, e quindi maggiore velocità
di scrittura e di lettura, anche se l’area occupata sul silicio risulta maggiore rispetto
ad una cella realizzata mediante condensatore integrato. La struttura più semplice
in grado di realizzare un latch è costituita da due inverter in cascata reazionati
positivamente. La reazione positiva tra i due inverter consente di forzare lo stato
9
2 – Memorie
del latch in modo stabile, infatti se si indica con A e Ā rispettivamente l’ingresso e
l’uscita del primo inverter e con B e B̄ quelli del secondo, allora valgono le relazioni:

 Ā = B
 B̄ = A
Se si forza dall’esterno il valore del nodo di ingresso A = 0 allora sono valide le
relazioni A = B̄ = 0 e B = Ā = 1, le quali permettono di stabilire come il latch
mantenga in modo stabile lo stato interno:
S0 = { A = 0, B = 1 }
Analogamente se si forza il valore del nodo di ingresso A = 1 la catena di relazioni
diventa A = B̄ = 1 e B = Ā = 0, ciò permette di definire l’altro stato stabile che
caratterizza il dispositivo latch:
S1 = { A = 1, B = 0 }
L’informazione binaria viene immagazzinata all’interno della cella in forma differenziale, associando ciascuno dei due bit a uno dei due stati stabili del latch, in generale
l’associazione prevede di memorizzare il bit 0 sotto forma di stato S0 e il bit 1 sotto
forma di stato S1 . Dal punto di vista circuitale ciascuna cella di memoria deve essere facilmente scrivibile e deve risultare stabile sia durante le operazioni di lettura
sia durante i cicli di idle, inoltre deve essere in grado di mantenere il proprio stato
interno indipendentemente dalle azioni svolte sulle altre celle vicine. Lo schema circuitale standard, mostrato in figura 2.4, è costituito da 6 transistor mosfet, di cui
quattro utilizzati per la realizzazione del latch interno e due per le connessioni esterne. In particolare i transistor indicati come PASS 1 e PASS 2 sono impiegati come
trasmission gate (data la simmetria strutturale dei dispositivi mosfet) per la connessione del latch con le due bit line esterne per lo scambio dei dati. I due trasmission
gate sono connessi al terminale di controllo per la selezione della linea WL (word
line) all’interno della matrice di memorizzazione. Il latch integrato è realizzato mediante due inverter CMOS reazionati positivamente, rappresentati rispettivamente
dai transistor P 1−N 2 e da P 3−N 4. I dispositivi P 1 e P 3 sono i due transistor a
canale p relativi al percorso di pull-up, mentre N 2 e N 4 sono quelli a canale n relativi al percorso di pull-down. In alcuni casi applicativi è possibile ricorrere ad una
struttura avente solo 4 transistor a canale n: due trasmission gate e due dispositivi
10
2.2 – Matrice di memoria
Figura 2.4.
Architettura di una cella statica standard
relativi al percorso di pull-down, mentre il percorso di pull-up è realizzato mediante
due resistori integrati di elevato valore. Ad oggi l’architettura a 6 transistor rimane
quella maggiormente impiegata a livello industriale.
L’architettura della cella a 6 transistor può essere implementata a livello fisico in
differenti modi. Il layout scelto per la realizzazione della singola cella influisce sia sul
layout complessivo del circuito, ed in particolare della matrice di memorizzazione,
sia sulla sensibilità del sistema agli errori. In figura 2.5 è mostrato un possibile
layout per la cella a 6 transistor, in cui si osservano i due pad di connessione con le
bit line (true bit line e complement bit line). Il pad presente nella parte superiore è
utilizzato per la connessione della singola cella al terminale di alimentazione VDD,
cosı̀ come il pad presente nella parte bassa in posizione centrale consente la connessione alla linea di massa del circuito. I due transistor a canale n sono formati dalla
zona di diffusione attraversata dalla struttura di polisilicio che costituisce la linea
di connessione con la word line. I due dispositivi a canale p sono invece formati
dalla zona di diffusione e dalle strutture in polisilicio visibili in alto e che realizzano
le connessioni tra i dispositivi mosfet del latch. Infatti ogni volta che la zona di
diffusione viene attraversata da una struttura in polisilicio si crea un transistore
mosfet. Se si considera il layout alternativo presente in figura 2.6, si osserverà un
differente posizionamento dei dispositivi nella cella e un numero differente di pad di
connessione con il resto del circuito. I dispositivi mosfet a canale p sono presenti
sempre nella parte alta della cella, ma utilizzano ciascuno un terminale separato per
11
2 – Memorie
Figura 2.5.
Layout per la cella standard a 6 transistor
la connessione con la linea di alimentazione VDD. Anche i dispositivi a canale n
sono posizionati sempre nella zona bassa della cella, e anche in questo caso utilizzano ciascuno un terminale separato per la connessione verso la linea di massa GND.
Inoltre il secondo layout presenta uno sviluppo maggiore nella direzione orizzontale
e la presenza di un numero maggiore di pad di connessione influenza il restante
layout della matrice di memorizzazione. In questo caso infatti i pad di connessione
alle linee di alimentazione e massa possono essere condivisi tra celle adiacenti, cosı̀
come i pad relativi ai terminali delle bit line possono essere utilizzati in comune
tra due celle della stessa colonna. Questo secondo layout risulta quindi molto più
efficace dal punto di vista della progettazione del circuito di memoria, permettendo un risparmio di area e semplificandone il routing. Tuttavia dal punto di vista
del collaudo il secondo layout rende il circuito più sensibile alla presenza di difetti, per esempio un contatto di alimentazione che presenti una resistività eccessiva
12
2.2 – Matrice di memoria
Figura 2.6.
Layout alternativo per la cella standard a 6 transistor
influenzerà il comportamento di tutte le celle ad esso connesse. Pertanto il layout utilizzato nella realizzazione del circuito deve essere accuratamente scelto sia in
funzione dell’ottimizzazione dell’area occupata, sia rispetto alla possibile sensibilità
ai difetti e all’influenza che questi hanno sulla stabilità della cella. Quest’ultima è
rappresentata dal parametro:
β=
W pef f Ltef f
·
Lpef f W tef f
!
in cui W pef f e Lpef f rappresentano rispettivamente la larghezza e la lunghezza
efficace del canale n dei dispositivi di pull-down, mentre W tef f e Ltef f sono rispettivamente la larghezza e la lunghezza efficace dei trasmission gate. A livello industriale
si hanno valori di β compresi nell’intervallo [1.0 , 2.0]. Non solo la scelta del layout
della cella influenza anche la progettazione dei sistemi di MBIST per l’esecuzione dei
test, delle soluzioni di design for testability e dei blocchi ridondanti per la correzione
dei guasti.
13
2 – Memorie
2.3
Circuito di precarica
A differenza di quanto avviene nelle celle DRAM, lo scopo del circuito di precarica non è quello di eseguire il refresh dei dati in esse contenuti, che a causa delle
correnti di leakage andrebbero persi. Il circuito di precarica (precharge circuit) in
una memoria SRAM serve a portare il livello di tensione delle due bit line di una
colonna al valore di alimentazione VDD, all’inizio di un’operazione di scrittura o
di lettura su una delle celle della colonna stessa. Poichè la lettura del contenuto
di una cella avviene in modo differenziale, amplificando la differenza di tensione
presente tra le due bit line, è importante che la tensione a cui queste si trovano sia
posta ad un valore noto e possibilmente uguale. L’operazione di lettura provoca la
Figura 2.7.
Circuito di precarica per le bit line
scarica di una delle linee della colonna, in particolare se la cella memorizza il valore
0 avverrà la scarica della true bit line, viceversa se la cella memorizza il valore 1
avverrà la scarica della complement bit line. L’effetto di scarica è dovuto al carico
capacitivo della linea stessa ed è legato all’effetto capacitivo parassita dovuto alla
lunga metallizzazione. Va inoltre osservato che se dal punto di vista logico è possibile
immaginare che l’operazione di lettura sposti uno 0 logico su una delle due bit line (a
seconda del bit memorizzato nella cella), a livello fisico tale differenza risulta essere
dell’ordine di circa 100 mV. Come si osserva nello schema riportato in figura 2.7
il circuito di precarica è composto da tre transistor mosfet a canale p pilotati sul
terminale di gate dal segnale di controllo P RECHG (set precharge). I tre transistor
sono utilizzati in configurazione di trasmission gate. I mosfet P 1 e P 2 hanno un lato
comune che viene connesso direttamente alla linea VDD, mentre il transistor EQ è
14
2.4 – Address decoding
connesso alle due bit line. I due transistor P 1 e P 2 hanno quindi lo scopo di forzare
il valore di tensione di ciascuna delle bit line al valore di alimentazione. Il valore
di tensione della precarica è fissato tipicamente a VDD perchè in questo modo si
agevola la fase di amplificazione dei circuiti di lettura e quindi si minimizzano gli
errori dovuti a riconoscimenti della tensione differenziale sbagliati, inoltre può essere
conveniente data l’elevata capacità di carico introdotta dalla metallizzazione delle
bit line. Il transistor EQ assume invece il ruolo di equalizzatore, portando la tensione
di ciascuna delle due bit line allo stesso valore. In genere se una delle due bit line
raggiunge prima il valore di alimentazione, il mosfet di equalizzazione permette lo
scorrimento di una corrente verso l’altra linea, agevolandone quindi il processo di
precarica (la corrente si annulla quando il differenziale tra le linee diventa nullo).
2.4
Address decoding
La selezione delle celle all’interno della matrice di memorizzazione avviene attraverso
l’emissione di un indirizzo, relativo alla cella interessata, da parte di un dispositivo
esterno. Data l’organizzazione di tipo matriciale della struttura di memorizzazione,
l’indirizzo è suddiviso in due campi che permettono di selezionare la riga e la colonna associate alla cella indirizzata (nel caso di memorie con parole di ampiezza N
bit, l’indirizzo permette la selezione di N colonne relative agli N bit della parola).
L’indirizzo esterno viene quindi bufferizzato internamente al circuito di memoria
e ciascuno dei due campi di selezione viene portato in ingresso ad un circuito di
decodifica. In genere si associano i bit più significativi dell’indirizzo al campo di
selezione della riga, e i bit meno significativi al campo di selezione della colonna.
Se nella matrice vi sono M righe ed N colonne allora ciascuno dei due campi dovrà
essere formato rispettivamente da k1 = log2 (M ) e da k2 = log2 (N ) bit. In generale
il numero di celle selezionabili all’interno della matrice di memorizzazione, e quindi
lo spazio di indirizzamento, è pari ad una potenza di due. In particolare ciascuno
dei due campi sarà in grado di selezionare rispettivamente un numero di righe e
di colonne corrispondente ad una potenza di due. Comunque questa scelta non è
obbligatoria, pertanto sarà compito della circuiteria esterna evitare la generazione
di indirizzi non validi.
15
2 – Memorie
2.4.1
Struttura dell’address decoder
Il circuito di decodifica (address decoder) è costituito da una rete combinatoria in
grado di tradurre l’indirizzo relativo al campo di riga o di colonna dell’indirizzo
base nel corrispondente indirizzo lineare rappresentato dal segnale di selezione della
singola riga (word line) o della singola colonna (column selection). La struttura della
rete combinatoria, che viene realizzata utilizzando porte logiche AND, OR (NAND,
NOR) e NOT, presenta il segnale di controllo EN (enable) utilizzato per attivare
la selezione di uscita durante l’intervallo di tempo in cui i dati relativi all’indirizzo
sono stabili agli ingressi del circuito di decodifica. Si può inoltre osservare che per
Figura 2.8. Decoder di indirizzo a due ingressi - quattro uscite e struttura del gate
a 3 ingressi utilizzato nella rete combinatoria del decoder
via dell’indipendenza della decodifica del campo di riga e di colonna, l’attivazione
del singolo segnale WL (word line) abilita tutte le celle della riga selezionata alle
rispettive bit line, ed è solo con la selezione della colonna che si connette la coppia di
bit line associate alla cella selezionata con i circuiti dell’interfaccia di I/O. In sistemi
più complessi l’indirizzo è scomposto in tre campi, di conseguenza un terzo circuito
di decodifica permette di selezionare la sottomatrice interessata dall’operazione di
lettura o scrittura, e solo successivamente la decodifica della riga e della colonna
nella sottomatrice abiliteranno la cella indirizzata. Ciò richiede un attento studio
delle temporizzazioni dei segnali di controllo dei decoder in fase di progettazione. In
figura 2.8 è rappresentato lo schema di un decoder a due ingressi e quattro uscite
basato su porte logiche AND.
16
2.5 – Sense amplifier
2.4.2
Selezione delle colonne
Il circuito di selezione della colonna (column selection circuit) è costituito da due
transistor a canale n utilizzati in configurazione di transmission gate. Lo scopo del
circuito è di connettere le bit line relative alla cella selezionata ai circuiti di I/O. Il
Figura 2.9.
Circuito di selezione e isolamento della colonna della matrice di memoria
circuito permette la connessione della cella con l’ingresso dei circuiti di lettura o le
uscite dei circuiti di scrittura, rispettivamente durante le operazioni di lettura e scrittura. Durante i cicli di idle il circuito isola la colonna dalla sezione di I/O costituita
dal sense amplifier e dal write driver. Come si può osservare nello schema riportato
in figura 2.9, i due mosfet sono pilotati dal segnale di controllo comune COLSEL
(column selection) corrispondente al segnale di uscita del decoder di colonna.
2.5
Sense amplifier
L’amplificatore di uscita (sense amplifier) presente all’interno dell’interfaccia di I/O,
permette di amplificare la differenza di tensione presente tra le bit line della cella
selezionata, durante le operazioni di lettura. La progettazione del sense amplifier è
molto delicata, in quanto permette di stabilire il valore del bit contenuto nella cella.
Il sense amplifier è costituito da un circuito di amplificazione differenziale tale che,
se si indicano con v+ e v− i nodi di ingresso, valgono le relazioni seguenti:

 H se (v = v − v ) > 0
d
+
−
Vo = 
L se (vd = v+ − v− ) < 0
17
2 – Memorie
dove vd rappresenta la differenza tra la tensione del nodo v+ e quella del nodo v− . In
letteratura [3] sono presenti diverse soluzioni circuitali utilizzate per la realizzazione
del circuito di amplificazione di uscita, e molte sono oggetto di studio per la loro
ottimizzazione. Una delle soluzioni comunemente utilizzata è chiamata latch sense
amplifier (figura 2.10), ed è basata sull’uso di un latch analogo a quello presente
nelle celle di memoria per ottenere l’effetto di amplificazione (le bit line di ingresso sono direttamente connesse ai nodi a drain comune del latch). Il latch rimane
isolato dalle celle della colonna per mezzo del circuito di selezione della colonna,
e viene pilotato attraverso il segnale di controllo SSA (set sense amplifier) attivato dalla logica di controllo durante le operazioni di lettura. La connessione tra il
Figura 2.10.
Latch sense amplifier
latch di amplificazione e le bit line della colonna crea un effetto di accoppiamento
capacitivo (effetto capacitivo di Miller). Tuttavia tale effetto non influenza il comportamento del sense amplifier quando viene selezionato. L’attivazione del circuito
di selezione della colonna permette la trasmissione del segnale differenziale agli ingressi del sense amplifier e attivando il segnale di controllo SSA lo si amplifica fino a
che non raggiunge il livello di uscita prestabilito. Va osservato che le attuali celle di
amplificazione presentano una sensibilità di circa 80 mV, questo significa che sono
in grado di riconoscere correttamente segnali differenziali con un’ampiezza minima
di circa 80 mV, mentre segnali differenziali inferiori al valore di sensibilità non sono
18
2.6 – Write driver
correttamente riconosciuti. Ne consegue l’importanza della corretta progettazione
dello stadio di precarica che agevola la fase di sensing dell’amplificatore.
Una soluzione circuitale alternativa consiste nel connettere le bit line di ingresso
direttamente ai terminali di gate dei mosfet a canale n. Le bit line di uscita sono
prelevate sempre dal nodo a drain comune della cella di amplificazione, ottenendo
una separazione fisica tra le linee di ingresso e di uscita dell’amplificatore. Un alternativa è data dai circuiti di amplificazione di corrente (current sense amplifier)
in cui il segnale di uscita si ottiene misurando il flusso di corrente che scorre nelle
bit line di ingresso durante l’operazione di lettura (SSA attivo). Tuttavia gli amplificatori di corrente risultano essere maggiormente sensibili ai difetti presenti nelle
celle di memoria, in quanto il livello di uscita viene alterato se durante la fase di
amplificazione (SSA attivo) il flusso di corrente in ingresso cambia. Ne consegue
che, in genere, gli amplificatori di corrente presentano una fase di sensing di durata superiore rispetto agli amplificatori differenziali di tensione. La determinazione
della corretta temporizzazione del segnale di controllo SSA rispetto al segnale di
attivazione del circuito di selezione della colonna, rappresenta una fase delicata del
progetto del circuito di memoria e in particolare di quello di amplificazione. Per
ottenere questo risultato è possibile ricorrere a specifiche soluzioni circuitali che forniscono la corretta sincronizzazione dei segnali. A questo scopo è possibile ricorrere
a soluzioni basate su una dummy word line, in cui un segnale di word line aggiuntivo
è utilizzato per eseguire la sincronizzazione con il segnale SSA. Altre tecniche circuitali fanno invece uso di una dummy bit line, sempre con l’obiettivo di sincronizzare
il segnale di attivazione dell’amplificatore di uscita. Inoltre, per ottenere il corretto livello del segnale di uscita, è possibile ricorrere a soluzioni di amplificazione a
più stadi (in genere si usano soluzioni a due stadi che possono essere realizzati con
soluzioni circuitali differenti), in cui gli stadi successivi al primo permettono di avere
un completo adattamento del livello di tensione del segnale di uscita.
2.6
Write driver
Il circuito utilizzato per eseguire la scrittura dei dati è chiamato write driver. Come
esposto nei paragrafi precedenti le celle della matrice di memorizzazione immagazzinano l’informazione in forma differenziale, inoltre poichè le celle sono costituite da un
latch connesso alle bit line tramite due trasmission gate, l’informazione differenziale
19
2 – Memorie
viene in realtà trasferita da e verso le celle forzando il valore logico 0 su una delle
due linee. Infatti i due trasmission gate della cella di memorizzazione sono in grado
Figura 2.11.
Schema del circuito di scrittura
di trasferire efficacemente lo 0 logico ma non l’1 logico. Il circuito di scrittura dovrà
quindi essere in grado di forzare il valore 0 su una delle due bit line (a seconda del
dato binario che deve essere trasferito), indipendentemente dal valore precedente
presente nella cella e quindi dallo 0 logico trasferito dalla cella alle bit line quando
questa è selezionata. Per ottenere questo è necessario che il write driver sia in grado
di trasferire un valore tensione, associato allo 0 logico, dominante rispetto a quello
debole prodotto dalla cella, in modo da forzare la scrittura del valore corretto. Il
circuito rappresentato in figura 2.11 mostra lo schema circuitale standard utilizzato
per la realizzazione del write driver e fa uso di due inverter chiamati gated inverter
associati alla coppia di bit line. I due mosfet interni (rispettivamente P 2−N 3 per la
true bit line e P 6−N 7 per la complement bit line) realizzano due inverter CMOS, i
restanti quattro mosfet svolgono la funzione di gating e sono pilotati dal segnale di
controllo WE (write enable). Quando viene trasferito il bit di dato 0 il segnale WE
forza il nodo della cella corrispondente alla true bit line, attraverso il ramo di sinistra
del write driver, ad un valore di tensione corrispondente allo 0 logico. Analogamente
la scrittura del bit di dato 1 forzerà la tensione associata allo 0 logico sul nodo della
cella corrispondente alla complement bit line, tramite il ramo destro del write driver.
20
2.7 – Modello sperimentale di memoria
Per garantire la corretta trasmissione del dato in forma differenziale i mosfet a canale
n presentano dimensioni simili a quelle dei mosfet a canale p, rispetto al consueto
rapporto di due a uno tra le dimensioni dei mosfet a canale p e quelli a canale n.
Una soluzione alternativa poco utilizzata, impiega un circuito in grado di forzare
lo 0 logico sulla bit line opportuna e di portare l’altra bit line in uno stato di alta
impedenza mendiante un circuito tri-state.
2.7
Modello sperimentale di memoria
Lo schema del circuito SRAM in tecnologia CMOS utilizzato per l’esecuzione delle
simulazioni a livello elettrico è rappresentato in figura 2.12. Il sistema è composto
da una matrice 3 × 3, la quale permette l’analisi di modelli di guasto che coinvolgono anche più celle, oltre all’esplorazione di differenti modi di indirizzamento 1 .
Il numero di componenti associati ai circuiti di precarica delle bit line, di address
decoding, d’interfaccia di I/O e di controllo è stato minimizzato. Questa scelta rappresenta un compromesso tra la velocità di esecuzione delle simulazioni da parte del
simulatore e l’utilizzo di un modello di memoria descritto a livello elettrico coerente,
inoltre questa scelta è legata alla volontà di concentrare l’attenzione sui soli difetti
relativi alla matrice di memorizzazione, assumendo quindi che i circuiti di decodifica
degli indirizzi, di precarica, di controllo e dell’interfaccia di I/O siano correttamente
funzionanti. Nel modello sono quindi presenti i moduli di precarica delle bit line, un
semplice circuito guida utilizzato durante le operazioni di scrittura, i circuiti di selezione e isolamento delle colonne e un gruppo di porte logiche. Sono invece assenti i
circuiti di amplificazione utilizzati durante le operazioni di lettura. Per semplificare
la gestione delle simulazioni e l’interfacciamento dello strumento per la generazione
automatica con il simulatore, si è fissato un ciclo di durata pari a 10 ns sia per le
operazioni di scrittura sia per quelle di lettura. Un segnale di clock (clock precharge)
con frequenza di 100 MHz esegue ciclicamente la fase di precarica delle bit line alla
tensione di alimentazione VDD (per semplicità la precarica delle bit line avviene
durante i primi 5 ns di ogni ciclo operativo, compresi i cicli di idle). La matrice di
memorizzazione è formata da 9 celle disposte in configurazione 3 × 3. Ogni cella
è connessa alla propria coppia di bit line, ad ogni bit line è connessa una capacità
1
Il concetto di modo di indirizzamento è espresso nel capitolo 4 in riferimento all’analisi dello
strumento automatico per la generazione di march test
21
2 – Memorie
Figura 2.12.
Modello sperimentale di memoria statica con matrice 3 × 3
di valore pari a 0.01 pF utilizzata per simulare l’effetto capacitivo dovuto alla metallizzazione. Una coppia di mosfet a canale n realizza il circuito di selezione delle
colonne, che viene pilotato dal segnale di controllo emesso da un gruppo di porte
logiche. L’interfaccia di I/O è costituita quindi da un solo inverter che permette
di eseguire le scritture differenziali sulle celle della matrice. Nello schema non sono
presenti i sense amplifier di uscita, quindi le operazioni di lettura sono gestite direttamente dallo strumento di generazione automatico che simulerà il comportamento
del latch di amplificazione. Nel circuito è presente un gruppo di 6 porte logiche
AND che consentono la gestione sia dell’indirizzamento sia delle operazioni di scrittura/lettura. In particolare le porte a due ingressi permetto la selezione della word
line interessa dall’operazione corrente, mentre quelle a tre ingressi permettono la
selezione della colonna interessata dall’operazione corrente, oltre all’attivazione del
segnale di controllo W/R̄ che specifica il tipo di operazione da eseguire. La lettura
dei dati viene eseguita direttamente dallo strumento per la generazione automatica
di march test analizzando il valore dei nodi di connessione delle bit line con il circuito
di selezione della colonna (probe nodes). Tutte le operazioni sono eseguite durante
22
il secondo semiciclo operativo, attraverso l’attivazione del segnale di controllo EN
(enable). Questa struttura è stata scelta perchè permette di mantenere un’interfaccia composta dai vari gruppi di segnali che tipicamente costituiscono l’interfaccia
di memoria, senza influire sul tempo complessivo di simulazione del circuito. In
figura 2.13 è riportato l’andamento dei segnali di interfaccia relativo ad un ciclo di
scrittura, seguito da un ciclo di lettura. Come si osserva dalla figura il ciclo di pre-
Figura 2.13.
Memoria statica semplificata con array da 9 celle
carica dura fino all’istante t = t0 + 4.5 ns (t0 rappresenta l’istante iniziale del ciclo
operativo), dove il segnale P RECHG, corrispondente al segnale periodico del generatore precharge clock, inizia una transizione di 0.5 ns al termine della quale risulta
disattivato. Contemporaneamente al fronte di salita del segnale P RECHG si ha
l’attivazione del segnale di EN (fronte di salita del segnale di enable), che permette
l’esecuzione dell’operazione di lettura o di scrittura. Nello stesso intervallo di tempo viene opportunamente commutato il segnale di controllo W/R̄ per la selezione
dell’operazione corrente. I segnali relativi al bus dati e indirizzi sono commutati
all’interno del ciclo di precarica (t = t0 + 3.5 ns), in modo che si abbiano a disposizione dati e indirizzi validi nell’istante in cui si abilita l’esecuzione dell’operazione
sulla cella selezionata. Nelle tabelle 2.1 e 2.2 sono riportati i parametri relativi al
modello dei dispositivi mosfet impiegati nella definizione del modello sperimentale
di memoria SRAM.
2 – Memorie
Parameter
Type
Width
Length
Level
L
W
Vto
Kp
Gamma
Phi
Lambda
Is
Js
Pb
Pbsw
Cj
Cjsw
Cgso
Cgdo
Cgbo
Tox
Xj
Ucrit
Diomod
Vfb
Leta
Weta
U0
Temp
Vdd
Xpart
Tabella 2.1.
Cell latch
nmos
4.000000E-06
2.000000E-06
2
100.000000E-06
100.000000E-06
0.7513
20.718860E-06
0
0.7
0
10.000000E-15
0
0.8
0.8
0
0
0
0
0
100.000000E-09
0
10.000000E+03
1
0
0
0
0
0
0
0
Cell latch
pmos
10.000000E-06
2.000000E-06
2
100.000000E-06
100.000000E-06
-.9784
20.718860E-06
0
0.7
0
10.000000E-15
0
0.8
0.8
0
0
0
0
0
100.000000E-09
0
10.000000E+03
1
0
0
0
0
0
0
0
Cell pass transistor
nmos
8.000000E-06
2.000000E-06
1
100.000000E-06
100.000000E-06
0
20.000000E-06
0
0.6
0
10.000000E-15
0
0.8
0.8
0
0
0
0
0
0
0
10.000000E+03
1
0
0
0
0
0
0
0
Parametri per il modello spice dei dispositivi mosfet della cella SRAM
24
2.7 – Modello sperimentale di memoria
Parameter
Type
Width
Length
Level
L
W
Vto
Kp
Gamma
Phi
Lambda
Is
Js
Pb
Pbsw
Cj
Cjsw
Cgso
Cgdo
Cgbo
Tox
Xj
Ucrit
Diomod
Vfb
Leta
Weta
U0
Temp
Vdd
Xpart
Precharge
pmos
1.000000E-06
1.000000E-06
1
100.000000E-06
100.000000E-06
0
20.000000E-06
0
0.6
0
10.000000E-15
0
0.8
0.8
0
0
0
0
0
0
0
10.000000E+03
1
0
0
0
0
0
0
0
Column selection
nmos
8.000000E-06
2.000000E-06
1
100.000000E-06
100.000000E-06
0
20.000000E-06
0
0.6
0
10.000000E-15
0
0.8
0.8
0
0
0
0
0
0
0
10.000000E+03
1
0
0
0
0
0
0
0
Logic
nmos
1.000000E-06
1.000000E-06
1
100.000000E-06
100.000000E-06
0
20.000000E-06
0
0.6
0
10.000000E-15
0
0.8
0.8
0
0
0
0
0
0
0
10.000000E+03
1
0
0
0
0
0
0
0
Logic
pmos
1.000000E-06
1.000000E-06
1
100.000000E-06
100.000000E-06
0
20.000000E-06
0
0.6
0
10.000000E-15
0
0.8
0.8
0
0
0
0
0
0
0
10.000000E+03
1
0
0
0
0
0
0
0
Tabella 2.2. Parametri per il modello spice dei dispositivi mosfet per i
circuiti di controllo
25
Capitolo 3
Algoritmi genetici
Gli algortimi genetici appartengono alla classe degli algoritmi evolutivi e sono stati
introdotti dal Prof. John Holland nel 1975 presso l’università del Michigan e successivamente sono divenuti popolari grazie al contributo del Prof. Goldberg presso
l’università dell’Illinois. L’idea del Prof. Holland è stata quella di incorporare all’interno di un algoritmo tradizionale i meccanismi propri dell’evoluzione degli organismi biologici. Questi meccanismi derivano da un insieme di osservazioni relative al
modello di evoluzione naturale:
• l’evoluzione opera a livello genetico agendo sui cromosomi degli individui (i
cromosomi di fatto codificano l’informazione che definisce gli individui stessi )
piuttosto che sull’individuo nel suo complesso;
• la pressione ambientale, chiamata selezione, favorisce la riproduzione dei cromosomi che definiscono gli individui con caratteristiche migliori, cioè quelli
con un migliore adattamento alle condizioni dell’ambiente esterno;
• il processo di riproduzione è il principale meccanismo di evoluzione degli individui. Tale processo agisce in modo da ricombinare il materiale genetico
contenuto nei cromosomi di due individui (genitori), al fine di ottenere due
nuovi individui (figli) che entreranno a far parte della popolazione. Questo
meccanismo stabilisce inoltre il passaggio da una generazione a quella successiva;
• un’altro meccanismo su cui si basa l’evoluzione è dovuto all’azione del processo
di mutazione. Tale processo agisce sui nuovi individui generati dal processo
26
di riproduzione, alterandone in modo casuale il cromosoma, con lo scopo di
introdurre nuovo materiale genetico. Questo materiale introduce nuove caratteristiche nella popolazione che diversamente non sarebbero ottenibili mediante
il solo processo di riproduzione;
• l’evoluzione è un meccanismo senza memoria, questo significa che la sua conoscenza è basata esclusivamente sull’informazione contenuta nei cromosomi
degli individui appartenenti alla popolazione corrente.
Sulla base di queste semplici osservazioni, Holland propose l’idea di introdurre
processi di selezione, riproduzione e mutazione analoghi a quelli sopra esposti all’interno di una procedura algoritmica, al fine di utilizzare l’enorme potenziale insito nell’evoluzione per risolvere problemi complessi. Un algoritmo genetico (AG)
presenta generalmente le seguenti caratteristiche:
• ogni cromosoma è definito mediante una sequenza di caratteri, chiamati geni
ed apparteneti ad un insieme che definisce l’alfabeto. L’alfabeto contiene un
numero finito di simboli, ciascuno dei quali definisce il valore che un gene può
assumere all’interno del cromosoma, cioè stabilisce il suo allele. Un tipico
alfabeto utilizzato negli algoritmi genetici è quello binario, composto dai soli
alleli 1 e 0. Il cromosoma rappresenta l’individuo all’interno della popolazione
corrente ed esprime la soluzione al problema considerato;
• una funzione f (x), chiamata funzione di valutazione o fitness, permette di
esprimere un giudizio sull’efficacia di un individuo rispetto al problema affrontato. Soluzioni migliori saranno quindi associate a valori di fitness più
alti;
• l’insieme delle funzioni di selezione, riproduzione e mutazione permette all’algoritmo di evolvere da una generazione a quella successiva, attraverso l’incrocio
dei geni relativi alle soluzioni con fitness più alta.
La realizzazione di un algoritmo genetico si basa quindi sulla definizione della codifica
dei cromosomi associata ad una generica soluzione e la definizione della funzione di
valutazione specifica per il problema affrontato. In particolare la scelta della codifica influenza anche la successiva definizione degli operatori genetici che dovranno
poi manipolare i cromosomi. In molti problemi di ottimizzazione combinatoria la
27
3 – Algoritmi genetici
soluzione può essere facilmente espressa come sequenza di caratteri binari, in altri
casi la scelta ricade su una sequenza rappresentata da valori non binari (ad esempio
valori interi).
3.1
Struttura di un AG
Un algoritmo genetico è strutturato in modo tale da potere realizzare il processo di
evoluzione temporale, come visibile in figura 3.1. Una funzione di inizializzazione
permette di creare la popolazione iniziale di individui attraverso la generazione casuale dei geni di ciascun cromosoma, successivamente si entra in un ciclo che permette all’algoritmo genetico di fare evolvere la popolazione di individui attraverso le
varie generazioni. Per ciascun cromosoma l’algoritmo ricava un valore che rappresen-
Figura 3.1.
Struttura di un algoritmo genetico
ta la qualità della soluzione rispetto al problema in esame, attraverso l’applicazione
della funzione di fitness. Spesso nei problemi di ottimizzazione combinatoria la funzione di fitness coincide con la funzione obiettivo che si intende massimizzare, mentre
28
3.1 – Struttura di un AG
nei problemi di minimizzazione coincide con l’inverso della funzione obiettivo. In
base alla valutazione di ciascun individuo, l’algoritmo procede con la fase di riproduzione degli stessi. Per la riproduzione sono state proposte diverse tecniche, la più
semplice è definita generational replacement e prevede la creazione di un insieme di
nuovi individui in grado di sostituire l’intera popolazione ad ogni generazione, tale
tecnica pur essendo semplice da implementare presenta un tasso di perdita delle
caratteristiche degli individui più elevato. La tecnica nota come steady state risulta
più efficiente poichè cerca di evitare la perdita di caratteri genetici utili dovuti alla
sostituzione di tutti i cromosomi della popolazione. La tecnica steady state prevede
che ad ogni nuova generazione venga sostituita solo una frazione degli individui
corrispondente al valore del parametro generation gap. Solitamente gli individui
peggiori all’interno della popolazione corrente sono sostituiti dai nuovi individui
generati. Quando la frazione di cromosomi sostituita ad ogni generazione coincide
con l’insieme di tutti gli individui della popolazione, allora la tecnica di steady state
degenera in quella standard di total replacement. La tecnica steady state garantisce risultati migliori per un numero elevato di generazioni, garantendo che il valore
medio di valutazione degli individui sia crescente durante il ciclo di evoluzione. Per
ottenere questo risultato l’insieme dei cromosomi figli viene valutato prima del loro
inserimento nella popolazione, e solo se la loro valutazione risulta superiore a quella del gruppo di cromosomi individuati per la sostituzione (generation gap) questi
vengono inseriti nella popolazione, in caso contrario l’algoritmo li rifiuta e procede
a una nuova selezione. In questo modo i vantaggi di questo approccio emergono su
un ciclo di evoluzione grande in quanto bisogna prevedere il manifestarsi di periodi
di stasi del valore di valutazione medio. Di conseguenza questo approccio risulta
interessante qualora il tempo di CPU richiesto per la valutazione degli individui non
sia dominante. In letteratura [6, 7] esiste una tecnica di riproduzione alternativa
simile allo steady state chiamata elitismo, anche in questo caso si sostituisce solo
una frazione dei cromosomi nella popolazione corrente (tipicamente gli individui con
valutazione peggiore) pari a un valore di generation gap; tuttavia i nuovi cromosomi
subentrano nella nuova popolazione immediatamente senza un test di valutazione
e concorrono alla selezione nella generazione successiva, dopo essere stati valutati.
Rispetto allo steady state questa tecnica non garantisce una crescita della valutazione media durante il ciclo evolutivo in quanto i nuovi individui possono risultare
in realtà peggiori di quelli sostituiti. Tuttavia se il tempo di CPU richiesto per la
29
3 – Algoritmi genetici
valutazione di un individuo è dominante questa tecnica garantisce risultati migliori
del total replacement anche su un numero di generazioni relativamente basso.
Ciascuna tecnica di riproduzione prevede che siano scelti due cromosomi definiti
come genitori. La selezione è ottenuta mediante l’applicazione di una funzione specifica (selezione) che provvede a scegliere due individui a caso, favorendo tuttavia gli
individui con fitness maggiore. I due cromosomi scelti vengono incrociati attraverso
l’operatore genetico di crossover dando origine a due cromosomi figli. In base alla
tecnica di riproduzione in uso, quando tutti i nuovi cromosomi sono stati generati
si procede alla sostituzione di parte della popolazione corrente, dando origine alla
generazione successiva. Ogni nuovo individuo nella generazione successiva è soggetto
all’azione dell’operatore di mutazione che provvede a introdurre variazioni casuali
dei valori dei geni del cromosoma, inoltre i nuovi individui sono sottoposti all’azione
dell’operatore di inversione che provvede a generare una diversa rappresentazione
della soluzione espressa dal cromosoma, senza alterarne il valore di fitness (si noti
che l’operatore di inversione non è considerato essenziale nella struttura di un algoritmo genetico e che la sua adozione è legata al problema specifico in esame). Infine
ciascuno dei nuovi cromosomi può essere soggetto all’azione di uno o più operatori
genetici, sviluppati sulla base delle specifiche conoscenze del problema affrontato. A
questo punto il ciclo si chiude e le funzioni di fitness e di riproduzione sono riapplicate alla nuova popolazione. Il processo termina quando è verificata la condizione di
terminazione, che viene espressa sia come limite massimo nel numero di generazioni
sia come condizione specifica di terminazione del problema.
L’applicazione di ciascuno degli operatori genetici, sia classici sia specifici per il
dominio applicativo considerato, sono legati ad una probabilità di esecuzione degli
stessi. Questo significa che l’applicazione dell’operatore di crossover, dati due cromosomi genitori, avviene con probabilità Pc specificata come parametro dell’algoritmo,
mentre con probabilità 1 − Pc i due cromosomi figli saranno identici ai genitori.
Analogamente per gli altri operatori si avrà la loro esecuzione con probabilità Pop ,
mentre con probabilità 1 − Pop l’operatore non verrà applicato.
3.2
Selezione
Il processo di selezione sceglie due individui all’interno della popolazione corrente,
con lo scopo di accoppiarli e di generare due nuovi individui (figli) che entreranno a
30
3.2 – Selezione
far parte della popolazione nella generazione successiva. La selezione degli individui
Figura 3.2.
Roulette wheel extraction
avviene attraverso un processo casuale, in cui vengono tuttavia favoriti gli individui
con valore della funzione di fitness più alta. Per ottenere questo risultato Holland
ha sviluppato una tecnica di selezione chiamata roulette wheel extraction. Questa
tecnica dispone idealmente gli individui della popolazione su una circonferenza, come
visibile in figura 3.2, ed assegna a ciascun cromosoma un arco la cui ampiezza
è direttamente proporzionale al valore della fitness dell’individuo. Dal punto di
vista algoritmico la tecnica prevede l’estrazione di un valore casuale r compreso
nell’intervallo:
0 ≤ r ≤
PX
op−1
f (x)
x=0
dove f (x) rappresenta la fitness associata al cromosoma x della popolazione composta da P op individui. Questo corrisponde ad estrarre a caso una posizione all’interno
della circonferenza di cui sopra. L’individuo su cui viene a cadere la posizione
estratta rappresenta l’individuo scelto. Dal punto di vista algoritmico viene calcolato
il valore cumulativo della fitness per ciascun individuo:
fcum (x) =
x
X
f (i)
i=0
Il valore cumulativo per cui vale la relazione fcum (x) ≥ r rispetto alla variabile
casuale estratta, permette di selezionare il cromosoma genitore. La selezione risulta
essere indipendente dall’ordine con cui gli individui sono posizionati sulla circonferenza, cioè è indipendente dall’ordine con cui si calcolano i valori cumulativi delle
31
3 – Algoritmi genetici
fitness degli individui. Infatti se la variabile casuale r ha una distribuzione di proP op−1
babilità uniforme nell’intervallo [ 0 , F ], dove F = Px=0
f (x) , allora l’ordine con
cui sono presi in considerazione gli individui, cioè l’ordine con cui sono disposti sulla
circonferenza, è irrilevante.
In letteratura [7] sono state proposte tecniche alternative di selezione degli individui,
quali la stochastic universal selection o il binary tournament. La prima tecnica risulta simile alla roulette wheel extraction, in cui però vengono selezionati N individui
contemporaneamente anzichè uno solo. Ad ogni estrazione sono utilizzati N marker
equidistanti, posizionati sulla circonferenza che rappresenta la fitness complessiva
della popolazione e durante l’estrazione ciascuno degli individui riceve un numero
variabile di marker proporzionalmente alla propria fitness. Gli individui con fitness
maggiori ricevendo più marker hanno diritto a riprodursi un numero di volte pari al
numero di marker a loro assegnati, favorendone quindi la riproduzione. La tecnica di
binary tournament prevede invece l’estrazione casuale di una coppia di individui, e
la selezione dell’individuo migliore nella coppia come genitore; inoltre la tecnica può
prevedere la reintroduzione degli individui o meno all’interno del pool di selezione
(l’insieme degli individui selezionabili per la riproduzione, inizialmente coincidente
con la popolazione associata alla generazione corrente). Nel secondo caso, poichè la
dimensione della popolazione rimane costante tra una generazione e la successiva, il
pool verrà ricreato completemente reinserendovi tutti gli individui dopo che la nuova generazione sarà stata completata a metà. Questo implica quindi che l’individuo
con fitness maggiore si riprodurrà due volte mentre quello con fitness più bassa sarà
scartato due volte.
3.3
Crossover
Il processo di crossover è alla base del meccanismo di riproduzione implementato da
un algoritmo genetico. Analogamente a quanto avviene nel mondo naturale durante
la riproduzione, il crossover permette la creazione di nuovi individui mescolando
il patrimonio genetico dei genitori. Il processo di combinazione permette infatti
la creazione di individui figli aventi caratteristiche di entrambe i genitori, tuttavia
poichè l’azione di combinazione dei geni è casuale il patrimonio genetico complessivo degli individui creati può risultare peggiore o migliore di quello dei genitori. La
funzione di selezione avrà quindi il compito di scegliere ad ogni generazione l’insieme
32
3.3 – Crossover
degli individui con le caratteristiche migliori per la riproduzione, con l’obiettivo di
originare dei figli con caratteristiche migliori di quelle dei genitori. In quest’ottica il
processo di crossover è ritenuto essenziale negli algoritmi genetici ed è considerato il
processo principale nell’ambito della riproduzione. Infatti è stato osservato che l’introduzione di questo processo all’interno di altre tecniche di ottimizzazione, come la
programmazione dinamica, permette di ottenere prestazioni dell’algoritmo migliori;
analogamente l’eliminazione dello stesso da un algoritmo genetico ne determina un
netto peggioramento delle prestazioni.
Nell’ambito della progettazione di algoritmi genetici, sono stati proposti differenti
Figura 3.3.
One-point crossover
meccanismi di crossover, molti dei quali pensati per domini applicativi specifici. La
tecnica base, proposta inizialmente da Holland, è nota come one-point crossover, e
consiste nel selezionare casualmente una posizione all’interno del cromosoma, chiamata punto di taglio. Il taglio permette di individuare su ciascuno dei cromosomi
genitori due regioni: la regione precedente e quella successiva il punto di taglio. La
tecnica di crossover genera quindi i due nuovi individui nel seguente modo: siano
P 1 e P 2 rispettivamente il cromosoma genitore 1 e 2, siano rispettivamente L e R
la regione a sinistra (precedente) e a destra (successiva) del punto di taglio e siano
infine C1 e C2 rispettivamente il nuovo individuo 1 e 2, come rappresentato in figura
3.3. Allora per C1 valgono le seguenti relazioni:

 C1 = P 1
L
L
Child 1 
C1R = P 2R
33
3 – Algoritmi genetici
mentre per C2 valgono le relazioni:

 C2 = P 2
L
L
Child 2
 C2R = P 1R
3.4
Mutazione
L’operatore di mutazione è il secondo operatore classico utilizzato negli algoritmi
genetici ed ha lo scopo di introdurre all’interno della popolazione nuove caratteristiche, attraverso la modificazione dei singoli geni del cromosoma. L’operatore di
mutazione seleziona attraverso un processo casuale il valore da attribuire a ciascun
gene della sequenza che codifica il cromosoma, qualora venga passato un test di esecuzione. Il test fissa, come nel caso degli altri operatori genetici, una probabilità (o
frequenza) di esecuzione dell’operatore. Se viene estratto un valore casuale inferiore
o uguale a quello espresso dalla probabilità di esecuzione dell’operatore, quest’ultimo viene applicato. Il processo di mutazione dal punto di vista dell’ottimizzazione
Old
chromosome
21 35 59 27
34 31 56 39
15 47 47 21
Mutation
rate
.150
.150
.150
.301
.239
.034
Random
numbers
.405 .778
.123 .347
.473 .894
.865
.840
.169
New
gene
31
29
New
chromosome
21 35 59 27
34 31 56 39
29 47 47 21
Tabella 3.1. Esempio di mutazione dei cromosomi applicata a ciascun gene
di ciascun cromosoma
combinatoria, rappresenta il meccanismo attraverso il quale l’algoritmo genetico è in
grado di esplorare efficacemente lo spazio delle soluzioni. Infatti poichè la funzione
obiettivo del problema può presentare dei massimi locali (o dei minimi locali se si
considera un problema di minimizzazione), allora al pari di altri meccanismi presenti
in altre tecniche quali il tabu search o il simulated annealing, la mutazione permette
all’algoritmo genetico di portarsi all’esterno di queste regioni e di proseguire con
l’esplorazione dello spazio delle soluzioni. La mutazione rende quindi possibile l’esplorazione dello spazio risolutivo, nonostante sia utilizzata una popolazione di dimensione finita. Sono disponibili molte varianti dell’operatore di mutazione, molte
di queste rientrano nell’insieme di operatori specifici per particolari domini applicativi. La versione più semplice prevede l’esecuzione del test per ciascun individuo
34
3.5 – Inversione
della popolazione corrente, e la conseguente alterazione del valore di un singolo
gene, anch’esso selezionato attraverso un processo casuale. Una variante utilizzata
frequentemente in letteratura prevede l’applicazione dell’operatore di mutazione su
ciascun gene componente la sequenza del cromosoma. L’utilizzo di questo secondo
metodo può risultare molto efficace in diversi contesti applicativi, dato che tende ad
alterare i cromosomi in modo più radicale, consentendo un’esplorazione dello spazio
risolutivo più efficiente. Tuttavia richiede una maggior attenzione nella scelta del
valore di accettazione del test di esecuzione, al fine di evitare che l’evoluzione dell’algoritmo risulti dominata da un processo di ricerca casuale. Ad esempio in tabella
3.1 è riportata l’azione dell’operatore avendo fissato un tasso di mutazione pari a
.150. Nell’esempio l’operatore è applicato a tre cromosomi distinti con tre risultati
differenti: nel primo caso per nessuno dei quattro geni viene selezionato l’operatore,
quindi il cromosoma risultante non è alterato; nel secondo caso il secondo gene della
sequenza viene selezionato per la mutazione, essendo il valore casuale estratto interno all’intervallo di applicazione selezionato per la muatzione (.123 < .150), ma
l’estrazione casuale del nuovo valore fornisce lo stesso allele, quindi anche in questo
secondo caso il cromosoma risultatnte è identico all’originale. Il terzo caso da origine alla selezione del primo gene, che viene mutato estraendo un allele differente, e
perciò il cromosoma risultante è differente dal cromosoma originale. In alcuni casi,
per evitare un comportamento dell’operatore di mutazione analogo a quello del secondo caso, si implementa la selezione casuale in modo tale da selezionare un allele
differente da quello precedente. Questo metodo risulta utile soprattutto se si usano
codifiche non binarie. In caso di codifica binaria va però osservato che la frequenza
di mutazione viene in realtà raddoppiata, se si implementa l’operatore di selezione
in modo da eseguire l’inversione del bit originale del cromosoma.
3.5
Inversione
L’operatore di inversione è stato introdotto inizialmente da Holland ed è anch’esso
ispirato al comportamento che si osserva nel mondo biologico. Come tutti gli operatori prevede l’accettazione di un test di esecuzione, dipendente da un parametro
che ne esprime la probabilità di esecuzione. L’inversione opera su un singolo cromosoma e prevede l’estrazione casuale di due punti all’interno della sequenza genetica,
35
3 – Algoritmi genetici
definiti punti di inversione. La regione del cromosoma compresa tra i due punti selezionati, viene invertita in modo che il valore del primo gene compreso nella regione
venga scambiato con il valore dell’ultimo, il valore del secondo gene venga scambiato
con quello del penultimo, e cosı̀ via fino alla completa inversione della regione. Nella
tabella 3.2 è mostrato un esempio di inversione di un cromosoma applicata tra i
due punti IP1 e IP2 . La particolarità dell’operatore è quella di non modificare il
Before
inversion
After
inversion
IP1
G2
IP2
G6
G2
G6
Tabella 3.2.
G9
12
G9
12
G8
34
G8
34
G7
5
G7
5
G6
37
G2
3
Chromosome
G5 G4 G3
43 29 51
G3 G4 G5
51 29 43
G2
3
G6
37
G1
7
G1
7
G0
10
G0
10
Esempio di inversione del cromosoma
valore della funzione di valutazione associato al cromosoma, e quindi quello della
fitness, a fronte dello scambio dei geni all’interno della regione di inversione. Questo
comportamento richiede che le soluzioni siano codificate in modo che la valutazione
associata ad una data sequenza non dipenda dalla posizione relativa dei geni al suo
interno. Questo significa che il valore ottenuto dalla funzione di valutazione deve
dipendere solo dal valore assunto dai singoli geni e non dallo specifico ordine con
cui questi compaiono nella sequenza. Un metodo per ottenere questo è quello di
associare a ciascun gene un identificatore e di valutare il cromosoma in funzione
dell’ordine dato dagli identificatori associati ai geni.
Nonostante sia stato introdotto inizialmente dallo stesso Holland, nella maggior
parte dei contesti applicativi l’operatore di inversione non risulta essere particolarmente utile e quindi non è molto utilizzato nello sviluppo di algoritmi e strumenti
automatici per il settore dei circuiti VLSI.
3.6
Elementi teorici
Uno schema rappresenta l’insieme dei valori assegnati ad un sottoinsieme di geni all’interno del cromosoma, di conseguenza uno schema codifica una soluzione parziale
per il problema affrontato e rappresenta quindi un sottoinsieme completamente specificato di possibili soluzioni. Il concetto di schema è stato introdotto dallo stesso
36
3.6 – Elementi teorici
Holland, e svolge un ruolo molto importante negli algoritmi genetici in quanto all’interno di un cromosoma, analogamente a quanto avviene nel mondo biologico, vari
geni possono essere considerati legati tra loro poichè l’alterazione del valore in un
solo gene, mantenendo gli altri invariati, può causare un degrado nel valore della
funzione di valutazione. Questo indica che alcune sottosequenze all’interno del cromosoma possono risultare particolarmente efficaci rispetto ad altre. La tecnica di
crossover utilizzata per la riproduzione degli individui, si lega al concetto di schema
in quanto il crossover piuttosto che combinare geni ha lo scopo di combinare schemi. Ci si aspetta quindi che nel corso delle generazioni schemi piccoli e distribuiti
lungo tutto il cromosoma vengano combinati in schemi sempre più lunghi fino ad
ottenere la soluzione ottimale. Se si considera una generica soluzione per un problema assegnato, espressa da un cromosoma di lunghezza L, in cui sia stato specificato
il valore di m geni e sia stato assegnato un don’t care ai restanti ( L − m ), allora
tale soluzione rappresenta uno schema del problema. In particolare la soluzione cosı̀
espressa rappresenta un ( L − m ) iperpiano all’interno dell’iperspazio delle soluzioni,
dove ogni punto specificato da un insieme di ( L − m ) valori, è una istanza dello schema. Per uno specifico problema quindi uno schema rappresenta il valore che
gruppi di geni devo avere affinchè il cromosoma rappresenti una soluzione con elevato
valore della funzione di valutazione. Da questo punto di vista gli algoritmi genetici,
nel corso delle diverse generazioni manipolano in parallelo gli schemi e ciò costituisce il vantaggio principale di tali algoritmi rispetto ad altre tecniche di risoluzione
di problemi complessi. In particolare l’azione della funzione di selezione permetterà di scegliere in ogni generazione gli individui che presentano gli schemi migliori,
permettendo al processo di crossover di combinarli all’interno degli individui figli.
Ad ogni generazione quindi ci si aspetta che il numero di individui che presentano
schemi favorevoli nel loro patrimonio genetico cresca, e che dimunuisca quello di
individui con schemi non utili. Alla luce di quanto esposto si può osservare che un
cromosoma, per cui sia specificato un sottoinsieme di geni, rappresenti una regione
all’interno dello spazio di ricerca delle soluzioni. La probabilità che i figli generati
dal processo di riproduzione si allontanino dalla regione dei genitori dipende dalla
distanza relativa dei geni per cui sono specificati i valori, ad esempio se si considera
la regione 12 ∗ ∗ 34, la probabilità che vi sia un allontanamento da questa regione per
i figli (rottura dello schema) è molto alta indipendentemente dalla scelta del punto
di taglio utilizzato dal processo di crossover. Diversamente la regione rappresentata
37
3 – Algoritmi genetici
da 12 34 ∗ ∗ è meno soggetta al fenomeno di allontanamento dei figli. L’insieme
di geni vicini per cui è specificato un valore è definito blocco costitutivo compatto
e la sua importanza è legata al fatto che il processo di crossover precedentemente
esposto ha meno probabilità di rompere uno schema e causare l’allontanamento dei
figli dalla regione dei genitori, se lo schema presenta dei blocchi costitutivi compatti,
inoltre tali blocchi saranno con probabilità proporzionale alla loro fitness presenti
nei cromosomi figli.
3.6.1
Teoria degli schemi
La teoria degli schemi è stata introdotta inizialmente dallo stesso prof. Holland ed
è basata su tre elementi
• definizione di schema
• lunghezza di uno schema
• ordine di uno schema
Per comodità di esposizione si fa riferimento ad una codifica binaria dei geni del
cromosoma, tuttavia è possibile estendere la trattazione anche al caso di cromosomi
codificati su un alfabeto non binario. Uno schema S è definito come una successione
di simboli appartenenti all’insieme { 1, 0, ∗ } di lunghezza pari alla lunghezza del
cromosoma, dove il simbolo ∗ identifica il valore don’t care. Uno schema rappresenta
quindi l’insieme di tutte le sequenze che presentano un valore identico per i simboli
differenti da ∗. Sono esempi di sequenze appartenenti allo stesso schema:
101110
101011
dove S è definito come:
S = (10 ∗ ∗1∗)
Ogni schema con r simboli ∗ rappresenta 2r sequenze binarie differenti, inoltre uno
stesso cromosoma può appartenere a più schemi diversi, ad esempio la sequenza
binaria 1 0 1 1 1 0 può appartenere contemporaneamente agli schemi:
S1 = ( 1 0 ∗ ∗ ∗ 0 )
S2 = ( ∗ 0 ∗ ∗ ∗ 0 )
38
3.6 – Elementi teorici
in questo senso gli algoritmi genetici esplorano in parallelo regioni dello spazio delle
soluzioni che si riferiscono agli schemi interni a ciascun individuo, e questo definisce
quindi un parallelismo interno anche a ciascun cromosoma. L’ordine R(S) di uno
schema S rappresenta il numero di simboli 1 e 0 all’interno dello schema S, mentre
la lunghezza ∆(S) di uno schema S rappresenta la massima distanza tra il primo e
l’ultimo simbolo 1 o 0 della sequenza S. Lo schema S2 presentato negli esempi precedenti possiede ad esempio ordine R(S2 ) = 2 e lunghezza ∆(S2 ) = 5. Tali notazioni
permettono di analizzare in via analitica l’effetto degli operatori di crossover e di
mutazione che tendono a rompere gli schemi nella popolazione alterando la struttura
delle sequenze genetiche. Inoltre permette di studiare quantitativamente il processo di riproduzione e soppravvivenza degli individui durante l’evoluzione temporale
dell’algoritmo genetico.
Indichiamo con la notazione m(S, t) l’insieme di m cromosomi nella popolazione
aventi lo schema S alla generazione t del processo di evoluzione dell’algoritmo genetico. Se consideriamo l’individuo i-esimo con un valore della funzione fitness pari
a fi , allora la probabilità di essere selezionato dal processo di riproduzione è espressa
come:
fi
Pi = PP op−1
fi
0
Se la popolazione è composta da P op individui allora si può determinare il numero di cromosomi che presenteranno lo schema S nella generazione successiva
t + 1, sapendo che il processo di selezione sceglie, per la riproduzione, gli individui
proporzionalmente al valore della loro fitness. Quindi si ha che:
f ∗ (S)
m(S, t + 1) = m(S, t) · P op · PP op−1
fi
0
dove f ∗ (S) rappresenta la fitness media relativa agli individui contenenti lo schema
S alla generazione t. Se indichiamo con
PP op−1
α=
0
fi
P op
l’adattamento medio della popolazione alla generazione t, allora la precedente relazione si può riscrivere come
m(S, t + 1) = m(S, t) ·
39
f ∗ (S)
α
3 – Algoritmi genetici
Questo significa che è possibile esprimere la velocità di sviluppo della popolazione
come rapporto tra il valore di adattamento medio degli individui aventi lo schema
S e il valore di adattamento medio dell’intera popolazione. Questo implica che
gli schemi S che presentano un valore di adattamento medio superiore a quello
dell’intera popolazione (cioè gli schemi per cui vale f ∗ (S) ≥ α) si presenteranno in
un numero crescente di cromosomi nel corso dell’evoluzione dell’algoritmo, viceversa
gli schemi per cui si ha un adattamento medio inferiore (cioè per cui vale f ∗ (S) < α)
si presenteranno con una frequenza decrescente nel corso dell’evoluzione. Tuttavia
va considerato che nel processo di riproduzione sono coinvolti sia l’operatore di
crossover sia quello di mutazione, che pertanto influiscono sul valore m(S, t + 1)
atteso. Se prendiamo in considerazione l’operatore di crossover, la probabilità che
uno schema S sia distrutto durante la riproduzione è uguale alla probabilità che il
punto di taglio Cp scelto casualmente cada all’interno dello schema. Tale probabilità
si esprime con la relazione:
∆(S)
Pd (S) =
l−1
dove l è la lunghezza del cromosoma, mentre la probabilità di sopravvivenza dello
schema è data da:
Pa (S) = 1 − Pd (S)
Ricordando che l’operatore di crossover viene applicato con una probabilità uguale a
Pc si ottiene la seguente relazione per ciò che riguarda la probabilità di sopravvivenza
dello schema S:
0
Pa (S) = 1 − Pc · Pd (S)
A questo punto è possibile prendere in considerazione l’azione dovuta all’operatore
di mutazione. Definendo la probabilità di mutazione di un singolo gene come Pm
ed essendo l’evento di mutazione di un gene indipendente dalla mutazione degli
altri geni, la probabilità che uno schema non venga perso a causa dell’esecuzione
dell’operatore (uno schema viene perso se viene mutato un gene avente allele pari a
1 o 0) è espressa dalla relazione esponenziale:
Pam (S) = (1 − Pm )R(S)
che per basse frequenze di mutazione può essere approssimata come 1 − Pm · R(S).
A questo punto è possibile combinare gli effetti degli operatori di crossover e di mutazione al calcolo del numero atteso di cromosomi aventi schema S nella generazione
40
3.6 – Elementi teorici
successiva, ottenendo la relazione finale
m(S, t + 1) = m(S, t) ·
f ∗ (S)
· [1 − (Pc · Pd (S) + Pm · R(S))]
α
che esprime il teorema degli schemi.
Teorema degli schemi: schemi di piccola lunghezza, basso ordine e adattamento
sopra la media vengono verificati 1 con una frequenza esponenzialmente crescente
nelle generazioni successive dell’algoritmo genetico.
Ipotesi dei blocchi costitutivi: un algoritmo genetico ricerca la soluzione ottima
di un problema mediante il processo di composizione di schemi di piccola lunghezza,
basso ordine e adattamento sopra la media chiamati blocchi costitutivi.
3.6.2
N-point crossover
Sebbene la tecnica base per il crossover descritta nel paragrafo 3.3 sia stata ispirata dalla controparte biologica, il processo di crossover con un solo punto di taglio
soffre di alcune limitazioni legate alla manipolazione di schemi. Poichè nel corso
Chromosome1
Chromosome2
G11
1
*
G10
*
*
G9
0
*
G8
*
*
G7
*
0
G6
*
*
G5
*
1
G4
*
*
G3
*
*
G2
*
*
G1
*
*
G0
1
*
Tabella 3.3. Cromomosomi contenenti due schemi efficaci che la tecnica 1-point
crossover non è in grado di combinare
dell’evoluzione ci si aspetta che la popolazione presenti via via un numero sempre maggiore di individui i cui schemi migliori vengano aggregati fino a formare
la soluzione completa, allora si osserva come la tecnica basata su un solo punto di
taglio abbia potenzialmente un limite. Infatti mano a mano che aumenta negli individui la dimensione degli schemi efficaci, il crossover con un solo punto di taglio
risulta inefficace nel combinarli senza subire perdite. Ad esempio in tabella 3.3 è
mostrata una coppia di cromosomi con codifica binaria, ciascuno dei quali possiede
1
Si dice che uno schema viene verificato quando vengono aggiunte nuove soluzioni a quelle già
rappresentate dallo schema stesso
41
3 – Algoritmi genetici
uno schema efficace, che si desidera poter combinare nei figli. Tuttavia qualsiasi
sia la scelta del punto di taglio, la tecnica base di crossover non sarà in grado di
combinare tali schemi, che andranno perciò in parte persi nella generazione successiva. In letteratura sono state proposte tecniche alternative [6, 7, 9] che si sono
dimostrate più efficaci nella manipolazione degli schemi. In generale tali tecniche
suddividono il cromosoma in N + 1 regioni individuate da N punti di taglio. La
versione più utilizzata è quella con indice N = 2 denominata two-point crossover, la
quale fornisce buoni risultati in diversi contesti applicativi. Ad esempio è possibile
applicare la tecnica di crossover a due punti di taglio ed ottenere la combinazione
degli schemi efficaci presenti nell’esempio di tabella 3.3, selezionando come punti di
taglio rispettivamente CP1 = 4 e CP2 = 7. Il cromosoma viene diviso in tre regioni
Figura 3.4.
Two-point crossover
dai punti di taglio CP1 e CP2 . Tali regioni, indicate come L, C ed R, rappresentano
rispettivamente l’area precedente il punto di taglio CP1 , quella compresa tra i due
punti di taglio e quella successiva al punto di taglio CP2 . Indicando con P 1 e P 2 i
due cromosomi genitori e con C1 e C2 i due rispettivi cromosomi figli, allora valgono
rispettivamente per C1 e per C2 le relazioni seguenti:
Child 1



 C1L = P 1L



C1C = P 2C
C1R = P 1R
42
3.7 – Adattamento dei parametri
Child 2



 C2L = P 2L



C2C = P 1C
C2R = P 2R
inoltre vale la seguente relazione per i due punti di taglio:
CP1 ≤ CP2
Come caso estremo è stata proposta una versione del crossover denominata uniform
crossover in cui ciascun gene del cromosoma rappresenta una regione. In questo
caso una sequenza binaria casuale, definita template, e la sua complementare permettono di scegliere per ciascuno dei due figli il materiale genetico proveniente dai
genitori. La scelta del numero di punti di taglio e della relativa tecnica di crossover
dipende comunque dalla lunghezza dei cromosomi. Un elevato valore dell’indice N
risulta sicuramente più vantaggioso se i cromosomi hanno una lunghezza elevata
(ad esempio se sono codificati da sequenze binarie sufficientemente lunghe), mentre
per cromosomi che mantengono una lunghezza relativamente corta tale scelta non
comporta miglioramenti.
3.7
Adattamento dei parametri
Gli algoritmi genetici utilizzano un insieme di operatori per manipolare le sequenze
genetiche che codificano la soluzione per il problema considerato. L’applicazione di
questi operatori è determinata da un insieme di parametri di ingresso, che definiscono la probabilità (o frequenza) di esecuzione degli operatori stessi (execution rate).
La determinazione dell’insieme ottimale dei parametri (parameters tuning) è molto
importante, perchè in base all’insieme di parametri che si utilizzano il comportamento dell’algoritmo può variare di molto. Tuttavia tale scelta richiede la risoluzione di
un problema di ottimizzazione complessa.
La tecnica più semplice per selezionare l’insieme ottimale consiste nell’eseguire l’ottimizzazione manuale dei parametri di ingresso, conducendo una serie di esperimenti
in cui questi vengono variati e rispetto ai quali si registra l’efficacia dell’algoritmo genetico nell’individuare la soluzione ottimale del problema. Per poter eseguire i test è
necessario utilizzare un insieme iniziale di valori ragionevoli per il contesto applicativo e poi proseguire i test applicando le variazioni. In linea generale se si considerano
i due operatori principali, il crossover e la mutazione, si eseguirà una scelta iniziale
43
3 – Algoritmi genetici
tale per cui la probabilità di esecuzione del crossover sia sufficientemente elevata per
garantire l’incrocio degli individui e quindi massimizzare il processo di evoluzione
(cercando quindi di minimizzare l’effetto di stagnazione e omogeneizzazione della
popolazione), mentre la probabilità di esecuzione dell’operatore di mutazione sarà
al contrario sufficientemente piccola da evitare che l’algoritmo venga guidato da un
processo casuale. Essendo un problema di ottimizzazione complessa, Ken DeJong ha
dedicato una larga parte del suo lavoro di dottarato nel ricercare manualmente l’insieme ottimale di parametri per un algoritmo genetico classico, che fossero applicabili
ad un insieme di funzioni numeriche da ottimizzare. Un secondo metodo consiste
nell’adozione di tecniche automatiche di selezione dinamica dei parametri ottimali di
ingresso. Tra le tecniche disponibili vi è l’impiego di un algoritmo genetico esterno a
quello per cui si devono ottimizzare i parametri. I parametri dell’algoritmo genetico
esterno sono selezionati manualmente sulla base di valori ragionevoli, tenendo conto
del fatto che quest’ultimo è molto meno sensibile alle variazioni dei parametri di ingresso rispetto all’algoritmo interno. Questo approccio è stato utilizzato ad esempio
da John Grefenstette per selezionare i valori ottimi di un algoritmo genetico classico
per lo stesso insieme di funzioni numeriche utilizzate da DeJong. Più recentemente
si è diffuso l’uso di tecniche di adattamento dinamiche alternative definite adapting
techniques. Queste sono basate sull’attribuzione di un costo a ciascuno degli operatori genetici utilizzati nell’algoritmo. Durante l’esecuzione viene calcolato il costo da
attribuire a ciascun operatore in base all’efficacia dell’applicazione di quest’ultimo.
L’efficacia viene determinata dal valore della funzione di fitness associata a ciascun
cromosoma. Maggiore è l’efficacia di una soluzione e minore sarà il costo associato
agli operatori da cui quella soluzione deriva, diversamente il costo degli operatori
associati ad una soluzione verrà incrementato. Il costo di un operatore è quindi
dinamicamente collegato con il valore dei parametri di ingresso e viene modificato
dinamicamente nel corso dell’esecuzione dell’algoritmo.
44
Capitolo 4
Modelli di guasto e algoritmi di
collaudo
Un modello di guasto permette di descrivere il comportamento di un circuito in cui
sia presente un difetto e tale descrizione può essere eseguita a diversi livelli di astrazione. Dato un circuito in cui sia presente un difetto fisico, è possibile descriverne il
comportamento utilizzando una descrizione comportamentale di alto livello basata in
generale sull’uso del linguaggio VHDL o Verilog. Con un livello di astrazione minore
si descrive il circuito difettoso mediante diagrammi di stato (catene di Markov), che
permettono di rappresentare la FSM propria del circuito (descrizione funzionale).
In entrambe i casi il circuito è visto come una black box di cui si è in grado di
descrivere il funzionamento ma per la quale non sono disponibili informazioni strutturali. Riducendo il livello di astrazione il circuito viene rappresentato, a livello
strutturale, attraverso la rete di porte logiche e flip-flop che ne implementano il funzionamento. In questo caso un insieme di pattern binari di ingresso permettono di
evidenziare il diverso comportamento del circuito rispetto a quello privo di difetti
(descrizione logica). Ulteriori riduzioni del livello di astrazione consentono di rappresentare il circuito difettoso a livello elettrico e a livello geometrico. Nel primo caso
il circuito è rappresentato da una rete elettrica di dispositivi elementari (transistor,
resistori, condensatori) e il difetto è modellato come componente elettrico inserito
nella rete (modello elettrico), mentre nel secondo caso sia il circuito sia il difetto vengono descritti a livello fisico tenendo conto delle proprietà geometriche e fisiche dei
componenti (modello geometrico). Tenendo conto di caratteristiche quali la densità
45
4 – Modelli di guasto e algoritmi di collaudo
Figura 4.1.
Livelli di astrazione per la descrizione dei guasti
di componenti e la regolarità strutturale, i difetti presenti nei circuiti di memoria
sono solitamente analizzati a livello elettrico e in alcuni casi a livello geometrico.
Tuttavia l’analisi condotta a questo livello non è utilizzabile in alcuni contesti industriali. Inoltre non permette la realizzazione di strutture di MBIST integrate per
l’esecuzione del test, per le quali si utilizzano descrizioni di tipo funzionale. Poichè le
memorie a semiconduttore sono i dispositivi con la più alta densità di transistor presenti su un circuito digitale e sono formate da molte componenti con funzionamento
analogico e caratterizzate da un struttura estremamente regolare, per assicurare una
elevata copertura dei guasti e ottenere test efficienti sono necessari modelli di guasto
accurati.
4.1
Modelli di guasto
In letteratura sono stati proposti modelli di guasto specifici per i dispositivi di
memoria, tenendo conto delle particolari caratteristiche di questo tipo di sistemi.
Sono stati inoltre proposti strumenti utili alla modellazione dei difetti, come per
esempio l’introduzione del concetto di guasto accoppiato (linked fault) che permette
di rappresentare difetti difficili da testare. Data la crescente introduzione di nuovi
46
4.1 – Modelli di guasto
modelli derivanti da esperimenti di fault injection o da simulazioni, si è resa necessaria la definizione di una descrizione formale dei modelli di guasto e di una loro
classificazione. In generale i guasti in una memoria possono interessare tre blocchi
funzionali di alto livello:
• guasti localizzati nella matrice di memoria;
• guasti localizzati nella logica di indirizzamento;
• guasti localizzati nella logica R/W;
In generale la classificazione fa riferimento ai guasti localizzabili nella matrice di
memorizzazione, in quanto i guasti localizzati nelle altre aree sono riconducibili
come effetto ai primi. Tale scelta è inoltre stata dettata dalla maggiore frequenza
con cui i guasti si presentano nella matrice di memorizzazione piuttosto che in altre
zone del dispositivo di memoria.
Si consideri il modello di un disposistivo di memoria descritto ad alto livello, eseguendo un determinato numero di operazioni e osservando il comportamento delle diverse
unità funzionali, si definisce guasto la differenza tra il comportamento osservato nel
dispositivo in esame e il comportamento previsto per il sistema in assenza di difetti.
In questo senso una sequenza di operazioni, che applicate al dispositivo in esame
produce una differenza di comportamento rispetto al circuito privo di difetti, è detta sensitizing operation sequence (sequenza di eccitazione) S, mentre la differenza
di comportamento del circuito difettoso rispetto a quello atteso è definita fault behaviour (comportamento del guasto) F . Un modello formale di guasto è quindi
esprimibile attraverso la sequenza di eccitazione S e il comportamento del guasto
F , a cui si aggiunge il valore R letto dal dispositivo, qualora la sequenza S contenga
un’operazione di lettura sulla cella guasta. In letteratura [10] la definizione cosı̀ data
di modello di guasto formale è chiamata fault primitive (primitive di guasto) FP ed
è rappresentata dalla notazione:
hS/F/Ri
L’insieme non vuoto di più primitive di guasto, utilizzate per descrivere la stessa
classe di guasto, è chiamato functional fault model (modello di guasto funzionale)
47
4 – Modelli di guasto e algoritmi di collaudo
FFM. Per esempio la classe di guasto dei transition fault TF è rappresentata dall’insieme delle due primitive di guasto:

 TF : {h1W 0/1/−i}
0
TF
 TF1 : {h0W 1/0/−i}
4.2
Classificazione delle primitive di guasto
I modelli di guasto formali indicati come fault primitive possono essere classificati
in base a tre diversi elementi:
• numero di porte del dispositivo di memoria in esame (#P ), il quale determina
il numero di operazioni simultanee richieste per ciascuna porta dalla sequenza
di eccitazione S. In base a questo parametro vengono distinte le fault primitive
che operano su dispositivi a porta singola rispetto ai dispositivi multiporta;
• numero di operazioni richieste dalla sequenza S affinchè il guasto venga eccitato (#O) e si abbia un comportamento diverso rispetto a quello atteso. In
base a questo parametro si definiscono modelli statici quelli caratterizzati da
una sequenza S a lunghezza unitaria, mentre si definiscono modelli dinamici
quelli caratterizzati da una lunghezza della sequenza S strettamente superiore
a uno;
• meccanismo attraverso il quale si manifestano i guasti. In questo caso si distingue tra guasti semplici e guasti linked, dove i primi si manifestano in modo
indipendente dalla presenza di altri, i secondi sono invece caratterizzati dal
fatto che si manifestano in modo dipendente da altri guasti e per tale motivo
sussiste un accoppiamento tra questi.
In figura 4.2 è riportato l’albero di classificazione dei modelli di guasto, definiti
attraverso le primitive di guasto. Se si analizza in maggior dettaglio l’insieme dei
parametri di classificazione, si parla di guasti a porta singola se l’eccitazione avviene
con una sequenza applicata al più ad una singola porta per cui vale #P ≤ 1, mentre
si ha un guasto multiporta per #P > 1 . In genere i guasti caratterizzati da #P > 1
sono più complessi da testare e richiedono pattern di collaudo specifici. Il secondo
parametro esprime il numero di operazioni che devono essere contenute nella sequenza S affinchè si verifichi l’eccitazione del guasto. Se si ha una sequenza di eccitazione
48
4.2 – Classificazione delle primitive di guasto
Figura 4.2.
Classificazione dei modelli di guasto
per cui vale #O ≤ 1 allora si classifica il guasto come statico, altrimenti per #O > 1
il guasto è definito dinamico. Con l’avanzamento delle tecnologie di integrazione e
con l’aumento a bordo dei circuiti digitali sia del numero di dispositivi di memoria
sia della loro densità, i guasti dinamici sono aumentati in termini di frequenza con
cui si manifestano. Nuovamente la loro individuazione richiede la costruzione di pattern di collaudo oppurtuni, essendo molto difficili da testare. L’ultimo parametro
permette di distinguere tra guasti il cui comportamento è indipendente o meno da
quello di altri. Se l’eccitazione di un guasto dipende dall’eccitazione di altri guasti,
allora lo si definisce di tipo linked (accoppiato). Anche per questa categoria sono
richiesti opportuni pattern di test e la loro individuazione è considerata, anche in
questo caso, complessa dal punto di vista del test. Poichè il comportamento di un
guasto influenza quello di altri, rispetto ai quali esiste un accoppiamento, è possibile
che alcuni guasti mascherino la presenza di altri, per questo motivo le sequenze di
collaudo devono essere strutturate in modo appropriato. Va invece osservato che
per quanto riguarda i guasti semplici (non accoppiati) questi possono essere ulteriormente suddivisi in guasti relativi ad una singola cella di memoria (single-cell
fault) o guasti che coinvolgono più celle della matrice di memoria (multi-cell fault).
Per lo svolgimento di questo lavoro si è fatto riferimento, rispetto alla classificazione
qui introdotta, all’analisi di difetti fisici che danno luogo a guasti classificabili come
single-port.
49
4 – Modelli di guasto e algoritmi di collaudo
4.2.1
Guasti di natura statica
Considerando i modelli formali riferiti ad una singola cella, la notazione hS/F/Riv
permette di specificare la primitiva di guasto relativa alla cella vittima difettosa. In
particolare la sequenza S di eccitazione e il comportamento F del guasto saranno
riferiti alla stessa cella della matrice di memoria. La sequenza di eccitazione per
Tabella 4.1.
#
1
FFM
SF
2
TF
3
WDF
4
RDF
5
DRDF
6
IRF
FP
SF0
SF1
TF0
TF1
WDF0
WDF1
RDF0
RDF1
DRDF0
DRDF1
IRF0
IRF1
description
h1/0/−i
h0/1/−i
h1W 0/1/−i
h0W 1/0/−i
h0W 0/1/−i
h1W 1/0/−i
h0R0/1/1i
h1R1/0/0i
h0R0/1/0i
h1R1/0/1i
h0R0/0/1i
h1R1/1/0i
Modelli di guasto funzionale a singola cella semplici
i guasti statici, viene specificata attraverso la sequenza iOd, dove i rappresenta
il valore iniziale presente nella cella, O l’operazione che deve essere applicata alla
cella e d il dato che viene utilizzato nell’operazione. In particolare l’inizializzazione
della cella può essere ottentuta a livello pratico attraverso un ciclo preventivo di
scrittura in cui il dato scritto coincida con il pattern specificato da i, mentre per
quanto riguarda il valore d questo deve essere interpretato differentemente a seconda
dell’operazione applicata:
• O = write : il pattern specifica il valore che verrà scritto all’interno della cella;
• O = read : il pattern specifica il valore atteso dall’operazione di lettura, e non
il valore letto dalla cella che viene specificato dall’elemento R che definisce la
primitiva di guasto.
Questo significa che il valore R appartiene all’insieme {0, 1} solo in presenza di una
operazione di lettura all’interno della sequenza di eccitazione S, mentre negli altri
50
4.2 – Classificazione delle primitive di guasto
casi vale −. Essendo le sequenze di eccitazione della forma iOd è facile verificare
che sono possibili 12 modelli di guasto formali identificati dalle 12 primitive rappresentate nella tabella 4.1, le quali formano 6 modelli funzionali (FFM). A questi
possono essere aggiunti due ulteriori modelli funzionali definiti stuck-at fault (SAF)
e stuck-open fault (SOF), caratterizzati rispettivamente dalle primitive:
SAF : {h1/0/−i, h0W 1/0/−i, h0/1/−i, h1W 0/1/−i}
SOF : {h0W 1/0/−i, h1W 0/1/−i, h0R0/0/1i, h1R1/1/0i}
I singoli modelli funzionali di guasto esposti in precedenza, ai quali si aggiunge la
definizione del guasto DRF, possono essere descritti come segue:
• state fault (SF): una cella cv è soggetta ad un guasto SF se il suo stato cambia
in assenza di operazioni di eccitazione, in tal senso il guasto viene a dipendere
dal valore con cui è inizializzata la memoria e quindi la cella;
• transition fault (TF): una cella cv si dice soggetta ad un guasto TF se fallisce la
transizione di stato (1 → 0 oppure 0 → 1) durante un’operazione di scrittura;
• read destructive fault (RDF): una cella cv si dice soggetta ad un guasto RDF se
l’esecuzione di un’operazione di lettura sulla cella ne comporta il cambiamento
di stato e la restituzione di un valore non corretto in uscita;
• deceptive read destructive fault (DRDF): una cella cv è soggetta ad un guasto di
tipo DRDF se un’operazione di lettura cambia lo stato della cella ma restituisce
un valore corretto in uscita;
• incorrect read fault (IRF): la cella cv è soggetta ad un guasto di tipo IRF
se l’esecuzione di un’operazione di lettura riporta in uscita un valore errato,
anche se la cella mantiene l’informazione di stato corretta;
• data retention fault (DRF): la cella cv è soggetta ad un guasto DRF se perde
l’informazione di stato in essa immagazzinata dopo un determinato intervallo
di tempo dall’ultima scrittura del valore in essa contenuto;
• write destructive fault (WDF): si dice che la cella cv è soggetta ad un guasto
WDF se la scrittura del valore corrispondente allo stato corrente ne cambia il
contenuto;
51
4 – Modelli di guasto e algoritmi di collaudo
• stuck-at fault (SAF): si dice che la cella cv è soggetta ad un guasto SAF se lo
stato della cella non può essere cambiato da nessuna operazione eseguita sulla
cella stessa, e non è influenzabile da altre celle della matrice di memoria;
• stuck-open fault (SOF): la cella cv si dice soggetta ad un guasto di tipo SOF
se è impossibile accedere alla cella stessa.
4.2.2
Guasti di natura dinamica
I modelli formali per guasti di natura dinamica sono caratterizzati da una sequenza di operazioni, appartenenti alla sequenza S di eccitazione, esprimibile come
iO1 d1 ...On dn , con n ≥ 2. Se si considerano sempre guasti relativi alla singola cella,
allora si possono descrivere i seguenti modelli di guasto funzionali:
• dynamic transition fault (dTF): una cella cv è soggetta ad un guasto di tipo
dTF se un’operazione di scrittura che segue immediatamente un’operazione di
lettura o di scrittura fallisce;
• dynamic read destructive fault (dRDF): una cella cv si dice soggetta ad un
guasto dRDF se un’operazione di lettura sulla cella, che segue una precedente
operazione di scrittura, ne cambia lo stato e restituisce in uscita un valore
errato;
• dynamic deceptive read destructive fault (dDRDF): una cella cv si dice soggetta
ad un guasto dDRDF se un’operazione di lettura sulla cella, che segue una
precedente operazione di scrittura, cambia lo stato della cella ma restituisce
un valore corretto in uscita;
• dynamic incorrect read fault (dIRF): si dice che una cella cv è soggetta ad un
guasto di tipo dIRF se un’operazione di lettura, immediatamente successiva ad
un’operazione di scrittura sulla cella, causa la restituzione di un valore errato
in uscita anche se la cella rimane nello stato corretto;
• dynamic write destructive fault (dWDF): si dice che la cella cv è soggetta ad
un guasto dWDF se l’esecuzione di un’operazione di scrittura non transitiva
(0 → 0 oppure 1 → 1), immediatamente successiva ad un’operazione di lettura
o scrittura, causa il cambiamento di stato della cella.
52
4.3 – Pattern di collaudo
4.3
Pattern di collaudo
Una pattern di collaudo è rappresentato da una sequenza di operazioni applicate
al dispositivo di memoria, con lo scopo di individuare comportamenti anomali nelle
sue varie componenti. Dato un dispositivo composto da N celle, la soluzione risiede
apparentemente nell’esecuzione di tutte le possibili combinazioni di operazioni applicate alle N celle della memoria (test esaustivo). Tuttavia quando il numero delle
celle è molto elevato, come accade nei dispositivi di memoria reali, tale approccio
risulta non praticabile. Per esempio, l’esecuzione di un test esaustivo su di una
memoria cache da 32 KB alla frequenza di 100 MHz, richiederebbe 1078,903 anni per
essere completato. Un semplice pattern di collaudo composto dalla sequenza di
operazioni:
{ m W 0, m R0, m W 1, m R1 }
risulta inefficace rispetto all’elevato numero di guasti che possono verificarsi. Il suo
utilizzo darebbe origine a test di bassa qualità caratterizzati da bassa percentuale di
copertura dei guasti. Risulta quindi evidente la necessità di test che assicurino elevate percentuali di copertura per il maggior numero possibile di guasti, mantenendo
allo stesso tempo accettabile la loro complessità. La complesità del test, misurata
come numero di operazioni richieste dallo stesso, è un parametro importante nella
valutazione del pattern di collaudo. Un test che assicuri un’elevata percentuale di
copertura dei guasti ma che sia molto complesso, richiederebbe comunque una quantità di tempo elevata per essere portato a termine, rendendolo di fatto inutilizzabile.
In letteratura [3] sono state definite tre principali classi di pattern di collaudo:
walking, marching e galloping. Un walking pattern prevede che la memoria sia inizializzata con lo stesso valore in tutte le celle e che sempre solo una cella (o il gruppo
di celle che forma la parola nelle memorie word oriented) sia in uno stato differente
dalle altre. Questo richiede che prima di analizzare la cella successiva della matrice
di memoria lo stato iniziale della cella corrente deve essere ripristinato. Un marching
pattern (march test) ammette invece la possibilità che nel passaggio da una cella
a quella successiva, la cella precedente rimanga in uno stato differente da quello di
inizializzazione. Quindi durante il test la memoria perde il valore di inizializzazione
a favore dei nuovi stati introdotti nelle celle dal test stesso. Un galloping pattern, diversamente dalle due precedenti classi di test, usa una descrizione più orientata agli
indirizzi, in particolare per ogni cella base considerata, il test accede a tutte le altre
53
4 – Modelli di guasto e algoritmi di collaudo
celle della memoria. Questo rende i test basati sui galloping pattern molto efficaci
ma estremamente onerosi dal punto di vista del tempo di esecuzione e pertanto non
utilizzabili, soprattutto in ambienti industriali. La scelta a livello industriale ricade
invece sui march test perchè più flessibili ed efficaci rispeto ai test basati su walking
pattern. Pertanto per lo svolgimento di questo lavoro si è orientato lo strumento
automatico di generazione verso sequenze di collaudo basate sui marching pattern.
4.4
March test
Un march test è una sequenza di operazioni elementari eseguite sul dispositivo di
memoria (modellato come una black box), rispetto al quale rimangono accessibili
solo i segnali d’interfaccia con il mondo esterno. Pertanto l’informazione disponibile
per la definizione del test riguardo al dispositivo di memoria è limitata al modo
con cui le singole operazioni sono applicate attraverso il bus d’interfaccia e alla sua
struttura. Un march test è formalmente definito come una sequenza finita di elementi
chiamati march element. Un march element M è costituito da una sequenza finita
di operazioni applicate a ciascuna cella o parola della matrice di memorizzazione,
prima di generare l’indirizzo successivo e riapplicare la stessa sequenza. L’indirizzo di
memoria viene generato in accordo ad uno specifico address order e gli address order
ammessi in un march element sono: m (irrilevante), ⇑ (ascendente) e ⇓ (discendente).
Le operazioni ammesse in un march test sono quattro:
• Wp : scrive il pattern p nella parola di memoria;
• Wp̄ : scrive il pattern inverso p̄ nella parola di memoria;
• Rp : legge il contenuto della parola di memoria e verifica che corrisponda al
pattern p;
• Rp̄ : legge il contenuto della parola di memoria e verifica che corrisponda al
pattern p̄;
Nel caso di memorie con parole di memoria a singolo bit i pattern p e p̄ corrispondono
rispettivamente ai valori logici 0 e 1. Un march element M è delimitato da una
coppia di parentesi tonde ’( ... )’, mentre un march test completo è delimitato da
una coppia di parentesi graffe ’{ ... }’. I singoli march element M0 ... Mn all’interno
54
4.4 – March test
di un march test sono separati dal simbolo ’;’ mentre le singole operazioni all’interno
di un march element sono separate dal simbolo ’,’. Questa notazione permette di
esprimere formalmente il concetto di march test:
Mk
M0
z
}|
{
z
}|
Mn
{
z
}|
{
{ ⇑ (O0 , · · · ,Or ); · · · ; ⇓ (O0 , · · · ,Os ); · · · ; m (O0 , · · · ,Ot ) }
I modelli di guasto funzionali descritti rappresentano difetti fisici che si manifestano
nel circuito di memoria durante il processo di fabbricazione e che con maggiore frequenza coinvolgono la matrice di memoria. Molti di questi difetti (modellati spesso
a livello geometrico come difetti di tipo spot) sono dovuti a difetti del processo di
fabbricazione che si manifestano fisicamente come connessioni sul chip interrotte,
cortocircuiti tra le connessioni, mancanza di contatti, contatti extra, diodi o transistor parassiti. Molti dei difetti fisici che si presentano all’interno della matrice di
memoria possono essere modellati, a livello elettrico, come guasti di natura resistiva
ed è questa classe di difetti che è stata presa in considerazione nello svolgimento di
questo lavoro.
Bisogna infine osservare che le primitive di guasto presentate nel capitolo, possono
essere facilmente tradotte in sequenze di collaudo secondo la sintassi dei march test
esposta in precedenza. In particolare la sequenza di sensibilizzazione S può essere
tradotta in un insieme di operazioni, eventualmente codificate come march element
separati, contenente una fase di inizializzazione eseguita con un’operazione di scrittura seguita dalle operazioni proprie della fase di eccitazione del guasto. Il comportamento del guasto F può essere invece osservato con una operazione di lettura
posta alla fine della sequenza di eccitazione.
55
Capitolo 5
Generazione automatica di march
test
Tra gli algoritmi di collaudo per dispositivi di memoria, i march test sono quelli maggiormente utilizzati in campo industriale per via della loro complessità, che risulta
essere lineare nel numero di operazioni eseguite. Gli algoritmi genetici descritti nel
capitolo 3 sono stati impiegati con successo sia nella risoluzione di problemi di ottimizzazione combinatoria, sia nel design di circuiti digitali a larghissima scala di
integrazione. Questo capitolo analizza l’architettura dello strumento per la generazione automatica di march test, basato su un algoritmo genetico, a partire dalle
informazioni sulla struttura a livello elettrico della memoria SRAM.
5.1
Architettura dello strumento per la generazione
di march test
Lo strumento per la generazione automatica delle sequenze di collaudo, la cui architettura è rappresentata in figura 5.1, è stato realizzato in linguaggio C all’interno
dell’ambiente di sviluppo Microsoft Visual Studio 2003. Inizialmente l’algoritmo acquisisce le informazioni relative ai file contenenti la descrizione del circuito di memoria (netlist) non difettoso e di quello difettoso. Poichè la netlist del circuito può essere
suddivisa, per maggiore flessibilità, in più file ciascuno contenente la descrizione di
un modulo della memoria (e.g un file contiene la descrizione della cella, un secondo la
descrizione del circuito di precarica, ecc), in questa prima fase si procede a generare
56
5.1 – Architettura dello strumento per la generazione di march test
Figura 5.1. Architettura generale dello strumento per la generazione
automatica di march test
il file contenente il modello completo della memoria. Contestualmente a questa fase,
vengono acquisiti i vari parametri utilizzati dall’algoritmo genetico durante la fase
di ricerca. In base alla dimensione della popolazione, mantenuta costante durante
tutta l’esecuzione, viene generato un file specifico per ciascun individuo della popolazione, per ciascuno dei due modelli di memoria. Ogni file conterrà la descrizione
temporale dei diversi segnali applicati all’interfaccia.
Successivamente si entra nel ciclo di evoluzione delle sequenze di collaudo, in cui
viene fatta evolvere la popolazione iniziale attraverso il meccanismo di selezione e
l’applicazione degli operatori genetici. Ogni iterazione del ciclo corrisponde al passaggio da una generazione a quella successiva. Durante l’intero ciclo la popolazione
acquisisce i caratteri genetici che forniscono una migliore soluzione del problema.
Il ciclo di evoluzione viene interrotto quando viene verificata la condizione di copertura del guasto da parte della soluzione corrente, oppure quando si raggiunge il
limite massimo di iterazioni previsto. In questo caso viene generato il file di uscita
(report file) con la soluzione individuata e il file contenente la sequenza temporale
57
5 – Generazione automatica di march test
dei segnali d’interfaccia, associata alla soluzione. Al suo interno il ciclo prevede la
validazione della popolazione corrente e la sua scrittura su file, sotto forma di sequenza temporale relativa ai segnali d’interfaccia. Un simulatore esterno permette
l’esecuzione delle simulazioni a livello elettrico dei cromosomi. Ogni sequenza temporale associata ad un individuo della popolazione è applicata sia al modello della
memoria difettoso, sia a quello non difettoso. Terminata questa fase il ciclo prevede
la lettura dei risultati delle simulazioni; in base alla valutazione di questi si determina l’esistenza di una nuova soluzione (ed eventualmente la terminazione del ciclo,
qualora la funzione di controllo della copertura del guasto restituisca un responso
positivo) e si procede all’applicazione degli operatori genetici (selezione, crossover,
mutazione e alterazione della lunghezza del march test), ottenendo la popolazione
associata alla generazione successiva.
5.2
Codifica della soluzione
La prima fase della definizione dell’algoritmo genetico consiste nello stabilire un’opportuna codifica per una generica soluzione del problema. Poichè nel nostro caso
una generica soluzione è data da una sequenza di operazioni strutturate secondo un
march test, è stato necessario codificare a livello di cromosoma, la struttura di un
generico march test, come è possibile osservare in figura 5.2. Le singole operazioni
che costituiscono ciascun march element devono poter rappresentare il pattern di
segnali digitali applicati all’interfaccia di memoria. Inoltre la codifica utilizzata deve
poter indicare l’inizio e la fine di ciascun march element e l’address order utilizzato.
Nella definizione della codifica, si può scegliere di lavorare con un alfabeto binario
oppure con un alfabeto non binario. Ciascuna di queste due scelte pone dei vincoli sulla successiva definizione degli operatoti genetici sia classici, sia specifici del
problema trattato. Entrambe le codifiche sono state utilizzate nella realizzazione
di strumenti di sintesi automatica di sequenze di collaudo per circuiti combinatori
e sequenziali [6]. L’utilizzo della codifica binaria permette di esplicitare direttamente il valore dei segnali digitali applicati all’interfaccia di memoria (l’insieme dei
segnali specifica l’operazione da eseguire), l’inizio e la fine di ciascun march element e l’address order. La scelta di utilizzare questo tipo di codifica porta alla
definizione di operatori genetici classici, quali il crossover e la mutazione di tipo
58
5.2 – Codifica della soluzione
Figura 5.2.
Codifica a livello genetico della singola operazione
binario, in grado di operare sul singolo segnale binario (gene). Poichè non sempre tutte le configurazioni dei segnali sono ammissibili a livello di interfaccia, si ha
l’esigenza di definire un operatore di validazione degli individui della popolazione.
L’azione di tale operatore risulta più complessa con una codifica binaria dei geni.
Inoltre ciascun gene sarà rappresentato internamente alla macchina con variabili
intere (tipicamente su 32 bit o su 64 bit) con un conseguente spreco di memoria,
soprattutto se si considerano modelli di memoria realistici in cui l’interfaccia può
essere costituita da diverse decine di bit. Nello sviluppo dello strumento per la
generazione automatica di march test la scelta è ricaduta sul metodo di codifica
non binario. Ciascun gene è rappresentato da una variabile intera, definita su 32
bit o 64 bit a seconda dell’architettura in uso. Il valore di ciascun gene in questo
caso specifica l’insieme dei segnali d’interfaccia (operazione eseguita sulla memoria),
piuttosto che il singolo segnale. L’eventuale adozione di modelli di memoria dotati
di interfacce molto grandi richiede di estendere la rappresentazione di ciascun gene
ad un gruppo di variabili intere e una parziale ridefinizione degli operatori in uso,
continuando a mantenere alcuni vantaggi. Infatti con una codifica di tipo intero
ciascun cromosoma ha un’occupazione in memoria più limitata, quindi risulta più
59
5 – Generazione automatica di march test
veloce da manipolare attraverso gli operatori genetici, sia classici sia specifici per
il problema. Poichè l’algoritmo utilizza un simulatore a livello elettrico esterno,
la traduzione del valore intero dei geni nella corrispondente forma binaria estesa è
eseguito soltanto durante la fase di generazione delle sequenze temporali relative ai
segnali d’interfaccia.
Inoltre ciascun gene contiene l’informazione relativa sia all’inizio e alla fine di un
march element, sia al tipo di address order scelto. Questa informazione è memorizzata nei primi 3 bit meno significativi di ciascun gene.
5.3
Indirizzamento delle celle di memoria
Nella definizione dello schema di codifica della soluzione si è dovuto individuare
l’insieme dei segnali d’interfaccia gestiti direttamente dall’algoritmo genetico. Da
questo punto di vista l’insieme dei segnali d’interfaccia verso la memoria (gestiti
dall’algoritmo), può essere suddiviso in tre gruppi: segnali che codificano l’indirizzo
di una generica cella all’interno della matrice di memoria, segnali che codificano la
parola di dato che deve essere scritta su una generica cella durante le operazioni di
scrittura e segnali di controllo che codificano le diverse operazioni applicabili sulle
celle della matrice di memoria. Ciascuno di questi gruppi rappresenta un possibile
grado di libertà a disposizione dell’algoritmo per generare una sequenza di collaudo
in grado di coprire il guasto. La disponibilità di informazioni di basso livello sulla struttura della memoria aggiunge un ulteriore grado di libertà, legato al modo
con cui si sceglie di effettuare la scansione della matrice di memoria durante il test.
Infatti, a livello di sequenza di collaudo è possibile scegliere di spostarsi lungo le
righe, piuttosto che lungo le colonne. Quindi l’address mode specifica la direzione di
scansione della matrice di memoria, mentre l’address order ne stabilisce il verso.
Ciascuno di questi gradi di libertà comporta un significativo aumento della dimensione dello spazio di ricerca su cui l’algoritmo genetico si muove. Dato che l’insieme di questi gradi di libertà comporta la ricerca della soluzione all’interno di un
iperspazio molto grande, si è deciso di lasciare all’algoritmo la capacità di generare
le sequenze di operazioni (gruppo dei segnali di controllo) e le parole di dato associate alle operazioni di scrittura (segnali che compongono l’interfaccia dati). Inoltre
si è lasciata la capacità di generare i singoli march element, indicando all’interno
60
5.3 – Indirizzamento delle celle di memoria
del cromosoma l’inzio e la fine degli stessi (marker di inizio e di fine), oltre alla capacità di selezionare l’address order per ogni singolo march element. L’indicazione
dell’address mode viene fornita come parametro dall’utente. Una funzione interna
all’algoritmo genetico provvede a generare le diverse sequenze di operazioni che codificano un march element, generando per ciascuno l’intera sequenza di accessi alla
memoria in base all’address mode e all’address order indicati.
5.3.1
Address mode e address order
Come introdotto nel paragrafo precedente, la modalità di scansione (address mode)
stabilisce l’ordine di accesso alle celle; l’address order invece, tipico dei march test,
individua due sequenze tra loro opposte, senza che per queste sia specificato un
preciso ordine di scansione. Per lo svolgimento di questo lavoro sono stati individuati
tre principali modi di indirizzamento, scelti in quanto hanno dimostrato di fornire
buoni risultati (ad esempio [14, 15, 17]), permettendo di migliorare in alcuni casi
versioni precedenti di march test. I tre modi individuati sono:
• column mode: definisce una scansione per colonne, ovvero dato l’indice x di
riga e y di colonna per ogni cella della matrice di memoria prevede la scansione
mediante i due cicli annidati:
for(x:=0 TO N-1)
for(y:=0 TO M-1)
dove N è il numero di righe che compongono la matrice di memoria ed M
quello delle colonne;
• row mode: definisce una scansione per righe mediante i due cicli annidati:
for(y:=0 TO M-1)
for(x:=0 TO N-1)
• neighbourhood mode: la scansione avviene rispetto al vicinato della cella base
corrente.
Al momento della stesura di questo documento sono stati implementati i primi due
modi di indirizzamento. Per quanto riguarda l’address order, sono stati implementati
i due versi ⇑ e ⇓ di scansione, ignorando l’indicazione m relativa all’address order
irrilevante.
61
5 – Generazione automatica di march test
5.4
Algoritmo di generazione dei march test
Lo sviluppo dell’algoritmo genetico ha richiesto l’implementazione degli operatori
genetici classici di selezione, crossover e mutazione, oltre ad una serie di funzioni
specifiche per il dominio di applicazione dell’algoritmo. Per ciò che riguarda l’insieme
degli operatori genetici classici, si è scelto di implementare il meccanismo di selezione
basato sulla tecnica della roulette wheel extraction. La riproduzione degli individui
Figura 5.3.
Algoritmo genetico per la generazione di march test
è stata affidata ad una funzione che implementa la tecnica two-point crossover,
mentre la mutazione applica l’alterazione casuale dei geni per tutti i nuovi individui
nella popolazione. L’operatore di inversione tuttavia non è stato utilizzato nello
sviluppo dello strumento di generazione automatico, in quanto la lunghezza dei
cromosomi che codificano una sequenza di collaudo è molto piccola e questo rende
inefficiente l’adozione dell’operatore. Anche in letteratura l’uso dell’operatore di
inversione in problemi relativi al design di circuiti VLSI è poco diffuso. Per esempio
nello sviluppo di strumenti di generazione di vettori di test per circuiti combinatori
62
5.5 – Funzione di fitness
e sequenziali l’operatore di inversione non è utilizzato. L’algoritmo prevede che
per ogni generazione siano selezionati per la riproduzione un numero di cromosomi
pari al parametro generation gap, costante durante l’esecuzione dell’algoritmo. Gli
individui vengono selezionati a coppie, che corrispondono alle coppie di cromosomi
genitori e per ogni coppia si applica l’operazione di crossover con probabilità Pc .
La funzione di crossover è realizzata in modo che i punti di taglio generati non
coincidano mai ai due geni esterni contemporaneamente, in modo da evitare di
applicare l’operatore genetico e ottenere figli identici ai genitori. Questa scelta aiuta
nuovamente l’algoritmo nell’esplorazione ottimale dello spazio di ricerca. La frazione
di popolazione nuova introdotta dall’azione del crossover (eventualmente costituita
da individui identici ai genitori qualora con probabilità 1 − Pc non si esegua il
crossover) viene sottoposta all’azione della funzione di mutazione, la quale con probabilità Pm cambia il valore di ciascun gene del cromosoma. Un gruppo di funzioni
specificatamente sviluppate per il contesto applicativo, consentono la validazione
della popolazione, la sua traduzione in sequenze temporali per il simulatore esterno,
l’incremento della lunghezza delle sequenze di collaudo e la verifica della copertura
del guasto.
5.5
5.5.1
Funzione di fitness
La funzione di valutazione
La funzione di fitness ha un ruolo fondamentale in tutti gli algoritmi genetici, in
quanto fornisce l’informazione relativa la qualità degli individui e quindi il loro grado di adattamento all’ambiente. Da un punto di vista più formale la funzione di
fitness associa a ciascuna sequenza di geni un valore che esprime la valutazione dell’individuo visto come soluzione del problema considerato. In particolare la funzione
di fitness assegna valutazioni migliori, cioè valori più alti, alle sequenze che codificano soluzioni migliori. Spesso nei problemi di ottimizzazione combinatoria queste
ultime coincidono con le soluzioni che massimizzano la funzione obiettivo del problema. Questo discorso è valido anche per gli strumenti CAD utilizzati nella progettazione di circuiti digitali complessi, dove spesso l’algoritmo genetico è chiamato
a risolvere problemi di ottimizzazione. Il problema della generazione di sequenze
di collaudo per dispositivi di memoria richiede di trovare una sequenza capace di
63
5 – Generazione automatica di march test
coprire il guasto; pertanto la funzione di fitness associata al problema non è legata
ad una ricerca in termini di ottimizzazione (è sufficiente trovare una sequenza di
collaudo, anche se questa non è a lunghezza minima). La funzione di fitness che
Figura 5.4.
Tabella di simulazione
è stata definita, ha l’obiettivo di assegnare una valutazione maggiore alle sequenze di collaudo che danno origine ad una più alta divergenza dei segnali monitorati
dall’algoritmo genetico. La funzione di valutazione è definita come:
f (x) =
TX
max Nprobe
X−1
(
wi Di,t )
t=0
i=0
Il termine espresso dalla seconda sommatoria permette di identificare il valore di
divergenza per ciascuno dei campioni temporali t secondo la relazione:
Nprobe −1
ft (x) =
X
wi Di,t
i=0
dove wi è un peso associato a ciascuna coppia differenziale di segnali Di tra modello di memoria non difettoso e modello di memoria difettoso. L’indice i scandisce
l’insieme dei nodi {0, ..., Nprobe − 1} della rete elettrica che descrive il modello di
memoria (nodi di uscita - probe nodes), coincidenti con l’insieme dei nodi di ingresso
dei circuiti di selezione delle colonne della matrice di memoria. Quindi la funzione
64
5.5 – Funzione di fitness
ft (x) determina il valore differenziale complessivo a livello elettrico tra i due modelli
di memoria, relativo al campione di tempo t-esimo della simulazione. L’algoritmo
determina lo stato differenziale associato alla sequenza x di collaudo, eseguendo una
somma dei valori ft (x) su tutti i campioni di tempo {0, ..., Tmax }:
f (x) =
TX
max
ft (x)
t=0
dove Tmax rappresenta il tempo complessivo della simulazione. Il termine differenziale Di nell’espressione di ft (x) viene calcolato come differenza in valore assoluto
tra il nodo i-esimo del modello non difettoso e il nodo i-esimo del modello difettoso:
Di = | Ngi − Nfi |
Il valore della funzione f (x) viene calcolato accedendo ad una tabella, contenuta in
un file prodotto dal simulatore analogico: per ogni campione temporale (riga della
tabella) viene indicato il valore assunto da ciascuno dei nodi di uscita monitorati
dall’algoritmo genetico. Il valore del quanto di tempo è indicato nel file che contiene la descrizione delle forme d’onda dei segnali di interfaccia, ed è imposto come
parametro di ingresso nel file di configurazione.
5.5.2
Calcolo della fitness
La funzione f (x), precedentemente descritta, soffre di un problema comune a molte
funzioni di valutazione che si incontrano nella definizione di algoritmi genetici per la
risoluzione di problemi di ottimizzazione combinatoria o legati al design di circuiti
digitali. Il problema emerge quando si considerano i risultati forniti da tale funzione
per l’intera popolazione. In base alla definizione della funzione f (x), è possibile
che si verifichi la situazione in cui gli individui della popolazione presentano una
differenza molto piccola nel valore di fitness ad essi associato. In queste condizioni la
selezione degli individui che dovranno riprodursi avviene su base fortemente casuale,
quindi l’algoritmo viene guidato maggiormente dal caso piuttosto che dal valore
della loro fitness. In altre condizioni è possibile che un singolo individuo presenti
un valore della funzione di fitness nettamente superiore a quello della restante parte
della popolazione. La sequenza genetica in questione viene indicata come super
cromosoma in quanto sarà selezionata per la fase di riproduzione con una frequenza
65
5 – Generazione automatica di march test
molto più elevata di quella delle altre sequenze genetiche (cromosomi), perciò tenderà
a dominare sul resto della popolazione. Questo fenomeno porta velocemente la
popolazione ad assumere caratteristiche genetiche molto simili per lunghi periodi
di tempo (omogeneizzazione e stasi), limitando quindi l’azione di esplorazione dello
spazio di ricerca. Per porre rimedio a questo problema sono state proposte diverse
Original evaluation
Windowing with min = 0
Windowing with min = 10
Linear norm. with step = 20
Tabella 5.1.
200
199
199
100
9 8 6 1
8 7 5 0
10 10 10 10
80 60 40 20
Tecniche di fitness scaling
tecniche di adattamento della funzione di valutazione, chiamate tecniche di fitness
scaling. Ciascuna di queste tecniche ha lo scopo di ridistribuire i valori generati dalla
funzione di valutazione f (x) per ciascun cromosoma, in un intervallo ben definito.
Tra le tecniche di scaling proposte in letteratura, le due più comunemente usate
sono:
• windowing: prevede di individuare il cromosoma con il valore di fitness più
basso tra tutta la popolazione. Successivamente si esegue lo scaling assegnando a ciascun cromosoma la differenza tra la sua fitness e il valore minimo
individuato. In alcuni contesti è utile scegliere un valore minimo di soglia,
da attribuire a ciascun cromosoma qualora la differenza risulti troppo piccola.
Questo consente di assicurare una probabilità di riproduzione maggiore anche
agli individui con adattamento ambientale più basso. Ad esempio nella tabella
5.1 la seconda riga assegna, come parametro dell’algoritmo, una soglia minima
uguale a 10, determinando l’assegnazione di tale valore a tutti i cromosomi la
cui differenza tra la valutazione generata inizialmente da f (x) e quella minima
risulti inferiore al valore di soglia.
• linear normalization: prevede che la popolazione venga ordinata rispetto ai
valori generati dalla funzione di valutazione f (x), in ordine decrescente. La
tecnica utilizza un parametro che definice il passo di normalizzazione lineare
della fitness. A partire da una costante iniziale, indicata come parametro
dell’algoritmo, la tecnica assegna a ciascun cromosoma un valore di fitness
intero decrescente.
66
5.6 – Operatori genetici e funzioni specifiche
La tecnica di windowing nonostante mitighi gli effetti indesidereti legati alla funzione
di valutazione, può continuare a dare origine al fenomeno del super cromosoma. La
tecnica di linear normalization risulta invece maggiormente efficace in quanto ridistribuisce i valori lineramente all’interno di un intervallo noto, evitando l’insorgere
dei fenomeni sopra citati. Pertanto nello sviluppo dell’algoritmo genetico si è utilizzata questa seconda tecnica. In particolare viene impiegato un unico parametro s
che definisce il passo di normalizzazione (o decremento) lineare. Successivamente si
assegna a ciascun cromosoma un valore intero, che decresce della quantità s a partire
dal valore iniziale P op · s (dove P op rappresenta il numero di individui contenuti
nella popolazione).
5.6
5.6.1
Operatori genetici e funzioni specifiche
Validazione della popolazione
L’insieme dei cromosomi all’interno della popolazione rappresenta un insieme di
sequenze di collaudo che codificano ciascuna un march test. Come indicato nel
paragrafo 5.2 la variabile intera, rappresentata da un gene del cromosoma, esprime
il valore binario assunto dai segnali applicati agli ingressi primari della memoria,
i quali definiscono il tipo di operazione da eseguire. Inoltre ciascun gene permette di descrivere l’inizio e la fine di un march element e l’address order utilizzato da
quest’ultimo. Gli operatori genetici operano sulle sequenze genetiche dei cromosomi,
direttamente a livello di operazioni eseguite sulla memoria, quindi al termine di un
ciclo di riproduzione ciascun cromosoma può presentare una struttura inconsistente
dal punto di vista della codifica dei march test. Ogni sequenza di collaudo prevede
una fase iniziale di scrittura atta a inizializzare la matrice di memoria, quindi è
necessario garantire che la prima operazione di ciascuna sequenza sia un’operazione
di scrittura, mentre l’ultima operazione deve essere una operazione di lettura (fase
di osservazione del guasto). Va inoltre osservato che ogni cromosoma dovrà sempre
presentare il marker di inizio march element attivo nel primo gene, in quanto rappresenta l’operazione iniziale del march test, e dovrà avere il marker di fine attivo
nell’ultimo gene per poter chiudere correttamente il march test. Quindi per garantire
la correttezza della struttura dei march test codificati dalla popolazione, l’algoritmo
genetico impiega una funzione di validazione chiamata check population che ha il
67
5 – Generazione automatica di march test
Figura 5.5.
Validazione della popolazione
compito di operare una serie di trasformazioni sui geni dei cromosomi. In particolare
vengono operate trasformazioni di due tipi:
• impostazione dell’operazione di inizializzazione della memoria e osservazione
del guasto;
• trasformazioni sui marker di inizio e fine march test.
Il primo tipo di trasformazione agisce sul primo e sull’ultimo gene di ogni cromosoma,
alterando i segnali di controllo che permettono di definire un’operazione di scrittura
o di lettura. In particolare è forzata un’operazione di scrittura sul primo gene e
un’operazione di lettura sull’ultimo, agendo soltanto sui bit del pattern di controllo
(quello che codifica i segnali di controllo della memoria) e non sui bit del pattern
dati, che pertanto rimane immutato. Il secondo tipo di trasformazione agisce invece
sui tre bit iniziali di ciascun gene, con l’obiettivo di garantire la correttezza nella
rappresentazione dell’inizio e della fine di un march element (non vi è alterazione
del bit che codifica l’address order). La funzione check population di validazione si
68
5.6 – Operatori genetici e funzioni specifiche
basa sull’osservazione seguente: affinchè la rappresentazione dei march element sia
corretta, ad ogni marker di fine attivo deve seguire un marker di inizio attivo. Quindi
la funzione esegue una doppia scansione di ciascun cromosoma della popolazione,
ed imposta il marker di fine attivo per il gene precedente se trova il marker di inizio
attivo nel gene corrente, analogamente procede ad impostare il marker di inizio attivo
nel gene successivo se riscontra il marker di fine attivo nel gene corrente. Al termine
della scansione la popolazione sarà quindi traducibile nelle sequenze temporali dei
segnali applicati agli ingressi primari della memoria.
5.6.2
Interfacciamento con il simulatore
Per calcolare la fitness dei cromosomi della popolazione corrente, l’algoritmo genetico
deve chiamare il simulatore spice esterno, chiedere l’esecuzione della simulazione di
ciascuna sequenza di collaudo sia per il modello difettoso, sia per quello non difettoso
e utilizzare la tabella di simulazione prodotta dal simulatore spice per calcolare il
valore della fitness. Si rende quindi necessario, da parte dello strumento per la
generazione automatica di march test, l’interfacciamento con il simulatore esterno
e a questo proposito sono utilizzate due funzioni: la funzione back end disk che
provvede a tradurre ciascuna sequenza di collaudo nelle corrispondenti sequenze
temporali dei segnali d’interfaccia e la funzione run spice engine che provvede a
richiamare il simulatore spice (il simulatore viene invocato per la simulazione di
ciascuna sequenza di test, per ciascuno dei due modelli di memoria).
L’interfaccia del modello di memoria è composta dai segnali di ingresso e uscita
che permettono di spostare i dati da e verso l’esterno e che permettono di guidare
le operazioni di scrittura e lettura sulle celle della matrice interna. Osservando il
circuito di memoria ad alto livello si osserva che l’interfaccia di comunicazione è
composta da quattro categorie di segnali:
• segnali di indirizzo;
• segnali di controllo;
• segnali di dato;
• segnali di temporizzazione;
69
5 – Generazione automatica di march test
Sulla base di questa classificazione si può analizzare il funzionamento della funzione
back end disk, che ha il compito di tradurre le sequenze di test rappresentate dai
geni dei cromosomi in sequenze temporali per ciascun segnale appartenente alle categorie precedenti.
In figura 5.6 viene riportato lo pseudocodice relativo all’algoritmo implementato
Figura 5.6. Pseudocodice della funzione back end disk d’interfacciamento con il simulatore
nella funzione back end disk di interfacciamento. Come si può osservare l’algoritmo
calcola inizialmente la dimensione del vettore che dovrà contenere la rappresentazione binaria di ciascuno dei geni del cromosoma. Infatti soltanto in questa fase
70
5.6 – Operatori genetici e funzioni specifiche
l’algoritmo utilizza una rappresentazione di basso livello dei geni che permette di
esplicitare il valore logico assunto da ciascuno dei segnali d’interfaccia. Si ricorda che
ognuno dei geni contiene l’informazione relativa al pattern dei segnali di controllo,
al pattern dei segnali di dato e l’insieme dei bit di gestione dei march element, mentre l’informazione relativa agli indirizzi delle celle viene determinata dinamicamente
dall’algoritmo in base all’address order e all’address mode selezionati (attraverso una
chiamata alla funzione address generator). La dimensione del vettore viene scelta
come valore massimo tra il numero di bit necessari a rappresentare un singolo gene
e quello necessario a rappresentare un indirizzo secondo la relazione:
Binary array size = max{A, (D + C + 3)}
dove A, D e C rappresentano rispettivamente l’ampiezza del bus di indirizzamento, l’ampiezza del bus dati e l’ampiezza del bus di controllo della memoria (sono
escluse le sorgenti di temporizzazione che vengono sintetizzate separatamente dall’algoritmo). A questo punto l’algoritmo inizia la sintesi dei segnali per ciascuna
delle sequenze di test (ciclo for sull’insieme dei vettori di collaudo). Un secondo
ciclo for scandisce l’insieme dei segnali che dovranno essere sintetizzati (l’insieme
è formato dai segnali A, D, C), per ciascuno viene memorizzato il tipo di segnale
(signal type) e la posizione relativa all’interno del vettore binario (signal selected).
Successivamente viene selezionato l’elemento nella lista dei generatori di segnali interna, la quale memorizza le informazioni per la sintesi a livello elettrico del segnale corrente, in base all’informazione contenuta nella variabile signal selected. Una
coppia di variabili interne permette all’algoritmo di analizzare la sequenza di caratteri del cromosoma e di memorizzare l’informazione relativa all’inizio e alla fine
del march element corrente (march element start e march element stop). Il flag encode march element permette di attivare la fase di sintesi delle operazioni eseguite
sulla memoria ed interne al march element identificato. Per l’individuazione del
march element corrente l’algoritmo scandisce progressivamente la sequenza di test
e salva la posizione di inizio nella variabile march element start quando è attivo
il marker di start e la posizione di fine nella variabile march element stop quando
è attivo il marker di stop (in questo secondo caso viene attivato anche il flag encode march element).
La fase di sintesi dei segnali prevede che su ciascuna cella della matrice di memoria
venga applicato l’insieme di operazioni interne al march element, di conseguenza due
71
5 – Generazione automatica di march test
Figura 5.7.
Numerazione delle celle dell’array di memoria
cicli for annidati controllano tale processo. Il ciclo più esterno utilizza la variabile
contatore cell id per individuare la cella su cui applicare la sequenza di operazioni.
Per ottenere ciò le celle vengono etichettate, come visibile in figura 5.7, con un
numero identificativo progressivo da 0 (cella in alto a sinistra nella matrice) a N
(cella in basso a destra nella matrice). La chiamata alla funzione address generator
consente di estrarre l’indirizzo effettivo della cella in base al valore assunto dalla variabile contatore relativa alle celle esaminate, all’address mode selezionato e
all’address order previsto dal march element. Il ciclo più interno sintetizza, per ciascuna cella, l’insieme delle operazioni contenute nel march element, utilizzando l’informazione memorizzata nelle variabili march element start e march element stop.
La chiamata alla funzione binary conversion restituisce il valore binario associato al
gene corrente (il valore è memorizzato su un vettore temporaneo di ampiezza uguale
a binary array size). L’informazione memorizzata in signal selected selezionerà la
posizione del segnale da sintetizzare all’interno del vettore binario, ottendo il valore
logico del segnale. L’informazione sul tipo di segnale permette di accedere ad una
lista interna contenente le caratteristiche elettriche del segnale, che ne descrivono la
forma d’onda. Tali caratteristiche sono strutturate secondo la sintassi spice relativa
ai segnali periodici (figura 5.8). A questo punto l’algoritmo utilizza la conoscenza
relativa alle forme d’onda dei segnali di dato, indirizzo e controllo (signal type) per
72
5.6 – Operatori genetici e funzioni specifiche
procedere alla sintesi dell’operazione corrente per il segnale corrente. L’interfaccia
della memoria utilizza un protocollo di comunicazione standard in cui i segnali di
controllo, a differenza dei segnali di dato e di indirizzo, eseguono una transizione di
stato per la sola durata del ciclo di operazione (riposo → attivo → riposo). Data la
Figura 5.8.
Descrizione della sintassi spice per i segnali periodici
natura dei segnali di controllo per la loro sintesi è sufficiente la conoscenza del valore
logico del segnale nell’operazione corrente. Invece per poter sintetizzare i segnali di
indirizzo e di dato è necessario memorizzare il valore logico assunto nel precedente
ciclo operativo, in modo da poter sintetizzare opportunamente le transizioni nel ciclo
corrente.
Terminata la sintesi dei segnali appartenenti al bus indirizzi, dati e controllo, l’algoritmo avvia la fase terminale di sintesi degli eventuali segnali di temporizzazione
dell’interfaccia. Come nel caso precedente, viene memorizzata internamente la lista
delle caratteristiche elettriche di ciascuno dei segnali di temporizzazione secondo la
sintassi spice precedentemente indicata. L’algoritmo termina aggiungendo l’informazione relativa ai nodi di output (probe nodes) e i comandi per il simulatore (passo
e tempo complessivo di simulazione). Il passo di simulazione è determinato dai parametri globali di configurazione dell’algoritmo genetico, mentre il tempo complessivo
di simulazione e calcolato dinamicamente durante la fase di sintesi dei segnali.
73
5 – Generazione automatica di march test
5.6.3
Incremento della lunghezza delle sequenze di test
Per assicurare un’esplorazione ottimale dello spazio di ricerca, è stato sviluppato un
operatore genetico specifico per questa applicazione. L’operatore mutate rlg (repeate
last gene), che agisce sull’intera popolazione di cromosomi, provvede ad incrementare
Figura 5.9.
Esecuzione della funzione di mutazione RLG
la lunghezza di ciascuna sequenza di collaudo della popolazione. L’operatore introduce un ulteriore gene nella sequenza di caratteri che codifica il cromosoma, il cui
valore coincide con quello del gene che lo precede nella sequenza. Il nuovo carattere
viene introdotto all’interno del cromosoma, come ultimo gene appartenente alla fase
di eccitazione del test in quanto, come si vede in figura 5.9, il primo e l’ultimo gene
codificano rispettivamente la fase di inizializzazione e di osservazione del guasto.
L’operazione quindi ha lo scopo di accumulare caratteri identici (operazioni uguali
eseguite sulla memoria) all’interno di un march element. Questa scelta emerge dal
fatto che l’identificazione di modelli di guasto di natura dinamica comporta l’applicazione di sequenze di operazioni identiche sulla stessa cella. Di conseguenza il test
presenta march element costituiti da sequenze di operazioni identiche. Per ottenere
questo risultato, la funzione clona l’ultimo gene che codifica la fase di eccitazione del
test ed applica una serie di controlli relativi ai marker di inizio e fine march element.
Tali controlli garantiscono l’accumulo del carattere (operazione) all’interno dell’ultimo march element disponibile nella fase di eccitazione. Come si vede in figura 5.10
l’ultimo march element può contenere anche la fase di osservazione, che pertanto non
74
5.6 – Operatori genetici e funzioni specifiche
viene sempre codificata come march element separato. La probabilità di attivazione
Figura 5.10.
Check sui marker relativi alla coppia di geni clonati
di questo operatore è stata resa variabile nel tempo, per consentire all’algoritmo di
esplorare con efficacia lo spazio di ricerca. Infatti ogni nuova operazione incrementa
la dimensione dello spazio di ricerca, anche se ciò permette all’algoritmo di trovare
con maggiore facilità una sequenza ottimale di test in grado di coprire il guasto. Per
ottenere questo comportamento si è applicata la tecnica di adattamento mediante
interpolazione che provvede a diminuire di una quantità fissata la probabilità di
esecuzione dell’operatore. La quantità con cui avviene il decremento è comunque un
parametro dell’algoritmo imposto dall’utente.
5.6.4
Condizione terminale
L’evoluzione della popolazione in un algoritmo genetico è governata da un ciclo principale. Durante il processo di esplorazione dello spazio di ricerca, la popolazione
iniziale (di norma generata casualmente) viene fatta evolvere verso un insieme di
soluzioni migliori per il problema considerato. Nella maggior parte dei casi l’algoritmo genetico è utilizzato per l’ottimizzazione di una funzione obiettivo, quindi
il fattore temporale definisce la condizione di interruzione del ciclo di evoluzione
(condizione terminale). In genere questa si esprime imponendo un numero massimo
prefissato di iterazioni dell’algoritmo (numero di generazioni della popolazione).
75
5 – Generazione automatica di march test
In problemi specifici è possibile definire una seconda condizione terminale oltre a
quella dipendente dal fattore temporale. Ad esempio è possibile stabilire un criterio di ottimalità, oppure definire una procedura che verifichi la disponibilità di una
soluzione anche se non ottimale. Nel problema relativo la generazione di sequenze
di collaudo per memorie il ciclo può essere interrotto sia perchè è stato raggiunto il numero massimo di generazioni previste, sia perchè è stata individuata una
soluzione in grado di coprire il guasto considerato. Nello sviluppo dell’algoritmo genetico è stata definita la funzione check fault coverage, che permette di interrompere
il ciclo principale di evoluzione se la nuova soluzione, individuata all’interno della
popolazione corrente, è in grado di coprire il guasto. In figura 5.11 è riportato lo
pseudocodice della funzione di controllo check fault coverage. Come si osserva la
funzione opera sulla soluzione corrente individuata dalla funzione di aggiornamento
(update solution). Tale soluzione è rappresentata dall’insieme dei geni che esprimono
la sequenza di collaudo e dall’indice del vettore associato. L’indice del vettore di test
è utilizzato dalla funzione per eseguire un’analisi a livello elettrico della soluzione e
determinare in base a quest’ultima lo stato logico relativo ai due modelli di memoria. In tal modo la funzione di copertura è in grado di individuare variazioni nel
comportamento del circuito di memoria difettoso a livello logico, come previsto per
la sequenza di collaudo a livello funzionale. Nel caso in cui viene rilevata la copertura del guasto, la funzione restituisce un valore booleano positivo (negativo in caso
contrario) che permette all’algoritmo genetico di arrestare la ricerca e di fornire il
risultato individuato all’interno di un report terminale. Come si osserva nella figura
5.11 la funzione di verifica check fault coverage, procede inizialmente a impostare il
valore di sensibilità dei sense amplifier (non presenti fisicamente nel circuito della
memoria), e a determinare il numero di campioni temporali che formano una singola
operazione. Questo valore è calcolato sulla base della durata di ciascuna operazione
(ovvero della durata del ciclo di clock utilizzato dall’interfaccia di memoria) e del
passo simulazione. Successivamente la funzione provvede ad analizzare il cromosoma che codifica la soluzione, al fine di individuare l’ultimo march element del test il
quale contiene l’operazione di osservazione del guasto. Le due variabili march start e
march length contengono rispettivamente l’indice di partenza dell’ultimo march element all’interno del cromosoma, e la lunghezza individuata per quest’ultimo come
numero di operazioni da eseguire sulla matrice di memoria. Il loro valore si ottiene
analizzando con un ciclo for il cromosoma soluzione e impostando march start con
76
5.6 – Operatori genetici e funzioni specifiche
Figura 5.11. Pseudocodice della funzione check fault coverage di verifica
della copertura del guasto
l’indice del gene corrente ogni volta che quest’ultimo contiene il marker di start
attivo; march length è progressivamente incrementato durante la scansione del cromosoma e resettato quando si individua un marker di start attivo. Queste due
variabili sono utilizzate per determinare il numero di righe (campioni temporali)
all’interno della tabella di simulazione, che devono essere ignorate in quanto facenti
riferimento alla fase di inizializzazione della memoria ed eccitazione del guasto. A
questo punto la funzione è posizionata all’inizio (primo campione) del march element
terminale ed in base al valore di march length determina il numero di operazioni che
fanno ancora riferimento alla fase di eccitazione. Calcola di conseguenza il relativo
numero di righe (campioni temporali da ignorare). Questo valore è utilizzato all’interno di un ciclo for con lunghezza pari al numero di celle che costituiscono la
77
5 – Generazione automatica di march test
matrice di memoria, secondo la relazione:
#Rows = ((
Tclk
Tclk
) · march length) + ((
· 0.5) + tw )
Tstep
Tstep
dove #rows indica il numero di righe della tabella di simulazione da saltare, Tclk il
periodo di clock utilizzato nelle simulazioni, Tstep il passo di simulazione prescelto.
Infatti la funzione di verifica deve analizzare solo la porzione di simulazione relativa
all’esecuzione delle operazioni di osservazione applicate a tutte le celle della matrice
di memoria. Ad esempio, supponendo di utilizzare un passo di simulazione Tstep =
clk
= 10
1 ns e un ciclo di clock dell’interfaccia pari a Tclk = 10 ns si ottengono TTstep
campioni di tempo per ogni operazione, corrispondenti a 10 righe nella tabella di
simulazione. Si supponga inoltre che la funzione di verifica abbia stabilito il valore
march length = 2, per esempio avendo come march element terminale ⇑ ( W 0, R0 ).
Quindi ad ogni cella della matrice sono associate 20 righe nella tabella di simulazione,
e la funzione check fault coverage dovrà saltare le prime 10 di ogni gruppo di 20, per
concentrarsi su quelle relative all’operazione di osservazione (R0 nell’esempio). Dei
10 campioni a cui la funzione deve fare riferimento solo una parte è effettivamente
utile, poichè la prima metà di ogni ciclo è utilizzata per l’esecuzione della precarica
delle bit line al valore di alimentazione VDD. Dall’analisi sulla forma d’onda dei
Figura 5.12. Finestra di analisi dei campioni di simulazione relativi all’operazione di osservazione del difetto
segnali associati al bus di controllo, emerge che la finestra temporale in cui eseguire
il controllo della copertura del guasto, deve essere posizionata come riportato in
78
5.6 – Operatori genetici e funzioni specifiche
figura 5.12. Nella formula per il calcolo del numero #rows di righe nella tabella di
simulazione da ignorare, il fattore di correzione temporale tw permette di centrare
la finestra di analisi esattamente sul primo campione utile. Il valore di tw dipende
dal rapporto relativo tra il passo di simulazione prescelto e il tempo di transizione
dei segnali. Ad esempio se si considera il segnale di figura 5.12, la fase di esecuzione
dell’operazione è compresa tra il campione t1 = 6.0 ns e il campione t2 = 10.0 ns
(seconda metà del ciclo di durata pari a 10 campioni). Tuttavia si osserva che
il primo e l’ultimo campione utile sono rispettivamente il campione t1 = 5.0 ns e
t2 = 9.0 ns. Da ciò deriva l’introduzione del fattore di correzione tw che permette di
centrare la finestra di analisi composta dai campioni A,B,C,D ed E tra il campione
t1 e il campione t2 sopra indicati.
In base all’informazione relativa all’address order utilizzato all’interno dell’ultimo
march element, la funzione check fault coverage di verifica stabilisce la colonna della
matrice di memoria interessata dall’operazione di osservazione e la registra nella
variabile col. L’indice di colonna col permette di identificare la coppia di campioni
relativi alle bit line riferiti al campione temporale corrente (riga della tabella di simulazione correntemente analizzata). Per determinare lo stato logico dei due modelli
di memoria, viene calcolato (per ciascuno dei due modelli) il valore differenziale
tra le due bit line analizzate (coppia di colonne individuata dall’indice col sulla
clk
tabella di simulazione) mediato sull’intervallo temporale TTstep
· 0.5. Questo valore
viene confrontato con il parametro di sensibilità dei sense amplifier per determinare
lo stato logico di uscita che avrebbero all’interno del circuito di memoria. Due
variabili memorizzano lo stato logico interno della cella indirizzata per il modello
difettoso e per quello non difettoso: rispettivamente logic f e logic g. Ciascuna di
queste due variabili può assumere tre stati in relazione al valore differenziale medio
calcolato per la cella:
• stato 1: indica che il valore differenziale medio Vdif f ≥ Sp , dove Sp è la sensibilità positiva stabilita per i sense amplifier del circuito. Pertanto la cella si
trova nello stato logico H;
• stato 0: indica che il valore differenziale medio Vdif f ≤ Sn , dove Sn è la
sensibilità negativa stabilita per i sense amplifier del circuito. Pertanto la
cella si trova nello stato logico L;
• stato 2: indica che il valore differenziale medio Sn < Vdif f < Sp . Il sense
79
5 – Generazione automatica di march test
amplifier non sarebbe in grado di determinare correttamente lo stato di uscita
della cella.
La funzione di verifica stabilisce quindi che il difetto è stato coperto dalla sequenza
di collaudo attuale, se la cella relativa al modello di memoria difettoso e quella
del modello non difettoso sono in due stati logici differenti, cioè se è verificata la
condizione logica:
(state_g = 1 AND state_f = 0) OR (state_g = 0 AND state_f = 1)
5.7
Interfaccia utente
Lo strumento automatico di generazione delle sequenze di collaudo presenta un’interfaccia utente di tipo testuale, basata su un file di configurazione (configure.in)
per l’inserimento dei parametri di ingresso. Per comodità di utilizzo, il file di
configurazione è suddiviso in tre sezioni principali:
• main tool parameters: questa sezione permette di specificare il percorso relativo
ai file contenenti i modelli dei circuiti di memoria non difettoso e difettoso.
Permette inoltre l’attivazione del flag statistic flag per la scrittura delle statistiche relative all’algoritmo genetico usato dallo strumento per la generazione
automatica di march test;
• genetic parameters: questa sezione permette di specificare l’insieme dei parametri di ingresso per l’algoritmo genetico, quali le frequenze di attivazione
degli operatori genetici, il numero di iterazioni massime consentite (per limitare il tempo di CPU utilizzato), la dimensione della popolazione, e il passo
di normalizzazione lineare della funzione di valutazione;
• interface parameters: questa sezione specifica le informazioni relative all’interfaccia della memoria. Per ogni tipologia di segnale disponibile nell’interfaccia
è definita l’ampiezza del bus associato e le caratteristiche elettriche di ciascun
elemento del bus, secondo la sintassi spice definita per i segnali periodici (la
scelta dell’utilizzo di questa sintassi rispetto ad altre, è dovuta al fatto che
permette di descrivere le caratteristiche elettriche utilizzate per la sintesi delle
sequenze temporali associate ai segnali d’interfaccia). Sono inoltre definiti i
80
5.7 – Interfaccia utente
Figura 5.13.
File di configurazione dello strumento di generazione automatico
parametri relativi alla sensibilità dei sense amplifier, i pattern di controllo
non validi e i pattern di controllo che specificano le operazioni di lettura e di
scrittura.
All’interno del file, ciascun elemento è definito tramite un nome identificativo seguito dalla lista dei parametri che lo caratterizzano, tuttavia per semplificarne la
gestione l’ordine con cui i parametri sono definiti è fisso. L’output generato dallo
strumento automatico di generazione è costituito da un file testuale contenente un
report (report.log) e dal vettore di test (fault stimulation.cir) contenente la sequenza temporale dei segnali di interfaccia che rappresentano il march test (sequenza di
collaudo) generato. Nel file del report è contenuta la tabella con i dati statistici (nel
caso in cui il flag associato sia stato attivato) relativi all’esecuzione dell’algoritmo
genetico quali l’indicazione dell’iterazione, la valutazione media della popolazione, la
valutazione massima nella popolazione e la valutazione associata alla soluzione corrente. Viene riportata una tabella riassuntiva contenente l’indicazione dei parametri
di ingresso utilizzati dallo strumento automatico (principali, genetici e di interfaccia)
e la soluzione di collaudo rappresentante il march test identificato . La soluzione
81
5 – Generazione automatica di march test
Figura 5.14.
File di report dello strumento di generazione automatico
identificata è strutturata in tre campi: un flag iniziale (go/nogo) permette di identificare la copertura o meno del difetto inserito nel circuito di memoria, la valutazione
associata alla sequenza di test e la sequenza di test espressa a livello funzionale sotto
forma di march test. Al termine del file di report è indicato il tempo impiegato per
l’esecuzione del job. Uno script (run.bat) controlla l’esecuzione di sessioni di test
multiple per le quali vengono automaticamente salvati i file di output.
82
Capitolo 6
Caso di studio
Le memorie SRAM sono i dispositivi con la più alta densità di transistor presenti
sui circuiti digitali moderni, pertanto è necessario lo sviluppo di algoritmi di test
efficienti e di modelli di guasto adeguati alle tecnologie in uso. Le moderne tecnologie VSDM (Very Deep Sub-Micron) sono soggette sempre più frequentemente a
guasti dovuti alla presenza di difetti fisici di tipo resistive-open e con sempre maggior frequenza tali difetti sono associati a modelli di guasto sempre più complessi.
Lo scopo dell’algoritmo è di generare in modo automatico sequenze di operazioni
che permettano di descrivere il guasto a livello funzionale, eseguendo un’analisi del
comportamento del circuito difettoso a livello elettrico. Il capitolo seguente è quindi dedicato all’analisi delle sequenze di collaudo generate dall’algoritmo genetico
presentato nel capitolo precedente.
6.1
Difetti nella matrice di memoria
Il modello sperimentale di memoria descritto alla fine del capitolo 2, è stato utilizzato come base per gli esperimenti di verifica del funzionamento dello strumento
per la generazione automatica. Tale modello è stato sviluppato con l’obiettivo di
focalizzare l’analisi del comportamento dello strumento, rispetto alla generazione di
march test in grado di coprire difetti presenti a livello della cella di memoria (corecell defect). La figura 6.1 mostra lo schema interno della cella SRAM contenente
l’insieme delle locazioni dei difetti resistivi iniettati nel modello di memoria durante
la fase di verifica. Nello schema sono rappresentate 6 differenti locazioni di difetti
83
6 – Caso di studio
Figura 6.1. Difetti resistivi iniettati nella cella SRAM
fisici rappresentati a livello elettrico come difetti a carattere resistivo. Tale scelta
è legata all’osservazione della simmetria interna alla cella stessa, che consente di
trascurare molte possibili locazioni di guasto.
6.1.1
Analisi dei difetti
In letteratura [14, 15, 17, 18] sono stati effettuati esperimenti di simulazione di celle
di memoria SRAM in cui erano presenti difetti di tipo resistivo nelle 6 locazioni
indicate in figura 6.1. La loro analisi ha permesso di identificare un’insieme di modelli di guasto funzionali a cui i difetti erano sensibili. Il difetto DF 1 , modellabile
come guasto TF, induce in genere un ritardo nella fase di carica/scarica del nodo
interno al latch della cella, associato alla complement bit line (nodo SB a drain
comune formato da P 3−N 4−PASS 2 ). Il difetto esibisce in generale un comportamento di natura statica, ed è quindi facilmente rilevabile dagli algoritmi di march
test. Il difetto resistivo DF 2 induce tipicamente un ritardo sull’uscita dell’inverter
formato dai mosfet P 1 e N 2, durante la fase di scarica del nodo interno SB. Se
si esegue un operazione di lettura sulla cella difettosa in cui il valore atteso sia 0,
la complement bit line e la true bit line saranno inizialmente precaricate al valore
VDD. Durante la precarica, la complement bit line (per via della maggiore capacità
84
6.1 – Difetti nella matrice di memoria
parassita rispetto a quella equivalente del latch, vista dal nodo SB) può cercare di
forzare temporaneamente il valore del nodo interno SB a VDD. A causa del difetto l’inverter formato da P 1−N 2 non è in grado di controbilanciare correttamente
questo effetto e si ha quindi che il nodo SB viene forzato al valore VDD, inducendo la
commutazione dell’inverter formato da P 3−N 4 e quindi alla perdita del dato. Tale
comportamento può essere rappresentato in genere come guasto RDF e in casi meno
frequenti come guasto DRDF. Il difetto DF 3 mostra un comportamento analogo a
quello del difetto precedente ed è in genere modellato come guasto RDF. Quando si
esegue un’operazione di lettura in cui sia atteso il valore 1, viene trasferita la carica
dalla complement bit line verso l’interno della cella (la complement bit line viene
scaricata). La complement bit line viene guidata verso il valore 0 attraverso l’azione
di pull-down dei mosfet N 4 e PASS 2 . A causa del difetto resistivo sul percorso
di pull-down di N 4, il terminale di source non si trova al potenziale di massa, di
conseguenza durante la fase di lettura l’inverter formato da P 3−N 4 commuta, portando alla perdita dei dati (la cella statica si comporta analogamente ad una cella
DRAM). Se il difetto resistivo non è sufficientemente grande, l’operazione di lettura
può concludersi in modo corretto nonostante subisca un forte disturbo. In questi
casi il difetto può dare origine a guasti anche di natura dinamica. Il difetto DF 4
induce in generale un comportamento della cella modellabile come guasto dinamico
di tipo dRDF (per elevati valori di resistenza) che risulta particolarmente difficile
da osservare. Il difetto DF 5 introduce un ritardo nella fase di switching On/Off
relativa ai due trasmission gate (PASS 1 e PASS 2 ) durante le operazioni di lettura
e scrittura sulla cella. Le operazioni di lettura e di scrittura necessitano di una
determinata quantità di tempo per essere eseguite correttamente, tuttavia a causa
della resistenza presente all’ingresso del terminale di selezione della cella (word line)
tale quantità di tempo viene ridotta, portando ad una non corretta esecuzione delle
operazioni. Il comportamento del difetto è in generale modellabile come guasto statico di tipo TF e per alcuni valori di resistenza del difetto come guasto IRF. Infine
il difetto DF 6 induce in genere il fallimento dell’operazione di scrittura. Poichè il
difetto resistivo è posto all’ingresso dell’inverter formato dai mosfet P 1 e N 2, elevati
valori di resistenza impediscono alla corrente di bias dei mosfet di entrare, e questo
causa un effetto di ritardo sulle operazioni di scrittura. L’effetto di ritardo si manifesta principalmente durante le fasi di scrittura dello 0 logico, in quanto durante
queste operazioni commuta prima il nodo che deve essere portato al valore logico 0
85
6 – Caso di studio
dall’azione di pull-down dei mosfet interni alla cella.
6.1.2
Parametri di ingresso
Dato che lo strumento per la generazione automatica è basato su un algoritmo genetico, è stata condotta una serie di test aventi lo scopo di determinare l’insieme ottimale dei parametri di ingresso (parameters tuning). I test sono stati condotti facendo
generare la sequenza di collaudo (march test) relativa a tre difetti precedentemente
selezionati dall’insieme delle 6 locazioni di guasto di figura 6.1 e valutando l’efficacia
dei parametri selezionati. L’insieme dei parametri di ingresso, per il quale si ha
un comportamento efficiente dell’algoritmo genetico, è riportato nella tabella 6.1.
Diminuendo la probabilità di esecuzione dell’operatore di crossover ed aumentanPametro
iter
Ps
Pc
Pm
ialp
als
Lin
Descrizione
Numero massimo di iterazioni
Dimensione della popolazione
Probabilità di esesecuzione per l’operatore di crossover
Probabilità di esecuzione per l’operatore di mutazione
Probabilità di esecuzione per l’operatore di mutazione rlg
Decremento della probabilità di esecuzione dell’operatore di
mutazione rlg
Passo di linearizzazione della funzione di fitness
Tabella 6.1.
Valore
200
4
.900
.180
.060
.015
25
Parametri di ingresso per l’algoritmo genetico
do la frequenza di attivazione dell’operatore di mutazione, l’algoritmo viene guidato prevalentemente in maniera casuale durante la fase di esplorazione dello spazio
risolutivo. Infatti l’elevata frequenza di esecuzione dell’operatore di mutazione introduce frequenti cambiamenti nelle sequenze genetiche ricombinate dall’azione del
crossover, portando alla perdita di gruppi efficaci di geni. L’innalzamento della frequenza di attivazione del crossover e la diminuzione di quella relativa all’operatore
di mutazione inducono miglioramenti nel comportamento dell’algoritmo genetico.
Tuttavia dagli esperimenti si osserva che una eccessiva riduzione della probabilità di
esecuzione dell’operatore di mutazione porta nuovamente ad una perdita di efficacia
da parte dell’algoritmo genetico. Questo comportamento è dovuto al fatto che valori
molto bassi della mutazione non garantiscono una buona esplorazione dello spazio
risolutivo. Bisogna infatti osservare che le sequenze di test espresse sotto forma di
86
6.2 – Generazione di march test
march test costituiscono un sottoinsieme delle sequenze di collaudo esprimibili a livello binario. L’algoritmo genetico genera, durante la fase ricerca, il pattern binario
che deve essere applicato agli ingressi primari della memoria durante la simulazione.
Di conseguenza è possibile che più pattern binari relativi ai segnali d’interfaccia
rappresentino la stessa operazione a livello di march test. Per esempio, con riferimento al modello di memoria riportato nel capitolo 2 (modello sperimentale), i
valori genetici 45 e 37 codificano entrambe l’operazione di alto livello Rx , dove x
rappresenta il valore atteso dall’operazione di lettura e non il valore logico della
linea dati di ingresso. Valori troppo bassi di mutazione non permetto di esplorare
adeguatamente configurazioni binarie dei segnali d’interfaccia relative ad operazioni
differenti. La probabilità di esecuzione dell’operatore specifico di mutazione rlg è
stata fissata ad un valore pari a .060 in modo da non indurre frequenti incrementi
della lunghezza della sequenza di collaudo. Questa scelta è legata al fatto che i difetti
inseriti nella cella di memoria fanno principalmente riferimento a modelli di guasto
di natura statica, per i quali la lunghezza del vettore di test risulta essere pari a 3
operazioni (inizializzazione della matrice di memoria, eccitazione e osservazione del
guasto). Una probabilità di esecuzione più alta induce infatti incrementi del numero
di operazioni associate al test con frequenza maggiore di quella utile. Considerando
sempre che i modelli di guasto principali hanno natura statica, si è deciso di limitare
il numero di possibili incrementi a 4, impostando il parametro di controllo als al
valore di .015. Il numero di iterazioni utilizzate negli esperimenti è stato fissato a
200 in quanto garantisce una buona esplorazione dello spazio risolutivo con tempi di esecuzione accettabili, mentre il numero di sequenze di collaudo (cromosomi)
presenti in ogni generazione è stato fissato a 4 (questo valore costituisce un buon
compromesso tra tempo impiegato per la simulazione della popolazione e capacità
di esplorazione dello spazio delle soluzioni da parte dell’algoritmo genetico).
6.2
Generazione di march test
Le tabelle 6.2 e 6.3 riportano i risultati sperimentali ottenuti dall’esecuzione dello
strumento per la generazione automatica di march test, per i difetti resistivi descritti
nel paragrafo 6.1. Gli esperimenti sono stati eseguiti utilizzando un sistema basato
su architettura Turion 64T M con frequenza operativa di 1.8 GHz e dotato di 1 GB di
87
6 – Caso di studio
memoria RAM. Inoltre tutti gli esperimenti sono stati condotti utilizzando i seguenti
parametri, legati all’ambiente di simulazione a livello elettrico:
• tensione di alimentazione costante al valore nominale VDD = 5.0 V;
• temperatura di lavoro mantenuta al valore di default del simulatore elettrico,
pari a T = 27.0 ◦ C.
Gli esperimenti sono stati caratterizzati dall’inserimento nella cella di difetti resistivi
con dimensioni variabili all’interno dell’insieme:
Rdf ∈ {100 KΩ, 500 KΩ, 1.0 MΩ}
Per ciascuno dei difetti sono state eseguite 10 sessioni di test, atte a misurare su
un campione significativo di test, l’efficacia dell’approccio computazionale di generazione delle sequenze di collaudo adottato. Va infatti osservato che l’utilizzo di un
algoritmo genetico impone l’analisi dei risultati su un campione di prove di esecuzione, data la natura non ripetibile dei singoli esperimenti. L’insieme di march test
Figura 6.2.
Matrice di memoria difettosa
generati dallo strumento automatico sviluppato, è stato confrontato con i risultati
noti in letteratura [14, 15, 17, 18] per lo stesso insieme di difetti inseriti a livello di
cella. Per comodità i difetti sono stati sempre posizionati nella cella della matrice
di memoria con identificatore cell id = 0, come indicato in figura 6.2. Ciò nonstante
tale scelta non ha influenzato i risultati ottenuti. La tabella 6.2 riporta i dati relativi
88
6.2 – Generazione di march test
alla fault coverage (FC), espressa come rapporto tra il numero di sequenze di collaudo
in grado di rilevare correttamente il difetto presente nella cella e il numero totale
di sequenze di collaudo generate, oltre a mostrare il tempo medio di esecuzione
dello strumento automatico nell’arco delle 10 sessioni sperimentali (va osservato che
ciascuna delle 10 sessioni, genera una singola sequenza di collaudo). Analizzando
#DF
1
2
3
4
5
6
Size [M Ω]
0.1
0.5
1.0
0.1
0.5
1.0
0.1
0.5
1.0
0.1
0.5
1.0
0.1
0.5
1.0
0.1
0.5
1.0
Tabella 6.2.
Fault Coverage
100 %
90 %
20 %
90 %
100 %
80 %
0%
0%
0%
0%
0%
0%
0%
0%
0%
20 %
90 %
80 %
Average time [s]
260.6
207.4
98.8
1328.1
102.4
380.1
9345.3
8763.5
8650.6
8047.2
7232.8
7290.0
9237.8
13091.0
13804.4
11731.4
89.1
3208.3
Fault coverage e tempo medio di esecuzione
i dati riportati, emerge come lo strumento non sia stato capace di generare una
sequenza di collaudo utile al rilevamento del difetto della cella, per le tipologie di
difetti indicati come DF 3 , DF 4 e DF 5 . I difetti DF 3 e DF 4 , come già indicato nel
paragrafo 6.1, rappresentano una classe di difetti particolarmente difficile da rilevare,
in quanto spesso il guasto associato presenta una natura dinamica. Nel caso specifico
bisogna tenere presente che la definizione del circuito di memoria a livello elettrico è
stata basata su una tecnologia CMOS non specifica, e questo può avere influenzato
il comportamento del difetto rendendolo di fatto non rilevabile. Per quanto riguarda
i difetti indicati come DF 1 e DF 2 , sono stati ottenuti march test in grado di coprire
il guasto nella maggior parte dei casi. Inoltre va osservato che, per questa categoria
89
6 – Caso di studio
di difetti sono stati generati march test equivalenti alla definizione del modello di
guasto funzionale TF, come evidenziato anche da esperimenti di simulazione presenti
in letteratura [14, 15, 18]. Analogamente per la classe di difetti DF 6 sono stati
ottenuti march test equivalenti alla definizione funzionale del guasto RDF e, in
numero basso, march test per la copertura di guasti TF (come già osservato in
letteratura). I tempi medi di esecuzione confermano che, per il modello di memoria
usato, i difetti appartenenti alle classi DF 1 e DF 2 sono facilmente rilevabili mentre
i difetti (e quindi i guasti associati) appartenenti alle altre categorie richiedono uno
sforzo computazionale maggiore. Ad esempio, se si considera la sequenza di test
ottenuta dallo strumento per il difetto DF 2 con valore di resistenza Rdf = 1.0 MΩ:
hcoli{⇓(W1,W0);⇑(R0)}
si ottiene il comportamento del difetto mostrato in figura 6.3.
Figura 6.3.
Nella parte alta è
Andamento dei segnali sulle bit line della memoria difettosa
mostrato l’andamento temporale del segnale di selezione della colonna associata alla
cella difettosa, il grafico sottostante rappresenta invece l’andamento del segnale di
controllo EN (enable). Gli ultimi due grafici mostrano l’andamento temporale della
90
6.2 – Generazione di march test
#DF
1
Size [M Ω]
0.1
0.5
1.0
2
0.1
0.5
1.0
3
0.1
0.5
1.0
4
0.1
0.5
1.0
5
0.1
0.5
1.0
6
0.1
0.5
1.0
Tipical sequence found
hcoli{⇓(W0);⇑(R0);⇑(R0)}
hcoli{⇑(W1);⇑(W0);⇓(R0)}
hcoli{⇓(W0);⇑(W0,R0)}
hcoli{⇑(W1,W0);⇑(R0)}
hcoli{⇑(W1);⇑(W0);⇑(R0)}
hcoli{⇓(W0,R0);⇓(R0)}
hcoli{⇑(W0,R0,W1);⇓(R1)}
hcoli{⇓(W1);⇑(W0,R0);⇑(R0)}
hcoli{⇑(W1);⇑(W0);⇑(R0)}
hcoli{⇑(W0);⇑(R0);⇓(R0)}
hcoli{⇑(W0,R0);⇓(R0)}
hcoli{⇓(W1,W0);⇑(R0)}
hcoli{⇑(W1,W1);⇓(R1,R1);⇓(W0,R0);⇑(R0)}
hcoli{⇓(W0,Idl,Idl,R0,R0);⇑(R0)}
hcoli{⇓(W0,W1);⇓(W1,W1);⇓(R1)}
hcoli{⇑(W0);⇓(R0,R0,R0)}
hcoli{⇑(W0);⇑(R0);⇑(Idl,R0,R0)}
hcoli{⇓(W0,Idl);⇑(W0,R0,R0);⇓(R0)}
hcoli{⇑(W0,Idl,W0,W1);⇓(R1,R1,R1)}
hcoli{⇑(W1,Idl,R1,R1);⇓(R1)}
hcoli{⇓(W0);⇓(R0,W1);⇓(R1)}
hcoli{⇓(W0,R0,R0,R0,R0);⇑(R0)}
hcoli{⇑(W0,W1,R1);⇓(W0);⇓(W1);⇑(R1)}
hcoli{⇓(W0,Idl,R0,R0);⇑(R0);⇓(W1);⇑(R1)}
hcoli{⇓(W1,W1,W0,R0,W1);⇓(R1)}
hcoli{⇑(W1,R1,W1,W0,W0,W1,R1)}
hcoli{⇓(W1);⇓(Idl);⇑(Idl);⇓(W1,R1,R1);⇑(R1)}
hcoli{⇑(W0);⇓(R0);⇓(R0);⇑(R0);⇑(W1);⇑(R1)}
hcoli{⇑(W0);⇓(R0,R0,Idl);⇓(R0,R0)}
hcoli{⇓(W1,W1,W1,R1);⇑(R1)}
hcoli{⇓(W1,R1);⇑(W0,R0,R0,R0);⇓(R0)}
hcoli{⇓(W1,R1);⇑(R1);⇓(R1);⇓(R1);⇓(Idl);⇓(R1)}
hcoli{⇑(W0);⇓(R0,R0)}
hcoli{⇑(W0,Idl);⇑(R0)}
hcoli{⇓(W0);⇓(W0);⇓(R0)}
hcoli{⇑(W1,W0);⇓(R0)}
Tabella 6.3. Risulati sperimentali
91
6 – Caso di studio
tensione, rispettivamente sulla true bit line e sulla complement bit line. Come si osserva nella figura, in corrispondenza dell’operazione di lettura la tensione sulla complement bit line non raggiunge la soglia di commutazione, mantenendo la cella nello
stato associato all’1 logico. La tabella 6.3 riporta per le diverse classi di difetto le
due sequenze di collaudo che sono state generate con maggior frequenza. Le sequenze prodotte utilizzano tutte un address mode di tipo column mode. Questa scelta è
legata al fatto che, per le classi di difetto analizzate, si è dimostrata essere efficace
una fase di indirizzamento caratterizzata da una direzione principale di scansione
lungo la stessa word line. Operazioni eseguite su celle adiacenti a quella difettosa e
poste sulla stessa word line hanno un effetto di eccitazione del guasto equivalente a
quello di sequenze di operazioni eseguite sulla cella difettosa [14, 15], permettendo
di minimizzare il numero di operazioni richieste da un march test. Si noti che molte
Figura 6.4. Andamento della fitness media e della fitness massima per il difetto
DF 2 con dimensione di 0.1 MΩ
delle sequenze generate dallo strumento automatico risultano tra loro equivalenti
dato che cambia in genere l’aggregazione delle operazioni e l’address order utilizzato
nei vari march element. Tuttavia, per molti difetti, una variazione dell’ordine di
92
6.2 – Generazione di march test
esecuzione delle operazioni risulta ininfluente, e questo origina sequenze di collaudo
tra loro equivalenti. Va osservato che per le categorie di difetti DF 1 , DF 2 e DF 6
alcune sequenze mostrano una lunghezza associata alla fase di eccitazione superiore
a 1, nonostante la natura statica del difetto. Questo comportatmento è legato all’azione dell’operatore rlg che può introdurre precocemente nuove operazioni nella
sequenza di collaudo. La figura 6.4 mostra l’andamento medio della fitness e il valore della fitness massima all’interno della popolazione nel corso delle varie iterazioni,
con riferimento alla generazione della sequenza di collaudo per il difetto DF 2 con
dimensione di 0.1 MΩ. Come si può osservare la fitness massima calcolata ad ogni
Figura 6.5. Andamento della fitness media e della fitness massima per il difetto
DF 1 con dimensione di 1.0 MΩ
generazione tende ad aumentare progressivamente. Ciò mostra come l’algoritmo genetico procede nell’esplorazione dello spazio delle soluzioni, spostandosi da regioni
rappresentate da cromosomi con un basso grado di eccitazione del difetto a livello
elettrico (regioni caratterizzate da bassi valori di fitness) verso regioni rappresentate
da cromosomi in grado di eccitare adeguatamente il difetto e di portare i due modelli
di memoria in due stati logici differenti (regioni con valori di fitness più alti). Questo
93
6 – Caso di studio
comportamento è messo in luce anche dall’andamento medio della fitness, che tende
ad oscillare in una fascia di valori vicina a quella relativa alla fitness massima. La
figura 6.5 mostra l’andamento della fitness media e massima durante la generazione
della sequenza di test per il difetto DF 1 con dimensione di 1.0 MΩ. In questo caso
è visibile l’effetto sulla fitness indotto dall’azione dell’operatore di mutazione rlg.
L’introduzione di una nuova operazione nella sequenza di test, impone una fase di
validazione di tutta la popolazione, compresi gli individui migliori salvati nell’iterazione precedente. L’azione di validazione modifica la struttura della popolazione
che quindi si sposta da una regione dello spazio delle soluzioni caratterizzata da una
fitness più alta ad una regione caratterizzata da una fitness più bassa. L’operatore
può quindi indurre peggioramenti locali a fronte di un’incremento dello spazio di
ricerca. Dall’analisi dei dati relativi agli esperimenti svolti, emerge come l’approccio
utilizzato per la generazione di march test, basato su un algoritmo genetico, si sia
dimostrato in grado di fornire risultati interessanti, seppur riferiti ad un modello di
memoria basato su una tecnologia CMOS non specifica.
6.2.1
Sviluppi futuri
Lo strumento sviluppato per questo lavoro rappresenta un valido prototipo, utilizzabile come base di partenza per ulteriori futuri sviluppi. Tra i filoni individuati per
ulteriori miglioramenti si possono citare i seguenti:
• parallelizzazione: l’idea è quella di sviluppare attorno all’attuale prototipo di
strumento per la generazione di sequenze di collaudo, un’infrastruttura capace
di utilizzare il parallelismo delle macchine multiprocessore. In quest’ottica
l’adozione di un modello computazionale basato su un algoritmo genetico,
potrebbe trarre beneficio dal parallelismo della macchina, in quanto questa
classe di algoritmi lavora su insiemi di soluzioni piuttosto che con singole
soluzioni. In particolare si può beneficiare del fatto di poter eseguire contemporaneamente le simulazioni legate alle sequenze di collaudo rappresentate
dagli individui della popolazione (il processo di simulazione è l’elemento che
maggiormente limita la velocità di analisi delle sequenze da parte dell’algoritmo genetico e quindi limita il numero di individui della popolazione utilizzabili
e il numero massimo di iterazioni).
94
6.2 – Generazione di march test
• adapting techniques: l’utilizzo di tecniche automatiche di determinazione dell’insieme ottimale dei parametri dell’algoritmo, permette un utilizzo più efficace dello strumento, evitando l’esecuzione della fase di tuning e permettendo
di concentrarsi maggiormente sull’analisi delle sequenze di test;
• miglioramento del modello di memoria: l’uso di un modello di memoria basato
su una specifica tecnologia CMOS, consentirebbe l’analisi di difetti associati a
guasti complessi caratterizzati da un comportamento di tipo dinamico. Inoltre
il modello permetterebbe l’analisi di difetti localizzati in altre aree del circuito
di memoria, quali ad esempio i circuiti di decodifica e i circuiti di precarica
delle bit line.
95
Appendice A
Modello sperimentale di memoria
A.1
*
*
*
*
*
*
*
*
*
*
Node 1
Node 2
Node 3
Node 4
Node 5
Node 6
Node 7
Node 8
Node 9
Node 10
Modulo circuitale SRAM con matrice 3x3
:=
:=
:=
:=
:=
:=
:=
:=
:=
:=
address 0
address 1
address 2
address 3
address 4
address 5
data input
write / read
enable operation
precharge clock
(row 0)
(row 1)
(row 2)
(column 0)
(column 1)
(column 2)
(write=1 / read=0)
(enable=1)
.options reltol=0.1
.options itl4=50
.width
out=132
.include
.include
.include
.include
.include
xprec1
xprec2
xprec3
./and2.cir
./and3.cir
./cell_g.cir
./prech.cir
./inverter.cir
10 17 18
10 19 20
10 21 22
prech
prech
prech
96
A.2 – Cella statica
xcell1
xcell2
xcell3
xcell4
xcell5
xcell6
xcell7
xcell8
xcell9
mn1
mn2
mn3
mn4
mn5
mn6
xand1
xand2
xand3
xand4
xand5
xand6
xnot
c1
c2
c3
c4
c5
c6
17
18
19
20
21
22
4
5
6
11
11
11
12
12
12
13
13
13
14
14
15
15
16
16
1
2
3
8
8
8
17
19
21
17
19
21
17
19
21
7
23
7
23
7
23
9
9
9
9
9
9
7
17
18
19
20
21
22
18
20
22
18
20
22
18
20
22
0
0
0
0
0
0
11
12
13
14
15
16
23
0
0
0
0
0
0
cellg
cellg
cellg
cellg
cellg
cellg
cellg
cellg
cellg
nmosfet
nmosfet
nmosfet
nmosfet
nmosfet
nmosfet
and2
and2
and2
and3
and3
and3
not
0.01p
0.01p
0.01p
0.01p
0.01p
0.01p
w=8u
w=8u
w=8u
w=8u
w=8u
w=8u
.model nmosfet nmos
.end
A.2
Cella statica
* Node 1 := word line
* Node 2 := true bit line
* Node 3 := complement bit line
97
l=2u
l=2u
l=2u
l=2u
l=2u
l=2u
A – Modello sperimentale di memoria
.subckt
vdd
mp1
mp2
mn1
mn2
mn3
mn4
cellg
4 0
5 6 4
6 5 4
5 6 0
6 5 0
2 1 5
3 1 6
4
4
0
0
0
0
1 2 3
5v
pmosfet
pmosfet
nmosfet1
nmosfet1
nmosfet2
nmosfet2
.model nmosfet1 nmos
+
+
+
(level=2
tpg=1
phi=0.70
vto=0.7513)
.model pmosfet
+
+
+
(level=2
tpg=1
phi=0.70
vto=-0.9784)
pmos
w=10u
w=10u
w=4u
w=4u
w=8u
w=8u
.model nmosfet2 nmos
.ends
A.3
Circuito di precarica
* Node 1 := precharge enable
* Node 2 := true bit line
* Node 3 := complement bit line
.subckt
vdd
mp1
mp2
mp3
prech
4 0
2 1 3 4
2 1 4 4
3 1 4 4
1 2 3
5v
pmosfet
pmosfet
pmosfet
.model pmosfet pmos
.ends
98
l=2u
l=2u
l=2u
l=2u
l=2u
l=2u
A.4 – Porte logiche
A.4
Porte logiche
* Inverter
* Node 1 := input
* Node 2 := output
.subckt
vdd
mp1
mn1
not
3 0
2 1 3 3
2 1 0 0
1 2
5v
pmosfet
nmosfet
.model pmosfet pmos
.model nmosfet nmos
.ends
*
*
*
*
Gate
Node
Node
Node
.subckt
vdd
xnot
mtp1
mtp2
mtn1
mtn2
and 2 inputs
1 := input
2 := input
3 := output
and2
6 0
4 3
4 1 6
4 2 6
4 1 5
5 2 0
6
6
0
0
1 2 3
5v
not
pmosfet
pmosfet
nmosfet
nmosfet
.model pmosfet pmos
.model nmosfet nmos
.ends
*
*
*
*
*
Gate
Node
Node
Node
Node
and 3 inputs
1 := input
2 := input
3 := input
4 := output
99
A – Modello sperimentale di memoria
.subckt
vdd
xnot
mtp1
mtp2
mtp3
mtn4
mtn5
mtn6
and3
5 0
6 4
6 1 5
6 2 5
6 3 5
6 1 7
7 2 8
8 3 0
5
5
5
0
0
0
1 2 3 4
5v
not
pmosfet
pmosfet
pmosfet
nmosfet
nmosfet
nmosfet
.model pmosfet pmos
.model nmosfet nmos
.ends
100
Bibliografia
[1] Semiconductor Industry Association (SIA)
http://www.sia-online.org/home.cfm
[2] International Technology Roadmap for Semiconductors (ITRS), 2006 edition,
http://www.itrs.net
[3] R. D. Adams, High performance testing. Design priciples, fault modeling and
self-test, Kluwer academic publisher, 2003.
[4] J. Millman, C. C. Halkias, Microelettronica, Boringhieri, 1972.
[5] E. Taub, D. Schilling, Elettronica integrata digitale, Gruppo Editoriale Jackson,
1981.
[6] P. Mazumdern, E. M. Rudnik, Genetic Algorithms for VLSI design, layout and
test automation, Prentice Hall, 1999.
[7] L. Davis, Handbook of genetic algorithms, Van Nostrand Reinhold, 1991.
[8] M. Bucci, D. Circelli, Algoritmi genetici e simulated annealing per la soluzione
parallela di problemi di ottimizzazione combinatoriale, Tesi di laurea, Università
degli studi di Pisa, 1996.
[9] D. Whitley, A genetic algorithm tutorial, Computer science department,
Colorado state university.
[10] S. Hamdioui, Z. Al-Ars, A. J. van de Goor, M. Rodgers, Linked faults in random
access memories: concepts, fault models, test algorithms and industrial results,
Trans. on Computer-aided design of integrated circuits and systems, IEEE, vol.
23, no. 5, May 2004.
[11] R. Dekker, F. Beenker, L. Thijssen, Fault modeling and test algorithm development for static random access memories, International Test Conference, IEEE,
1988.
[12] L. Dilillo, P. Girard, S. Pravossoudovitch, A. Virazel, S. Borri, Comparison of
101
Bibliografia
[13]
[14]
[15]
[16]
[17]
[18]
[19]
[20]
[21]
[22]
open and resistive-open defect test conditions in SRAM address decoders, Proc.
of the 12th Asian Test Symposium, IEEE, 2003.
L. Dilillo, P. Girard, S. Pravossoudovitch, A. Virazel, S. Borri, March iC-: an
improved version of March C- for ADOFs detection, Proc. of the 22nd VLSI
Test Symposium, IEEE, 2004.
L. Dilillo, P. Girard, S. Pravossoudovitch, A. Virazel, S. Borri, M. B. HageHassan, Dynamic read destructive fault in embedded-SRAMs: analysis and
march test solution, Proc. of the 9th European Test Symposium, IEEE, 2004.
L. Dilillo, P. Girard, S. Pravossoudovitch, A. Virazel, S. Borri, M. B. HageHassan, Resistive-open defects in embedded-SRAM core cells: analysis and
march test solution, IEEE pp. 266-271, 2004.
L. Dilillo, P. Girard, S. Pravossoudovitch, A. Virazel, M. B. Hage-Hassan,
Resistive-open defects influence in SRAM Pre-charge circuits: analysis and
characterization, Proc. of the European Test Symposium, IEEE, 2005.
L. Dilillo, P. Girard, S. Pravossoudovitch, A. Virazel, M. B. Hage-Hassan, Data
retention fault in SRAM memories: analysis and detection procedures, Proc. of
the 23rd VLSI Test Symposium, IEEE, 2005.
L. Dilillo, P. Girard, S. Pravossoudovitch, A. Virazel, M. B. Hage-Hassan,
Resistive-open defects injection in SRAM core-cell: analysis and comparison
between 0.13µm and 90nm technologies, DAC’05, June 13-17, 2005, Anaheim,
California, USA, ACM, 2005.
A. Benso, S. Di Carlo, G. Di Natale, P. Prinetto, An optimal algorithm for the
automatic generation of march tests, Proc. of the 2002 Design, Automation and
Test in Europe Conference and Exhibition, IEEE, 2002.
F. Corno, P. Prinetto, M. Rebaudengo, M. Sonza Reorda, Gatto: a genetic
algorithm for automatic test pattern generation for large synchronous sequential
circuits, Trans. on Computer-aided design of integrated circuits and system,
IEEE, vol. 15, no. 8, August 1996.
P. Prinetto, M. Rebaudengo, M. Sonza Reorda, E. Veiluva, Gatto an intelligent
tool for automatic test pattern generation for digital circuits, IEEE pp. 411-417,
1994.
A. J. van de Goor, J. E. Simonse, Defining SRAM resistive defects and their
simulation stimuli.
102