Corso di Teoria dei Circuiti - Elettrotecnica · SPICE è di fatto un linguaggio di programmazione...

48
Corso di Teoria dei Circuiti Laurea Magistrale in Ingegneria Elettrica, Elettronica, Informatica e delle Telecomunicazioni Prof. Massimiliano de Magistris [email protected] , www.elettrotecnica.unina.it DIPARTIMENTO DI INGEGNERIA ELETTRICA E DELLE TECNOLOGIE DELL'INFORMAZIONE Simulazione circuitale con SPICE: struttura, modelli, algoritmi, parametri ed opzioni

Transcript of Corso di Teoria dei Circuiti - Elettrotecnica · SPICE è di fatto un linguaggio di programmazione...

Corso di Teoria dei CircuitiLaurea Magistrale in Ingegneria

Elettrica, Elettronica, Informatica e delle Telecomunicazioni

Prof. Massimiliano de [email protected], www.elettrotecnica.unina.it

DIPARTIMENTO DI INGEGNERIA ELETTRICA E DELLE TECNOLOGIE DELL'INFORMAZIONE

Simulazione circuitale con SPICE:struttura, modelli, algoritmi,

parametri ed opzioni

Corso di TEORIA DEI CIRCUITI- Simulazione circuitale con SPICE 2

Perché della simulazione circuitale e perché SPICE?

La struttura di SPICE, la sintassi ed i tipi di analisi disponibili

Qualche esempio di “modello” SPICE

Come funziona SPICE?: algoritmi e strutture, parametri ed opzioni

Sommario

Corso di TEORIA DEI CIRCUITI- Simulazione circuitale con SPICE 3

la simulazione numerica è essenziale nell’analisi circuitale per studiare circuiti complessi e/o non lineari, ed è uno “standard” nella progettazione elettronica industriale

esistono diversi simulatori circuitali, e più in generale ambienti di calcolo adatti ai circuiti; SPICE è il più diffuso, principalmente a causa della struttura “generalista” e della ricchezza delle librerie di componenti

Introduzione/1

Corso di TEORIA DEI CIRCUITI- Simulazione circuitale con SPICE 4

SPICE nasce circa nel 1975 all’Universitàdella California (acronimo di SimulationProgram with Integrated CircuitsEmphasis) ed è un “open source”

Ci riferiremo alla versione “open” LTSpicedisponibile a: www.linear.com

Esistono molte altre versioni, tra cui segnaliamo OrCAD della CADENCE

Filosofia generale/1

Corso di TEORIA DEI CIRCUITI- Simulazione circuitale con SPICE 5

SPICE è basato su un compilatore in grado di interpretare una sintassi specifica per l’analisi dei circuiti

i tipici passi di utilizzo sono:– creazione un file “sorgente” (con un editor) che

descrive il circuito ed il tipo di simulazione da effettuare

– esecuzione della simulazione (con una versione di SPICE)

– elaborazione dei risultati (visualizzazione, stampa, esportazione)

Filosofia generale/2

Corso di TEORIA DEI CIRCUITI- Simulazione circuitale con SPICE 6

SPICE è di fatto un linguaggio di programmazione specifico per l’analisi dei circuiti, con una scelta ben precisa di strutture dati, formulazioni e algoritmi

per utilizzare SPICE è necessario predisporre un file di input con una certa sintassi, che descrive il circuito ed il tipo di analisi da effettuare

SPICE compila ed elabora tale file, producendo un file di output con i risultati.

nelle versioni “moderne” entrambi i file sono “nascosti”dal pre-processore e post processore, rimanendo comunque accessibili

La struttura funzionale di SPICE

Corso di TEORIA DEI CIRCUITI- Simulazione circuitale con SPICE 7

Schematicscreation

FileExample.a

sc

* LTSpice_files\Example.ascC1 NOO1 O 1Oµ ic=1VR1 NOO2 NOO1 1OL1 NOO2 O 1OmR2 NOO2 O 1Ok.tran O O.O1 O O.O1 uic.end

SPICE“netlist”

Corso di TEORIA DEI CIRCUITI- Simulazione circuitale con SPICE 8

SPICE execution

fileExample.

raw

FileExample.lo

g

... Total elapsed time: O.O16 seconds...temp = 27method = modified traptotiter = 36O...solver = Normal

