Vous êtes sur la page 1sur 19

ANALOG VLSI

Homework
Assignment -1

Submitted by
Shahin Shah
12116053
B.Tech ECE

z
Q1. Transistor Characterization
a) gm vs Vgs Plot gm vs Vgs for a fixed Vds = 1.8 V, for both NMOS and PMOS using 180nm
technology file for W= 0.5m, 1m, 2m, 5m, 10m, 20m, 40m, keeping the L= 180nm in a
single graph for each transistor. Sweep Vgs from 0 to 1.8V. Provide a short explanation for the
curves.
Solution:
NMOS Schematic:

Netlist:
Generated for: spectre
Generated on: Aug 6 18:40:02 2015
Design library name: Analog_tut_1
Design cell name: Q1
Design view name: schematic simulator lang=spectre

global 0 vdd! parameters a=0 x=5u include


"/usr/cadence/PDK/pas_gpdk180/release/gpdk180_v3.3/models/spectre/gpdk

.scs" section=stat

Library name: Analog_tut_1


Cell name: Q1
View name: schematic
NM0 (vdd! net3 0 0) nmos1 w=((x) / (1)) l=180n as=(((x) / (1)) <
599.5n) ? (((((200n > (((400n) - 200n) + 400n)) ? 200n : (((400n) 200n) + 400n)) * 600n) + (((x) / (1)) * 200n)) + (floor(((1) - 1) /
2.0) * (((((400n) - 200n) + 400n) * 600n) + (((x) / (1)) * 400n))) +
((((1) / 2) - floor((1) / 2) == 0) ? ((((200n > (((400n) - 200n) +
400n)) ? 200n : (((400n) - 200n) + 400n)) * 600n) + (((x) / (1)) *
200n)) : 0)) / 1 : ((((400n > (((400n) - 200n) + 400n)) ? 400n :
(((400n) - 200n) + 400n)) * ((x) / (1))) + (floor(((1) - 1) / 2.0) *
((((400n) - 200n) + 400n) * ((x) / (1)))) + ((((1) / 2) - floor((1) /
2) == 0) ? (((400n > (((400n) - 200n) + 400n)) ? 400n : (((400n) 200n) + 400n)) * ((x) / (1))) : 0)) / 1 \
ad=(((x) / (1)) < 599.5n) ? ((floor((1) / 2.0) * (((((400n) - 200n) +
400n) * 600n) + (((x) / (1)) * 400n))) + ((((1) / 2) - floor((1) /
2) != 0) ? ((((200n > (((400n) - 200n) + 400n)) ? 200n :
(((400n) - 200n) + 400n)) * 600n) + (((x) / (1)) * 200n)) : 0)) / 1 :
((floor((1) / 2.0) * ((((400n) - 200n) + 400n) * ((x) / (1)))) +
((((1) / 2) - floor((1) / 2) != 0) ? (((400n > (((400n) - 200n) +
400n)) ? 400n : (((400n) - 200n) + 400n)) * ((x) / (1))) : 0)) / 1 \
ps=(((x) / (1)) < 599.5n) ? (((2 * ((200n > (((400n) - 200n) +
400n)) ? 200n : (((400n) - 200n) + 400n))) + 1.6u) + (floor(((1) 1) / 2.0) * ((2 * (((400n) - 200n) + 400n)) + 2u)) + ((((1) / 2) floor((1) / 2) == 0) ? ((2 * ((200n > (((400n) - 200n) + 400n)) ? 200n
: (((400n) - 200n) + 400n))) + 1.6u) : 0)) / 1 : (((2 * ((400n >
(((400n) - 200n) + 400n)) ? 400n : (((400n) - 200n) + 400n))) + (2 *
((x) / (1)))) + (floor(((1) - 1) / 2.0) * ((2 * (((400n) - 200n) +
400n)) + (2 * ((x) / (1))))) + ((((1) / 2) - floor((1) / 2) == 0) ?
((2 * ((400n > (((400n) - 200n) + 400n)) ? 400n : (((400n) - 200n) +
400n))) + (2 * ((x) / (1)))) : 0)) / 1 \
pd=(((x) / (1)) < 599.5n) ? ((floor((1) / 2.0) * ((2 *
(((400n) - 200n) + 400n)) + 2u)) + ((((1) / 2) - floor((1) / 2) !=
0) ? ((2 * ((200n > (((400n) - 200n) + 400n)) ? 200n : (((400n) 200n) + 400n))) + 1.6u) : 0)) / 1 : ((floor((1) / 2.0) * ((2 *
(((400n) - 200n) + 400n)) + (2 * ((x) / (1))))) + ((((1) / 2) -

floor((1) / 2) != 0) ? ((2 * ((400n > (((400n) - 200n) + 400n)) ? 400n


: (((400n) - 200n) + 400n))) + (2 * ((x) / (1)))) : 0)) / 1 \
m=(1)*(1)
V0 (net3 0) vsource dc=a type=dc include "./_graphical_stimuli.scs"

