Simulazione: Analisi di un fenomeno, di un processo o di un sistema effettuata attraverso la costruzione di un modello matematico che lo simuli, sviluppato in genere mediante un elaboratore elettronico; (def. Garzanti) in particolare: Simulazione simbolica: Simulazione di un sistema all’interno del quale tutti o alcuni dei parametri che lo caratterizzano vengano lasciati in formato “simbolico”, e vengano quindi inseriti nel risultato in forma letterale piuttosto che numerica. Electronic circuit simulation: use of the mathematical models to replicate the behavior of an actual electronic device or circuit. Why using a simulator? Simulating a circuit’s behavior before actually building it greatly improves efficiency and provides insights into the behavior of electronics circuit designs. (Defs. Wikipedia) Classificazione dei simulatori elettrici/elettronici e principali prodotti Simulatori analogici (numerici): Simulatori digitali: - PSpice (Cadence OrCAD) (decine k€) - LTSpice (Linear Semiconductor) free - CircuitLogix (Logic Design Inc.) free - PLECS (Simulink toolbox) 5000/1000 € - gEDA Project (Linux) free - TOPSpice (Penzar Dev.) 500 $ - Verilog (Cadence, proprietaria fino al 1990) - VHDL - PSpice A/D Simulatori analogici (simbolici): Simulatori di uso generico: SAPWIN (Università di Firenze) free -SNAP SAPWIN (Università di Firenze) (IMEL FEEC BUT, Brnofree ) free -ISAAC SNAP (IMEL FEECKat. BUT,Univ. Brno Leuven) ) free (obsolete, - ISAAC (obsolete, Kat. Univ. Leuven) ANALOG INSYDES (Mathematica toolbox) - ANALOG INSYDES (Mathematica toolbox) 5000/1000 € - no free version 5000/1000 € (full/academic) - no free version Symbolic Math Toolboxdi MATLAB (General purpose) (200 € + 500 € Matlab lic.) - Symbolic Math Toolbox di MATLAB (200 € + 500 € Matlab lic.) - Simulink per MATLAB (500 € + 500 € Matlab lic.) - Mathematica - Maple Simulazione numerica e SPICE – breve storia SPICE nasce negli USA (Università di Berkeley) nel 1972 e presentato per la prima volta nel 1973. Il suo programmatore è Laurence Nagel sotto la guida del Prof. Donald Peterson; Il programma prende origine dal primo simulatore circuitale ad uso civile, CANCER, già sviluppato da Nagel nel 1969-70. Differenze fondamentali rispetto a CANCER sono il codice di pubblico dominio e i modelli per JFET e MOSFET; SPICE1 è scritto interamente in FORTRAN, così come SPICE2 (prima versione del 1975, ultima versione del 1983); Nel 1989 vede la luce SPICE3, completamente riscritto in C; Dal 1984 comincia lo sfruttamento commerciale dei simulatori su base SPICE, con PSPICE (Microsim, poi OrCAD-Cadence), HSPICE (Synopsis), XSPICE (Georgia Tech) et al.; Molte aziende di produzione elettronica/IC sviluppano simulatori basati su SPICE: ADICE (Analog Devices), LTspice (Linear Technology), Mica (Freescale Semiconductor), TISPICE (Texas Instruments). SPICE – Algoritmo risolutivo Tipi di analisi consentita: Analisi DC (comando .DC) Analisi nel .TRANS) tempo (comando Analisi AC (comando .AC) Si possono identificare nell’intero diagramma a blocchi vari sottoblocchi: --- Fase di analisi nodale del circuito, blocchi 3 - 4 --- Ciclo interno, blocchi 2 – 6, ricerca della soluzione per circuiti non lineari --- Ciclo esterno, blocchi 7 – 10, ricerca della soluzione per circuiti non lineari SPICE – Analisi DC Circuiti lineari: è il caso più semplice, i blocchi che lo riguardano sono in sostanza solo il 3 e il 4; il circuito diviene completamente resistivo poiché Circuiti non-lineari: in questo caso occorre linearizzare i componenti non lineari nell’intorno del punto di lavoro in continua (blocchi 1 - 6), e innescare un processo iterativo (algoritmo di Newton-Raphson), come descritto nella pagina successiva. SPICE – Componenti non lineari Esempio diodo: Vd VT − 1 I d = I o e La linearizzazione richiede di considerare la retta tangente alla curva caratteristica del dispositivo, nel punto di lavoro G eq = dI d dVd = do Vdo Io e VT VT kT ; I 0 ≅ 10 −15 A − e k = cost. di Boltzmann; V T= e - ≅ carica dell' elettrone e di sostituire quindi alla caratteristica stessa la retta di pendenza Geq: Ieq = Ido − Geq·Vdo A questo punto risolvo il set di equazioni lineari e trovo una soluzione che è valida in un punto di lavoro Vdo che è stato inizialmente scelto a caso e che mi fornisce un nuovo valore di tensione (e di corrente) da adottare come punto di lavoro per il passo successivo del procedimento iterativo, che continuerà finché |Vk+1 – Vk| < ε SPICE – Componenti non lineari Esempio diodo all’interno di un circuito: Si parte da un valore di V2 arbitrario, e si determina il circuito linearizzato del diodo SMSMI#80#170#1#6 R#150#110#1#2 R2 1 R1 Is R#250#90#1#4 D#300#110#1#2 W#80#190#1#80#170 SMSMI#80#170#1#6 R#150#110#1#2 D1 W#80#190#1#80#170 R2 1 2 R#250#90#1#4 R1 2 Geq Is D1 Si determinano le eq. Di nodo del circuito: (G1 + G2 )V1 − G2V2 = I s − G2V1 + (G2 + Geq )V2 = − I eq W#150#190#1#150#170 Ieq SPICE – Componenti non lineari Risolvo quindi rispetto a V1 e V2: V2 = V1 = G2 I s − (G1 + G2 ) I eq G1G2 + Geq (G1 + G2 ) G2 I s − (G1 + G2 ) I eq 1 I s + G2 G1 + G2 G1G2 + Geq (G1 + G2 ) e uso questi valori come punto di lavoro per il passo successivo del procedimento iterativo (determinando i nuovi valori del modello linearizzato), che continuerà finché |Vk+1 – Vk| < ε. SPICE usa una definizione della tolleranza piuttosto articolata, per cui il procedimento si arresta quando: |Vk+1 – Vk| < VLIMIT = RELTOL ⋅ Vk + VNTOL |Ik+1 – Ik| < ILIMIT = RELTOL ⋅ Ik + ABSTOL SPICE – Analisi nel tempo (TRANS) Circuiti lineari: i blocchi 2 e 5 sono ignorati; dopo aver determinato il punto di lavoro iniziale (utilizzando le C.I. dei condensatori e degli induttori) i vari elementi con memoria sono trasformati nei modelli alle differenze finite, come descritto nella pagina successiva. Circuiti non-lineari: i blocchi 2 e 5 sono nuovamente inseriti, i componenti non lineari sono linearizzati come visto prima nell’intorno del punto di lavoro in continua (blocchi 1 - 6), e viene innescato il processo iterativo. SPICE – componenti con memoria Esempio condensatore: SPICE genera il modello approssimato della derivata presente nella rel. costitutiva prendendo la differenza fra due valori su una curva funzione del tempo e dividendola per l’intervallo di tempo sotteso. dx ( n ) x ( n + 1) = x ( n ) + ∆ T ⋅ dt ∆ T = t ( n + 1) − t ( n ) SPICE – componenti con memoria dx(n + 1) x(n + 1) = x(n) + ∆T ⋅ dt ∆T = t (n + 1) − t (n) Nel caso del condensatore quindi: dv dv(n + 1) ⇒ i (n + 1) = C dt dt dv(n + 1) 1 = i (n + 1) dt C i=C v(n + 1) = v(n) + C C i ( n + 1) = v(n + 1) − v ( n) ∆T ∆T ∆T i (n + 1) C SPICE – componenti con memoria Combinando i due metodi di Eulero (FE + BE) è possibile dedurre un terzo metodo più raffinato, quello dei trapezi dx(n) x(n + 1) = x(n) + ∆T ⋅ dt ∆T = t (n + 1) − t (n) ∆T x(n + 1) = x(n) + 2 x(n + 1) = x(n) + ∆T ⋅ ∆T = t (n + 1) − t (n) dx(n + 1) dx(n) ⋅ + dt dt dx(n + 1) dt SPICE – componenti con memoria x(n + 1) = x(n) + Nel caso del condensatore quindi: dv dv( n + 1) ⇒ i (n + 1) = C dt dt dv(n + 1) 1 = i (n + 1) dt C dv(n) 1 = i ( n) dt C i=C v(n + 1) = v(n) + i (n + 1) = ∆T [i(n + 1) + i(n)] 2C 2C 2C v(n + 1) − i (n) − v ( n) ∆T ∆T ∆T 2 dx(n + 1) dx(n) ⋅ + dt dt SPICE – Analisi AC L’analisi in frequenza del circuito in esame si scompone in due fasi: Fase 1 Viene svolto il ciclo non lineare (1 - 6) per determinare il punto di lavoro DC (come spiegato prima). Questa fase ignora I condensatori, gli induttori e gli elementi con memoria (in grado di immagazzinare energia). Fase 2 Riguarda I blocchi 3 e 4 del diagramma, leggermente modificati, nel senso che la matrice dei nodi viene costruita usando le ammettenze complesse dei bipoli (lineari e/o linearizzati) presenti nel sistema. I componenti non lineari vengono sostituiti con I modelli equivalenti a piccoli segnali nell’intorno del punto di lavoro calcolato prima (non viene però innescato alcun processo iterativo). Le alimentazioni (power supply) esterne vengono annullate, le sorgenti di segnale sono fissate di valore unitario. I blocchi 3 e 4 vengono ripetuti per tutti I valori di frequenza richiesti. Simulazione simbolica Definizione: È una tecnica formale per determinare la relazione ingresso/uscita di un circuito, in modo tale che: – la variabile indipendente (frequenza o tempo) – le variabili dipendenti (tensioni o correnti) – gli elementi del circuito (tutti o alcuni) siano rappresentati da simboli (letterali) Freq. 1.00000e+000 1.02329e+000 1.04713e+000 1.07152e+000 1.09648e+000 1.12202e+000 1.14815e+000 1.17490e+000 1.20226e+000 1.23027e+000 1.25893e+000 1.28825e+000 1.31826e+000 1.34896e+000 1.38038e+000 V(n004) (8.21463e+000dB,-1.48641e+000°) (8.21463e+000dB,-1.52103e+000°) (8.21463e+000dB,-1.55646e+000°) (8.21463e+000dB,-1.59272e+000°) (8.21463e+000dB,-1.62982e+000°) (8.21463e+000dB,-1.66778e+000°) (8.21463e+000dB,-1.70663e+000°) (8.21463e+000dB,-1.74638e+000°) (8.21463e+000dB,-1.78706e+000°) (8.21463e+000dB,-1.82869e+000°) (8.21463e+000dB,-1.87129e+000°) (8.21463e+000dB,-1.91488e+000°) (8.21463e+000dB,-1.95948e+000°) (8.21463e+000dB,-2.00513e+000°) (8.21463e+000dB,-2.05184e+000°) Simulazione simbolica e SAPWIN – breve storia I primi programmi di analisi simbolica risalgono alla fine degli anni ’70. Erano in grado di analizzare circuiti di dimensioni molto limitate (una decina di nodi al più); Negli anni ’90 si è verificato un notevole ritorno di interesse per i programmi di analisi simbolica; Sono stati sviluppati e distribuiti numerosi programmi: SAPEC, SYNAP, SCYMBAL, ISAAC, SNAP, SSPICE, SCAPP, GASCAP, ASAP; Alla fine degli anni ’80 viene realizzato dal DET il programma SAPEC (Symbolic Analysis Program for Electric Circuits) che prevede anche una semplice interfaccia grafica. È scritto in LISP per DOS e l’algoritmo centrale usa un metodo di permutazione ricorsiva; All’inizio degli anni ’90 si passa al C e al C++. Vengono realizzati un programma per DOS che prevede l’uso dell’analisi simbolica per la simulazione di circuiti di dimensioni limitate contenenti componenti non lineari e quindi SAPWIN 1.0 per Windows 3.1; L’algoritmo di simulazione adottato si basa ora su un metodo ricorsivo di Laplace di espansione per la determinazione del determinante della matrice MNA associata al sistema, in combinazione con il metodo di Cramer per il calcolo della risposta; Dopo una versione 2.0 rimasta alla release alfa, viene scritta in C++ la versione 3.0 del programma per Windows 2000 e superiori, che fa uso del metodo dei due grafi; È disponibile anche una versione open source del programma scritta in modo nativo per Linux. Simulazione simbolica, dove aiuta di più? La tendenza attuale è integrare su un unico chip sistemi completi per applicazioni specifiche, sia nella parte analogica che in quella digitale. Ma, mentre per la parte digitale l’automazione è pressoché completa, per la parte analogica il progetto viene svolto, in gran parte, in modo pressoché manuale, e richiede una notevole esperienza da parte del progettista Algoritmi per l’analisi simbolica Metodi Algebrici Metodi Topologici • Formulazione delle equazioni della rete (MNA, CMNA, Tableau, …) • Le f.d.r. sono ottenute tramite tecniche di manipolazione simbolica delle espressioni algebriche applicate a queste equazioni dette anche di “Espansione simbolica di determinanti”: – Nonzero Permutation, – Sparse Laplace expansion, –… • Rappresentazione del circuito mediante grafi con pesi di ramo simbolici • Le f.d.r. sono ottenute tramite operazioni sui grafi: – Tree enumeration: Directed T.E. Undirected T.E. – Signal Flowgraph Mason Signal Flowgraph The Coates Graph – ……… SAPWIN – Algoritmo risolutivo La versione 3.0 di SAPWIN usa un metodo di enumerazione degli alberi su due grafi (Two Graph Tree Enumeration). Il metodo è, in prima istanza, applicabile a circuiti di tipo RCgm, costituito cioè da soli componenti con rappresentazione di tipo ammettenza e transconduttanze (VCT) Vengono innanzi tutto costruiti due grafi, quello delle correnti GI e quello delle tensioni Gv; I componenti bipolari generano la presenza, su entrambi i grafi, di un ramo tra gli stessi due nodi. La transconduttanza (gm) produce, nel grafo Gv, un ramo tra i nodi di controllo e, nel grafo GI, un ramo tra i nodi controllati. In entrambi i grafi il peso del ramo è il valore della transconduttanza. Esempio: SAPWIN – Algoritmo risolutivo Il determinante della matrice delle ammettenze viene poi calcolato nel seguente modo: Dato un grafo orientato costituito da N nodi e R rami la matrice incidenza A è una matrice (N-1) x R il cui generico elemento aij è dato da: aij = +1 se il ramo j esce dal nodo i -1 se il ramo j entra nel nodo i 0 se il ramo j non interessa il nodo i +1 +1 0 0 A= 0 −1 1 1 È un metodo “cancellation free”! SAPWIN – Algoritmo risolutivo Per il calcolo del numeratore si consideri un circuito con n nodi, l’eccitazione collocata fra i nodi 1 e 0 e l’uscita fra i nodi 2 e 0: Le funzioni di rete del circuito possono infine essere scritte come: SAPWIN – Estensioni del metodo Estensione a componenti con rappresentazione impedenza (NON ammettenza): dà origine al termine jω ωL2G1G3 Estensione a circuiti contenenti componenti di tipo nullori e generatori controllati non di tipo transconduttanza: Nei quattro casi non-gm sussiste il problema del diverso numero di nodi e di rami nei due grafi SAPWIN – Estensioni del metodo Nullore: Nullatore Noratore i 2 nodi collassano in Gv i 2 nodi collassano in GI Modifica: I 2 nodi restano distinti, nei due grafi, ma il ramo corrispondente deve far parte dell’albero. L’algoritmo di ricerca degli alberi comuni parte forzando la presenza sull’albero dei rami nullatore per Gv e dei rami noratore per GI. dà origine al termine GinG2 dà origine al termine G1G2 SAPWIN – Estensioni del metodo I generatori controllati (non transconduttanza) vengono sostituiti da circuiti equivalenti realizzati con nullori: Approssimazione delle espressioni simboliche Le espressioni di uscita dei simulatori simbolici presentano un’oggettiva difficoltà di gestione e/o interpretazione non appena le dimensioni del circuito in esame aumentano in modo significativo. Per questa ragione è opportuno avere a disposizione dei metodi aggiuntivi che siano in grado di “semplificarle”, almeno nella regione di interesse. Questi metodi sono chiamati di “approssimazione e possono essere classificati come: Approssimazione dopo la generazione: l’algoritmo è applicato dopo che l’espressione completa della f.d.r. è stata generata. Approssimazione durante la generazione: l’approssimazione è applicata insieme all’algoritmo di generazione delle espressioni simboliche. Approssimazione prima della generazione: la semplificazione è applicata a livello di circuito, operando sul grafo o sulla formulazione matriciale. Quest’ultima è sempre applicata insieme ad una delle altre due tecniche. Approssimazione delle espressioni simboliche Il massimo errore, nella formula semplificata, deve essere prefissabile dall’utente. L’errore può essere quello della risposta in ampiezza, della risposta in fase, di poli e zeri, o dei coefficienti della f.d.r. L’errore deve essere valutato su un intervallo di frequenze, sugli estremi dell’intervallo, o su un valore particolare della frequenza. Approssimazione durante la generazione La generazione della f.d.r. simbolica è preceduta dal calcolo numerico (per esempio risolvendo il sistema MNA) dei valori del numeratore e del denominatore della f.d.r. alle frequenze prefissate (valori numerici esatti di riferimento). L’algoritmo Two-Graph tree enumeration viene modificato in modo tale da generare i vari termini in ordine decrescente di ampiezza. La generazione dei termini, per numeratore e denominatore, viene interrotta non appena i valori della f.d.r. simbolica alle Frequenze prefissate sono affetti da un errore inferiore a quello stabilito. In caso di approssimazione dei coefficienti della f.d.r., la generazione della f.d.r. simbolica è preceduta dal calcolo numerico dei valori dei coefficienti del numeratore e del denominatore della f.d.r., mediante la tecnica di interpolazione polinomiale sul cerchio di raggio unitario (valori esatti di riferimento per i coefficienti). Esempio della valutazione della stabilità SMSMR#170#100#1#0O#170#140#1#0#0R#90#140#1#0g#80#230#1#0W#170#140#1#150 R2 R1 Si consideri il caso di un semplice amplificatore invertente con operazionale: La simulazione numerica, anche con un modello reale dell’AO, non consente di valutare correttamente la stabilità. Vin La simulazione simbolica consente di farlo, con una AO a singolo polo del tipo: ΣΜ ΣΜϑ#130#110#1#2Ρ#200#110#1#2Χ#260#110#1#2Υ#330#110#1#2Ω#330#170#1#130#170Ω#60#110#1#80#110Ω#60#170#1#80#170 + Vin _ - 1⋅Vin 1Ω + VC 100 mF + Vo 106⋅VC ≡ V out Simulazione simbolica e numerica (confronto) Numerico 1. Consente di simulare circuiti di dimensioni molto elevate; 2. Non può gestire maglie di gen. tensione o tagli di gen. corrente. Non può neppure gestire maglie o tagli degeneri; 3. Non fornisce in modo diretto alcuna informazione sulla stabilità; 4. Non consente alcuna post-elaborazione “analitica” del risultato ottenuto; 5. Consente la simulazione di circuiti non lineari; 6. Le aziende che producono dispositivi elettronici e circuiti integrati predispongono le librerie dei modelli SPICE degli stessi; Simbolico 1. All’aumentare delle dimensioni del circuito le espressioni di uscita perdono leggibilità; 2. Non può gestire maglie di gen. tensione o tagli di gen. corrente. PUÒ gestire maglie o tagli degeneri! 3. Fornisce informazioni sulla stabilità; 4. Consente di rielaborare in modo analitico il risultato ottenuto (studio della sensibilità, della stabilità, dello jacobiano, inversione dei parametri circuitali, design centering); 5. La simulazione dei circuiti non lineari non è immediata, talvolta esistono modelli utilmente applicabili, talvolta è sostanzialmente inapplicabile; 6. Non esistono librerie di modelli, ma l’approccio al concetto di “modello” è diverso;