blob: 012aaa2fc86249a0b90fb69d372af5aca2e91e90 [file] [log] [blame]
v {xschem version=3.1.0 file_version=1.2 }
G {}
K {}
V {}
S {}
E {}
B 2 760 -580 1560 -180 {flags=graph
y1=4.9e+10
y2=1.3e+11
ypos1=0
ypos2=2
divy=5
subdivy=1
unity=G
x1=0.0001
x2=0.00985467
divx=5
subdivx=1
node=ft
color=4
dataset=0
unitx=u
}
T {Transistor ft measurement} 130 -590 0 0 0.8 0.8 {}
N 220 -480 400 -480 { lab=D}
N 30 -480 30 -360 { lab=D}
N 30 -300 30 -110 { lab=GND}
N 400 -320 430 -320 { lab=GND}
N 430 -320 430 -270 { lab=GND}
N 400 -270 430 -270 { lab=GND}
N 220 -150 220 -110 { lab=GND}
N 400 -290 400 -110 { lab=GND}
N 190 -320 220 -320 { lab=GND}
N 190 -320 190 -270 { lab=GND}
N 190 -270 220 -270 { lab=GND}
N 220 -290 220 -210 { lab=GND}
N 220 -400 220 -350 { lab=G}
N 400 -480 400 -350 { lab=D}
N 260 -320 360 -320 { lab=G}
N 220 -370 290 -370 { lab=G}
N 290 -370 290 -320 { lab=G}
N 30 -110 400 -110 { lab=GND}
N 220 -480 220 -460 { lab=D}
N 220 -210 220 -150 { lab=GND}
N 30 -480 220 -480 { lab=D}
C {sky130_fd_pr/nfet_01v8_lvt.sym} 380 -320 0 0 {name=M1
L=0.15
W=10
nf=1
mult=1
ad="'int((nf+1)/2) * W/nf * 0.29'"
pd="'2*int((nf+1)/2) * (W/nf + 0.29)'"
as="'int((nf+2)/2) * W/nf * 0.29'"
ps="'2*int((nf+2)/2) * (W/nf + 0.29)'"
nrd="'0.29 / W'" nrs="'0.29 / W'"
sa=0 sb=0 sd=0
model=nfet_01v8_lvt
spiceprefix=X
}
C {devices/vsource.sym} 30 -330 0 0 {name=VDS value=1.5}
C {devices/isource.sym} 220 -430 0 0 {name=Idref value=1}
C {devices/gnd.sym} 400 -110 0 0 {name=l1 lab=GND}
C {devices/code.sym} 530 -350 0 0 {name=SIMULATION
only_toplevel=false
value="
* .options filetype=ascii
.save all
.op
.control
*dc Idref 0.1e-3 10e-3 0.1e-3
let n_idx = 101
let start_iref = 0.1e-3
let stop_iref = 10e-3
let delta_iref = (stop_iref - start_iref) / n_idx
let iref_act = start_iref
let vgs = unitvec(n_idx)
let gms = unitvec(n_idx)
let ids = unitvec(n_idx)
let cgss = unitvec(n_idx)
let cgds = unitvec(n_idx)
let idxs = 0
let idx = idxs
*loop
while iref_act le stop_iref
alter idref iref_act
run
*print @m.xm2.msky130_fd_pr__nfet_01v8_lvt[gm]
let gms[idx] = @m.xm2.msky130_fd_pr__nfet_01v8_lvt[gm]
let ids[idx] = @m.xm2.msky130_fd_pr__nfet_01v8_lvt[id]
let cgss[idx] = @m.xm2.msky130_fd_pr__nfet_01v8_lvt[cgs]
let cgds[idx] = @m.xm2.msky130_fd_pr__nfet_01v8_lvt[cgd]
let vgs[idx] = v(G)
let iref_act = iref_act + delta_iref
let idxs = idx + 1
let idx = idxs
end
let ft = -gms/(2*pi*(cgss+cgds))
settype voltage vgs
settype current ids
setscale ids
plot gms vs ids
plot xlog ft vs ids
plot xlog vgs vs ids
write tb_ft_test.raw
.endc
.end
"}
C {devices/lab_wire.sym} 90 -480 0 0 {name=l2 sig_type=std_logic lab=D}
C {sky130_fd_pr/nfet_01v8_lvt.sym} 240 -320 0 1 {name=M2
L=0.15
W=10
nf=1
mult=1
ad="'int((nf+1)/2) * W/nf * 0.29'"
pd="'2*int((nf+1)/2) * (W/nf + 0.29)'"
as="'int((nf+2)/2) * W/nf * 0.29'"
ps="'2*int((nf+2)/2) * (W/nf + 0.29)'"
nrd="'0.29 / W'" nrs="'0.29 / W'"
sa=0 sb=0 sd=0
model=nfet_01v8_lvt
spiceprefix=X
}
C {devices/lab_wire.sym} 320 -320 0 0 {name=l3 sig_type=std_logic lab=G}
C {devices/title.sym} 160 -30 0 0 {name=l4 author="Rafael Marinho"}
C {devices/code.sym} 530 -180 0 0 {name=TT_MODELS
only_toplevel=true
format="tcleval( @value )"
value="
** opencircuitdesign pdks install
.lib $::SKYWATER_MODELS/sky130.lib.spice tt
"
spice_ignore=false}
C {devices/launcher.sym} 765 -135 0 0 {name=h4
descr="Select arrow and
Ctrl-Left-Click to load/unload
simulation .raw file"
tclcommand="
xschem raw_read $netlist_dir/[file tail [file rootname [xschem get current_name]]].raw
"
}