So, on TT05 there was a test analog design from JK...
# analog-design
t
So, on TT05 there was a test analog design from JKU / @Harald Pretl. Among other things, it had a loopback that would connect two pins through a transmission gate. I made a PEX of that design, I then added some resistance in the simulated path ( 250 ohm for each signal ) to account for the 150 ohm of the analog pad connection and then ~100 ohm of wiring (it's on
met3/met4
with a few vias, doesn't go very far but it's also fairly thin traces). I measured the segments in klayout then used sheet resistance and came up with the 100 ohm figure. Now I simulate this in ngspice, just looking at the DC resistance. Basically I check how much voltage a 10uA current generates across the pins (with one of them grounded since the resistance of the transmission gate will depend on the bias level). Simulation shows around 1.2 kOhm (i.e. about 12 mV across the pins). I now do the same test but on the real silicon using a Keithley 2400 SMU. Instead I get about 24 mV or twice the expected value. It's definitely not noise, I averaged, verified reading with multimeters, it all checks out. So now the question is : Where did I screw up ? What did I forget to account for ? Corners / Temperature / VDD ... all show some variations of course, but nowhere even close to that 2x factors even combining all of those.
πŸ‘ 1
l
Run a DC sweep from ground to supply voltage with a voltage source, instead of a fixed current source. Measure the currents. They should be very non linear.
t
@Luis Henrique Rodovalho Well I ran a bias sweep over the whole range. (Again, fixed current, between the pins, but instead of connected to ground, I varied voltage ). https://images-ext-1.discordapp.net/external/TORcikyt47zyIyZjeI-eSFp6B4Naa7upQUw5szOuAaI/h[…].png?format=webp&quality=lossless&width=1118&height=687
The 10uA current is small enough that the voltage between pins is small and so I get a "local" (small signal if you will) resistance measurement.
l
What is the voltage at the other end of the transmission gate?
t
Just ... not the absolute value. I'm not too worried about the peak value (because this is where the transmission gate transition from the Nmos doing most of the work to the Pmos doing most of the work and this is heavily influenced by the Vth of those and where they cross).
10 uA generates only between 25 mV to 100 mV between the pins.
l
If you run that with SS and FF corners you would have another curve
t
I did. It doesn't change much.
l
Well... It is what it is. At least it works as an analog switch. Maybe the problems are the models. Who knows?
t
The peak value vary the most. But as I said, I'm not too concerned about the peak. I'm more looking at explaining the value on the left side of the graph where things should be more stable.
heh, if the models are that off that no corners in ss/tt/ff/sf/fs even comes close to reality they're kind of useless ...
Hence why I'm thinking I'm missing something ...
l
In a real application, the voltage drop shouldn't be large. It is just a simulation for a short circuit case.
The best thing you have are limits for your transmission gate. Let's have an example. You have multiple circuits inside it. One of them is an ampop. For transmission gates connected to its inputs, there would be almost no DC current. There will be no voltage offset. For the output, there will be current. But you will have voltage feedback. The feedback corrects itself.
Now, if you have a voltage reference and you put a load, like a resistor, for example, there will be a voltage drop on the transmission gate. There is where the problem lies.
t
I'm more concerned with the AC bandwidth. I have to drive the capacitive load at the output through it.
l
And there are high speed analog signals... That would be a problem too...
t
And AC testing shows a bandwidth lower than expected about in the same order of magnitude than my DC resistance is higher than expected.
l
Ok. For your testbench, you should make the too terminals of the transmission gate at the same voltage and run a AC sim, injecting a AC voltage at one side. Measure the AC current and you will have the AC resistance
AC impedance. You will have real and imaginary parts.
If the simulations don't match the measurements, blame reality. It comes with packaging, wire bonding, probes and lots of things Murphy's law teaches us.
t
That's why I'm looking at DC now, less things should matter and between 1.2k (sim) and 2.4k (measured), I'm pretty sure the bond wires are not 1kOhm. But if I can't trust sim to that level, I might as well do things blindly ...
l
Are those DC curves? Are you calculating the resistance using derivatives?
t
I'm calculating resistance because I know I'm feeding 10 uA and I get 25 mV across the pins.

https://i.imgur.com/DNMWbL8.pngβ–Ύ

