Resistance Flicker Noise Question

Status
Not open for further replies.

lmgrd

Newbie level 4
Joined
Aug 7, 2019
Messages
7
Helped
0
Reputation
0
Reaction score
0
Trophy points
1
Activity points
88
Dear Friends:

I'm studying resistance flicker noise recently, in order to reduce the resistance flicker noise,
I designed a testbench(schematic and its timming as the figure below) and run noise & pnoise simulation.


in GLOBALFOUNDRIES process, resistance filcker noise reduction is obvious,
however in XFAB process, resistance filcker noise reduction almost unchanged.

Why there results are different? Does anybody can help me to clarify this question?
Thanks and have a good day.

lmgrd
 

I'm also surprised why a resistor would have flicker noise. I would expect thermal noise only.
 

I'm also surprised why a resistor would have flicker noise.
I would expect thermal noise only.
Resistors in Integrated Circuit show thermal, shot and fricker noise.
Resistor model of Cadence Spectre have ability to generate thermal, shot and fricker noise.
This is also true for Synopsys HSPICE.
 
Reactions: Zinyad

    Zinyad

    Points: 2
    Helpful Answer Positive Rating
Resistors in Integrated Circuit show thermal, shot and fricker noise.

So that's different from "normal" resistors? In our seminar on RF noise, we learned that resistors (linear and passive) show purely thermal noise. What's special about integrated resistors?
 

Attachments

  • 757.pdf
    83.6 KB · Views: 127
Last edited:
GLOBALFOUNDRIES resistor model

XFAB resistor model

There simulation are different, I wonder which one is correct, thank you very much.
 

FYI:

GLOBALFOUNDRIES noise simulation summary:
GLOBALFOUNDRIES pnoise simulation summary:
XFAB noise simulation summary:
XFAB pnoise simulation summary:

Thanks
 

res_flicker_noise() describes only noise.

Show me both resistor content and res_flicker_noise() as text not image.

Description of res_flicker_noise() is not appropriate.
 

sorry, the models are on the server and l can't copy. could you please give me a way to solve this problem? thanks.
 

Hi,

As already said: don't upload screenshots (pictures) of text.

sorry, the models are on the server and l can't copy. could you please give me a way to solve this problem? thanks.
Makes no sense.
If you are able to open the file in an text editor (which seems to be the case), then simply mark the text, copy the text....and paste it into your post. Don't forget to use code formatting tags.

Klaus
 

sorry, the models are on the server and l can't copy. could you please give me a way to solve this problem? thanks.
Simply I will correct your verilog-a code.
However I can not edit it since it is image.
I don’ t want to input code as text from image.
 

Sorry, I just got the "text models" from the administrator.


Code dot - [expand]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
//////////////////GLOBALFOUNDRIES MODEL////////////////////
module res_flicker_noise(p, n);
inout p, n;
electrical p, n;
parameter real rmain=1e3;
parameter real l=0;
parameter real w=0;
parameter real dw=0;
parameter real dl=0;
parameter real rsh0=0;
//parameter real (* integer inherited_mfactor; *) m = 1;
//flicker noise parameters
parameter real kf=2.62e-26;
parameter real af=2;
parameter real lf=1;
parameter real wf=1;
parameter real ef=1;
parameter real m=1;
 
real r_l, r_w;
 
real i_r;
 
real geo;
analog begin
 
r_l=l-2*dl;
r_w=w-2*dw;
 
// added by Ramkumar
//Weff = w - 2*etch;
//Leff = l - 2*etchl;
//geo = pow(Weff, weexp) * pow(Leff, leexp) * pow(w, wdexp) *pow(l, ldexp);
// end
 
i_r=V(p,n)/rmain;
 
geo = pow(r_w, wf) * pow(r_l, lf) * m;
 
I(p, n) <+ flicker_noise(kf*pow(abs(i_r), af)/geo ,ef, "flicker");
end 
endmodule
///////////////////////////////////////////////////////////////////////