Corso di TEORIA DEI CIRCUITI- Simulazione circuitale con SPICE 9

Le istruzioni SPICE si dividono essenzialmente in:

Data Statementsdescrivono compiutamente il circuito in termini di connessioni e caratteristiche dei componenti

Control Statementsspecificano il tipo di analisi da effettuare (es, DC, AC, Tran). L’analisi in DC è di default

Output Statementsspecificano il formato in cui fornire i risultati ed eventualmente le variabili da calcolare esplicitamente

La sintassi di SPICE

Corso di TEORIA DEI CIRCUITI- Simulazione circuitale con SPICE 10

Datastatements

* LTSpice netlistC1 NOO1 O 1Oµ ic=1VR1 NOO2 NOO1 1OL1 NOO2 O 1OmR2 NOO2 O 1Ok

Corso di TEORIA DEI CIRCUITI- Simulazione circuitale con SPICE 11

Tipi di analisi in SPICE

Operating point (.OP)

DC-sweep, DC-transfer (.DC)

AC analysis sweep (.AC)

Transient (.TRAN)

FFT (analisi spettrale)

Monte-Carlo (analisi parametrica)

Corso di TEORIA DEI CIRCUITI- Simulazione circuitale con SPICE 12

Operatingpoint

--- Operating Point ---V(1): 5 voltageV(2): O.793466 voltageI(D1):O.21O363 device_currentI(R1):-O.21O327 device_currentI(V1):-O.21O327 device_current

Corso di TEORIA DEI CIRCUITI- Simulazione circuitale con SPICE 13

DC sweep

Startvalue Stop

value

Stepvalue

Corso di TEORIA DEI CIRCUITI- Simulazione circuitale con SPICE 14

AC sweep

Scaletype Stop

valueStartvalue

n° of points

Corso di TEORIA DEI CIRCUITI- Simulazione circuitale con SPICE 15

Transient

Startrecordingdata time

Stopvalue

Startvalue

maxt_step

Corso di TEORIA DEI CIRCUITI- Simulazione circuitale con SPICE 16

Resistori lineari (Rnn)

Condensatori ed induttori lineari (Cnn, Lnn)

Generatori ideali (autonomi/dipendentidal tempo) (Vnn, Inn)

Diodi a semiconduttore (Dnn)

Modelli dei dispositivi: bipoli

Corso di TEORIA DEI CIRCUITI- Simulazione circuitale con SPICE 17

I quattro tipi di generatori controllati

(lineari/non lineari)

Il mutuo accoppiamento induttivo

(trasformatore)

La linea di trasmissione

Modelli dei dispositivi: doppi bipoli

Corso di TEORIA DEI CIRCUITI- Simulazione circuitale con SPICE 18

Transistore bipolare (BJT)

Transistore ad effetto di campo (JFET)

Transistore MOS

Modelli dei dispositivi: multipoli

Corso di TEORIA DEI CIRCUITI- Simulazione circuitale con SPICE 19

Syntax:

Cnn n1 n2 <value>+ [ic=<value>]+ [Rser=<value>] + [Lser=<value>] + [Rpar=<value>]+ [Cpar=<value>] + [RLshunt=<value>]

Esempio: modello del condensatore

Corso di TEORIA DEI CIRCUITI- Simulazione circuitale con SPICE 20

Dnn n1 n2 <model>

Model=1Name unit defaultRon ohm 1Roff ohm 1/gminVfwd volt OVrev volt infinRrev ohm 1........

Esempio: modello (semplice) del diodo

i(v)

v

Ron

Roff

Rrev

Vfwd

Vrev

Corso di TEORIA DEI CIRCUITI- Simulazione circuitale con SPICE 21

I circuiti lineari a-dinamici (resistivi) sonoanalizzati con la Modified Node Analysis

Gli elementi non lineari vengonolinearizzati in processi iterativi del tipoNewton-Raphson

Per l’analisi dinamica il tempo vienediscretizzato e gli elementi dinamicitrasformati in equivalenti alle differenze

Come funziona SPICE nell’analisi?

Corso di TEORIA DEI CIRCUITI- Simulazione circuitale con SPICE 22

1 1 21 2

1 2

2 32 1 22

2 3 4

3 21

3

3 1

0V

u u u I IR R

u uu u u IR R R

u ui

Ru V