simulatorOptions options reltol=1e-3 vabstol=1e-6 iabstol=1e-12


temp=27 \
tnom=27 scalem=1.0 scale=1.0 gmin=1e-12 rforce=1 maxnotes=5 maxwarns=5
\
digits=5 cols=80 pivrel=1e-3 sensfile="../psf/sens.output" \
checklimitdest=psf
dcOp dc write="spectre.dc" maxiters=150 maxsteps=10000 annotate=status
dcOpInfo info what=oppoint where=rawfile
dc dc param=a start=0 stop=1.8 oppoint=rawfile maxiters=150
maxsteps=10000 \

annotate=status
modelParameter info what=models where=rawfile
element info what=inst where=rawfile outputParameter
info what=output where=rawfile designParamVals info
what=parameters where=rawfile primitives info
what=primitives where=rawfile subckts info
what=subckts where=rawfile
save NM0:d

saveOptions options save=allpub

gm vs Vgs plot:

Explanation:
Initially, the transistor is cut-off. Hence, gm is zero. Since gm happens to be slope of Id and Vgs
graph, as the transistor comes out of cut-off and enters saturation region, the slope of the Id-Vgs

curve increases, hence gm shows a rise. However, gm slighty reduces as Vgs reaches 1.8V since it
is going near the triode region and gm reduces with Vgs in the triode region with constant Vds.
gm/Id vs Vgs:

Explanation: As gm/Id is inversely proportional to Vgs, the value of gm/Id reduces as Vgs increases.
Initially, it is constant as the transistor is in cut-off region.

b) gm/Id vs Vgs Plot (gm /Id) ratio vs Vgs for a fixed Vds = 1.8 V, for both NMOS and PMOS using
180nm technology file for W= 0.5m, 1m, 2m, 5m, 10m, 20m, 40m, keeping

L=180nm in a single graph for each transistor. Sweep Vgs from 0 to 1.8V. Provide a short
explanation for the curves.
Solution:
Schematic:

Netlist:
Generated for: spectre
Generated on: Aug 6 19:18:52 2015
Design library name: tut1q1
Design cell name: q1part2
Design view name: schematic simulator lang=spectre

global 0 vdd! parameters a=0 x=5u include

"/usr/cadence/PDK/pas_gpdk180/release/gpdk180_v3.3/models/spectre/gpdk