Code dot - [expand]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
//////////////////////////XFAB MODEL //////////////////////////////
subckt rp1 (n1 n2 nb)
parameters l=10e-6 w=10e-6 pm=-1 par1=1
+ wcd_AR=0
+ pmc=(max(1,1+int((w-8.000e-07)/8.000e-07)))
+ pmi=((pm>=0)?((pm==0)?1000:pm):pmc)
+ rsh=4.500e+01
+ r0=(rsh*l/w)
+ tc1r=7.200e-04
+ tc2r=5.500e-07
g100 (0 100) bsource i=(((v(n1,nb)+v(n2,nb))/2)/1.000e+03)
r100 (0 100) resistor r=1.000e+03 tc1=0.000e+00 tc2=0.000e+00 isnoisy=no
e101 (101 0) bsource v=(1.000e-04*v(100)*(1+0.000e+00/(0.000e+00+w)))
r101 (101 0) resistor r=1.000e+03 isnoisy=no
r11 (n1 n3) rctp1 m=pmi
r12 (n3 n4) rsilp1 l=4.000e-07 w=w
r13 (n4 na) rsbp1 l=1.000e-06 w=w
r1 (na nc) rp1mod r=(r0*(1+v(101))/2)
+ l=(l/2) w=w
r2 (nc nd) rp1mod r=(r0*(1+v(101))/2)
+ l=(l/2) w=w
model rp1mod resistor
+ tc1=tc1r                     tc2=tc2r
+ af=1.965e+00                 kf=3.682e-23
+ fexp=8.823e-01               wdexp=1.000e+00
+ ldexp=1.000e+00
r23 (nd n8) rsbp1 l=1.000e-06 w=w
r22 (n8 n9) rsilp1 l=4.000e-07 w=w
r21 (n9 n2) rctp1 m=pmi
c1a (na nb) cp1suba w=w l=(l*(1-0.5*(1+tanh(l/200/w)))/2)
c2a (nc nb) cp1suba w=w l=(l*(1+tanh(l/200/w))/2)
c3a (nd nb) cp1suba w=w l=(l*(1-0.5*(1+tanh(l/200/w)))/2)
c1p (na nb) cp1subp w=1e-9 l=(l*(1-0.5*(1+tanh(l/200/w)))/2)
c2p (nc nb) cp1subp w=1e-9 l=(l*(1+tanh(l/200/w))/2)
c3p (nd nb) cp1subp w=1e-9 l=(l*(1-0.5*(1+tanh(l/200/w)))/2)
ends rp1
//////////////////////////////////////////////////////////////////////////////


thank you very much!

lmgrd
 
Last edited by a moderator:

GLOBALFOUNDRIES res model


Code dot - [expand]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
ahdl_include "res.va"  //res.va is on #15
rt1 (1 11) ppolyf_u_1k_t l=1u w=r_w trise=dtemp
c1  (1 3)  fox_sub    l=r_l/2   w=r_w trise=dtemp
//  body
rb (11 21) res_va
+ l=r_length
+ w=r_width
+ rsh0=r_rsh0
+ dw=r_dw
+ dl=r_dl
+ vc1=r_vc1
+ vc2=r_vc2
+ tc1=r_tc1
+ tc2=r_tc2
+ tnom=r_tnom
+ dtemp=dtemp
+ af=1.878
+ kf=8.68e-23
// terminal 2
rt2 (21 2) ppolyf_u_1k_t l=1u w=r_w trise=dtemp
c2  (2 3)  fox_sub    l=r_l/2   w=r_w trise=dtemp
//-------------------
ends ppolyf_u_1k

 

No.
There is no definition of res_va and ppolyf_u_1k_t.
And res_flicker_noise is not used anywhere.

Show me things correctly.
 


