NG SPICE DRAFT.
Leggete, leggete, una descrizione del progetto.
Danilo aggiungi il discorso licenze.
Fatemi sapere, miodifche eetc, io mi occupero' di inserirle nel doc.
Paolo
ng-archi.eps
#This file was created by <root> Sat Jul 10 22:25:14 1999
#LyX 1.0 (C) 1995-1999 Matthias Ettrich and the LyX Team
\lyxformat 2.15
\textclass article
\language italian
\inputencoding default
\fontscheme default
\graphics default
\paperfontsize default
\spacing single
\papersize Default
\paperpackage a4
\use_geometry 0
\use_amsmath 0
\paperorientation portrait
\secnumdepth 3
\tocdepth 3
\paragraph_separation indent
\defskip medskip
\quotes_language english
\quotes_times 2
\papercolumns 1
\papersides 1
\paperpagestyle default
\layout Title
NG-SPICE DRAFT
\newline
\size footnotesize
Versione 1 Draft
\layout Date
8 Luglio 1999
\layout Author
Paolo Nenzi
\layout Abstract
NG SPICE è il nome dato ad un progetto il cui scopo è quello di migliorare
il simulatore circuitale SPICE3 dell'Università della California di Berkeley
per renderlo veramente utilizzabile.
NG SPICE nasce dalla fusione di tre progetti differenti: l'inserimento
nel sorgente dei modelli di dispositivi SOI (Silicon On insulator), il
progetto di una interfaccia grafica ed il debugging del codice attuale,
quest'ultimo portato avanti indipendetemente da Micheal Widlok in Polonia.
Quindi NG SPICE è di per sè un progetto molto ambizioso ed a lungo termine.
Forse non riusciremo a fare tutti i miglioramenti descritti nel documento,
ma proviamoci comunque.
\layout Section
Descrizione del progetto
\layout Standard
Il progetto NG SPICE segue tre direttive principali, ciascuna delle quali
porta alla realizzazione di una componente di quello che sarà poi il miglior
simulatore circuitale open source della storia (naturalmente l'importante
è crederci).
Le tre linee direttici (ortogonali tra loro) sono:
\layout Itemize
Incremento delle capacità e delle prestazioni del simulatore.
\layout Itemize
Integrazione del simulatore in un ambiente desktop.
\layout Itemize
Scrittura di una documentazione per l'utente finale.
\layout Standard
L'incremento delle capacità del simulatore dovrebbe portare lo SPICE3 di
Berkeley a competere con i simulatori commerciali di fascia bassa
attualmente
disponibili.
Non è da scartare l'idea che esso andrà a fare parte del pacchetto GEDA
(GNU Electronics Design Automation) sviluppato parallelamente (il cui sito
web è htttp://www.geda.seul.org).
\layout Standard
L'integrazione del simulatore in un ambiente desktop è indipendente dal
simulatore stesso, ed aspira a renderelo intuitivo da utilizzare.
Attualmente SPICE3 ha una interfaccia grafica poco piacevole da maneggiare
ed estremamente spartana.
La compresione dei risultati della sumulazione non è immediata (anzi...) e
l'uscita grafica è tuttaltro che buona.
\layout Standard
La documentazione è un punto fondamentale per un simulatore come SPICE3,
poichè il simulatore stesso è poco più di un motore che deve essere imparato
ad utilizzare, se si vogliono ottenere risultati significativi.
SPICE3 può fare molte più cose di quanto le guide disponibili mettano in
luce, per cui è definitivamente necessaria una documentazione aggiornata.
\layout Section
Guardiamoci intorno
\layout Standard
Attualmente il mercato dell'EDA (Electronics Design Automation) è in
fermento,
la sempre maggiore disponibilità di soluzioni hardware a (relativamente)
basso costo ha portato un generoso numero di software house a produrre
tool per la progettazione e la verifica dell'hardware.
L'EDA è un campo che fino a pochi anni fa era dominato da un piccolo gruppo
di software house, grazie anche alla potenza di calcolo richiesta dai
simulator
i, potenza di calcolo che solo fino a pochi anni fa era dominio incontrastato
delle workstation scientifiche del costo di decine di milioni di lire (di
allora).
Oggi un qualsiasi personal computer di fascia medio alta del costo di pochi
milioni (di oggi) surclassa una vecchia workstation di uno o due ordini
di grandezza, e questo ha fatto sì che nel mercato dell'EDA entrassero
i PC e quindi che molte società di software si dedicassero a questo mercato.
PSpice, il primo simulatore circuitale per PC si è evoluto dalle prime
versioni per DOS, invero abbastanza scarsucce, alla attuale versione 9
, diventando un potente tool di analisi, sintesi ed ottimizzazione per
circuiti.
Se questo già non bastasse, oggigiorno, il predominio delle workstation
nel mondo dell'EDA, sebbene tuttora incontrastato (e non ci sono avvisaglie
che cambi in seguito), è stato ridotto dall'ingresso di piattaforme
alternative
: i PC basati su Windows NT.
Il loro costo definitivamente inferiore e la loro facilità di uso li fa
uno strumento sicuramente attraente in quei casi in cui non è richiesta
la affidabilità e la versatilità delle
\begin_inset Quotes eld
\end_inset
cugine maggiori
\begin_inset Quotes erd
\end_inset
.
Un piccolo spazio in questo mondo di giganti se lo è ritagliato anche Linux
(e BSD): alcuni prodotti EDA commerciali sono già disponibili per Linux,
uno di questi è lo SmartSPice di Silvaco.
\layout Standard
In un mercato come questo, il cui valore supera il migliaio di miliardi
di dollari l'anno (tra software, computer, ricerca ed assistenza) è
difficile
credere che il NG-SPICE possa essere competitivo, ed infatti non lo sarà,
probabilmente.
Questo però non deve far scoraggiare, poichè una nicchia di
\begin_inset Quotes eld
\end_inset
mercato
\begin_inset Quotes erd
\end_inset
(tra virgolette perchè è una nicchia che non ha valore commerciale reale)
per il prodotto esiste: la didattica e l'hobbistica.
Il software di cui sopra ha tanti pregi, ma anche un difetto non
trascurabile:
costa più del platino scavato su Nettuno.
Se pensate che ORCAD release 9 costa quasi 20.000.000 di Lire e CADENCE,
leader indiscussa nel campo della progettazione dei circuiti integrati,
fa pagare la sua suite oltre 2.000.000 di Dollari (alla fine 4.000.000.000
di
Lire), vi rendete conto come l'università (quella locale sopratutto) e
chi costruisce circuiti per hobby, possa avere delle difficoltà ad
acquistare
il primo e non può neanche pensare lontanamente di comprare il secondo.
Senza voler approfondire il discorso, diciamo che anche volendo acquistare
l'uno o l'altro pacchetto, la limitazione del numero di licenze (ogni
licenza
oltre la prima ha un costo addizionale) costituirebbe un grande limite
per una università, dove un programma potrebbe essere usato da 30 o 40
studenti contemporaneamente.
\layout Subsection
Considerazioni sui simulatori circuitali esistenti
\layout Standard
Fino a poco tempo fa i simulatori circuitali seguivano due filosofie:
\layout Itemize
Simulatori circuit oriented.
\layout Itemize
Simulatori technology oriented.
\layout Standard
La prima categoria comprende un numero indefinito di simulatori ottimizzati
sopratutto per convergere in presenza di circuiti di vaste dimensioni.
In questi simulatori la modellistica e le problematiche relative agli
effetti
del
\begin_inset Quotes eld
\end_inset
secondo ordine
\begin_inset Quotes erd
\end_inset
dei semiconduttori non venivano affrontate in modo approfondito (quando
venivano approfondite).
Tali simulatori si
\begin_inset Quotes eld
\end_inset
reclamizzavano
\begin_inset Quotes erd
\end_inset
in base al numero di transistor che potevano simulare (guarda caso
illimitato
nella maggior parte dei casi) ed al tipo di dispositivi
\begin_inset Quotes eld
\end_inset
anomali
\begin_inset Quotes erd
\end_inset
che erano in grado di simulare (lampadine, resistenze PTC o NTC
\begin_float footnote
\layout Standard
NTC,PTC: Negative Temperature Coefficient, Positive Temperature Coefficient;
si tratta di resistenze varibili in funzione della temperatura.
Le prime diminuiscono il loro valore all'aumentare della temperatura, le
seconde si comportano in modo opposto.
\end_float
, tiristori, valvole, etc.).
Uno studio approfondito del manuale, metteva poi in evidenza come in realtà
questi dispositivi
\begin_inset Quotes erd
\end_inset
anomali
\begin_inset Quotes erd
\end_inset
erano in realtà macromodelli composti da dispositivi più semplici e comuni
a tutti gli SPICE.
Inoltre la maggior parte di questi simulatori si basava sulla versione
2 di SPICE, le cui caratterstiche sono inferiori alla versione 3.
Questi pacchetti erano dedicati alla piccola impresa, allo studio di
profession
isti ed in genere a coloro che avevano bisogno di simulare circuiti molto
complessi composto da componenti discreti in cui gli effetti di secondo
ordine dei dispositivi a semiconduttore possono essere trascurati.
Questi pacchetti fornivano le analisi tipiche si fanno nella progettazione
di un circuito (DC, Sweep, Fourier, AC piccoli segnali, etc.) ed avevano
una accativante interfaccia grafica sufficientemente intuitiva da permettere
l'apprendimento delle funzionalità del simulatore nel più breve tempo
possibile.
Un difetto che veniva subito alla luce in questi simulatori era la pessima
corrispondenza delle simulazioni con la realtà nei dispositivi di potenza.
Opinione comune voleva che SPICE non fosse adatto a questo tipo di analisi
(anche se le menti più argute intesero che si trattava di modellazione
troppo grossolana).
\layout Standard
Complementari a questi pacchetti (sviluppati sopratutto in ambiente PC)
vi era una piccola classe di simulatori dedicati alla simulazione di
circuiti
integrati, in cui la modellistica era talmente spinta da rallentare la
simulazione fino a farla durare giorni.
Questi simulatori giravano su worstation scientifiche (oggetti dal costo
molto elevato) ed erano usati da ricercatori, ingegneri e tecnici di alto
livello, per cui potevano sacrificare l'interfaccia grafica alle
funzionalità
.
La bellezza di questi simulatori consisteva nella versatilità e
configurabilità
da parte dell'utente, e nella stretta interazione con il cliente che spesso
portava alla modifica doi parti del simulatore.
\layout Standard
Oggi una distinzione altrttanto netta non è possibile, l'abbassamento dei
costi delle worstation, il livello raggiunto dai PC e la diffusioen del
software hanno sfumato la linea che divide le due filosofie: oggi sono
disponibili un buon numero di simulatori dotati di modelli molto buoni
ed allo stesso tempo capaci di simulare grandi circuiti in tempi
ragionevoli.
Diciamo che le differenze adesso si vedono più nella commercializzaizione:
prodotti per la massa contro prodotti altamente specializzati, prodotti
dedicati all'industria e prodotti dedicati alla ricerca.
Alcuni pachetti sono più adatti alla simulazioni di circuitio con componenti
esistenti, altri sono più adatti alla simulazione di circuiti con
compontenti
basati sulla propria tecnologia.
\layout Standard
Oggi è raro trovare una ditta che venda solo un simulatore circuitale, la
maggior parte vende soluzioni integrate per il place & route
\begin_float footnote
\layout Standard
La classe di operazioni che servono a
\begin_inset Quotes eld
\end_inset
sbrogliare
\begin_inset Quotes erd
\end_inset
le piste un circuito stampato (o le metallizazioni in un circuito
integrato).
\end_float
, strumenti per la sintesi di logiche programmabili (tra cui FPGA e CPLD),
strumenti di verifica e testing e simulatori Mixed/Level
(analogici/digitali).
Per cui SPICE oggi è solo una piccola parte di un pacchetto di EDA.
Nonostante ciò, SPICE è lo standard per la simulazione elettrica, quasi
tutti i simulatori circuitali oggi sul mercato prendono spunto da lui.
Il punto di forza di SPICE è che non utilizza scorciatoie, risolve il
circuito
applicando le leggi che governano il funzionamento dei componenti e le
leggi basate sulla topologia del circuito.
Il prezzo da pagare per questo risultato è la lentezza della simulazione
e le problematiche connesse alla simulazione numerica, che rendono questo
tipo di simulazione praticamente inutilizzabile a livello di chip, in cui
sono presenti milioni di transitor.
Per sopperire a questo limite sono nati dei simulatori basati su linguaggi
(VHDL, VeriLOG) che astraggono dalla fisica del dispositivo per modellarne
la funzione (il behaviour, direbbero gli inglesi) che, non dovendo risolvere
equazioni differenziali o non lineari, ma effettuare degli accessi a
tabelle,
guadagnano svariati ordini di grandezza in velocità, naturalmente perdendo
sul fronte del realismo della simulazione (eventi contemporanei, fronti
dei segnali verticali, etc.).
\layout Standard
Tanta è la perdita del realismo che alla fine, sulle celle fondamentali
componenti del circuito e sui percorsi critici si lancia una simulazione
elettrica (SPICE).
Esistono estensioni
\begin_inset Quotes eld
\end_inset
analogiche
\begin_inset Quotes erd
\end_inset
di questi linguaggi di descrizione (VeriLOG-A, VHDL-AMS) ma sono comunque
di tipo non elettrico, per cui valide entro un ben determinati limiti.
\layout Standard
Insomma, per quanto vecchio e lento SPICE è sempre un oggetto utile.
\layout Subsection
Il panorama Linux
\layout Standard
Facendo un salto sul sito Scientific Applications for Linux
(http://sal.kachinate
ch.com) si vede come il software di simulazione circuitale (di tipo
elettrico)
si conti sulle punte delle dita di due mani.
I software in questione sono:
\layout Itemize
ACS: un simulatore interattivo scritto in C++ abbastanza noto per l'analisi
delle distorsioni.
Implementa i modelli di dispositivi attraverso le clasi, per cui, una volta
modellato il diodo, la classe transistor estende include un paio
diestensione
della classe diodo, etc.
A detta dell'autore questodovrebbe semplificare il processo di modeling
dei dispositivi.
\layout Itemize
APLAC: simulatore commerciale per circuiti sistemi, FDTD.
\layout Itemize
Chipmunk: simulatore analogico e digitale mixed mode, la parte analogica
lascia alquanto a desiderare.
Il simulatore analogico è in grado di eseguire solo analisi nel dominio
del tempo.
\layout Itemize
SCEPTRE: simulatore circuitale basato sull'analisi nello spazio di stato.
Risolve il circuito utilizzando un approccio differente rispetto a quello
di SPICE.
\layout Itemize
SmartSpice: il prodotto della Silvaco, il miglior simulatore SPICE presente
su Linux.
Estendibile ed internamente strutturato per il supporto multiprocessore.
\layout Itemize
Spice: il simulatore di Berkeley.
\layout Itemize
SpiceCAD: un simulatore commerciale basato su Spice3f5 e dotato di un CAD
per schematici e di un visualizzatore per le uscite basato su GNUPLOT.
\layout Standard
Volendo poi togliere da questi i pacchetti con carattistiche e target molto
diversi da quelli di SPICE riduciamo la lista del software a: ACS,
SmartSPice,
Spice, SpiceCAD.
Da notare che SmartSPice è un pacchetto di costo molto elevato, per cui
non accessibile a una buona parte del mercato.
Rimangono: ACS, Spice e SPiceCAD.
Da questa lista tolgiamo ACS che ancora è in uno stato
\begin_inset Quotes eld
\end_inset
didattico
\begin_inset Quotes erd
\end_inset
, di poco uso pratico, o meglio non può ancora competere con la versatilità
di SPICE.
La lista si riduce ulteriormente a:
\layout Itemize
Spice
\layout Itemize
SpiceCAD
\layout Standard
Di questi l'ultimo è commerciale, per cui il pacchetto NG SPICE sarebbe
il primo simulatore open source di livello commerciale per Linux.
\layout Section
Un simulatore circuitale: SPICE3
\layout Standard
Prima di illustrare in dettaglio i punti del progetto NG SPICE è necessario
mettere in evidenza cosa sia e come funziona un simulatore circuitale della
terza generazione quale è SPICE3.
Questa è solo una breve introduzione al funzionamento interno del
simulatore,
una descrizione approfondita è presente nei testi dedicati alla simulazione
di circuiti elettrici.
\layout Subsection
Il metodo di risoluzione del circuito
\layout Standard
SPICE3 utilizza un procedimento l'Analisi Nodale Modificata per risolvere
il circuito (risolvere un circuito vuol dire calcolare l'andamento delle
tensioni e correnti in corrispondenza di ogni nodo).
Questo tipo di analisi prevede che il circuito sia descritto da una matrice
a blocchi contenente le conduttanze dei rami e le equazioni di vincolo
dei generatori indipendenti di corrente e tensione.
Senza approfondire ulteriormente, la struttura di una matrice siffatta
è la seguente:
\begin_inset Formula
\[
\left[ \begin{array}{cc}
\textrm{G} & \textrm{F}\\
\textrm{B} & \textrm{R}
\end{array}\right] \cdot \left[ \begin{array}{c}
\textrm{V}\\
\textrm{I}
\end{array}\right] =\left[ \begin{array}{c}
\textrm{C}\\
\textrm{E}
\end{array}\right] \]
\end_inset
\layout Standard
In cui C ed E sono i vettori relativi ai generatori di corrente e di
tensione.
La risoluzione di questo sistema lineare, i cui coefficienti sono di volta
in volta, reali o complessi a seconda del tipo di analisi (DC o AC), avviene
per mezzo della eliminazione di Gauss e la fattorizzazione LU.
Dato un sistema di equazioni lineari
\series bold
\begin_inset Formula \( Ax=b \)
\end_inset
,
\series default
il vettore incognito
\begin_inset Formula \( x \)
\end_inset
può essere calcolato applicando alla matrice
\begin_inset Formula \( A \)
\end_inset
una variante della eliminazione gaussiana che la trasforma nel prodotto
di due matrici di cui una triangolare superiore (
\begin_inset Formula \( U \)
\end_inset
) ed un'altra triangolare inferiore (
\begin_inset Formula \( L \)
\end_inset
):
\layout Standard
\begin_inset Formula
\[
A=LU\]
\end_inset
il sistema può quindi essere riscritto:
\begin_inset Formula
\[
LUx=b\]
\end_inset
ed eseguendo i passi seguenti:
\begin_inset Formula
\[
Ux=L^{-1}b=b'\]
\end_inset
\begin_inset Formula
\[
x=U^{-1}b'=U^{-1}L^{-1}b\]
\end_inset
La bontà di questo metodo consiste nel fatto che una volta calcolate ed
invertire le matrici, le soluzioni si ottengono modificando solo il vettore
dei termini noti (i valori dei generatori indipendenti).
Questa è solo una breva introduzione alla risoluzione dei circuiti con
il metodo della analisi nodale modificata, la difficoltà sta nel fatto
che le matrici dei circuiti sono spesso mal condizionate.
Una definizione di mal condizionamento di una matrici non è im portante
in questa sede, ma in un certo senso unamatrice mal condizionata reagisce
male alle operazione che si fanno su die essa, a maggior ragione quando
un computer avendo un precisione finita introduce ad ogni passo un errore
di troncamento.
i simulatori della classe di SPICE3 risolvono questo problema attraverso
algoritmi di riordinamento topologico e pivoting (si rinanda ai testi
specializ
zati per una loro descrizione).
\layout Subsection
Soluzione di equazioni non lineari
\layout Standard
I dispositivi a semiconduttore, ed alcuni particolari generatori controllati
hanne delle equazioni descrittive non lineari (i transistor bipolari in
zona attiva sono fortemente non lineari), per cui i circuiti che li
contengono
sono descritti da equazioni non lineari.
SPIC3 utilizza per la risoluzione di un sistema non lineare il metodo di
Newton-Raphson.
Senza entrare nei dettagli dell'algoritmo, SPICE trova la soluzione ad
una equazione non lineare iterando l'espressione seguente finche due
soluzioni
non si discostino al più di un valore fissato (il che indica che è stata
raggiunta la convergenza).
\begin_inset Formula
\[
x^{(i+1)}=x^{(i)}-\frac{g^{(i)}}{g'^{(i)}}\]
\end_inset
\layout Standard
Per evitare problemi di convergenza, nei casi in cui la distanza tra due
passi successivi dell'algoritmo, SPICE utilizza una tecnica di limiting,
applicando un coefficiente
\begin_inset Formula \( \alpha \)
\end_inset
, di valore positivo ed inferiore all'unità, al rapporto
\begin_inset Formula \( \frac{g^{(i)}}{g'^{(i)}} \)
\end_inset
.
L'estensione al dominio delle matrici del metodo visto per una quantità
scalare è immediato: per un generico circuito, l'insieme delle equazioni
non lineari viene sostituito ad ogni iterazione con le seguenti equazioni
lineari:
\begin_inset Formula
\[
J\left( x^{(i)}\right) \cdot x^{(i+1)}=J\left( x^{(i)}\right) \cdot
x^{(i)}-g\left( x^{(i)}\right) \]
\end_inset
in cui
\begin_inset Formula \( J\left( x^{(i)}\right) \)
\end_inset
è lo jacobiano calcolato in corrispondenza della soluzione ottenuta
all'iterazi
one precedente.
In questo ca la matrice delle conduttanze ed il vettore dei termini noti
si possono escprimere come:
\layout Standard
\begin_inset Formula
\[
A=J\left( x^{(i)}\right) +G\]
\end_inset
\layout Standard
\begin_inset Formula
\[
b=J\left( x^{(i)}\right) \cdot x^{(i)}-g\left( x^{(i)}\right) +C\]
\end_inset
Anche questo sistema (ora lineare) viene risolto attraverso il procedimento
di fattorizzazione LU.
\layout Subsection
Soluzione in funzione del tempo
\layout Standard
Qualora sia richiesta una soluzione in funzione del tempo (analisi in
transitori
o) SPICE si trova a dover calcolare tensioni (e correnti) nel circuito per
ogni istante di tempo.
Questo tipo di analisi è la più complessa che SPICE esegue.
Questo tipo di analisi richiede l'utilizzo di algoritmi di integrazioe
nuemrica.
SPICE3 utilizza due algoritmi differenti: il metodo trapezoidale e i metodi
di Gear di ordine 2-6.
Ambedue gli algoritmi approssimamo solo il valore esatto dell'integrale,
ed ad ogni passo introducono un errore locale.
Questi algoritmi hanno, in genere, problemi di convergenza in casi
particolari
che in questa introduzione non interessano (si veda un testo di analisi
numerica).
Per risolvere (o alleviare) questi problemi di convergenza SPICE3 introduce
dei parametri che
\begin_inset Quotes eld
\end_inset
modificano
\begin_inset Quotes erd
\end_inset
alcune caratteristiche dell'algoritmo per adattarlo al tipo di circuito
che si sta simulando.
\layout Subsection
Conclusioni
\layout Standard
SPICE3 utilizza una serie di algoritmi che si sono dimostrati validi nella
ricoluzione dei circuiti elettronici.
SPICE3 non è una scatola nera, a cui si passa un circuito e se ne legge
la risposta, è un potente strumento di simulazione che deve essere
\begin_inset Quotes eld
\end_inset
accordato
\begin_inset Quotes erd
\end_inset
sul circuito in esame.
Molti problemi di convergenza si possono risolvere effettuando un tuning
dei molti parametri che governano il comportamento degli algoritmi numerici.
Molto probabilmente i sumulatori commerciali hanno implementato algoritmi
migliori, con il passare del tempo, dopotutto in questi anni la ricerca
è andata avanti, per cui le loro caratteristiche di convergenza potrebbero
superiori.
In ogni caso gli algoritmi implementati in SPICE3 sono più che buoni.
\layout Standard
Questi argomenti sono stati tratti dal testo: Guida a Spice di Andrei
Vladimires
cu, edito dalla McGraw Hill.
Il testo contiene una approfondita descrizione degli algoritmi utilizzati
da SPICE2, SPICE3 e PSpice e delle opzioni disponibili.
\layout Section
Commenti al codice sorgente di SPICE3f4(5)
\layout Standard
SPICE3f4(5) viene distributo dall'Università della California di Berkekely
in un pacchetto tar compresso con gzip organizzato in directory separate
per funzione.
La directory che contiene il codice sorgente è la
\family typewriter
\series bold
src
\family default
\series default
.
La directory
\family typewriter
\series bold
src
\family default
\series default
è a sua volta organizzata in sottodirectory, ciascuna contenente una parte
del simulatore.
L'organizzazione della
\family typewriter
\series bold
src
\family default
\series default
è la seguente:
\layout Itemize
\family typewriter
\series bold
bin
\family default
\series default
: Questa directory contiene il codice delle procedure principali di
:Spice3f4(5)
e Nutmeg (Nutmeg èil postprocessore di SPice per la visualizzazione dei
dati).
Oltre questi due sorgenti si trovano anche alcuni programmi di utilità.
\layout Itemize
\family typewriter
\series bold
include
\family default
\series default
: In questa directory sono stati inseriti gli include file principali
:relativi
al codice del simulatore.
Questi file contengono le principali definizioni delle strutture dati
utilizzat
e da SPice e Nutmeg.
\layout Itemize
\family typewriter
\series bold
lib
\family default
\series default
: Il vero e proprio codice sorgente del simulatore.
La directory è organizzata in sottodirctory che contengono ciascuna una
parte del codice del simulatore.
La suddivisione è fatta per funzioni.
\layout Itemize
\family typewriter
makedefs
\family default
: il
\begin_inset Quotes eld
\end_inset
makefile
\begin_inset Quotes erd
\end_inset
\layout Itemize
\family typewriter
\series bold
unsuppo
\family default
\series default
: Questa directory contiene il codice sorgente relativo ad una vecchia
:analisi
presente in spice2 e non presente in SPICE3 ed il codice relativo ad una
versione di spice pensata per girare come demone.
Il codice in questa directory è considerato obsoleto.
\layout Standard
La directory
\family typewriter
\series bold
lib
\family default
\series default
è quella che interessa di più, poichè contiene il vero e proprio codice
sorgente di SPICE3.
Anche essa è a sua volta divisa in subdirectory, ciscuna contenente una
parte di codice:
\layout Itemize
\family typewriter
\series bold
ckt
\family default
\series default
: Questa directory contiene il codice sorgente relativo alle varie analisi
che il simulatore effettua sul circuito ed il codice di relativo alla
costruzio
ne del circuito.
\layout Itemize
\family typewriter
\series bold
cp
\family default
\series default
: SPICE3 dialoga con l'utente attraverso una interfaccia basata dulla C
Shell.
Questa directory contiene i file che costruiscono e gestiscono questa
interfacc
ia.
A detta dei programmatori di Berkeley, non è il massimo della pulizia.
\layout Itemize
\family typewriter
\series bold
dev
\family default
\series default
: Questa directory contiene il codice sorgente dei modelli dei dispositivi
disponibili in SPICE3.
\layout Itemize
\family typewriter
\series bold
fte
\family default
\series default
: Front End to Simulator Interface.
Routine che gestiscono le strutture dati, le analisi ed i database dei
vettori di SPICE3.
Anche questo codice (come quello della shell) andrebbe rivisto ampiamente.
\layout Itemize
\family typewriter
\series bold
hlp
\family default
\series default
: Questa directory raggruppa le routine relative alla funzione di help.
\layout Itemize
\family typewriter
\series bold
inp
\family default
\series default
: In questa directory si trovano le routine di parsing dell'input.
Sono le routine che traducono il file contenente la netlist nella matrice
del circuito e riempiono le strutture dati per le analisi ed i grafici.
Queste routine lavorano in stretta connessione con quelle in
\family typewriter
\series bold
fte
\family default
\series default
ed in
\family typewriter
\series bold
ckt
\family default
\series default
.
\layout Itemize
\family typewriter
makedefs
\family default
: Il solito makefile.
\layout Itemize
\family typewriter
\series bold
mfb
\family default
\series default
: MFB è un pacchetto per la gestione dell'interfaccia a terminale e per
la stampa di grafici su display a caratteri.
\layout Itemize
\family typewriter
\series bold
misc
\family default
\series default
: Questa directory raggruppa funzioni di varia utilità, non specifiche di
SPICE.
\layout Itemize
\family typewriter
\series bold
ni
\family default
\series default
: Questa directory raggruppa le routine per l'intergazione numerica
:utilizzate
da SPICE: Algoritmo trapezoidale e algoritmo di GEAR.
\layout Itemize
\family typewriter
\series bold
sparse
\family default
\series default
: Codice per la gestione delle matrici sparse.
Questo pacchetto viene anche di stribuito separatamente con tanto di
documentaz
ione presso il sito www.netlib.org.
SPICE rappresenta il circuito attraverso una matrice sparsa (contenente
le conduttanze lineari).
\layout Standard
La directory
\family typewriter
\series bold
dev
\family default
\series default
contiene il codice dei dispositivi implementati in SPICE3, ciascun
dispositivo
è contenuto in una directory propria e non ha relazioni con gli altri
dispositi
vi.
I dispositivi sono implementati seguendo uno standard ben preciso la cui
documentazione è disponibile all'Università di Berkeley.
La struttura è:
\layout Itemize
\family typewriter
\series bold
asrc
\family default
\series default
: Sorgente di tensione/corrente arbitratria.
Questo dispositivo serve a modellare parti di circuito rappresentabili
attraverso generatori indipendenti di funzione arbitraria.
\layout Itemize
\family typewriter
\series bold
bjt
\family default
\series default
: Modello di transistore bipolare.
Il modello è basato su estensioni del modello di Gummell e Poon.
Per le analisi in continua utilizza il modello di Ebers e Moll.
\layout Itemize
\family typewriter
\series bold
bsim1
\family default
\series default
,
\family typewriter
\series bold
bsim2
\family default
\series default
,
\family typewriter
\series bold
bsim3
\family default
\series default
: Queste directory contengono i modelli facenti parte della classe BSIM
prodotti da Berkeley.
I modelli BSIM sono il frutto di un lavoro di modellazione che astrae dalla
fisica dei semiconduttori.
La serie BSIM basa i propri paramtri su quelli che vengono definiti
parametri
di processo, coiè parametri caratteristici del procedimento costruttivo
del dispositivo.
Questi modelli soffrono di problemi di convergenza e qualche volta possono
portare a risultati
\begin_inset Quotes eld
\end_inset
non fisici
\begin_inset Quotes erd
\end_inset
.
Il modello bsim3, nelle sue varie versione è un tentativo di restituire
fisicità al modello.
BSIM è l'acronimo di Berkeley's Short channel IGFET Model.
Modello di transistor MOS (Short Channel) basato su parametri di processo,
versione 1.
il modello BSIM3 è attualmente lo standard industriale per i modelli MOS
a
\begin_inset Quotes eld
\end_inset
canale corto
\begin_inset Quotes erd
\end_inset
e viene sviluppato continuamente.
L'ultima versione del codice sorgente è disponibile presso:
http://www-device.be
rkeley.edu/~bsim3.
\layout Itemize
\family typewriter
\series bold
cap
\family default
\series default
: Modello di condensatore lineare.
\layout Itemize
\family typewriter
\series bold
cccs
\family default
\series default
: Generatore di Corrente controllato in corrente.
\layout Itemize
\family typewriter
\series bold
ccvs
\family default
\series default
: Generatore di tensione controllato in corrente.
\layout Itemize
\family typewriter
\series bold
csw
\family default
\series default
: Interruttore controllato in corrente.
\layout Itemize
\family typewriter
\series bold
dio
\family default
\series default
: Modello di diodo.
Modello molto semplice di diodo a giunzione.
\layout Itemize
\family typewriter
\series bold
disto
\family default
\series default
: Codice per il calcolo delle derivate parziali di alcune funzioni.
Dovrebbe essere il codice per l'analisi della distorsione.
\layout Itemize
\family typewriter
\series bold
ind
\family default
\series default
: Modello di induttore lineare e di induttori mutuamente accoppiati.
\layout Itemize
\family typewriter
\series bold
isrc
\family default
\series default
: Generatore indipendente di corrente.
\layout Itemize
\family typewriter
\series bold
jfet
\family default
\series default
: Modello di transistor jfet.
\layout Itemize
\family typewriter
\series bold
ltra
\family default
\series default
: Linea di trasmissione con perdite.
Questo modello potrebbe causare errori durante l'esecuzione del programma
in caso di compilazione per architetture parallele.
\layout Itemize
\family typewriter
\series bold
mes
\family default
\series default
: Modello di transistor MESFET per dispositivi in GaAs, ad esempio.
\layout Itemize
\family typewriter
\series bold
mos1
\family default
\series default
,
\family typewriter
\series bold
mos2
\family default
\series default
,
\family typewriter
\series bold
mos3
\family default
\series default
,
\family typewriter
\series bold
mos6
\family default
\series default
: Modelli per transistori MOS basati su parametri fisici.
Il primo di essi è il modello di Schichmann e Hodges, il modello quadratico
di base per i MOS.
A differenza dei BSIM, questi modelli si basano su parametri fisici.
\layout Itemize
\family typewriter
\series bold
res
\family default
\series default
: Modello di resistore lineare.
\layout Itemize
\family typewriter
\series bold
sw
\family default
\series default
: Modello di interruttore.
\layout Itemize
\family typewriter
\series bold
tra
\family default
\series default
: Linea di trasmissione priva di perdite
\layout Itemize
\family typewriter
\series bold
urc
\family default
\series default
: Linea RC distribuita uniformemente.
Questo modello potrebbe causare errori durante l'esecuzione del programma
in caso di compilazione per architetture parallele.
\layout Itemize
\family typewriter
\series bold
vccs
\family default
\series default
: Generatore di corrente controllato in tensione.
\layout Itemize
\family typewriter
\series bold
vcvs
\family default
\series default
: Generatore di tensione controllato in tensione.
\layout Itemize
\family typewriter
\series bold
vsrc
\family default
\series default
: Generatore ditensione indipendente.
\layout Section
Quale SPICE3f(*) ?
\layout Standard
L'Università di Berkeley ha abbandonato il supporto del software SPICE3
qualche anno fa.
L'ultima release
\begin_inset Quotes eld
\end_inset
ufficiale
\begin_inset Quotes erd
\end_inset
è quella denominata spice3f4.
Tale versione è disponibile presso www-cad.eecs.berkeley.edu.
Questa versione è stata successivamente rivista poiche' conteneva errori
nel codice della gestione delle matrici e nel codice di calcolo.
Pur non supportando più il software, l'Università di Berkekely ha rilasciato
delle patch in modo clandestino, inserendole in siti web più o meno noti.
Lo spice risultante doveva chiamarsi 3f5, ma in relatà spice3f5 pare sia
una software venduto da Berkeley attraverso il suo Industry Liason Program.
In ogni caso le patch sono arrivate su Internet e sono state applicate,
La versione più recente di spice3f4 disponibile è reperibile presso
l'archivio
di Linux del Sunsite dell'Università della North Carolina
(ftp://sunsite.unc.edu).
\layout Standard
Una versione ampliata e più recente di SPICE3, denominata da Berkeley
ufficialme
nte sèpice3f5, si trova ll'interno del pacchetto CIDER, un simulatore di
dispositivi rilasciato pubblicamente e reperibile allo sito in cui si trova
la distribuzione
\begin_inset Quotes eld
\end_inset
ufficiale
\begin_inset Quotes erd
\end_inset
di SPICE.
Questo spice supporta il multiprocessing e pare avere alcuni bug corretti.
\layout Standard
Questo SPICE sembra essere il canditato ideale per il progetto.
\layout Subsection
Spice per Linux
\layout Standard
Gli utenti del modno Linux hanno portato SPICE su questa piattaforma
correggendo
man mano i bug che gli si presentavano davanti.
Per questo motivo la versione Spice3f5 presente in CIDER non può essere
utilizzata così come è, è necessario applicarle le patch che nel frattempo
hanno corretto i bug nella versione 3f4/5 per Linux.
Una volta applicate queste patch si divrebbe disporre di un simulatore
abbastanza funzionale ed aggiornato su cui cominciare a lavorare.
\layout Quotation
In questi giorni ho fatto proprio questo, modificare il codice di spice3f5
\begin_inset Quotes eld
\end_inset
aggiornandolo
\begin_inset Quotes erd
\end_inset
con le patch prese dall'ultima versione di spiceper linux
spice3f5sfix.tar.gz.
Adesso il simulatore funziona abbastanza bene ma alcuni dispositivi devono
ancora essere convertiti per funzionare quando il simulatore è compilato
in modalità multiprocessore.
In tutto questo è necessario prevedere una estesa ed approfondita fase
di debugging.
PN
\layout Section
Overview del progetto NG SPICE
\layout Standard
Quando sarà completato, NG-SPICE dovrebbe avere una architettura simile
a quella della figura.
\begin_float fig
\layout Caption
Architettura NG-SPICE
\layout Standard
\align center
\begin_inset Figure size 416 245
file ng-archi.eps
width 3 70
flags 9
\end_inset
\end_float
Come si può vedere, il core di psice3f5, viene potenziato includendo nuovi
modelli, nuove analisi, una interfaccia per gestire il parallelismo e delle
API estrse per la comunicazione verso l'esterno.
Le API dovranno principalmente il linking di nuovi modelli di dispositivo
al simulatore ed esporre levariabili e le strutture interne attraverso
un protocollo permettendo a programmi esterni di leggerle ed eventualmente
modificarle.
Le API estese costiuiscono un sistema molto comodo per potenziare il
simulatore
senza il bisogno di dover agire sul core stesso.
Il framework, composto di uno schmatic entry tool ed di un wavefors viewer
permette l'editing grafico del circuito e la visione delle forme d'onda
in uscita.
Da notare che il framework può interfacciarsi con un database contenente
le modelcard dei componenti commerciali, permettendone una agevole sezione
da parte dell'utente.
\layout Standard
Questa architettura è ancora molto confusa, si deve ancora stabilire
l'effettiva
possibilità di estendere le API di Spice ed il protocollo di comunicazione.
Versioni avanzate di Spice permettono ciò (vedi XSPICE) per cui, almeno
in linea teorica, il problema è risolvibile.
Il DBMS (DataBase Management System) previsto è il PostgreSQL,
sufficientemente
potente e versatile per lo scopo.
\layout Section
Incremento delle prestazioni del simulatore
\layout Standard
La prima grande linea direttrice è l'incremento delle prestazioni del
simulatore.
Lo sviluppo di codice lungo questa linea dovrebbe portare ad ottenere un
simulatore con caratteristiche vicine a quelli commerciali.
L'incremento delle prestazioni e delle capacità riguarda strettamente il
codice dei dispositivi e delle analisi, e richiede una buona conoscenza
della struttura di SPICE3.
\layout Subsection
Breve termine: inserimento nuovi modelli.
\layout Standard
Gli obiettivi a breve temrine lungo questa linea direttrice sono:
\layout Itemize
Introduzione in SPICE3 dei nuovi modelli di dispositivi a semiconduttore:
Alcuni centri di ricerca hanno sviluppato dei modelli per SPICE3F4(5) il
cui codice sorgente è liberamente distribuibile su Internet e che sono
facilmente inseribili nel simulatore.
L'inserimento di questi modelli richiede semplici modifiche al codice
sorgente
di SPICE3 ed alla interfaccia dei modelli stessi.
Si trattra di fare una avveduta opera di taglia e cuci.
\layout Subsection
Medio termine: Modifiche al sorgente di SPICE3.
\layout Standard
Nel medio termine, facendo tesoro delle conoscenze acquisite nell'inserimento
dei modelli, si dovrebbe modificare leggermente l'interfaccia di inserimento
dei modelli per renderla più flessibile:
\layout Itemize
Supporto per il caricamento dinamico dei modelli in base alle effettive
necessità del circuito.
Se un circuito non usa i mesfet, non c'e' alcuna ragione per caricare il
suo modello.
Questo passo prevede la modifica di una sostanziosa parte del codice di
interfaccia verso i dispositivi: la directory
\family typewriter
\series bold
inp
\family default
\series default
.
In questo modo si riduce l'occupazione di memoria da parte del simulatore
stesso.
\layout Itemize
Adattamento dei modelli non sviluppati specificamente per SPICE di alcuni
dispositivi fondamentali.
SPICE3 soffre di un problema di inaccurateza dei modelli quando deve
simulare
circuiti analogici in potenza.
Alcuni grossi gruppi industriali (Philips, Honeywell, etc.) hanno sviluppato
modelli di bjt e mos adatti a questi scopi.
Purtroppo questi modelli non sono scritti per SPICE3f, per cui una modifica
dell'interfaccia è necessaria.
Il modello principale da inserire è il modello MEXTRAM della Philips,
pansato
per simulazioni analogiche.
\layout Itemize
Interfaccia verso i simulatori PISCES e CIDER: Questi simulatori incrementano
le prestazioni di SPICE permettendogli di simulare dispositivi
caratterizzati
da parametri tipici del processo costruttivo (droganti, struttura del
dispositi
vo, etc.).
Pisces e CIDER sono prevedono già una interfaccia verso SPICE, serve
solamente
un poco di debugging e di modifica del codice di interfaccia di SPICE3.
\layout Itemize
Ottimizzazione del codice: miglioramento delle caratteristiche risolutive
di SPICE3 attraverso l'introduzione di nuovi algoritmi, lasciando l'utente
libero di scegliere a proprio piacimento il trade-off accuratezza della
soluzione / tempo di calcolo.
L'utilizzo di librerie numeriche a precisione variabile (gmp, etc.)
l'aggiunta
di nuovi algoritmi di integrazione, dovrebbe migliorare le caratteristiche
di convergenza del simulatore.
\layout Subsection
Lungo termine: Introduzione di nuove caratteristiche.
\layout Standard
In questa fase si aggiunge del codie sorgente al simulatore.
Questa fase richiede una profonda compresione del funzionamento di SPICE3,
per cui è l'ultima:
\layout Itemize
Inclusione di nuove analisi: SPICE3 manca di tre analisi fondamentali in
un simulatore circuitale: l'Analisi MonteCarlo, che tiene in conto le
tolleranz
e di componenti e le modella come variabili aleatorie, l'analisi Worst Case,
che tenendo in conto le suddette tolleranze calcola il caso peggiore di
funzionamento del circuito e l'analisi parametrica, che itera l'analisi
del circuito al variare di uno o più parametri.
Una altra analisi molto importante dal punto di vista teorico è l'analisi
di rete, che permette di calcolare i parametri h,g,z,y,t,s etc.
di una rete due porte (eventualmente n-porte).
\layout Itemize
Code Level Modeling: attraverso il meccanismo di caricamento/scaricamento
dei m odelli, si dovrebbe implentare una API (o EAPI, Extended API) che
permetta a chi è interessato di sviluppare nuovo modelli di interfacciarli
con il simulatore in modo standard.
\layout Itemize
Analog Behavioral Device: Il dispositivo B di SPICE3, un generatore descritto
da una funzione arbitraria, potrebbe essere esteso per includere dispositivi
digitali e per includere nella sua definizione i costrutti IF THEN ELSE,
per renderlo più flessibile.
\layout Itemize
Motore di ottimizzazione: implementare in SPICE3 un motore di ottimizzazione
capace di ottimizzare un parametro in funzione degli altri (anche più
parametri
).
Si dovrebbe cercare in Internet un motore di ottimizzazione in fornma di
codice sorgente e introdurlo in SPICE3.
\layout Itemize
Extended API: Set di API per interfacciarsi al simulatore via codice e via
protocollo di comunicazione.
\layout Section
Interfaccia grafica
\layout Standard
Il termine interfaccia grafica è un poco riduttivo, in realtà si dovrebbe
trattare di un framework, un ambiente integrato per la simulazione, la
seconda grande linea direttrice.
Anche in questo caso esiste una distinzione in tre
\begin_inset Quotes eld
\end_inset
termini
\begin_inset Quotes erd
\end_inset
: breve, medio e lungo.
Il framework dovrebbe essere il più possibile separato dal simulatore stesso
e comnucare con esso tramite file oppure, se possibile, tramite una
interfaccia
\begin_inset Quotes eld
\end_inset
CORBA
\begin_inset Quotes erd
\end_inset
(ammesso che sia possibile usare CORBA per questo).
L'ambiente grafico proposto è GNOME (GNU Network Object Model Environment).
GNOME offre le procedure necessarie al drag and drop ed alla comunicazione
traii processi, utili al framework.
Il framework, ove possibile, dovrebbe utilizzare il più possibile pachetti
GNOME sviluppati da altri, cercandoli di estendere attraverso l'utilizzo
dei plu-in.
In questo modi si riduce drasticamente il numero di riche di codice da
scrivere e lo sforzo di debugging.
\layout Subsection
Breve termine: Schematic Entry e visualizzatore uscite:
\layout Standard
Le prime sezioni da realizzare del framework sono l'editor di schematici
(dei circuiti) ed un programma che permetta di visualizzare le uscite in
modo grafico.
Questi due pacchetti sono i principali da scrivere.
I
\layout Itemize
Schematic Entry: Deve permettere l'editing gerarchico dei circuiti (il che
implica l'espansione dei sottocircuiti e la presenza di layer multipli),
la possibilità di agganciare label ai componenti ed ai fili (ruotate
0-90-270-3
60 gradi) con font arbitrario.
Ogni componente deve poter essere
\begin_inset Quotes eld
\end_inset
aperto
\begin_inset Quotes erd
\end_inset
mostrando la sua model card.
Questa interfaccia dovrebbe essere estensibile tramitre il concetto di
plug-in.
Per esempio, si dovrebbe poter prevedere che un utente voglia costruire
una plug-in per la generazione di forme d'onda PWL (piece-wise linear),
un'altro quello per le forme d'onda modulate in frequenza, etc.
Lo schematic entry dovrebbe potersi interfacciare con un DBMS (DataBase
Management System) che contenga le tabelle relative ai componenti
disponibili
(transitor, etc.) in modo che possano essere selezionati facilmente.
Lo schematic entry dovrebe poi estrarre la netlist, selezionare le opzioni
di simulazione, etc.
Insomma deve essere il vero e proprio fulcro del sistema di simulazione.
Se si vuole rendere disponibile un editor di testi, si potrebbe unsare
quelli già presenti, magari estesi con delle plug-in.
\layout Itemize
Waveform Viewer: Questa versione migliorata di Nutmgeg non dovrebbe fare
altro che permettere di comporre grafici che contengono le uscite di SPICE.
SPICE lavora attraverso vettori, per cui non dovrebbe essere difficile
importarli nel visualizzatore e con un poco di opzioni
\begin_inset Quotes eld
\end_inset
da grafico
\begin_inset Quotes erd
\end_inset
renderli in una pagina pronta per la stampa.
Questo programma dovrebbe essere diviso in due parti: una parte di analisi
simile al probe di PSpice, ed una parte che costruisca grafici di qualità
pronti per la stampa su una stampante posscript, possibilemente permettendo
di combinarne un certo numero su di una singola pagina.
\layout Subsection
Medio termine: Aggiunta di moduli
\layout Standard
Inserimento di moduli nel framework per il supporto dei simulatori PISCES
e CIDER.
Miglioramento del codice scritto.
\layout Subsection
Lungo termine: ?
\layout Standard
Il framework è un concetto che si evolve anche in base alle esigenze di
chi lo usa, per cui a lungo termine non si può dire molto.
Vediamo cosa succede...
\layout Section
Documentazione
\layout Standard
La terza grande e ultima linea direttrice è la scrittura di una
documentazione
per l'utilizzo del simulatore.
La documentazione dovrebbe essere scritta in un linguaggio che permetta
la facile conversione nei linguaggi più usati per i sistemi di help e per
la distribuxione della documentazione:
\layout Itemize
HTML: il sistema di help dello GNOME usa l'html, per i suoi docimenti
\layout Itemize
INFO: il sistema ufficiale della GNU per la documentazione è l'info.
\layout Itemize
PDF: Il sistema oramai più diffuso per lo scambio di documenti.
\layout Standard
La documentazione necessaria per un simulatore circuitale è molto estesa,
oltrea ad una guida alle funzione ed una guida all'uso, sono necessarie
delle guide contenenti esempi.
Se intendiamo poi rilasciare una documentazione sul funzionamento interno
del simulatore, dovremo anche prevedere dei manuali di programmazione.
I manuali necessari sono:
\layout Itemize
User Manual: Descrizione del simulatore con esempi di utilizzo dello stesso
e tutorial.
\layout Itemize
Reference Manual: Descrizione dettagliata dei comandi e delle opzioni del
simulatore.
-
\layout Itemize
Modeling Manual: Descrizione dettagliata dell'utilizzo dei modelli dei
dispositi
vi a semiconduttore ed esempi di utilizzo.
\layout Standard
Altri manuali possono essere scritti o meno in base alle necessità.
tenete presente che la manualistica è l'unica parte del progetto che può
permetterci un minimo ritorno economico, qualori sia stampata da una casa
editrice o qualore decidiamo di non renderla pubblica..
La manualistica per un sistema di questo tipo è fondameentale, pensate
solamente alle frustrazioni avute tentando di simulare un circuito con
lo spice di Berkeley, e pensate che è tuttora usato in ambito di ricerca
con successo.
Un motivo ci sarà
\layout Section
Legal Mumbo Jumbo
\layout Standard
Danilo scaricati!
\the_end
Partial thread listing: