Università degli Studi di Bologna FACOLTÀ DI SCIENZE MATEMATICHE, FISICHE E NATURALI Corso di Laurea in Fisica Materia di Tesi: Laboratorio di Elettronica PROGETTAZIONE DI UN PROCESSORE FUZZY VELOCE A DUE INGRESSI DALLA DESCRIZIONE VHDL AL LAYOUT FINALE Tesi di Laurea di: Relatore: Chiar. mo DAVIDE FALCHIERI GANDOLFI Prof. ENZO Correlatori: Prof. MASSIMO MASETTI Dott. ALESSANDRO GABRIELLI I SESSIONE Anno Accademico 1996/97 Università degli Studi di Bologna FACOLTÀ DI SCIENZE MATEMATICHE, FISICHE E NATURALI Corso di Laurea in Fisica Materia di Tesi: Laboratorio di Elettronica PROGETTAZIONE DI UN PROCESSORE FUZZY VELOCE A DUE INGRESSI DALLA DESCRIZIONE VHDL AL LAYOUT FINALE Parole chiave: CAD elettronico, VHDL, Logica Fuzzy,Trigger, VLSI Tesi di Laurea di: Relatore: Chiar. mo DAVIDE FALCHIERI Prof. ENZO GANDOLFI Correlatori: Prof. MASSIMO MASETTI Dott. ALESSANDRO GABRIELLI I SESSIONE Anno Accademico 1996/97 INDICE INTESTAZIONE ....................................................................................1 INDICE...................................................................................................3 INTRODUZIONE...................................................................................7 CAPITOLO 1........................................................................................11 1.1 La logica fuzzy............................................................................11 1.2 Termini ricorrenti di logica fuzzy ................................................12 1.3 Insiemi e regole fuzzy .................................................................13 1.4 Sistemi fuzzy...............................................................................15 1.5 Le fasi di un sistema fuzzy ..........................................................16 1.5.1 La fuzzificazione ..................................................................17 1.5.2 L’inferenza ...........................................................................18 1.5.3 La defuzzificazione...............................................................20 1.5.4 Considerazioni finali.............................................................23 1.6 Tempo di elaborazione ................................................................23 1.7 Diversi tipi di implementazione dei sistemi fuzzy........................25 CAPITOLO 2........................................................................................27 2.1 Evoluzione nella progettazione dei circuiti integrati ....................27 2.2 Flusso di progetto........................................................................30 2.3 Il linguaggio VHDL.....................................................................33 2.3.1 Terminologia VHDL............................................................34 2.3.2 Esempi di progettazione VHDL ............................................36 2.4 Generazione delle megacelle .......................................................39 2.5 Simulazione funzionale con Leapfrog Simulator..........................40 2.6 Sintesi del codice VHDL.............................................................41 2.6.1 Il processo di sintesi .............................................................42 2.6.2 Vincoli..................................................................................43 2.6.3 Libreria tecnologica ..............................................................44 2.7 Strumenti di simulazione .............................................................47 2.8 Simulazione circuitale con Verilog XL........................................48 2.9 Analisi temporale con Veritime ...................................................50 2.9.1 Dispositivi di memoria e vincoli temporali............................51 2.9.2 Come Veritime trova le violazioni temporali.........................53 2.9.3 Calcolo della lunghezza dei percorsi con Veritime................54 2.9.4 Visualizzazione delle violazioni con Veritime ......................56 2.10 Simulazione dei difetti di fabbricazione con Verifault XL .........58 2.11 Dallo schematic al layout ..........................................................61 2.11.1 Inclusione dei pad di I/O e di alimentazione........................61 2.11.2 Fase di posizionamento delle celle (placement)...................62 2.11.3 Fase di collegamento delle celle (routing) ...........................64 2.11.4 Verifica finale del progetto .................................................66 2.12 Riflessioni finali ........................................................................67 CAPITOLO 3........................................................................................69 3.1 Caratteristiche generali del processore fuzzy ...............................69 3.2 Il selettore di regole attive ...........................................................71 3.3 Il processo di fuzzificazione ........................................................72 3.4 Organizzazione della memoria delle regole .................................74 3.5 Funzionamento del processore.....................................................76 3.6 Fasi di pipeline............................................................................78 3.7 Generazione del layout del processore.........................................80 3.8 Trattamento dei segnali di I/O .....................................................84 3.9 Test del chip HEPE96 .................................................................85 3.10 Il processore fuzzy HEPE97 ......................................................88 3.11 Caratteristiche principali di HEPE97 .........................................89 CAPITOLO 4........................................................................................93 4.1 Note alla lettura del codice VHDL ..............................................94 4.2 Il selettore degli intervalli Int_Selector ........................................95 4.3 Il generatore di indirizzi Rule_Add_Gen .....................................99 4.4 Il generatore di indirizzi Address_Generator .............................101 4.5 Il blocco circuitale Core ............................................................103 4.5.1 La memoria delle regole Ramrule .......................................104 4.5.2 Le look-up table Rammf_X0 e Rammf_X1.........................107 4.5.3 Il blocco di minimo Minimum ............................................108 4.5.4 Il blocco moltiplicatore Alpha_Product_Wallace ................109 4.5.5 Funzionamento del blocco Core vero e proprio...................112 4.6 Il blocco di defuzzificazione Consequent ..................................118 4.6.1 Il blocco per la moltiplicazione Mult7x4fast ......................118 4.6.2 Il blocco per la divisione Divider .......................................119 4.6.3 Il blocco Consequent vero e proprio ...................................120 4.7 Il blocco Processor ....................................................................122 4.8 Dallo schematic al layout ..........................................................126 4.9 Fase di placement e di routing ..................................................129 CONCLUSIONI..................................................................................135 APPENDICE A...................................................................................137 APPENDICE B...................................................................................141 BIBLIOGRAFIA.................................................................................173 INTRODUZIONE L’oggetto di questo lavoro di tesi riguarda l’uso delle tecniche più avanzate per la progettazione di un processore fuzzy veloce (più avanti verrà spiegato l’effettivo significato di queste parole) in tecnologia digitale CMOS VLSI (VLSI sta per Very Large Scale of Integration e CMOS sta per Complementary Metal Oxide Semiconductor). Questo lavoro si inserisce all’interno della ricerca “fuzzy” per la realizzazione di una famiglia di processori veloci da utilizzare in esperimenti di fisica delle alte energie (HEPE) finanziato dal gruppo V dell’INFN. Infatti negli esperimenti di fisica delle alte energie è richiesto un hardware veloce che sappia distinguere fra i vari eventi nucleari quelli interessanti e rigetti quelli non significativi. Si parla di trigger di I o II livello se la decisione deve essere presa rispettivamente in un tempo inferiore ai 100 ns o dell’ordine del microsecondo. Fino ad ora tali trigger sono stati realizzati utilizzando o semplici circuiti combinatori o DSP che sono veloci ma poco flessibili. Ad un primo processore fuzzy progettato e realizzato nel ’94 (HEPE1000) è seguito il chip HEPE96, una versione più veloce a 4 ingressi, portato a termine e testato all’inizio del ’97. La caratteristica principale di questi processori è l’alta velocità di elaborazione che ne permette l’utilizzo in trigger di II livello. Io ho collaborato alla fase finale di realizzazione del layout di HEPE96 e alla fase di test dello stesso. In più ho curato tutte le fasi di progettazione del chip HEPE97, un processore fuzzy a 2 ingressi che oltre ad aumentare ulteriormente la velocità, avvicinandosi ai tempi richiesti per un trigger di I livello, presenta un’area ed un consumo molto ridotti. Questo ultimo nato sarà inviato alle fonderia ES2 nei prossimi giorni per la realizzazione dei primi esemplari prototipo. Una volta ultimato il processore sarà testato con l’ASIC Tester LV500, una macchina in dotazione al Laboratorio di Tecnologie Subnucleari che permette di controllare l’effettivo funzionamento dei chip costruiti. Il laboratorio di ricerca presso il quale è stato realizzato il lavoro utilizza alcune workstation della Sun Microsystems sulle quali viene fatto girare la versione 9405 del CAD elettronico Cadence Design Framework II, un ambiente di lavoro integrato costituito da diversi programmi che permettono la progettazione completa di un circuito elettronico integrato, dalla descrizione con il linguaggio VHDL fino alla composizione del layout pronto per essere realizzato su silicio. Cadence DFWII fornisce gli strumenti per la progettazione e la simulazione funzionale e circuitale di ogni singolo blocco in modo gerarchico così che risulta possibile progettare e testare i singoli blocchi in modo separato. La tesi è stata così strutturata: l’Introduzione presenta le motivazioni che hanno condotto alla progettazione di vari processori fuzzy da parte del gruppo di ricerca presso il quale ho operato in relazione alle future applicazioni nella fisica delle alte energie. Il Capitolo 1 descrive brevemente come è nata e come funziona la logica fuzzy e le diverse piattaforme che possono essere utilizzate per fare funzionare un algoritmo fuzzy. Il Capitolo 2 illustra brevemente l’evoluzione dei metodi di progettazione di circuiti elettronici, dal full-custom fino agli ultimi linguaggi descrittivi dell’hardware. Inoltre presenta in dettaglio la successione dei passi logici che il progettista deve seguire nella progettazione di un circuito integrato affinché il prodotto finale abbia buone probabilità di funzionare correttamente una volta realizzato fisicamente su silicio. Vengono descritte le fasi di stesura del codice VHDL, la simulazione funzionale della descrizione VHDL, la sintesi, la simulazione circuitale e la successiva generazione del layout finale nell’ordine preciso in cui devono essere eseguite per affrontare qualsiasi progetto. Il Capitolo 3 presenta l’architettura del processore fuzzy a 4 ingressi HEPE96, le sue caratteristiche di funzionamento ed i risultati dei test effettuati sui prototipi con l’ASIC Tester LV500. Inoltre viene presentata l’architettura del nuovo processore fuzzy HEPE97 a due ingressi sottolineando le differenze con il chip precedente e le prestazioni globali ottenute. Il Capitolo 4 presenta in dettaglio tutti i blocchi logici in cui è stato suddiviso il processore HEPE97 descrivendo per ognuno di questi la successione dei passi logici relativi al flusso di progetto. Di ogni blocco è presentata la descrizione VHDL, lo schema circuitale ed i risultati delle relative simulazioni. Lo stesso vale per il blocco più alto nella gerarchia, cioè il blocco processore che contiene al suo interno tutti gli altri blocchi e li temporizza adeguatamente tramite la logica di controllo. Da qui si passa poi alle fasi della generazione del layout fino alla presentazione del layout finale ottimizzato al meglio e pronto per la consegna alla fonderia. Le Conclusioni presentano un riepilogo del lavoro svolto e le prospettive future relativamente alla progettazione di processori sempre più veloci ed utilizzati regolarmente nella parte elettronica di controllo di esperimenti di fisica delle particelle. L’Appendice A riporta un glossario dei termini tecnici inglesi utilizzati. L’Appendice B riporta per esteso il codice VHDL relativo alla progettazione integrale del processore HEPE97. Questa scelta permetterà di utilizzare tale tesi anche come strumento didattico fornendo un set organico di istruzioni VHDL relative ad un progetto completo di un processore. Si fa presente che durante la tesi sono state utilizzati molti vocaboli tecnici direttamente in linguaggio originale (inglese) poiché la traduzione in italiano avrebbe richiesto l’uso di più parole che, oltre ad appesantire il linguaggio, avrebbero difficilmente precisato il significato del termine tecnico usato. Per tali termini abbiamo comunque dato una spiegazione la prima volta che vengono utilizzati oltre a riportarli in ordine alfabetico in apposito glossario posto in Appendice A. CAPITOLO 1 1.1 La logica fuzzy La seguente descrizione della logica fuzzy non vuole essere una trattazione esaustiva e formale dell’argomento, ma si limita ad accennare alle caratteristiche più interessanti in relazione alle sue possibili applicazioni. La logica tradizionale introdotta da Aristotele è di tipo bivalente, non lascia spazio cioè ad ambiguità: un oggetto è classificato o bianco o nero, o caldo o freddo, o pieno o vuoto, senza alcun grado di sfumatura nella sua descrizione. Ciò significa che il grado di appartenenza di un oggetto ad un insieme è o 0 o 1, non vi sono soluzioni intermedie. Questa schematizzazione della realtà è molto riduttiva e può portare a vere e proprie conclusioni assurde. Vediamo l’esempio della temperatura di una stanza: la logica tradizionale classifica la temperatura come bassa sotto i 15 °C, normale fra 15 e 25 e alta oltre i 25 °C. In questo modo la temperatura di 25 °C viene considerata normale, mentre la temperatura di 25.1 °C è considerata alta: è ovvio che una demarcazione così netta non ha senso visto che le due temperature differiscono di un solo decimo di grado. Occorre perciò una demarcazione più sfumata fra gli insiemi se si vuole ottenere una descrizione più aderente alla realtà. Una logica multivalente a tre valori (0, 0.5, 1) fu proposta negli anni venti dal matematico polacco Jan Lukasiewicz. In questo periodo anche lo sviluppo della teoria quantistica ed i conseguenti paradossi (principio di indeterminazione di Heisenberg, ambiguità della posizione di una particella elementare) diedero impulso ai tentativi di superare i limiti della logica tradizionale. La logica fuzzy [1] è stata introdotta nel 1965 dall’ingegnere armeno trasferitosi a Berkeley Lofti A. Zadeh come un ulteriore tentativo di rendere la logica più aderente alla realtà. Nella logica fuzzy un elemento appartiene ad un dato insieme con un grado di appartenenza compreso fra 0 e 1. Questo significa anche che uno stesso oggetto può appartenere a due insiemi diversi con differenti gradi di appartenenza: ad esempio la temperatura di una stanza può appartenere all’insieme “Temperatura Calda” con un grado di verità di 0.7 e all’insieme “Temperatura Media” con il valore 0.3. In questo modo viene violato il famoso principio di non contraddizione della logica aristotelica secondo cui un elemento non può appartenere contemporaneamente a due insiemi diversi. L’introduzione della logica fuzzy quindi modifica sostanzialmente tutti i principi che stanno alla base della logica tradizionale. L’uso degli insiemi fuzzy permette una descrizione più aderente della realtà : lo stesso linguaggio naturale di uso comune si basa su concetti fuzzy del tipo caldo, freddo, alto, basso, forte, ecc., e fornisce una descrizione adeguata della realtà anche se è dotato di una precisione limitata. La logica fuzzy quindi si propone principalmente come il mezzo attraverso cui tentare una descrizione quantitativa del linguaggio naturale. A differenza dei sistemi tradizionali i sistemi basati sulla logica fuzzy sono capaci di elaborare regole fuzzy del tipo : se la temperatura è alta allora apri la finestra senza il bisogno di un modello matematico che regoli il comportamento da intraprendere in base al valore esatto della temperatura di una stanza. È per questo motivo che un sistema fuzzy progettato per risolvere un determinato problema è molto più trasparente e facile da implementare del corrispondente sistema basato sulla logica tradizionale. Le prime applicazioni pratiche di questa teoria sono iniziate solo in anni recenti. Attualmente si assiste ad un moltiplicarsi di queste applicazioni, in particolare nell’ambito di sistemi di controllo fuzzy, in vari settori: dal controllo di impianti e processi industriali alla gestione di apparecchi elettrodomestici, alla regolazione automatica di macchine fotografiche e telecamere, fino al controllo di impianti di trasmissione e frenatura degli autoveicoli. Oltre al sistemi di controllo i due settori che di più hanno assistito all’introduzione di questa metodologia sono quelli riguardanti i sistemi di “pattern recognition” e di “information retrieval”. Un particolare curioso è che i primi a cogliere i vantaggi dei sistemi fuzzy sono stati i giapponesi: probabilmente la mentalità orientale e la filosofia buddista sono più ricettive dei concetti fuzzy di quanto lo sia la mentalità occidentale, fortemente ancorata alla filosofia aristotelica. 1.2 Termini ricorrenti di logica fuzzy La logica fuzzy ha introdotto con sé una nuova terminologia per definire tutti gli elementi della logica. È bene dunque precisare il significato dei termini più importanti in quanto d’ora in avanti verranno usati molto spesso. • Variabile linguistica (variabile fuzzy) : è la variabile descrittiva impiegata in un processo (temperatura, velocità, ecc.). • Universo del discorso : è il campo di esistenza della variabile linguistica. In pratica equivale all’insieme di tutti i possibili valori che la variabile può assumere. • Insieme fuzzy (Fuzzy Set) : è l’insieme delle coppie ordinate costituite dai valori della variabile linguistica e dai corrispondenti gradi di appartenenza ad una determinata funzione di appartenenza. • Term Set : è l’insieme di tutti gli insiemi fuzzy associati a una variabile. • Funzione di appartenenza (Membership Function, MF) : è la funzione che, descrivendo in modo analitico la forma di un insieme fuzzy, permette di associare ad ogni valore di una variabile linguistica un determinato grado di appartenenza. • Grado di appartenenza : valore che definisce l’appartenenza di una variabile linguistica all’insieme fuzzy corrispondente per mezzo di un numero compreso fra 0 e 1 utilizzando il valore attuale della variabile. Il processo che porta a calcolare il grado di appartenenza si chiama fuzzificazione. • Regola fuzzy : istruzione del tipo “Se la Premessa è ... allora la Conclusione è …” che permette di associare gli ingressi alle uscite. • Inferenza : procedimento attraverso il quale in base al grado di verità della premessa viene attivato l’insieme fuzzy di uscita. • Defuzzificazione : processo di calcolo del valore di uscita (crisp) di un sistema fuzzy in base alla somma dei contributi di tutte le regole. 1.3 Insiemi e regole fuzzy Un esempio di insiemi fuzzy è riportato in fig. 1.1: l’insieme di tutti i possibili valori che può assumere la variabile Temperatura è stata suddivisa in tre insiemi, le zone Temperatura Bassa, Media e Alta. In questo modo una temperatura di 16 °C è considerata al tempo stesso come una temperatura bassa e come una temperatura media con due diversi gradi di ambiguità. È importante sottolineare che il grado di appartenenza non è una probabilità. Quando si dice che la temperatura è alta con una probabilità del 50 % significa che questo evento si verifica 50 volte ogni 100 eventi. Quando invece si dice che la temperatura appartiene all’insieme “Temperatura alta” con un grado di verità di 0.5 significa che questo fatto ha un grado di ambiguità del 50 %. Nel primo caso si ha una misura della frequenza statistica di un evento, nel secondo caso si ha la misura di un fatto deterministico ma ambiguo. g rad o d i ap p arten en za α P icco la M ed ia A lta tem p eratu ra ( C ) Fig. 1.1: Insiemi fuzzy associati alla variabile temperatura. Essendo gli insiemi strutturati in questo modo la logica fuzzy si presta a formalizzare il ragionamento umano in modo quasi immediato: un uomo per decidere se è il caso o meno di aprire la finestra e rinfrescare la stanza non ha bisogno di conoscere con precisione il valore della temperatura interna istante per istante ma gli basta sapere se la temperatura è bassa, media o alta. Il comportamento verrà di conseguenza. Qualsiasi problema può essere descritto con una serie di regole del tipo: se(x è basso) e (y è alto) allora (z è medio); Noti il grado di appartenenza di x all’insieme fuzzy “basso” e di y all’insieme “alto” l’implicazione allora definisce in che modo viene attivata la conclusione relativa all’insieme fuzzy per la variabile z di uscita. Dopo avere calcolato i contributi delle regole fuzzy che formalizzano un problema un opportuno processo di defuzzificazione avrà il compito di dare un valore ben definito (crisp) all’uscita z. Il punto di forza della logica fuzzy sta proprio nella capacità di manipolare misure ambigue, indefinite, approssimative, cioè fuzzy. Il bisogno della logica tradizionale di misure precise è spesso dovuto, non ad una reale necessità di precisione, ma ad una sua impossibilità di manipolazione di grandezze sfumate. Inoltre una misura precisa può comportare notevoli sforzi, come del resto la sua elaborazione, e la maggior parte delle volte la precisione raggiunta è molto superiore a quella effettivamente necessaria per gli scopi che il sistema si prefigge. In questi casi la logica fuzzy può essere la soluzione ideale come spesso afferma Zadeh quando sottolinea che una delle potenzialità di detta metodologia è implicita nella frase “Exploit the Tolerance for Imprecision”. Per questo motivo la logica fuzzy è molto indicata nella soluzione di problemi complessi dove non è noto un preciso algoritmo che lega gli ingressi all’uscita. In questi casi è molto efficace la modellazione del processo tramite descrizioni qualitative e quantitative. ango lo v elocita' cop pia Fig. 1.2 : Pendolo invertito. 1.4 Sistemi fuzzy I sistemi fuzzy costituiscono l’effettiva implementazione della logica fuzzy per la soluzione di problemi complessi che sono difficilmente formalizzabili con un algoritmo tradizionale. Di tali problemi spesso non si conosce una soluzione analitica oppure è talmente complicata che non vale la pena determinarla. Al contrario il sistema fuzzy si distingue per la semplicità delle regole che descrivono il problema, regole che devono essere fornite da un esperto. Ne è un esempio classico il problema del pendolo invertito (vedi fig. 1.2): un pendolo è fissato per la sua estremità inferiore ad un carrello mobile sull’asse orizzontale; lo scopo è di mantenerlo in equilibrio fornendo un’adeguata coppia equilibratrice coppia in base all’angolo angolo formato dall’asta con la verticale e alla velocità angolare velocità. Il modello matematico di questo problema consiste in un sistema non lineare di due equazioni differenziali del quarto ordine; usando la logica fuzzy invece questo problema è risolto perfettamente usando sole 15 regole. Le regole usate sono semplici e dettate dal senso comune, ad esempio: • se l’angolo è circa 0 e la velocità è circa 0 allora la coppia è circa 0; • se l’angolo è piccolo e la velocità è circa 0 allora la coppia è piccola e negativa; • se l’angolo è piccolo e negativo e la velocità è circa 0 allora la coppia è piccola e positiva. In questo come in molti altri casi l’uso di un sistema fuzzy è molto più conveniente rispetto agli algoritmi tradizionali. 1.5 Le fasi di un sistema fuzzy Per costruire un sistema fuzzy dotato di ingressi e uscite ( vedi fig. 1.3) occorre definire gli insiemi fuzzy delle variabili di ingresso e le regole che associano gli ingressi alle uscite. Fatto questo la struttura logica del ragionamento fuzzy è la seguente: 1) Lettura delle variabili di ingresso. le ttu ra d elle v a ria b ili d i in g re sso le d u e fasi so n o rip e tu te p e r o g n i re g o la fu z zific a zio n e re g o le fu z z y in fe re n z a c o m p o sizio n e e d e fu zz ific az io n e u sc ita c risp Fig. 1.3 : Le fasi di un sistema fuzzy. 2) Lettura della regola ed individuazione : • delle variabili di ingresso coinvolte dalla regola e dei rispettivi insiemi fuzzy ; • dell’insieme fuzzy del conseguente delle regole. 3) Fuzzificazione delle variabili di ingresso rispetto agli insiemi fuzzy letti nella regola. 4) Calcolo del grado di verità della premessa della regola e inferenza sull’insieme fuzzy coinvolto della variabile d’uscita. 5) Composizione di tutti gli insiemi fuzzy di uscita coinvolti e defuzzificazione, cioè conversione in un ben determinato valore numerico (detto valore crisp). I passi 2-3 sono ripetuti per tutte le regole del sistema fuzzy. L’architettura generale di un sistema fuzzy contiene quindi al suo interno una base di dati che descrive gli insiemi fuzzy, una base di dati per le regole fuzzy, il blocco per la fuzzificazione, un blocco per l’inferenza ed uno per la defuzzificazione. Queste sono le caratteristiche generali di un qualsiasi sistema fuzzy: il modo specifico con cui ognuno di questi blocchi viene implementato dipende dal particolare algoritmo fuzzy scelto. I prossimi paragrafi descrivono i tipi di algoritmi più usati nella costruzione di un sistema fuzzy. 1.5.1 La fuzzificazione Supponiamo di avere un sistema fuzzy costituito da tre variabili d’ingresso X0, X1 e X2 ed un’uscita Z ognuna delle quali possiede le tre funzioni di appartenenza Piccolo, Medio e Alto della fig. 1.4. g rad o d i ap p arten en za α p icco lo m ed io alto 0 .8 5 0 .2 5 0 18 Fig. 1.4: Processo di fuzzificazione della variabile in ingresso X0. 127 La regola tipica di questo sistema fuzzy sia di questo tipo: se (X0 è Piccolo) e (X1 è Medio) e (X2 è Alto) allora (Z è Medio) (1.1) dove si è fatta l’ipotesi che l’unico connettivo usato fra gli antecedenti è l’AND, cioè questa regola ha un peso se e solo se ognuno dei tre antecedenti (X0 è Piccolo), (X1 è Medio) e (X2 è Alto) è verificato. Se invece del connettivo AND si usa il connettivo OR la regola : se (X0 è Piccolo) o (X1 è Medio) o (X2 è Alto) allora (Z è Medio) (1.2) è attivata nel caso in cui uno solo dei tre antecedenti si verifichi. La prima operazione che deve compiere il sistema fuzzy consiste nell’individuare i fuzzy set delle variabili d’ingresso in funzione del valore attuale delle variabili stesse (valore delle variabili nell’istante desiderato) e calcolarne il grado di appartenenza per ogni insieme. Si supponga che l’universo del discorso di X0 sia l’intervallo [0, 127] e che il valore attuale della variabile d’ingresso X0 sia 18. Fuzzificare X0 significa calcolare, per ogni insieme fuzzy, il suo grado di appartenenza, quindi dalla figura risulta che: • il grado di appartenenza di X0 all’insieme Piccolo è 0.85; • il grado di appartenenza di X0 all’insieme Medio è 0.25; • il grado di appartenenza di X0 all’insieme Alto è 0. Il grado di appartenenza che è interessante ai fini della regola (1.1) è il primo, cioè il grado di appartenenza all’insieme Piccolo. 1.5.2 L’inferenza La seconda fase consiste prima di tutto nel determinare il grado di verità dell’intera premessa θ in base ai gradi di verità α determinati per ogni antecedente nella regola. In letteratura si trovano diversi metodi per tenere conto del contributo di più antecedenti : per semplicità riporteremo di seguito solo il metodo più utilizzato. Nell’ipotesi che gli α corrispondenti della regola (1.1) siano α1, α2 e α3 il grado di verità della premessa è dato da: θ = MIN (α1, α2, α3) (1.3) in quanto il connettivo usato fra gli antecedenti è l’AND logico. Nel caso della regola (1.2) dove il connettivo usato è l’OR disgiuntivo il grado di verità della premessa è dato dalla formula : θ = MAX(α1, α2, α3) (1.4) Una volta calcolato il grado di verità θ della premessa deve essere calcolato l’effetto di θ sulla conclusione della regola. Infatti il grado di verità dell’affermazione (Z è Medio) dipende dal grado di verità della premessa : tanto più la premessa è vera, tanto più lo sarà la conclusione e viceversa. Esistono vari metodi di inferenza fuzzy, qui di seguito verranno descritti i più famosi: il metodo “Min-Max”, il metodo “Max-Dot”, il metodo di inferenza di Yager ed i metodi di Sugeno di ordine 0 e di ordine 1. Il metodo d’inferenza “Min-Max” [2] La funzione di appartenenza dell’uscita Z viene troncata superiormente al valore θ. Così se la funzione di appartenenza di Z è di forma triangolare, come in fig. 1.5, una volta eseguita l’inferenza questa viene ridotta ad un trapezio di altezza θ. Il metodo d’inferenza “Max-Dot” [2],[3] Questo metodo si differenzia dal primo nel momento in cui si va a calcolare l’insieme fuzzy di uscita. Mentre il metodo “Min-Max” tronca la funzione di appartenenza individuata dalla regola fuzzy al valore θ, con questo metodo la funzione di appartenenza viene moltiplicata per il medesimo valore, comportando perciò non l’effetto di troncamento ma di riduzione di tutta la figura (vedi fig. 1.5). Θ M ed io Θ Z M IN Θ M ed io Z DOT M ed io ZL Z i Z R Z YA G E R Fig. 1.5: Visualizzazione dei metodi di inferenza “Min-Max”, “Max-Dot” e di Yager. Il metodo d’inferenza di Yager [4] Il metodo d’inferenza di Yager calcola il valore della funzione di appartenenza dell’uscita crisp Zi in base ai valori ZL e ZR che sono ottenuti, vedi fig. 1.5, dall’intersezione della funzione di appartenenza dell’uscita con la retta orizzontale individuata dal valore di verità della premessa θ. Zi è dato semplicemente dalla media fra i due valori ottenuti ZL e ZR. I metodi d’inferenza di Sugeno di ordine 0 e di ordine 1 [5] Questo approccio che semanticamente si allontana un po’ dalla logica fuzzy ha assunto un ruolo importante nella costruzione di sistemi automatici capaci di produrre algoritmi fuzzy partendo da esempi e non dalla conoscenza di un esperto. Si è anche visto che le soluzioni ottenute non alterano sensibilmente la qualità dei sistemi che utilizzano anche per le variabili di uscita gli insiemi fuzzy. In questo caso Sugeno suggerisce più possibilità : le più usate sono note come metodo di Sugeno ordine 0 e Sugeno ordine 1. Nel metodo di Sugeno ordine 0 ogni regola ha come conseguente un valore crisp della variabile d’uscita fissato. Questo è il metodo che sarà usato all’interno dei processori fuzzy HEPE96 e HEPE97. Nel metodo d’inferenza di Sugeno di ordine 1 invece il valore Z non è un valore fisso ma è una combinazione lineare degli ingressi. Ad esempio se gli ingressi del sistema fuzzy sono X e Y l’uscita per ogni regola è data dalla seguente formula : Z = a + b*X + c*Y (1.5) dove a, b e c cambiano da regola a regola. 1.5.3 La defuzzificazione La precedente fase ha permesso di associare ad ogni regola attivata dal gruppo di valori in ingresso un insieme fuzzy o un valore crisp in uscita. A questo punto risulta necessario comporre i contributi delle singole regole e successivamente estrarre il valore crisp dell’uscita. Stessa cosa andrà fatta sui valori crisp Zi ottenuti per ogni regola. Anche in questo caso vi sono diversi metodi di composizione; essi vengono generalmente scelti in base ai metodi di inferenza utilizzati nella fase precedente. Qui di seguito sono spiegati i tre metodi più comuni che sono normalmente associati rispettivamente ai metodi inferenziali “Min-Max”, “Max-Dot” e di Yager-Sugeno. Metodo di composizione “Maximum” Questo metodo, generalmente associato al metodo inferenziale “Min-Max”, costruisce l’insieme finale di output mediante l’unione di tutti gli insiemi fuzzy delle variabili di uscita, cioè sovrapponendo tutte le funzioni di appartenenza troncate (vedi fig. 1.6) . α 1 Z 0 127 Fig. 1.6: Composizione delle regole con il metodo “Maximum”. Metodo di composizione “Sum” Il metodo di composizione associato al metodo d’inferenza “Max-Dot” è il metodo Sum. Esso consiste in una somma algebrica delle funzioni di appartenenza che rappresentano gli insiemi delle variabili di uscita calcolati nella fase precedente (fig. 1.7). α 1 0 Z 127 Fig. 1.7: Composizione delle regole con il metodo “Sum”. Per i primi due metodi, invece, ottenuto un unico insieme fuzzy, rappresentante di tutti gli insiemi fuzzy associati alle regole attivate, si dovrà tradurre quest’ultimo in un valore numerico mediante il processo di defuzzificazione vero e proprio. Anche stavolta sono mostrati i due metodi più famosi: il metodo del centro dell’area (center of gravity) ed il metodo “height”. Il metodo del centro dell’area Questo metodo, che probabilmente è il più usato, consiste nel calcolare il baricentro dell’insieme fuzzy finale (vedi fig. 1.8) : questo valore crisp costituisce il valore dell’uscita desiderata del sistema fuzzy. α 1 Z 0 valore crisp di uscita 127 Fig. 1.8 : Metodo di defuzzificazione del centro dell’area. Il metodo “height” Questo secondo metodo di defuzzificazione, generalmente applicato nel caso dell’utilizzo del metodo inferenziale “Max-Dot”, sceglie come valore crisp d’uscita l’ascissa dell’elemento dell’insieme finale di uscita con il più alto grado di appartenenza, cioè l’ascissa corrispondente al massimo della funzione di appartenenza finale (vedi fig. 1.9). Metodo di defuzzificazione relativo agli insiemi d’uscita crisp Ottenuto il valore crisp Zi per ogni regola del sistema fuzzy, il metodo di composizione delle regole di Yager e di Sugeno somma fra loro tutti questi valori ottenuti pesandoli con il rispettivo valore del grado di verità della premessa θi. Nella pratica la formula usata nel metodo di defuzzificazione è la seguente : zeta _ out = (1.6) ∑ Zi * Θi ∑ Θi α 1 0 valore crisp d'uscita Z 127 Fig. 1.9 : Metodo di defuzzificazione “height”. 1.5.4 Considerazioni finali In sostanza per costruire un algoritmo fuzzy occorre scegliere : • le variabili di ingresso e uscita ; • gli insiemi fuzzy per tutte le variabili ; • l’insieme di regole che associano gli ingressi alle uscite. Occorre quindi scegliere : • quali operatori associare ai connettivi AND e OR relativi alle premesse delle regole ; • il metodo di inferenza ; • il metodo di defuzzificazione. Una volta che sono state prese queste decisioni l’algoritmo fuzzy risulta perfettamente definito. 1.6 Tempo di elaborazione Il flusso di dati all’interno di un sistema fuzzy, qualunque sia l’algoritmo scelto fra quelli presentati, è di tipo top-down, cioè lineare dagli ingressi alle uscite senza istruzioni di salto. Per questo motivo quando un sistema fuzzy viene implementato in hardware viene usata tipicamente un’architettura di tipo “pipeline”, cioè strutturata in vari blocchi che uno dopo l’altro elaborano i risultati del blocco precedente. Così il blocco della fuzzificazione elabora i valori degli ingressi e li dà in ingresso al blocco dell’inferenza che procede al calcolo mentre i nuovi valori di ingresso vengono fuzzificati dal blocco precedente. In questo modo possono essere raggiunte velocità di elaborazione molto alte. Si può affermare che il tempo necessario a produrre una uscita relativa ad un set di variabili di ingresso dipende da: • tempo dovuto alla fuzzificazione; • tempo necessario a processare tutte le regole (equivalente al tempo di elaborazione di una regola per il numero di regole); • tempo necessario ad aggregare i contributi delle regole; • tempo dovuto alla defuzzificazione. Una grossa frazione del tempo globale di elaborazione degli ingressi è dovuto quindi al processo di inferenza delle regole: va sottolineato però che il numero di regole che danno un contributo non nullo all’uscita, dette per questo motivo regole attive, è di solito molto minore del numero totale di regole utilizzato dal sistema. Per questo motivo conviene processare soltanto le regole attive. Tutte quelle regole contenenti antecedenti il cui grado di verità α è 0 danno ovviamente un contributo nullo all’uscita (poiché i metodi usati per l’inferenza sono il minimo ed il prodotto) perciò è inutile prenderle in considerazione. Vediamo quanto si può guadagnare processando solo le regole attive: in un sistema fuzzy con N variabili in ingresso e K insiemi fuzzy per ognuna di queste variabili l’insieme completo di tutte le possibili regole è KN (questo è il numero massimo, un problema concreto però può essere descritto con un numero di regole molto minore). I valori reali assunti dalle N variabili d’ingresso rendono attive un sottoinsieme delle possibili KN regole. Nell’ipotesi che al massimo si possano sovrapporre fra loro due insiemi fuzzy adiacenti il numero di regole attive si riduce a 2N, nell’ipotesi in cui si potessero sovrapporre 3 insiemi adiacenti il numero di regole attive sarebbe 3N. Per questi motivi la selezione di regole attive permette di diminuire molto il tempo globale di elaborazione degli ingressi. Infatti se si considera un sistema fuzzy con 4 ingressi e 7 insiemi fuzzy per ogni ingresso il numero totale di regole è 74=2401, mentre il numero di regole attive è di sole 24=16. 1.7 Diversi tipi di implementazione dei sistemi fuzzy I sistemi fuzzy consentono generalmente di risolvere con semplicità problemi che altrimenti richiedono una sofisticata logica di controllo e, in certi casi, offrono la possibilità di risolvere nuovi problemi, prima difficilmente affrontabili. Nella realizzazione pratica si hanno tre modalità di implementazione: • la prima prevede lo sviluppo del sistema fuzzy in un linguaggio ad alto livello (ad esempio il linguaggio C o C++) e di farlo funzionare poi su un microprocessore tradizionale. Questa soluzione è interessante quando l’economicità complessiva del sistema è più importante della velocità di elaborazione. • la seconda associa ad un microprocessore convenzionale, che tipicamente gestisce l’interfaccia col mondo esterno, un coprocessore ottimizzato per le computazioni fuzzy, il che consente ovviamente elaborazioni più rapide. • la terza utilizza hardware fuzzy dedicato (digitale, analogico o ibrido, cioè analogico - digitale) e consente le più elevate prestazioni in termini di velocità. Il primo chip fuzzy fu realizzato nel 1985 da AT&T ed elaborava 16 regole semplici alla velocità di 0.08 milioni di inferenze logiche al secondo (MFLIPS= Mega Fuzzy Logic Inferences Per Second).Oggi sono disponibili a livello commerciale processori fuzzy fino a 20 milioni di regole fuzzy al secondo. Si stima che il mercato attuale dei microprocessori fuzzy abbia un valore dell’ordine di un miliardo di dollari, ma si ritiene che esso aumenterà notevolmente nei prossimi anni e si prevede che almeno il 50 % dei microcontrollori incorporeranno funzioni di logica fuzzy. Un esempio famoso di questo tipo di applicazione è il coprocessore fuzzy WARP 2.0 [6] (WARP sta per Weight Associative Rule Processor) della SGSThomson, associabile al microcontrollore standard ST9. WARP 2.0 comprende le funzioni di fuzzificazione, associazione I/O e defuzzificazione e può eseguire 32 regole con 5 ingressi e un’uscita in 1.85 µs. Se la velocità non è ancora sufficiente occorre utilizzare un processore dedicato che sia calibrato sulla specificità dell’algoritmo fuzzy da eseguire. Dati gli ingressi da analizzare il processore deve essere in grado di portare avanti tutta l’elaborazione in base al sistema fuzzy memorizzato in una RAM o ROM interna. Nel caso di una ROM il sistema fuzzy memorizzato rimane fisso mentre nel caso di una RAM o di una ROM programmabile (PROM) qualsiasi sistema fuzzy desiderato dall’utente può essere caricato all’interno. Una soluzione del genere presenta caratteristiche di maggiore compattezza e velocità, ma il problema vero sta nel fatto che sul mercato non si trovano processori di questo tipo. Le applicazioni industriali dei processori fuzzy sono molto sviluppate e tuttora in continua crescita soprattutto nel campo del controllo e del riconoscimento di immagini dove il vincolo principale non è la velocità ma il risparmio. Per applicazioni in cui la velocità è l’obiettivo primario come la realizzazione di trigger per esperimenti di fisica delle alte energie l’unica soluzione possibile è quella di progettare interamente un processore fuzzy cercando di utilizzare tutti gli accorgimenti che ne accelerino i tempi di esecuzione.