Code dot - [expand]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
subckt rppo1rpo_dis ( n1 n2 body ) 
parameters lr=1u wr=1u factor=1 multi=1 mismatchflag=mismatchflag_disres 
+ geo_fac=1 / sqrt(multi * lr * factor * wr * factor * 1e12) factmis=1.817689e-02 
+ * geo_fac * par_res_m * mismatchflag rsh=r_rppo1rpo_dis rendsh=2 * rend_rppo1rpo_dis 
...
...
...
rend1 ( n1 1 ) resistor r=max(min(rendo / 2 * (1 + 1 / (1 + jc1end_r * v(n1,1) * 
+ v(n1,1))),rendo * 1.5),rendo / 2)
r1 ( 1 2 ) resistor r=max(min(ro / 2 * (3 - 1 / (1 + jc1_r * v(1,2) * v(1,2))),ro 
+ * 1.5),ro / 2)
r2 ( 2 3 ) resistor r=max(min(ro / 2 * (3 - 1 / (1 + jc1_r * v(2,3) * v(2,3))),ro 
+ * 1.5),ro / 2)
r3 ( 3 4 ) resistor r=max(min(ro / 2 * (3 - 1 / (1 + jc1_r * v(3,4) * v(3,4))),ro 
+ * 1.5),ro / 2)
r4 ( 4 5 ) resistor r=max(min(ro / 2 * (3 - 1 / (1 + jc1_r * v(4,5) * v(4,5))),ro 
+ * 1.5),ro / 2)
rend2 ( 5 n2 ) resistor r=max(min(rendo / 2 * (1 + 1 / (1 + jc1end_r * v(5,n2) * 
+ v(5,n2))),rendo * 1.5),rendo / 2)
c1 ( body 1 ) capacitor c= multi*(Ca*((wr*factor+0.03u)*lr*factor/5.0)*1e12+2*Cf*lr*factor/5.0*1e6) 
+bv_max=100*0.9
c2 ( body 2 ) capacitor c= multi*(Ca*((wr*factor+0.03u)*lr*factor/5.0)*1e12+2*Cf*lr*factor/5.0*1e6) 
+bv_max=100*0.9
c3 ( body 3 ) capacitor c= multi*(Ca*((wr*factor+0.03u)*lr*factor/5.0)*1e12+2*Cf*lr*factor/5.0*1e6) 
+bv_max=100*0.9
c4 ( body 4 ) capacitor c= multi*(Ca*((wr*factor+0.03u)*lr*factor/5.0)*1e12+2*Cf*lr*factor/5.0*1e6) 
+bv_max=100*0.9
c5 ( body 5 ) capacitor c= multi*(Ca*((wr*factor+0.03u)*lr*factor/5.0)*1e12+2*Cf*lr*factor/5.0*1e6) 
+bv_max=100*0.9
c_soa ( n1 n2 ) capacitor c=1e-60 bv_max=j_max*wr*factor*(rend1_ov+r1_ov+r2_ov+r3_ov+r4_ov+rend2_ov)
 
I_flicker_noise (n1 n2) res_flicker_noise   //res_flicker_noise is on #15
+ rmain=4*ro
+ m=multi 
+ l=lr
+ w=wr
+ dw=0
+ dl=0
+ af=1.79 
+ kf=2.4E-23
 
ends rppo1rpo_dis

 
Last edited by a moderator:

No.
There is no definition of res_va and ppolyf_u_1k_t.
And res_flicker_noise is not used anywhere.

Show me things correctly.

Hi,


In Veriloga, resistor flicker noise is modeled with a noisy current source: "I(p, n) <+ flicker_noise(kf*pow(abs(i_r), af)/geo ,ef, "flicker")";

In spectre, resistor flicker noise is modeled by parameter AF,EF....

I think two methods should be agreed with each other, but apparently the simulation result is different.

So, which is correct or agree with physic?

best regard,
Qingshan
 

Status
Not open for further replies.
Cookies are required to use this site. You must accept them to continue using the site. Learn more…