I swept the PSU bias from 0 to 1.8V to get the curve I posted.
l
This doesn't work for non linear circuits.
t
Why ? I admit there will be a small error, but the voltage difference developped by 10uA is tiny and the resistance is almost constant locally, especially at the "edge" of the graph (away from the peak and of most of the non linearity).
Also the simulated graph from ngspice is made using that exact test bench in ngspice so they should match.
l
Ok. They should match. There must be a problem with modeling. The results should be with the corner measurements and very close to the typical case. There must be a problem with the models or there must be a parasitic circuit that is not taken into account.
Normally, models are updated all the time. For mature nodes, like Sky130, they should be very accurate as they are, because they are old and there must be many tapeout runs out there to tweak the models.
Anyway, that is life. Consider your measurements correct and use extensive calibration for your circuits and tolerance margins for your specs. That is engineering
t
Heh, except I need to know if the difference comes from the transmission gate, the models or from me not modelling something. There are many changes between shuttles and I'm trying to predict performances / specs for the next ones so what I'm looking for is the ability to build devices that turn out as intended πŸ™‚ That TG itself won't ever be used again, that was a test one. We had a gen 2 on TT6 and then a gen 3 on TT7 ... but those will only come back in several months.
t
@tnt: I'm late to the discussion here, but my take on this is that you should see a 2x difference (or more) across corners, if you use the resistance and capacitance low/high corners (high, specifically, for this case). Magic can extract the high corner if you use
extract style ngspice(hrhc)
. For example, the p-diffusion contact resistance is 585 ohms at the nominal corner, but 840 ohms at the high corner. For device resistance and capacitance (not parasitics), use the High-High simulation corner
.lib sky130.lib.spice hh
. Note that the
sky130.lib.spice
file uses nominal transistor corners when specifying the resistor/capacitor corner, so if you wanted to look at
hh
+
ss
, you would need to construct your own
.lib
entry with the appropriate file includes.
@tnt: Also, if you had not gone to openFrame yet on TT05, then any analog connection to the
pad_a_esd0
pin of a GPIO goes through a truly terrible routing job in the "wrapper" cell around the GPIO pad (
sky130_ef_io__gpio_pad_wrapped
). That route is on minimum-width metal1 and metal 2 for a length of 19um and passes through two single vias before reaching the ESD resistor on the pad. At nominal resistance corner, that's an additional (and not insignificant) 25 ohms.
t
@Tim Edwards Interesting, thanks. I will re-reun PEX with hh. And indeed this is not openframe yet, which already surprised me on the digital signal because I still thought that there was a still a small digital block near each IO that was for instance just buffering
in
signal with a strong
buf_16
but I found out that now it's all one large logic blob and that not only it's only a
_4
strength buffer now, but openlane also explicitely added
dly
cells on the path πŸ˜‘ . I didn't know the
analog
connection also had such routing done in the wrapper.
Oh wow ... it's not 19u, there is at least one segment of 511u width 0.14u ....
That's 450 ohm right there ...
t
I was looking only at the wrapper cell itself. I take it you're looking at the routing between the user project area and the padframe? That's also bad due to using equal spacing between pins on the user wrapper boundary, causing some pins on the user project to be pretty far away from the GPIO pad they're connected to (and routed using minimum width wiring and single vias).
t
Yeah, I'm looking at the pin we connect to (from user_project_wrapper) to the actual pad on the pad frame. I had not accounted for that, I had only counted the routing inside the user_project_wrapper itself.
t
I have complained multiple times that the openlane routing is not appropriate for analog. . .
t
I'll remodel to account for all of it and I'm pretty sure that'll explain the difference. Thanks, that's exactly the kind of stuff I was looking for and that I completely overlooked when simulating.
Yeah, in TT we switched to custom routing using the "non-default" rule to make sure we have thicker traces, more vias and such ... (hence the bug I reported a couple month back about magic and the non-default rules πŸ˜… in DEF).
But here that was TT5, the first analog test at all ...
(and also first chip I fried ... I'm guessing those tiny traces are indeed really fragile πŸ˜… )
t
I got bitten by the same problem on our first test chip with a DAC and ADC; the analog blocks were first placed far away from the pads, and then the output was routed through the middle of the SoC digital to get to the pad. That resulted in about a 1.5 lsb offset on the DAC output and about 20 lsb of digital noise on the output.
t
Oh wow, 20 LSB yikes.
The
analog
connections also connect to a
sky130_sc_fd_hd_diode_2
which is a bit unexpected.
t
I saw that, too, but decided it was not worth complaining about. The diodes will tolerate 5V+.
t
Ok, good to know.
So FWIW, I went through the various segments and used the nom RCX values to estimate the resistance through the wrapper for both IO and include that in the sim. Now at 0V bias, I get 2.35 kOhm and measured 2.41 kOhm so I'll call that good 😁
πŸ‘ 1