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 single-particle state (Fermi-Dirac statistics)
[.table-separator: #000000, stroke-width(1)] [.table: margin(8)]
The abstract digital world is written in the mathematics of boolean algebra2
\(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 analog-to-digital 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
9-bit SAR ADC with 28 nm FDSOI transistors
9-bit 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 9-bit 20-MS/s 3.5-fJ/conv.step SAR ADC in 28-nm 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",
"----wDw---------xxx",
"----------wGw---xBx",
"----wSw---------xxx",
"----------------xxx"
],
...
[ "NDIFFC",
"-------------------",
"----LTR------------",
"-------------------",
"----LTR------------",
"-------------------"
]
]
}
{ "name" : "DMOS" ,
"class" : "Gds::GdsPatternTransistor",
"yoffset": -0.5,
"type": "pch",
"widthoffset" : -1,
"fillCoordinatesFromStrings" : [
[ "OD",
"------------------xxxx",
"----xxK-----------xCxC",
"----xxx-----------xxxx",
"----xxK-----------xCxC",
"------------------xxxx"
],
[ "PO",
"-mmmmmmmmmmmmm--------",
"----------------------",
"-mmmmmmmmmmcxc--------",
"----------------------",
"-mmmmmmmmmmmmm--------"
],
[ "M1",
"------------------xxxx",
"----wDww----------xxxx",
"-----------wGww---xBxx",
"----wSww----------xxxx",
"------------------xxxx"
]
],
"afterNew" : {
"copyColumns" :[
{ "count" : 0, "offset" : 4,"length" : 4}
]
}
}
2016 (Perl compiler)
{ "name": "SARCMPHX1_CV",
"description" : "Half a strong-arm comparator",
"class" : "Layout::LayoutDigitalCell",
"setYoffsetHalf" : "" ,
"rows" : 7,
"beforeRoute" : {
"addDirectedRoutes" : [ ["PO","VMR","MN6:G-MP6:G"],
["M1","VMR","MP4:G||MP6:G"],
["M1","CI","MN1:G||MN5:G"],
["M1","N2","MN1:D,MN3:D,MN5:D-|--MP1:D"],
["M1","N1","MN0:D,MN2:D|-MN4:D"],
["M1","N1","MN0:D-|--MP0:S"],
["M1","CO","MP3:D,MP5:D--|-MN6:D"],
["PO","CK","MN0:G-MP0:G"],
["M1","CK","MP0:G,MP1:G-|MP3:G"],
["M4","NC","MP2$:D--|--MP2:G"]
]
},
"afterRoute" : {
"addPortOnRects" : [ ["AVDD","M4" ],
["N1","M1","MN4:D"],
["N2","M1","MN5:D" ]]
}
}
2022 (C++ compiler)
{ "name": "SARCMPHX1_CV",
"description" : "Half a strong-arm comparator",
"class" : "Layout::LayoutDigitalCell",
"setYoffsetHalf" : 1 ,
"rows" : 7,
"meta" : {
"noSchematic" : true
},
"decorator" : [
{"ConnectSourceDrain" : ["M1","||",""]}
],
"beforeRoute" : {
"addDirectedRoutes" : [ ["PO","VMR","MN6:G-MP6:G"],
["M1","VMR","MP4:G||MP6:G"],
["M1","CI","MN1:G||MN5:G"],
["M1","N2","MN1:D,MN3:D,MN5:D-|--MP1:D"],
["M1","N1","MN0:D,MN2:D|-MN4:D"],
["M1","N1","MN0:D-|--MP0:S"],
["M1","CO","MP3:D,MP5:D--|-MN6:D"],
["PO","CK","MN0:G-MP0:G"],
["M1","CK","MP0:G,MP1:G-|MP3:G"],
["M4","NC","MP2$:D-|--MP2: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/training-seminars/tutorials/mt-021.pdf ↩