INDICE
MEMORIA SRAM DA 64 bit *
Caratterizzazione tecnologica *
Gate NOT *
Gate NOR a tre ingressi *
Decoder a 3 bit *
sense Amplifier *
CELLA DI MEMORIA *
Memoria *
APPENDICE A *
APPENDICE B *
APPENDICE C *
APPENDICE D *
INDICE FIGURE
Figura 1: Gate not
*Figura 2 : Tempi di salita e discesa del not (spice livello 2)
*Figura 3: Tempi di salita e discesa del not (spice livello 1)
*Figura 4: Simulazione not a 100 MHz (livello 2 e 1)
*Figura 5: Layout gate not
*Figura 6: Gate nor a tre ingressi
*Figura 7: Layout gate nor a tre ingressi
*Figura 8: Comportamento decoder a 3 bit
*Figura 9: Tempi di salita e di discesa del decoder
*Figura 10: Glitch
*Figura 11: Glitch a 0,1 ns e a 0,05 ns
*Figura 12: Glitch a 0,01ns
*Figura 13: Layout decoder a tre bit
*Figura 14: Sense amplifier
*Figura 15: Simulazione risposta del sense amplifier
*Figura 16: cella a 6 transistori SRAM
*Figura 17: Circuito per la simulazione della SRAM
*Figura 18: Simuazione cella di memoria senza capacità
*Figura 19: Livelli nella simulazione senza capacità
*Figura 20: Simulazione a livello logico
*Figura 21: Simulazione cella di memoria con capacità parassite
*Figura 22: Tempo di scrittura della cella con capacità parassite e instabilità sense amplifier
*
INTRODUZIONE
La realizzazione della memoria è stata suddivisa in blocchi:
Il circuito e le simulazioni sono stati realizzati con il tool Ocean sotto Linux.
La tecnologia usata è la CMOS da 0,8 m m del modello Octagon del sistema Ocean (progettazione sea of gates).
La tecnologia usata è del tipo FCMOS. I transistori nMos sono indicati nei circuiti dal nome "nenh" e i pMos sono indicati con "penh". Le dimensioni dei dispositivi (fissate dal costruttore) sono:
|
nMos |
pMos |
Larghezza (L) |
848.53 nm |
848.53 nm |
Lunghezza (W) |
5.0912 m m |
12.351 m m |
Fattore di forma (W/L) |
6 |
14.5 |
Come risulta dalla tabella il rapporto tra il fattore di forma del pMos e quello del nMos è di 2,4. I modelli dei transistor usati per la simulazione sono:
.model nenh nmos level=2
+ ld=0.325u tox=250e-10 nsub=2e16
+ vto=0.7 uo=510 uexp=0.22
+ ucrit=24.3k delta=0.4 xj=0.4u
+ vmax=54k neff=4.0 rsh=0
+ nfs=0e11 js=2u cj=130u
+ cjsw=620p mj=0.53 mjsw=0.53
+ pb=0.68v cgdo=320p cgso=320p
* end nenh
.model penh pmos level=2
+ ld=0.3u tox=250e-10 nsub=5e16
+ vto=-1.1 uo=210 uexp=0.33
+ ucrit=51k delta=0.4 xj=0.5u
+ vmax=47k neff=0.88 rsh=0
+ nfs=0e11 js=10u cj=490u
+ cjsw=590p mj=0.46 mjsw=0.46
+ pb=0.78v cgdo=320p cgso=320p
* end penh
Il rapporto tra le mobilità dei due transistor è:
Dai dati usati per la simulazione si possono ricavare alcune grandezze caratteristiche di questo processo CMOS. Capacità dell’ossido:
Fattori di conducibilità dei mos:
Capacità di overlap:
Tutte le simulazioni sono state realizzate con una tensione di alimentazione di 3,3 V.
Figura 1: Gate not
In Figura 1 è visibile lo schema elettrico del not. La corrispondente descrizione circuitale con il linguaggio sls è:
network notmio (terminal A, y, vss, vdd)
{
penh w=12.351u l=0.84853u (A, y, vdd);
nenh w=5.0912u l=0.84853u (A, y, vss);
}
Nella simulazione del not con un carico di 1pF (aggiunta nella network di: cap 1p (y, vss);) si nota uno strano andamento dei tempi di salita e di discesa (Figura 2).
In particolare il tempo di discesa dovrebbe essere inferiore di quello di salita (calcolati dal 10% al 90%):
contro i tempi rilevati in simulazione: 1,68 ns in discesa e 1,32 ns in salita. Questo è dovuto al fatto che tutte le simulazioni sono state fatte con lo spice a livello 2. Questo livello in particolare tiene conto della degradazione della mobilità agli alti campi e di altri fattori che portano a essere più conduttivo il pMos del nMos (Figura 3).
Figura 2 : Tempi di salita e discesa del not (spice livello 2)
Figura 3: Tempi di salita e discesa del not (spice livello 1)
In Figura 4 è visibile l’andamento del segnale di uscita del not con un ingresso un segnale di frequenza 100 MHz, simulato si a livello 2 che a livello1. I segnali di ingresso usati per le simulazioni avevano un tempo di salita e di discesa di 0,1 ns.
In Figura 5 è visibile il layout del gate not. L’area grigia grande è il drogaggio p+ dei PMOS mentre l’area grigia piccola è il drogaggio n+ dei NMOS. I contatti di gate sono le due striscie nere a J contattate e marcate co la lettera A (ingrasso del date not). I contatti di source sono sul lato destro e in basso e sono marcati con vss per l’nMos e vdd per il pMos.
Questa porzione di silicio in particolare contiene quattro transistori di cui due non sono utilizzati.
Figura 4: Simulazione not a 100 MHz (livello 2 e 1)
Figura 5: Layout gate not
Figura 6: Gate nor a tre ingressi
Per realizzare il decoder è necessario usare dei gate nor. Lo schema elettrico è visibile in Figura 6 mentre la descrizione in linguaggio sls è:
network nor3mio (terminal A, B, C, F, vss, vdd)
{
penh w=12.351u l=0.84853u (A, v1, vdd);
penh w=12.351u l=0.84853u (B, v1, v2);
penh w=12.351u l=0.84853u (C, v2, F);
nenh w=5.0912u l=0.84853u (A, F, vss);
nenh w=5.0912u l=0.84853u (B, F, vss);
nenh w=5.0912u l=0.84853u (C, F, vss);
}
Il lauout di questo gate (Figura 7) non è stato ottimizzato per limitare l’occupazione di area, infatti vi sono molti transistor inutilizzati. In particolare si utilizzano sei transistori su un’area che ne contiene sedici. Si potrebbe tranquillamente, visto i tre livelli di metallizzazione a disposizione, disporli in due blocchi. Si noti comunque che l’area in alto a destra no è utilizzata da transistori ma solo da piste di collegamento. Questo problema è dovuto alla sbroglio automatico eseguito con l’opzione di collegamento di tutte le giunzioni non utilizzate attiva.
Per l’indirizzamento di riga e di colonna ho utilizzato un decoder a 3 bit realizzato utilizzando dei gate nor a tre ingressi e dei not (vedi prima). In Figura 8 si vede la simulazione a livello spice del comportamento del decoder. La simulazione è stata realizzata impostando i segnali di ingresso (in[1..3]) con un tempo di salita e di discesa di 0,1 ns. Come si può notare dalla Figura 9 il tempo di salita e di discesa di una uscita del decodificatore sono rispettivamente circa 81 ps (per passare da » 0,3V a » 3V) e 108 ps. In Figura 10 e Figura 11 si notano dei glitch dovuti a delle commutazioni spurie che, con questi tempi di salita dei segnali di ingresso, raggiungono 0,7 volt. In questo caso particolare lo glitch è stato ottenuto passando da una configurazione di ingresso di 111 a una configurazione di 000. Per esaltare i glitch si è diminuito il tempo di salita dei segnali di ingresso a 0,05 ns (Figura 11b) e 0,01 ns (Figura 12). Si può notare chiaramente l’aumento del fenomeno con l’introduzione di componenti negative. Queste sono dovute a effetti boostrap collegati alle capacità parassite dei dispositivi. Il layout di questo circuito () è ancora meno ottimizzato di quello del gate nor perché fa uso proprio di quest’ultimo e perché i tre not utilizzati si potrebbero ridurre in meno spazio(due not in un riquadro).
Figura 7: Layout gate nor a tre ingressi
Figura 8: Comportamento decoder a 3 bit
Figura 9: Tempi di salita e di discesa del decoder
Figura 10: Glitch
Figura 11: Glitch a 0,1 ns e a 0,05 ns
Figura 12: Glitch a 0,01ns
La descrizione del circuti in linguaggio sls è:
network dectrebit (terminal in1, in2, in3, out1, out2, out3, out4, out5, out6, out7, out8, vss, vdd)
{
notmio (in1, inn1, vss, vdd);
notmio (in2, inn2, vss, vdd);
notmio (in3, inn3, vss, vdd);
nor3mio (in1, in2, in3, out1, vss, vdd);
nor3mio (inn1, in2, in3, out2, vss, vdd);
nor3mio (in1, inn2, in3, out3, vss, vdd);
nor3mio (in1, in2, inn3, out5, vss, vdd);
nor3mio (inn1, inn2, in3, out4, vss, vdd);
nor3mio (inn1, in2, inn3, out6, vss, vdd);
nor3mio (in1, inn2, inn3, out7, vss, vdd);
nor3mio (inn1, inn2, inn3, out8, vss, vdd);
}
Figura 13: Layout decoder a tre bit
Per la realizzazione della memoria è necessario un sense aplifier (Figura 14) che legga il valore della cella selezionata. La descrizione in linguaggio sls è:
network senseamp (terminal Q, Qn, y, E, vss, vdd)
{
penh w=12.351u l=0.84853u (E, N3, vdd);
penh w=12.351u l=0.84853u (E, N4, vdd);
penh w=12.351u l=0.84853u (N3, N5, vdd);
penh w=12.351u l=0.84853u (N4, y, vdd);
nenh w=5.092u l=0.84853u (Q, N3, vss);
nenh w=5.092u l=0.84853u (Qn, N4, vss);
nenh w=5.092u l=0.84853u (N5, N5, vss);
nenh w=5.092u l=0.84853u (N5, y, vss);
}
Figura 14: Sense amplifier
La simulazione nel tempo (Figura 15) non risulta essere molto significativa.
Figura 15: Simulazione risposta del sense amplifier
Figura 16: cella a 6 transistori SRAM
La simulazione della cella di memoria vista così come è in Figura 16 non è possibile. Questo perché sulla linea Q e Qn dovrebbero passare sia i dati in ingresso che quelli in uscita. Il simulatore permette di imporre dei valori alle linee di ingresso ma non di leggerle una volta dichiarate come tali. Gli stati free e three state non sono utilizzabili in questa situazione. In particolare nella simulazione a livello spice il valore free viene imposto a vdd/2.
Descrizione in linguaggio sls:
network sram (terminal E, Q, Qn, vss, vdd)
{
penh w=12.351u l=0.84853u (N2, N1, vdd);
penh w=12.351u l=0.84853u (N1, N2, vdd);
nenh w=5.092u l=0.84853u (N2, N1, vss);
nenh w=5.092u l=0.84853u (N1, N2, vss);
nenh w=5.092u l=0.84853u (E, Q, N1);
nenh w=5.092u l=0.84853u (E, Qn, N2);
}
Per poter simulare il comportamento della cella con lo spice si è ricorso a un circuito di comodo che risolvesse i problemi indicati sopra. La descrizione in linguaggio sls è:
network bit (terminal D, E, Wr, vss, vdd)
{
notmio (E, R5, vss, vdd);
pastr (D, D1, Wr, vss, vdd);
notmio (D, k, vss, vdd);
pastr (k, Dn, Wr, vss, vdd);
sram (E, D1, Dn, vss, vdd);
senseamp (D1, Dn, y, R5, vss, vdd);
}
Figura 17: Circuito per la simulazione della SRAM
La simulazione è stata effettuata sia con il circuito in Figura 17 si con l’aggiunta, nello stesso schema, di due capacità da 0,5 pF su nodi D1 e Dn per simulare la capacità intrinseca di una bit line.
In Figura 20 è riportata la simulazione della cella di memoria senza le capacita a livello logico. Confrontandola con la Figura 18 si può notare la differenza tra le due simulazioni. Dalle simulazioni senza capacità si può notare l’andamento irregolare delle tensioni sui nodi della cella (D1 e Dn) e in uscita da sense amplifier. Quest’ultimo quando disattivato dal comande E tende a portarsi su un valore superiore alla soglia logica (probabilmente dovuto alla maggiore conduttività dei pMos).
Figura 18: Simuazione cella di memoria senza capacità
Figura 19: Livelli nella simulazione senza capacità
Figura 20: Simulazione a livello logico
Figura 21: Simulazione cella di memoria con capacità parassite
Con l’inserimento delle capacità parassite diventano più stabili tutti i nodi e soprattutto diventa apprezzabile il tempo di scrittura della cella. Come si può notare dalla Figura 22 il tempo di scrittura è di circa 0,6 ns. Si può notare anche come il sense amplifier una volta disattivato (dal comando E) si porti a un valore di uscita di circa 2,5 V.
Figura 22: Tempo di scrittura della cella con capacità parassite e instabilità sense amplifier
Purtroppo non è stato possibile simulare il comportamento della memoria completa. Questo probabilmente è dovuto a delle limitazione dello spice che si è rifiutato di simulare l’intero circuito. Non è stata di nessun aiuto neanche la simulazione logica, la quale non è riuscita a fornire valori accettabili. La descrizione in linguaggio sls è:
network pastrcolonna (terminal Qi, Qin, Qo, Qon, E, vss, vdd)
{
notmio (E, En, vss, vdd);
penh w=12.351u l=0.84853u (En, Qi, Qo);
nenh w=5.092u l=0.84853u (E, Qi, Qo);
penh w=12.351u l=0.84853u (En, Qin, Qon);
nenh w=5.092u l=0.84853u (E, Qin, Qon);
}
network colonnacelle (terminal Q, Qn, r1, r2, r3, r4, r5, r6, r7, r8, vss, vdd)
{
sram (r1, Q, Qn, vss, vdd);
sram (r2, Q, Qn, vss, vdd);
sram (r3, Q, Qn, vss, vdd);
sram (r4, Q, Qn, vss, vdd);
sram (r5, Q, Qn, vss, vdd);
sram (r6, Q, Qn, vss, vdd);
sram (r7, Q, Qn, vss, vdd);
sram (r8, Q, Qn, vss, vdd);
}
network matrice8x8 (terminal Q, Qn, a0, a1, a2, a3, a4, a5, vss, vdd)
{
dectrebit (a0, a1, a2, r1, r2, r3, r4, r5, r6, r7, r8, vss, vdd);
dectrebit (a3, a4, a5, c1, c2, c3, c4, c5, c6, c7, c8, vss, vdd);
colonnacelle (Q1, Q1n, r1, r2, r3, r4, r5, r6, r7, r8, vss, vdd);
colonnacelle (Q2, Q2n, r1, r2, r3, r4, r5, r6, r7, r8, vss, vdd);
colonnacelle (Q3, Q3n, r1, r2, r3, r4, r5, r6, r7, r8, vss, vdd);
colonnacelle (Q4, Q4n, r1, r2, r3, r4, r5, r6, r7, r8, vss, vdd);
colonnacelle (Q5, Q5n, r1, r2, r3, r4, r5, r6, r7, r8, vss, vdd);
colonnacelle (Q6, Q6n, r1, r2, r3, r4, r5, r6, r7, r8, vss, vdd);
colonnacelle (Q7, Q7n, r1, r2, r3, r4, r5, r6, r7, r8, vss, vdd);
colonnacelle (Q8, Q8n, r1, r2, r3, r4, r5, r6, r7, r8, vss, vdd);
pastrcolonna (Q1, Q1n, Q, Qn, c1, vss, vdd);
pastrcolonna (Q2, Q2n, Q, Qn, c2, vss, vdd);
pastrcolonna (Q3, Q3n, Q, Qn, c3, vss, vdd);
pastrcolonna (Q4, Q4n, Q, Qn, c4, vss, vdd);
pastrcolonna (Q5, Q5n, Q, Qn, c5, vss, vdd);
pastrcolonna (Q6, Q6n, Q, Qn, c6, vss, vdd);
pastrcolonna (Q7, Q7n, Q, Qn, c7, vss, vdd);
pastrcolonna (Q8, Q8n, Q, Qn, c8, vss, vdd);
}
network memoria (terminal dato, wr, rd, a0, a1, a2, a3, a4, a5, vss, vdd)
{
matrice8x8 (Q, Qn, a0, a1, a2, a3, a4, a5, vss, vdd);
/* Nega il dato da mandare alla matrice */
notmio (dato, daton, vss, vdd);
pastrcolonna (dato, daton, Q, Qn, wr, vss, vdd);
/* bafferizzo l'uscita del sense amplifier che lavora solo in lettura. */
notmio (rd, rdn, vss, vdd);
pastr (y, dato, rd, vss, vdd);
senseamp (Q, Qn, y, rdn, vss, vdd);
}
Per limitare lo spazio si riporta solo il file comandi di simulazione della cella di memoria:
/* auto_set */
option sigunit = 1.000000e-09
option outacc = 10p
option simperiod = 14
option level = 3
dissipation
option vh = 3.3
option vminh = 3.1
option vmaxl = 0.2
plot D
plot Wr
plot E D1 y
set vdd = h*20
set vss = l*20
set E = h*1 l*2 h*2 h*1 l*2 h*2 h*1 h*1 l*3 h*1 l*2
set D = l*1 f*2 f*2 h*1 f*2 f*2 l*1 f*2
set Wr = h*1 l*2 l*2 h*1 l*2 l*2 h*1 l*2
/*
*%
tstep 0.01n
trise 0.1n
tfall 0.1n
vhigh 3.3
vlow 0
*%
vvdd "vdd" 0 3.3v
vWr "Wr" 0 3.3v
vD "D" 0 3.3v
vE "E" 0 3.3v
*%
Il simulatore ho fornito dei valori di dissipazione di potenza relative alle sequenze di ingresso fornite.
Cella di memoria (senza capacità):
Dynamic Dissipation [in Watts]
--- time interval [0, 1.400000e-08)
<total netw.>
average 2.05125e-04
Decodificatore:
Dynamic Dissipation [in Watts]
--- time interval [0, 9.000000e-09)
<total netw.>
average 1.10962e-03
Gate not:
Dynamic Dissipation [in Watts]
--- time interval [0, 2.600000e-08)
<total netw.>
average 1.36875e-05
Il programma usato per tutte le simulazioni ha la seguente struttura:
O C E A N
----------
july 5, 1993
1. INTRODUCTION
============
OCEAN is a freely-available system that enables you to design CMOS chips in
the sea-of-gates design style. The sea-of-gates design style aims at three
goals:
(1) minimizing the chip design time
(2) minimizing the chip fabrication time
(3) minimizing the chip cost
Before you can start designing a sea-of-gates chip you have to select a
master image. This is a prefabricated pattern of transistors that is laid
out over the entire chip area. The effort of the designer (and the design
tools) is to interconnect these transistors by metal wires, thus
implementing the desired functionality of the chip.
In contrast to other sea-of-gates design systems that we know of, OCEAN
allows you to design your chip in a hierarchical fashion. This has several
advantages, including the ability to
(1) easily mix analogue and digital subcomponents on a chip
(2) manually optimize parts of the automatically generated layout
(3) design critical subcomponents (e.g. RAM) and reuse them
OCEAN has been used extensively at the EE faculty of Delft University of
Technology, the Netherlands. Second year students without any previous
experience in VLSI design were able to design reasonably complex CMOS chips
with OCEAN. After processing in the DIMES foundry, many of these student
chips where successfully tested.
For more information, we recommend that you retrieve the file
'ocean_docs.tar.gz', which contains a postscript file describing everything
about the system.
2. AVAILABILITY
============
OCEAN is integrated with the Nelsis (release 3) full-custom chip design
system. For best results, do not install OCEAN without installing Nelsis.
Both systems are available for free from Delft University of Technology.
You can obtain a copy from the anonymous-FTP host donau.et.tudelft.nl
(130.161.144.100), directory pub/ocean. Alternatively you can use the ftp
directory on 'olt.et.tudelft.nl' or access the Gopher server
'olt.et.tudelft.nl' and fetch it from "Computer corner/The OCEAN
Sea-of-Gates design system distribution/".
We try to make sure that the OCEAN distribution archives always contain the
latest version. We do not work with releases nor release numbers. Instead,
you can easily find the compilation date of each archive file in the
directory 'release_info'.
OCEAN also runs with Nelsis release 4. This Nelsis release offers a very
advanced version mechanism, a flow manager, graphical representation of the
chip hierarchy, and many more nifty little things. If you prefer release 4
over release 3, get it from dutente.et.tudelft.nl:pub/nelsis. Note,
however, that we do not actively support Nelsis release 4 in combination
with OCEAN.
**** Executables in ocean/bin/$MACHINE/nelsis3/
ICELLS compiles and installs sea-of-gates cell libraries.
cedif compiles EDIF sources into the nelsis database.
dofunc front-end for the functional simulator "func_mkdb".
fish sea-of-gates layout purifier.
ghoti sea-of-gates extracted circuit purifier.
mkopr creates a new sea-of-gates design project.
mksls constructs a Makefile for updating a nelsis database.
nelsea nelsis to seadif and seadif to nelsis database converter.
sea front-end for calling seadif tools in a nelsis environment.
seadali interactive tool for layout editing, placing and routing.
tutorial creates a sea-of-gates design project containing a
tutorial.
**** Executables in ocean/bin/$MACHINE/
esea compiles EDIF sources into the seadif database.
freedif removes cells from the seadif database.
gnarp performs various kind of operations on a seadif database.
madonna partitioning-based sea-of-gates placer.
makebus analyses a netlist to extract buses from it.
seedif lists the contents of the seadif database.
showbus shows the buses in a netlist, as found by "makebus".
trout Lee-type over-the-cell sea-of-gates router.
**** Executables in ocean/bin/
INSTALLATION prints OCEAN installation instructions on stdout.
buildsrc compiles OCEAN sources with specific "make" parameters.
dist distributes OCEAN executables to shadow trees.
rmsdflock removes (blasts) the locks from a seadif database.
seatail temporarely shows output from a sea-of-gates tool.
thearch prints a value for the MACHINE environment on stdout.
**** Executables in cacd/bin/
addproj adds a project to the list of imported projects.
arrexp expands the arrays in an SLS commandfile, used by "simeye".
ccif compiles CIF data format into the nelsis database.
cga converts GDS-II data format to ASCII.
cgi compiles GDS-II sources into the nelsis database.
cig converts info from the nelsis database to GDS-II format.
clambda changes the lambda value of a design project.
cldm compiles LDM (= layout description language) into the
database.
csls compiles SLS (= circuit description language) into the
database.
dbcat lists the contents of cells that are in the nelsis database.
dbclean removes data from the database that can be regenerated.
dblist lists the contents of the nelsis database.
exp expands a layout cell (generate derived data from it).
func_mkdb creates a functional ("behavioral") simulator.
getepslay converts a layout cell to PostScript suitable for printing.
impcell imports a cell from another project (see also "addproj").
layflat removes all hierarchy from a layout cell.
macro sets or unset a macro status for a layout cell.
makeboxh expands a layout cell hierarchically to boxes (see "exp").
makeboxl expands a layout cell linearly to boxes (see "exp").
makegln creates a non-vertical line segment representation (see
"exp").
makevln creates a set of "_vln" data files (see "exp").
mkpr creates a nelsis project (see "mkopr").
mplot makes a plotfile for a masklayout.
nspice front-end for spice-2 and spice-3, used by "simeye".
nspice_bs pre-processor for spice-2 and spice-3, used by "simeye".
nspice_pp post-processor for spice-2 and spice-3, used by "simeye".
outgds puts GDS II-formatted files on tape.
putdevmod puts a device model description into the circuit database.
putspice compiles a SPICE network description into the database.
readgds reads GDS II-formatted file from tape.
rmdb removes cells from the nelsis database.
rmpr removes a nelsis design project.
setcmap manipulates the X-window colormap for nelsis and OCEAN
tools.
simeye interactive switch-level and spice simulator for X-windows.
sls switch-level simulator, used by "simeye".
sls_exp pre-processor for "sls".
sls_mkdb compiles SLS source into the database, see "csls".
space layout-to-circuit extractor.
tecc technology compiler for "space".
xcif extracts CIF format from the layout database.
xcmk extracts CIRCUITMASK format (Philips) from the layout
database.
xedif extracts EDIF format from the circuit database, see "cedif".
xldm extracts LDM format from the layout databse, see "cldm".
xsls extracts SLS format from the circuit database, see "csls".
xspice extracts SPICE format from the circuit database, see
"putspice".
Per la simulazione con lo spice il programma di conversione da sls a spice ha realizzato il seguente file (riguarcante la simulazione del decoder):
dectrebit
.subckt notmio 1 2 3 4 5
*
* 1 pbulk 2 nbulk 3 A 4 y 5 vdd
*
m1 4 3 5 1 penh w=12.351u l=848.53n
m2 4 3 0 2 nenh w=5.0912u l=848.53n
*
* 0 vss 1 pbulk 2 nbulk 3 A 4 y
* 5 vdd
*
.ends notmio
.subckt nor3mio 1 2 3 4 5 6 7
*
* 1 pbulk 2 nbulk 3 A 4 B 5 C
* 6 F 7 vdd
*
m1 8 3 7 1 penh w=12.351u l=848.53n
m2 8 4 9 1 penh w=12.351u l=848.53n
m3 9 5 6 1 penh w=12.351u l=848.53n
m4 6 3 0 2 nenh w=5.0912u l=848.53n
m5 6 4 0 2 nenh w=5.0912u l=848.53n
m6 6 5 0 2 nenh w=5.0912u l=848.53n
*
* 0 vss 1 pbulk 2 nbulk 3 A 4 B
* 5 C 6 F 7 vdd 8 v1 9 v2
*
.ends nor3mio
* circuit dectrebit 1 2 3 4 5 6 7 8 9 10 11 12 13 14
*
* 1 pbulk 2 nbulk 3 in1 4 in2 5 in3
* 6 out1 7 out2 8 out3 9 out4 10 out5
* 11 out6 12 out7 13 out8 14 vdd
*
x1 1 2 3 15 14 notmio
x2 1 2 4 16 14 notmio
x3 1 2 5 17 14 notmio
x4 1 2 3 4 5 6 14 nor3mio
x5 1 2 15 4 5 7 14 nor3mio
x6 1 2 3 16 5 8 14 nor3mio
x7 1 2 3 4 17 10 14 nor3mio
x8 1 2 15 16 5 9 14 nor3mio
x9 1 2 15 4 17 11 14 nor3mio
x10 1 2 3 16 17 12 14 nor3mio
x11 1 2 15 16 17 13 14 nor3mio
*
* 0 vss 1 pbulk 2 nbulk 3 in1 4 in2
* 5 in3 6 out1 7 out2 8 out3 9 out4
* 10 out5 11 out6 12 out7 13 out8 14 vdd
* 15 inn1 16 inn2 17 inn3
*
* end dectrebit
* range: w >= 3u, 3u >= l >= 1.6u
* |Vd| <= 5.5v, |Vg| > 1.5v, |Vb| < 5v
* originally we had rsh=55 (nenh) and rsh=75 (penh) but its influence
* can be neglected and it spoils the simulations if we use "ghoti -r"
.model nenh nmos level=2
+ ld=0.325u tox=250e-10 nsub=2e16
+ vto=0.7 uo=510 uexp=0.22
+ ucrit=24.3k delta=0.4 xj=0.4u
+ vmax=54k neff=4.0 rsh=0
+ nfs=0e11 js=2u cj=130u
+ cjsw=620p mj=0.53 mjsw=0.53
+ pb=0.68v cgdo=320p cgso=320p
* end nenh
.model penh pmos level=2
+ ld=0.3u tox=250e-10 nsub=5e16
+ vto=-1.1 uo=210 uexp=0.33
+ ucrit=51k delta=0.4 xj=0.5u
+ vmax=47k neff=0.88 rsh=0
+ nfs=0e11 js=10u cj=490u
+ cjsw=590p mj=0.46 mjsw=0.46
+ pb=0.78v cgdo=320p cgso=320p
* end penh
vpbulk 1 0 5V
rpbulk 1 0 100meg
vnbulk 2 0 0V
rnbulk 2 0 100meg
* vdd ? 0 5V
* rgnd ? 0 1p
* rvss ? 0 1p
vvdd 14 0 pwl (0.000000e+00 3.300000e+00
+ 8.975000e-09 3.300000e+00 9.025000e-09 3.300000e+00)
vin1 3 0 pwl (0.000000e+00 0.000000e+00
+ 9.750000e-10 0.000000e+00 1.025000e-09 3.300000e+00
+ 1.975000e-09 3.300000e+00 2.025000e-09 0.000000e+00
+ 2.975000e-09 0.000000e+00 3.025000e-09 3.300000e+00
+ 3.975000e-09 3.300000e+00 4.025000e-09 0.000000e+00
+ 4.975000e-09 0.000000e+00 5.025000e-09 3.300000e+00
+ 5.975000e-09 3.300000e+00 6.025000e-09 0.000000e+00
+ 6.975000e-09 0.000000e+00 7.025000e-09 3.300000e+00
+ 7.975000e-09 3.300000e+00 8.025000e-09 0.000000e+00
+ 8.975000e-09 0.000000e+00 9.025000e-09 0.000000e+00)
vin2 4 0 pwl (0.000000e+00 0.000000e+00
+ 1.975000e-09 0.000000e+00 2.025000e-09 3.300000e+00
+ 3.975000e-09 3.300000e+00 4.025000e-09 0.000000e+00
+ 5.975000e-09 0.000000e+00 6.025000e-09 3.300000e+00
+ 7.975000e-09 3.300000e+00 8.025000e-09 0.000000e+00
+ 8.975000e-09 0.000000e+00 9.025000e-09 0.000000e+00)
vin3 5 0 pwl (0.000000e+00 0.000000e+00
+ 3.975000e-09 0.000000e+00 4.025000e-09 3.300000e+00
+ 7.975000e-09 3.300000e+00 8.025000e-09 0.000000e+00
+ 8.975000e-09 0.000000e+00 9.025000e-09 0.000000e+00)
.print tran v(3) v(4) v(5) v(6) v(7) v(8) v(9) v(10)
.print tran v(11) v(12) v(13)
vvdd 14 0 3.3v
vin1 3 0 3.3v
vin2 4 0 3.3v
vin3 5 0 3.3v
.tran 1.000000e-12 9.000000e-09
.end