−⎧ + = +⎪⎪⎪ −

+ + = −⎪⎨⎪⎪ − =⎪⎪ =⎩

incognite: potenziali di nodo uk, e correnti dei generatori di tensione iVk

Circuiti adinamici lineari ed MNA/1

Corso di TEORIA DEI CIRCUITI- Simulazione circuitale con SPICE 23

1 2 21 1 2

2 22 2 3 4 3

3

1 13 3

1 1 10 0

1 1 1 1 10

01 1

0 1

0 0 1 0

V

R R R u I Iu I

R R R R Rui VR R

⎛ ⎞+ −⎜ ⎟+⎛ ⎞ ⎛ ⎞⎜ ⎟

⎜ ⎟ ⎜ ⎟⎜ ⎟ −− + + − ⎜ ⎟ ⎜ ⎟⎜ ⎟ =⎜ ⎟ ⎜ ⎟⎜ ⎟⎜ ⎟ ⎜ ⎟⎜ ⎟− − ⎝ ⎠ ⎝ ⎠⎜ ⎟

⎜ ⎟⎝ ⎠

Soluzione numerica: eliminazione di Gauss,

fattorizzazione lower/upper, tecnica del pivot

Circuiti adinamici lineari ed MNA/2

Corso di TEORIA DEI CIRCUITI- Simulazione circuitale con SPICE 24

( ) ( )( )

( )1 ( )

( )

( )

nn n

n

f vv vf v

dff vdv

+ = −′

′ =

f v

v

v(0)

f v(0)

f v(1)

v(1)v(2)

Circuiti non lineari ed iterazione N-R/1

Corso di TEORIA DEI CIRCUITI- Simulazione circuitale con SPICE 25

( ) ( ) ( ) ( ) ( )1 1( ) ( ) ( )( )k k k k kg v g v g v v v+ +′= + −

( )

( ) ( )

( )

( ) ( )

( )

( )

kk

k kk k

G g v

I i g v v

′=

′= −

Espansione in serie di Taylori=g(v) (in v (k), v (k+1))

Circuiti linearizzato equivalente

( ) ( ) ( )+ += +1 1( )k k kki I G v

Corso di TEORIA DEI CIRCUITI- Simulazione circuitale con SPICE 26

0

0 0

( , )

( )

( ) ( , )t

t

dx f x tdtx t x

x t f x t dt

⎧ =⎪⎨⎪ =⎩

= ∫

1 1( ) ( ) ( ) ( )2

ktk k k kx t x t f x f x+ +

Δ≅ + +⎡ ⎤⎣ ⎦

Integrazione temporale

Corso di TEORIA DEI CIRCUITI- Simulazione circuitale con SPICE 27

i = C dv

dt= Cv ⇒ v

k=

1C

ik; v

k +1=

1C

ik +1

1 1

2 2k k k k

tk tk

C Ci v v i+ +

⎛ ⎞= − +⎜ ⎟Δ Δ⎝ ⎠

1 1( )2

tkk k k kv v i i

C+ +

Δ= + +

trapezoidal rule “companion” circuit

Equivalente discreto del condensatore

Corso di TEORIA DEI CIRCUITI- Simulazione circuitale con SPICE 28

t0=t_start, IC

Linearizecircuit

Solve MNA equations (linearresistive cir.)

Convergency?

yes

not

Define newN-R iteration

point

Discretizecircuit

in tj

new time step

tj < t_stop Stopyes not

Solve non linearresistive circuit

Overall .tran algorithm

Flow-chart della soluzione SPICE

Corso di TEORIA DEI CIRCUITI- Simulazione circuitale con SPICE 29

soluzione del (sotto) problema algebrico linearecon il metodo di Gauss, fattorizzazione LU e tecnica del Pivot

soluzione del (sotto) problema algebrico non lineare con l’algoritmo di Newton Raphson (con linearizzazione alla iterazione del circuito)

soluzione del problema dinamico (ODE) con algoritmi di integrazione tipo Trapezi, Trapezi modificato o Gear, a passo variabile in funzione della stima dell’errore locale

metodi numerici in SPICE

Corso di TEORIA DEI CIRCUITI- Simulazione circuitale con SPICE 30

Integration method: trapezoidal (& mod.), Gear

trapstringmethod

Maximum step size fortransient analysis

infin.num.maxstep

DC iteration count limit100num.itl_1

Relative error tolerance0.001num.reltol

Absolute voltage errortolerance.

1µVnum.vntol

Absolute current errortolerance

1pAnum.abstol

Descriptiondefault value

data type

Keyword

Alcune opzioni di SPICE

Corso di TEORIA DEI CIRCUITI- Simulazione circuitale con SPICE 31

⎥⎥⎥⎥⎥⎥⎥⎥

⎢⎢⎢⎢⎢⎢⎢⎢

−−−

−++−−−+

=

0011000000011000

0000000010

dd

cc

ccbaa

dada

GGGGGGGGG

GGGG

A

⎥⎥⎥⎥⎥⎥⎥⎥

⎢⎢⎢⎢⎢⎢⎢⎢

−−−−+

−−

−++−

=

10000100011000000000000001

dd

dada

cc

ccbaa

PR

GGGGGG

GGGGGGG

A

dopo il preordinamento:

Sol. sistemi lineari: ordinamento topologicoIn generale gli elementi controllati in corrente generano degli zeri sulla diagonale della matrice G in fase di costruzione: si attua pertanto un riordinamento topologico detto preordinamento.

matrice G originale

Corso di TEORIA DEI CIRCUITI- Simulazione circuitale con SPICE 32

--- Operating Point ---

V(2): 1e+006 voltage

V(1): 1e+006 voltage

I(I1): 1 device_current

I(Ra): -1 device_current

I(Rb): 1 device_current

mhoGG ba 000001.1=+

1 11 1.000001

a a

a a b

G GA

G G G− −⎡ ⎤ ⎡ ⎤

= =⎢ ⎥ ⎢ ⎥− + −⎣ ⎦⎣ ⎦

Soluzione inaccurata!

Sol. sistemi lineari: precisione numerica/1Errori dovuti alla rappresentazione dei numeri con # cifre finito

Corso di TEORIA DEI CIRCUITI- Simulazione circuitale con SPICE 33

--- Operating Point ---

V(2): 1 voltage

V(1): 1e+006 voltage

I(I1): 1 device_current

I(Ra): -1 device_current

I(Rb): 1 device_current

mhoGG ba 000001.1=+ Soluzione accurata!

0.000001 0.0000010.000001 1.000001

a a

a a b

G GA

G G G− −⎡ ⎤ ⎡ ⎤

= =⎢ ⎥ ⎢ ⎥− + −⎣ ⎦⎣ ⎦

Sol. sistemi lineari: precisione numerica/2

Corso di TEORIA DEI CIRCUITI- Simulazione circuitale con SPICE 34

Si ha un problema numerico quando un elemento diventa molto piccolo, ed il rapporto tra il valore attuale del massimo elemento e quello originale supera le capacità di calcolo della macchina.

Per ovviare a questi problemi nella soluzione dei sistemi algebrici lineari SPICE adotta 2 soluzioni:

•Metodo del pivoting;

•Algoritmo di Markowitz;

Per controllare il processo di risoluzione abbiamo a disposizione 2 opzioni:

1. PIVTOL (1e-13): Minimo valore assoluto di una matrice accettabile come pivot oppure come elemento della diagonale:

*Error*: MAXIMUM ENTRY IN THIS COLUMN AT STEP i IS LESS THAN PIVTOL

2. PIVREL (1e-3): Indica il rapporto tra il più grande elemento relativo all’i-esimo passo di eliminazione e un valore accettabile come pivot:

aii≥ PIVREL ∙ aiMax

Sol. sistemi lineari: controllo errore

Corso di TEORIA DEI CIRCUITI- Simulazione circuitale con SPICE 35

Sol. caso non lineare: Newton-Raphson/1Consideriamo il bipolo non lineare controllato in tensione in figura. Dall’espansione in serie di Taylor per una generica funzione f in forma iterativa:

Se particolarizziamo al caso in esame l’espressione dell’algoritmo di Newton-Raphson:

