https://open-source-silicon.dev logo
Title
j

Jon Ho

01/29/2023, 4:59 AM
Might anyone know what (how long) is considered a "long channel" device is in this Sky130 process? I am currently constructing a constant-gm current source and wish to avoid CLM effects. Thanks in advance.
l

Luis Henrique Rodovalho

01/29/2023, 10:23 AM
None is long enough, so use cascode devices or an amplifier. But you could use the larger lengths available, as listed in the transistors bin files: 4 and 8 um. https://github.com/google/skywater-pdk-libs-sky130_fd_pr/blob/f62031a1be9aefe902d6[…]d6f59b57627436/cells/nfet_01v8/sky130_fd_pr__nfet_01v8.bins.csv
j

Jon Ho

01/29/2023, 6:09 PM
@Luis Henrique Rodovalho Thank you for the info. Let's say for a tail-current transistor in a differential amplifier, what would a reasonable length be to avoid short-channel effects. I've heard about a (4 * minimum length) rule of thumb.
l

Luis Henrique Rodovalho

01/29/2023, 6:12 PM
This rule of thumb is not valid for sky130. What you really need to do is monte carlo simulations for area. I already have some simulations you can try your parameters. Let me see here...
array.spice,tb_irefa.spice,irefa.spice
Simulations for W = 1.5 um and L = 0.5 um
For W = 1.5 um and L= 4.0 um
j

Jon Ho

01/29/2023, 6:29 PM
I apologize @Luis Henrique Rodovalho but could you give me a quick description of what I am viewing in these images; I'll figure out the rest once I roughly know what I'm looking at. Thank you once again.
l

Luis Henrique Rodovalho

01/29/2023, 7:52 PM
See this spice file here
* Self-biased current source testbench

* Include SkyWater sky130 device models
.lib "/usr/share/pdk/sky130A/libs.tech/ngspice/sky130.lib.spice" tt
.param mc_mm_switch=0

.subckt pch D G S B xm=10 xl=4.0 xwp=3.0
X0 D G S B sky130_fd_pr__pfet_g5v0d10v5 ad=4e+11p pd=2.8e+06u as=4e+11p ps=2.8e+06u w={xwp} l={xl} m={xm}
.ends

.subckt nch D G S B xm=10 xl=4.0 xwn=1.0
X0 D G S B sky130_fd_pr__nfet_g5v0d10v5 ad=4e+11p pd=2.8e+06u as=4e+11p ps=2.8e+06u w={xwn} l={xl} m={xm}
.ends

* circuit netlist

.subckt iref0 io vdd vss xm=1 xk=4 xr=1meg xl=4.0 xwp=3.0 xwn=1.0

cs  s vdd 1p
x0a gp  s   gn  vss nch xm={xm}    xl={xl} xwn={xwn}
x0b s   gn  vss vss nch xm={xm}    xl={xl} xwn={xwn}

x1a gp  gp  vdd vdd pch xm={xm}    xl={xl} xwp={xwp}
x1b gp  gn  a   vss nch xm={xk*xm} xl={xl} xwn={xwn}
ra  a   vss {xr/xm}

x2a gn  gp  vdd vdd pch xm={xm}    xl={xl} xwp={xwp}
x2b gn  gn  vss vss nch xm={xm}    xl={xl} xwn={xwn}

x3a io  gp  vdd vdd pch xm={xm}    xl={xl} xwp={xwp}

.ends

* circuit testbench

.param pVDD = 5.0

VDD  vdd 0 dc {pVDD}
VSS  vss 0 0

xdut io vdd vss iref0 xm=1 xk=4 xr=100k xl=4.0 xwp=3.0 xwn=1.0
vo io vss 0

.param k = 1000
.dc VDD {pVDD/k} {pVDD} {pVDD/k}
.option gmin=1e-15
.control
	run
	let io = i(vo)
		
	let psr = db(abs(deriv(io)/io))

	plot io
	plot psr

.endc

.end
It has a netlist for a self-biased current source. A gm-constant circuit.
.subckt iref0 io vdd vss xm=1 xk=4 xr=1meg xl=4.0 xwp=3.0 xwn=1.0

cs  s vdd 1p
x0a gp  s   gn  vss nch xm={xm}    xl={xl} xwn={xwn}
x0b s   gn  vss vss nch xm={xm}    xl={xl} xwn={xwn}

x1a gp  gp  vdd vdd pch xm={xm}    xl={xl} xwp={xwp}
x1b gp  gn  a   vss nch xm={xk*xm} xl={xl} xwn={xwn}
ra  a   vss {xr/xm}

x2a gn  gp  vdd vdd pch xm={xm}    xl={xl} xwp={xwp}
x2b gn  gn  vss vss nch xm={xm}    xl={xl} xwn={xwn}

x3a io  gp  vdd vdd pch xm={xm}    xl={xl} xwp={xwp}

.ends
This is a parametric circuit, where you can choose all the transistor dimensions with the parameters xl, xwn, xwp. There is a resistor parameter too: xr. This is based on this circuit here, from https://ieeexplore.ieee.org/document/1693217
For this parameters here, r = 100kohm, wl=4um, wn=1u, and wp=3u
xdut io vdd vss iref0 xm=1 xk=4 xr=100k xl=4.0 xwp=3.0 xwn=1.0
the simulation results are these:
As you can see, even with a L=4 um, the results are kind of bad. And it is 8 times larger than the smallest L for 5V devices,
j

Jon Ho

01/30/2023, 12:33 PM
Noted. Thank you for the help @Luis Henrique Rodovalho