.scs" section=stat
Library name: tut1q1
Cell name: q1part2
View name: schematic
PM0 (0 net3 vdd! vdd!) pmos1 w=((x) / (1)) l=180n as=(((x) / (1)) <
599.5n) ? (((((200n > (((400n) - 200n) + 400n)) ? 200n : (((400n) - 200n)
+ 400n)) * 600n) + (((x) / (1)) * 200n)) + (floor(((1) - 1) /

2.0) * (((((400n) - 200n) + 400n) * 600n) + (((x) / (1)) * 400n))) +


((((1) /
400n)) ?
200n)) :
(((400n)

2) - floor((1) / 2) == 0) ? ((((200n > (((400n) - 200n) +


200n : (((400n) - 200n) + 400n)) * 600n) + (((x) / (1)) *
0)) / 1 : ((((400n > (((400n) - 200n) + 400n)) ? 400n :
- 200n) + 400n)) * ((x) / (1))) + (floor(((1) - 1) / 2.0) *

((((400n) - 200n) + 400n) * ((x) / (1)))) + ((((1) / 2) - floor((1) /


2) == 0) ? (((400n > (((400n) - 200n) + 400n)) ? 400n : (((400n) 200n) + 400n)) * ((x) / (1))) : 0)) / 1 \
ad=(((x) / (1)) < 599.5n) ? ((floor((1) / 2.0) * (((((400n) - 200n) +
400n) * 600n) + (((x) / (1)) * 400n))) + ((((1) / 2) - floor((1) /
2) != 0) ? ((((200n > (((400n) - 200n) + 400n)) ? 200n :
(((400n) - 200n) + 400n)) * 600n) + (((x) / (1)) * 200n)) : 0)) / 1 :
((floor((1) / 2.0) * ((((400n) - 200n) + 400n) * ((x) / (1)))) +
((((1) / 2) - floor((1) / 2) != 0) ? (((400n > (((400n) - 200n) +
400n)) ? 400n : (((400n) - 200n) + 400n)) * ((x) / (1))) : 0)) / 1 \
ps=(((x) / (1)) < 599.5n) ? (((2 * ((200n > (((400n) - 200n) +
400n)) ? 200n : (((400n) - 200n) + 400n))) + 1.6u) + (floor(((1) 1) / 2.0) * ((2 * (((400n) - 200n) + 400n)) + 2u)) + ((((1) / 2) floor((1) / 2) == 0) ? ((2 * ((200n > (((400n) - 200n) + 400n)) ? 200n
: (((400n) - 200n) + 400n))) + 1.6u) : 0)) / 1 : (((2 * ((400n >
(((400n) - 200n) + 400n)) ? 400n : (((400n) - 200n) + 400n))) + (2 *
((x) / (1)))) + (floor(((1) - 1) / 2.0) * ((2 * (((400n) - 200n) +
400n)) + (2 * ((x) / (1))))) + ((((1) / 2) - floor((1) / 2) == 0) ?
((2 * ((400n > (((400n) - 200n) + 400n)) ? 400n : (((400n) - 200n) +
400n))) + (2 * ((x) / (1)))) : 0)) / 1 \
pd=(((x) / (1)) < 599.5n) ? ((floor((1) / 2.0) * ((2 *
(((400n) - 200n) + 400n)) + 2u)) + ((((1) / 2) - floor((1) / 2) !=
0) ? ((2 * ((200n > (((400n) - 200n) + 400n)) ? 200n : (((400n) 200n) + 400n))) + 1.6u) : 0)) / 1 : ((floor((1) / 2.0) * ((2 *
(((400n) - 200n) + 400n)) + (2 * ((x) / (1))))) + ((((1) / 2) floor((1) / 2) != 0) ? ((2 * ((400n > (((400n) - 200n) + 400n)) ? 400n
: (((400n) - 200n) + 400n))) + (2 * ((x) / (1)))) : 0)) / 1 \
m=(1)*(1)
V0 (net3 0) vsource dc=a type=dc include "./_graphical_stimuli.scs"

simulatorOptions options reltol=1e-3 vabstol=1e-6 iabstol=1e-12


temp=27 \
tnom=27 scalem=1.0 scale=1.0 gmin=1e-12 rforce=1 maxnotes=5 maxwarns=5

\
digits=5 cols=80 pivrel=1e-3 sensfile="../psf/sens.output" \
checklimitdest=psf
dcOp dc write="spectre.dc" maxiters=150 maxsteps=10000 annotate=status
dcOpInfo info what=oppoint where=rawfile
dc dc param=a start=1.8 stop=0 oppoint=rawfile maxiters=150
maxsteps=10000 \
annotate=status
modelParameter info what=models where=rawfile element info what=inst
where=rawfile outputParameter info what=output where=rawfile
designParamVals info what=parameters where=rawfile primitives info
what=primitives where=rawfile subckts info what=subckts where=rawfile

save PM0:s
saveOptions options save=allpub

gm vs Vgs:

Explanation: Similar to the case of NMOS, this graph can be directly inferred as the slope of IdVgs curve for PMOS. Similar explanation holds true as in the case of NMOS.

gm/Id vs Vgs:

Explanation: Similar to the case of NMOS, initially it is in cut-off state and hence, low value of
the gm/Id ratio. However, as Vgs increases, Id reduces and hence the ratio increases (in the
negative direction since it is PMOS).

Vous aimerez peut-être aussi