My thoughts on analog design
If you find an error in what I’ve made, then fork, fix lectures/l00_my_thoughts.md, commit, push and create a pull request. That way, we use the global brain power most efficiently, and avoid multiple humans spending time on discovering the same error.
 How I see our roles
 People that design digital circuits can reuse the work of others
 People that design analog circuits can learn from others, but need to deal with the real world on their own
 Worlds first commercial ADC
 There will always be analog circuits, because the real world is analog
 Why is reuse of analog circuits hard?
 My journey on “How can I simplify analog design?”
 Trigger
 Problem
 Architecture
 Plan
 How to make multiple SAR ADCs with limited time?
 Since then
 Key learnings
 Super simple transistor was a good choice for portability
 Usage is hard, requires a new type of analog designer/programmer
 wulffern/aicex
How I see our roles
Professors: Guide students on what is impossible, possible, and hints on what might be possible
Ph.D students: Venture into the unknown and make something (more) possible
Master students: Learn all that is currently possible
Bachelor students: Learn how to make complicated into easy
Industry: Take what is possible, and/or complicated, and make it easy
The world is analog. The laws of behavior are written in the mathematics of calculus ^{1}
\(\oint_{\partial \Omega} \mathbf{E} \cdot d\mathbf{S} = \frac{1}{\epsilon_0} \iiint_{V} \mathbf{\rho}
\cdot dV\)
_{Relates net electric flux to net enclosed electric charge}
\(\oint_{\partial \Omega} \mathbf{B} \cdot d\mathbf{S} = 0\) _{Relates net magnetic flux to net enclosed magnetic charge}
\(\oint_{\partial \Sigma} \mathbf{E} \cdot d\mathbf{\ell} =  \frac{d}{dt}\iint_\Sigma \mathbf{B} \cdot d\mathbf{S}\) _{Relates induced electric field to changing magnetic flux}
\(\oint_{\partial \Sigma} \mathbf{B} \cdot d\mathbf{\ell} = \mu_0\left( \iint_\Sigma \mathbf{J} \cdot d\mathbf{S} + \epsilon_0 \frac{d}{dt}\iint_\Sigma \mathbf{E} \cdot d\mathbf{S} \right)\) _{Relates induced magnetic field to changing electric flux and to current density}
The behavior of electrons is written in quantum mechanics
\(\psi(x,t) = Ae^{j(kx  \omega t)}\) _{Probability amplitude of an electron}
\(\frac{1}{2 m} \frac{\hbar}{j^2} \frac{\partial^2}{\partial^2 x}\psi(x,t) + U(x)\psi(x,t) = \frac{\hbar}{j}\frac{\partial}{\partial t} \psi(x,t)\) _{Space and time evolution of an electron (Schrödinger equation)}
\(n = \int_{E_1}^{E_2}{N(E)f(E)dE}\) _{Electron density (Density of states)}
\(f(E) = \frac{1}{e^{(E_i  E_F)/kT} + 1}\) _{Relates the average number of fermions in thermal equlilibrium to the energy of a singleparticle state (FermiDirac statistics)}
[.tableseparator: #000000, strokewidth(1)] [.table: margin(8)]
The abstract digital world is written in the mathematics of boolean algebra^{2}
\(1 = \text{True}\), \(0 = \text{False}\)
A  B  _{NOT(A AND B)} 

0  0  1 
0  1  1 
1  0  1 
1  1  0 
All digital processing can be made with the NOT(A AND B) function!
People that design digital circuits can reuse the work of others
People that design analog circuits can learn from others, but need to deal with the real world on their own
Should we do as much as possible in the abstract digital world?
Worlds first commercial ADC
_{One of the first commerical offerings of a successive approximation analogtodigital converter 3}
There will always be analog circuits, because the real world is analog
Why is reuse of analog circuits hard?
Life of an analog designer: Schematic Design
Life of an analog designer: Layout Design
My journey on “How can I simplify analog design?”
Trigger
Problem
Architecture
Plan
9bit SAR ADC with 28 nm FDSOI transistors
9bit SAR ADC with IO voltage (180 nm) FDSOI transistors
How to make multiple SAR ADCs with limited time?
Spend 50% of time for 6 months to develop a tool to make SAR ADCs
Spend 50% of time for 6 months to make the SAR ADCs
16 k Perl lines. Ported to C++ for speed \(\Rightarrow\) ciccreator
A Compiled 9bit 20MS/s 3.5fJ/conv.step SAR ADC in 28nm FDSOI for Bluetooth Low Energy Receivers
Since then
Measured: 28 nm FDSOI, 55 nm Ported: 22 nm FDSOI, 22 nm, 28 nm, 65 nm, 130 nm
Finally, there is an open source port to skywater 130nm! wulffern/sun_sar9b_sky130nm
Key learnings
Super simple transistor was a good choice for portability
{ "name" : "DMOS_BULKN" ,
"class" : "Gds::GdsPatternTransistor",
"abstract" : 1,
"yoffset": 0.5,
"widthoffset" : 0.5,
"fillCoordinatesFromStrings" : [
[ "OD",
"",
"xxx",
"xxx",
"xxx",
""
],
...
[ "M1",
"xxx",
"wDwxxx",
"wGwxBx",
"wSwxxx",
"xxx"
],
...
[ "NDIFFC",
"",
"LTR",
"",
"LTR",
""
]
]
}
{ "name" : "DMOS" ,
"class" : "Gds::GdsPatternTransistor",
"yoffset": 0.5,
"type": "pch",
"widthoffset" : 1,
"fillCoordinatesFromStrings" : [
[ "OD",
"xxxx",
"xxKxCxC",
"xxxxxxx",
"xxKxCxC",
"xxxx"
],
[ "PO",
"mmmmmmmmmmmmm",
"",
"mmmmmmmmmmcxc",
"",
"mmmmmmmmmmmmm"
],
[ "M1",
"xxxx",
"wDwwxxxx",
"wGwwxBxx",
"wSwwxxxx",
"xxxx"
]
],
"afterNew" : {
"copyColumns" :[
{ "count" : 0, "offset" : 4,"length" : 4}
]
}
}
2016 (Perl compiler)
{ "name": "SARCMPHX1_CV",
"description" : "Half a strongarm comparator",
"class" : "Layout::LayoutDigitalCell",
"setYoffsetHalf" : "" ,
"rows" : 7,
"beforeRoute" : {
"addDirectedRoutes" : [ ["PO","VMR","MN6:GMP6:G"],
["M1","VMR","MP4:GMP6:G"],
["M1","CI","MN1:GMN5:G"],
["M1","N2","MN1:D,MN3:D,MN5:DMP1:D"],
["M1","N1","MN0:D,MN2:DMN4:D"],
["M1","N1","MN0:DMP0:S"],
["M1","CO","MP3:D,MP5:DMN6:D"],
["PO","CK","MN0:GMP0:G"],
["M1","CK","MP0:G,MP1:GMP3:G"],
["M4","NC","MP2$:DMP2:G"]
]
},
"afterRoute" : {
"addPortOnRects" : [ ["AVDD","M4" ],
["N1","M1","MN4:D"],
["N2","M1","MN5:D" ]]
}
}
2022 (C++ compiler)
{ "name": "SARCMPHX1_CV",
"description" : "Half a strongarm comparator",
"class" : "Layout::LayoutDigitalCell",
"setYoffsetHalf" : 1 ,
"rows" : 7,
"meta" : {
"noSchematic" : true
},
"decorator" : [
{"ConnectSourceDrain" : ["M1","",""]}
],
"beforeRoute" : {
"addDirectedRoutes" : [ ["PO","VMR","MN6:GMP6:G"],
["M1","VMR","MP4:GMP6:G"],
["M1","CI","MN1:GMN5:G"],
["M1","N2","MN1:D,MN3:D,MN5:DMP1:D"],
["M1","N1","MN0:D,MN2:DMN4:D"],
["M1","N1","MN0:DMP0:S"],
["M1","CO","MP3:D,MP5:DMN6:D"],
["PO","CK","MN0:GMP0:G"],
["M1","CK","MP0:G,MP1:GMP3:G"],
["M4","NC","MP2$:DMP2:G"]
]
},
"afterRoute" : {
"addPortOnRects" : [["BULKP","M1"],
["BULKN","M1"],
["AVDD","M4" ],
["N1","M1","MN4:D"],
["N2","M1","MN5:D" ]]
}
}
Usage is hard, requires a new type of analog designer/programmer
wulffern/aicex

https://www.analog.com/media/en/trainingseminars/tutorials/mt021.pdf ↩