Continue to Site

Welcome to EDAboard.com

Welcome to our site! EDAboard.com is an international Electronics Discussion Forum focused on EDA software, circuits, schematics, books, theory, papers, asic, pld, 8051, DSP, Network, RF, Analog Design, PCB, Service Manuals... and a whole lot more! To participate you need to register. Registration is free. Click here to register now.

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.
sch.JPG timming.JPG

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

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.
 
  • Like
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: 119
Last edited:
GLOBALFOUNDRIES resistor modelGLOBALFOUNDRIES_model.JPG

XFAB resistor model XFAB_model.JPG

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

FYI:

GLOBALFOUNDRIES noise simulation summary: GLOBALFOUNDRIES_noise_summary.JPG
GLOBALFOUNDRIES pnoise simulation summary: GLOBALFOUNDRIES_pnoise_summary.JPG
XFAB noise simulation summary: XFAB_noise_summary.JPG
XFAB pnoise simulation summary: XFAB_pnoise_summary.JPG

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.

Part and Inventory Search

Welcome to EDABoard.com

Sponsor

Back
Top