Attention analog designers: It seems that the ther...
# analog-design
h
Attention analog designers: It seems that the thermal noise of the poly-R (
res_high_po
and
res_xhigh_po
) in SKY130 is simulated wrongly in
ngspice
, see https://sourceforge.net/p/ngspice/bugs/614/ @Tim Edwards @Boris Murmann @Stefan Schippers It would be highly appreciated if someone would double-check this behavior and confirm the findings.
👀 3
r
res_high_po at 4.4nV/rtHz seems pretty close for 984ohms, what number are you looking for?
h
For T=300K should be around 4.04nV/rtHz. Arguably, compared to the other cases, that is close, but I wonder why there should be a discrepancy at all. I did not check the actual R-value, which could explain the difference. But the other cases are far off, and that is concerning.
b
@Harald Pretl I had a quick look at the core of the model, which I find a bit clumsy:
Copy code
rbody t1 t2 r = {rbody*(1-bp2+bp2*sqrt(1+(bq2*abs(v(t1,t2))*Efac)**2))*
+ (sub1+sub2*tanh(sub3*(min(v(r0,sub)+v(r1,sub),sub4)+sub5))) / (sub1+sub2*tanh(sub3*sub5)) }
+ tc1 = -1.47e-3
+ tc2 = 2.7e-6
*+ tnom = 25.0
This device could easily be split up into the linear part (rbody) and the nonlinear terms. I think that would fix the problem. I think it's impossible to write a simulator that gets the noise of a device with arbitrary nonlinearities right.
We know these are weakly nonlinear devices, so the model should always just have a simple linear core plus a nonlinear modifier that can be noiseless (to first order).
h
That would be one solution, but I think Holger has found another one (there seems to be an ngspice setting to add noise in a behavioral resistor).
I just tested
ngspice-39
, and if you use the new switch
enable_noisy_r
you see thermal noise of the SKY130 poly resistors, just as it should be. So if someone believes to have found a new record-setting low-noise circuit, maybe try again 😁 We will enable noisy resistors by default in our next Docker release (
2023.02
) so everyone simulates proper noise.
🤣 1