otteniamo:))((' 11 nnnnn vvvgii

Essa può essere vista come la caratteristica di un generatore reale di corrente (modello discreto alla i-esima iterazione).

−+= ++

)(')(

1i

iin xf

xfxx −=+

))((')()( 11 nnnnn xxxfxfxf −+= ++

In generale il procedimento iterativo prosegue finché due soluzioni consecutive non risultano vicine a meno della tolleranza fissata(convergenza).

Corso di TEORIA DEI CIRCUITI- Simulazione circuitale con SPICE 36

La ricerca della soluzione termina nel momento in cui:

• Tutte le tensioni e le correnti incognite rimangono entro un valore stabilito di tolleranza in 2 iterazioni successive;

• I valori delle funzioni non lineari e quelli approssimati linearmente si trovano all’interno di una determinata fascia di tolleranza.

Per la tensione al generico nodo n possiamo definire la tolleranza come:

Quindi la convergenza si ottiene quando:

Le opzioni a disposizione per le tensioni sono:•RELTOL (10-3): definisce il massimo errore relativo ammesso per tensioni e correnti perché si possa considerare raggiunta la convergenza;•VNTOL (1 μV): rappresenta la tolleranza assoluta per le tensioni e indica la più piccola tensione osservabile.

VNTOLVVRELTOL in

inVn +⋅= + ),max( )()1(ε

Vni

ni

n VV ε≤−+ )()1(

Sol. caso non lineare: Newton-Raphson2

Corso di TEORIA DEI CIRCUITI- Simulazione circuitale con SPICE 37

Per la convergenza si fa riferimento anche ai valori delle funzioni che definiscono le caratteristiche dei dispositivi non lineari. Ad esempio nei dispositivi a semiconduttore, per le correnti si valutano le seguenti quantità:

I nell’espressione non lineare in V(j)

Î nell’espressione dell’approssimazione lineare in V(j+1)

La tolleranza ammessa è:

Quindi la convergenza si ottiene quando:

Le opzioni a disposizione in questo caso sono:•RELTOL;•ABSTOL: rappresenta la tolleranza assoluta per le correnti La più piccola corrente osservabile è pari a 10-12 A per default.

ABSTOLIIRELTOLI +⋅= ),ˆmax(ε

Vji

ji

j VV ε≤−+ )()1(III ε≤−ˆ

Sol. caso non lineare: Newton-Raphson3

Corso di TEORIA DEI CIRCUITI- Simulazione circuitale con SPICE 38

• ITL1 (100): limite del numero di iterazioni condotte da SPICE. Se non sono verificati i precedenti criteri di convergenza in ITL1 iterazioni si visualizza il messaggio:

*ERROR*: NO CONVERGENCE IN DC ANALYSIS;• ITL2 (50): nell’analisi DC il numero ITL1 vale solo per il primo punto

calcolato, per i successivi si riduce a ITL2;

• ITL4 (10): nell’analisi in transitorio per ogni step vengono ammesse solo ITL4 iterazioni prima di terminare il processo;

• ITL6 (25): nel caso di soluzioni in continua difficili da determinare SPICE utilizza il “source ramping o stepping”. ITL6 indica il numero di iterazioni da effettuare per ogni incremento del valore dei generatori;

• Bypass: nel processo di soluzione è necessario calcolare il modello linearizzato degli elementi non lineari. Con l’opzione bypass attiva, se le V e le I per l’elemento non lineare sono in una piccola tolleranza non viene ricalcolato il modello lineare.

Sol. caso non lineare: Newton-Raphson4

Corso di TEORIA DEI CIRCUITI- Simulazione circuitale con SPICE 39

Per l’analisi dinamica SPICE trasforma le caratteristiche di condensatori e induttori (di tipo differenziale) in un insieme di equazioni algebriche con una discretizzazione (dipendente dal metodo). Ciò si realizza in generale effettuando un’appros-simazione alle differenza finite delle derivate.

La soluzione del sistema in un intervallo che va da 0 a TSTOP viene effettuata in un numero discreto di istanti di tempo in cui le equazioni differenziali sono sostituite da quelle algebriche.

Gli schemi di integrazione (discretizzazione) utilizzati sono:– Metodo dei trapezi (TRAP)– Metodo dei trapezi modificato (MOD TRAP)– Metodo di Gear (GEAR)

Soluzione del problema dinamico/1

Corso di TEORIA DEI CIRCUITI- Simulazione circuitale con SPICE 40

L’errore locale di troncamento (LTE) viene stimato ad ogni step temporale fornendo una misura dell’accuratezza della simulazione. SPICE verifica che la stima dello LTE rientriall’interno di una fascia prefissata, adattando di conseguenza il passo di integrazione.Viceversa non vi è modo “a priori” di stimare la convergenzadella simulazione verso la soluzione esatta. Essa risulta funzione della combinazione tra circuito in esame, algoritmo di integrazione e parametri dello stesso.Se il passo d’integrazione non è scelto adeguatamente, per ogni metodo si può giungere a soluzioni poco accurate o completamente errate. In definitiva, anche rispettando i vincoli sull’errore locale non è garantita la convergenza!

Soluzione del problema dinamico/2

Corso di TEORIA DEI CIRCUITI- Simulazione circuitale con SPICE 41

Metodo di Gear del 2° ordine

Metodo trapezoidale

Al crescere dell’ordine di Gear il LTE diminuisce ma il metodo risulta meno stabile

esempio

Corso di TEORIA DEI CIRCUITI- Simulazione circuitale con SPICE 42

La maggior parte delle versioni di SPICE, come anche LTSpice, forniscono come possibili algoritmi di integrazione il metodo dei trapezi (nel nostro caso vi è anche una versione “modified”) di default e il metodo di Gear (dal 2° al 6° ordine). E’ possibile selezionare il metodo e l’ordine con la seguente linea di comando:

.OPTIONS METHOD=metodo MAXORD=ordine

Un algoritmo di ordine variabile sceglie l’ordine che consente di usare il massimo time-step per ogni istante di tempo.

Il time-step viene calcolato in base all’LTE. Esiste un limite superiore per l’LTE, simile alle tolleranze, inteso come un errore relativo e uno assoluto:

dove si utilizza l’opzione:

•CHGTOL (10-14 C): definisce la tolleranza assoluta per le cariche.

ABSTOLxxRELTOL nnx +⋅= + ),max( 1ε

nnnx hCHGTOLxxRELTOL /),,max( 1+⋅=ε

Soluzione del problema dinamico/4

Corso di TEORIA DEI CIRCUITI- Simulazione circuitale con SPICE 43

L’LTE viene quindi scelto, al limite, come il valore massimo tra gli errori precedentemente enunciati:

Per ciascun elemento definito dalla carica e dal flusso, lineare o meno, viene calcolato il massimo time-step utilizzabile con la relazione:

dove la quantità DD3 indica le Divided Differences di ordine 3, attraverso cui SPICE approssima la derivata terza, mentre compare una ulteriore opzione:

•TRTOL (7): rappresenta un fattore di scala per l’LTE che serve a compensare l’errore introdotto dalle divided differences, in quanto èpossibile dimostrare che queste ultime sopravvalutano notevolmente la suddetta quantità.

),max( xxE εε=

),12

max( 31

a

n DDETRTOLhε

⋅=+

Soluzione del problema dinamico/4

Corso di TEORIA DEI CIRCUITI- Simulazione circuitale con SPICE 44

LTSpice – SPICE options

Corso di TEORIA DEI CIRCUITI- Simulazione circuitale con SPICE 45

LTSpice contiene due versioni complete di SPICE. Una utilizza un solutore “normale”, l’altra uno “alternativo”. Quest’ultimo adotta un pacchetto differente per le matrici sparse (con un errore di round-off ridotto). Tipicamente in questo caso la velocità di simulazione èdimezzata rispetto al caso normale, ma l’accuratezza è mille volte peggiore. E’utile soprattutto nelle fasi di verifica. La scelta deve essere effettuata prima di creare la netlist in quanto i due risolutori utilizzano analizzatori diversi.

E’ possibile selezionare anche le opzioni “Noopiter” per disattivare direttamente il source ramping e “Skip Gmin Stepping” per non considerare l’opzione Gmin.

Opzioni particolari in LTSpice

Corso di TEORIA DEI CIRCUITI- Simulazione circuitale con SPICE 46

Opzioni SPICE (da LTSpice)

Corso di TEORIA DEI CIRCUITI- Simulazione circuitale con SPICE 47

Opzioni SPICE (da LTSpice)

Corso di TEORIA DEI CIRCUITI- Simulazione circuitale con SPICE 48

• www.pspice.com

• www.linear.com/company/software.jsp

• www.elettrotecnica.unina.it

• M. Biey, Introduzione a PSpice, CLUT, 1993

• A. Vladimirescu, Spice, Mc Graw-Hill, 1995.

Riferimenti