• Skip to main content
  • Skip to search
  • Skip to footer
Cadence Home
  • This search text may be transcribed, used, stored, or accessed by our third-party service providers per our Cookie Policy and Privacy Policy.

  1. Community Forums
  2. Custom IC Design
  3. Monte Carlo simulation for device mismatch

Stats

  • Locked Locked
  • Replies 18
  • Subscribers 130
  • Views 29239
  • Members are here 0
This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

Monte Carlo simulation for device mismatch

sdineshkumar
sdineshkumar over 10 years ago

I am trying to simulate a SRAM PUF in cadence 5.1. I want to create threshold variations between two back to back connected inverters. I decided to vary threshold of any one of the PMOS . I want to apply monte carlo simulation with guassian distribution to any one of the PMOS. I dont know  how to apply montecarlo variation to a particular PMOS?

Is there any way to do it in virtuoso 5.1

  • Cancel
Parents
  • Tonmoy Dhar
    Tonmoy Dhar over 9 years ago

    Hi Andrew.

    I am also a newbie to the spectre simulation and I am in badly need of your help. I am simulating the following netlist. I see no simulation error. But, I do not see any mismatch variation data in the 'mc1.process.mcdata' file (the file is blank). But, when I run monte carlo simulation with 'variations=process' I see the process variation data inside the 'mc1.process.mcdata' file.  I am working with IC 5.1.41 . Here is the netlist:

    ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------

    simulator lang=spectre

    include "45nm_ASU_PTM.inc"

    parameters Ndelvt0 = 0 Pdelvt0 = 0

    subckt NMOS2 (n3 n2 n0 n1)

    parameters Ndelvt0=0

    N0 (n3 n2 n0 n1) nmos l=45n w=45n delvto = Ndelvt0

    simulator lang=spice

    .model  nmos  nmos  level = 14

    +version = 4.0             binunit = 1               paramchk= 1               mobmod  = 0             

    +capmod  = 2               igcmod  = 1               igbmod  = 1               geomod  = 1             

    +diomod  = 1               rdsmod  = 0               rbodymod= 1               rgatemod= 1             

    +permod  = 1               acnqsmod= 0               trnqsmod= 0             

    +tnom    = 27              toxe    = 1.8e-009        toxp    = 1.5e-009        toxm    = 1.8e-009      

    +dtox    = 3e-010          epsrox  = 3.9             wint    = 5e-009          lint    = 0             

    +ll      = 0               wl      = 0               lln     = 1               wln     = 1             

    +lw      = 0               ww      = 0               lwn     = 1               wwn     = 1             

    +lwl     = 0               wwl     = 0               xpart   = 0               toxref  = 1.8e-009      

    +vth0    = 0.62261         k1      = 0.4             k2      = 0               k3      = 0             

    +k3b     = 0               w0      = 2.5e-006        dvt0    = 0       dvt1    = 2             

    +dvt2    = 0               dvt0w   = 0               dvt1w   = 0               dvt2w   = 0             

    +dsub    = 0.1             minv    = 0.05            voffl   = 0               dvtp0   = 1e-010        

    +dvtp1   = 0.1             lpe0    = 0               lpeb    = 0               xj      = 1.4e-008      

    +ngate   = 1e+023          ndep    = 3.24e+018       nsd     = 2e+020          phin    = 0             

    +cdsc    = 0               cdscb   = 0               cdscd   = 0               cit     = 0             

    +voff    = -0.13           nfactor = 1.6             eta0    = 0.0125          etab    = 0             

    +vfb     = -0.55           u0      = 0.049           ua      = 6e-010          ub      = 1.2e-018      

    +uc      = 0               vsat    = 130000          a0      = 1               ags     = 0             

    +a1      = 0               a2      = 1               b0      = 0               b1      = 0             

    +keta    = 0.04            dwg     = 0               dwb     = 0               pclm    = 0.02          

    +pdiblc1 = 0.001           pdiblc2 = 0.001           pdiblcb = -0.005          drout   = 0.5           

    +pvag    = 1e-020          delta   = 0.01            pscbe1  = 8.14e+008       pscbe2  = 1e-007        

    +fprout  = 0.2             pdits   = 0.08            pditsd  = 0.23            pditsl  = 2300000       

    +rsh     = 5               rdsw    = 210             rsw     = 80              rdw     = 80            

    +rdswmin = 0               rdwmin  = 0               rswmin  = 0               prwg    = 0             

    +prwb    = 0               wr      = 1               alpha0  = 0.074           alpha1  = 0.005         

    +beta0   = 30              agidl   = 0.0002          bgidl   = 2.1e+009        cgidl   = 0.0002        

    +egidl   = 0.8             aigbacc = 0.012           bigbacc = 0.0028          cigbacc = 0.002         

    +nigbacc = 1               aigbinv = 0.014           bigbinv = 0.004           cigbinv = 0.004         

    +eigbinv = 1.1             nigbinv = 3               aigc    = 0.015211        bigc    = 0.0027432     

    +cigc    = 0.002           aigsd   = 0.015211        bigsd   = 0.0027432       cigsd   = 0.002         

    +nigc    = 1               poxedge = 1               pigcd   = 1               ntox    = 1             

    +xrcrg1  = 12              xrcrg2  = 5             

    +cgso    = 1.1e-010        cgdo    = 1.1e-010        cgbo    = 2.56e-011       cgdl    = 2.653e-010    

    +cgsl    = 2.653e-010      ckappas = 0.03            ckappad = 0.03            acde    = 1             

    +moin    = 15              noff    = 0.9             voffcv  = 0.02          

    +kt1     = -0.11           kt1l    = 0               kt2     = 0.022           ute     = -1.5          

    +ua1     = 4.31e-009       ub1     = 7.61e-018       uc1     = -5.6e-011       prt     = 0             

    +at      = 33000         

    +fnoimod = 1               tnoimod = 0             

    +jss     = 0.0001          jsws    = 1e-011          jswgs   = 1e-010          njs     = 1             

    +ijthsfwd= 0.01            ijthsrev= 0.001           bvs     = 10              xjbvs   = 1             

    +jsd     = 0.0001          jswd    = 1e-011          jswgd   = 1e-010          njd     = 1             

    +ijthdfwd= 0.01            ijthdrev= 0.001           bvd     = 10              xjbvd   = 1             

    +pbs     = 1               cjs     = 0.0005          mjs     = 0.5             pbsws   = 1             

    +cjsws   = 5e-010          mjsws   = 0.33            pbswgs  = 1               cjswgs  = 3e-010        

    +mjswgs  = 0.33            pbd     = 1               cjd     = 0.0005          mjd     = 0.5           

    +pbswd   = 1               cjswd   = 5e-010          mjswd   = 0.33            pbswgd  = 1             

    +cjswgd  = 5e-010          mjswgd  = 0.33            tpb     = 0.005           tcj     = 0.001         

    +tpbsw   = 0.005           tcjsw   = 0.001           tpbswg  = 0.005           tcjswg  = 0.001         

    +xtis    = 3               xtid    = 3             

    +dmcg    = 0               dmci    = 0               dmdg    = 0               dmcgt   = 0             

    +dwj     = 0               xgw     = 0               xgl     = 0             

    +rshg    = 0.4             gbmin   = 1e-010          rbpb    = 5               rbpd    = 15            

    +rbps    = 15              rbdb    = 15              rbsb    = 15              ngcon   = 1    

    simulator lang=spectre

    ends NMOS2

    subckt PMOS2 (n3 n1 n4 n5)

    P0 (n3 n1 n4 n5) pmos l=45n w=90n delvto = Pdelvt0

    ends PMOS2

    N1 (3 1 0 0) NMOS2 

    N2 (3 2 0 0) NMOS2 

    P1 (3 1 4 5) PMOS2 

    P2 (4 2 5 5) PMOS2 

    vdd 5 0 vsource dc=1.1

    statistics {

    process{

    vary Ndelvt0 dist=gauss std=.3

    vary Pdelvt0 dist=gauss std=.4

    }

    mismatch{

    vary Ndelvt0 dist=gauss std=.3

    }

    }

    mc1 montecarlo variations=mismatch saveprocessparams=yes seed=100 numruns=1{

    mytran tran start=0 stop=10u step=.1u errpreset = conservative

    }

    ---------------------------------------------------------------------------------------------------------------------------------------------------------

    Do you have any suggestion regarding this? Your help will be appreciated. 

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
Reply
  • Tonmoy Dhar
    Tonmoy Dhar over 9 years ago

    Hi Andrew.

    I am also a newbie to the spectre simulation and I am in badly need of your help. I am simulating the following netlist. I see no simulation error. But, I do not see any mismatch variation data in the 'mc1.process.mcdata' file (the file is blank). But, when I run monte carlo simulation with 'variations=process' I see the process variation data inside the 'mc1.process.mcdata' file.  I am working with IC 5.1.41 . Here is the netlist:

    ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------

    simulator lang=spectre

    include "45nm_ASU_PTM.inc"

    parameters Ndelvt0 = 0 Pdelvt0 = 0

    subckt NMOS2 (n3 n2 n0 n1)

    parameters Ndelvt0=0

    N0 (n3 n2 n0 n1) nmos l=45n w=45n delvto = Ndelvt0

    simulator lang=spice

    .model  nmos  nmos  level = 14

    +version = 4.0             binunit = 1               paramchk= 1               mobmod  = 0             

    +capmod  = 2               igcmod  = 1               igbmod  = 1               geomod  = 1             

    +diomod  = 1               rdsmod  = 0               rbodymod= 1               rgatemod= 1             

    +permod  = 1               acnqsmod= 0               trnqsmod= 0             

    +tnom    = 27              toxe    = 1.8e-009        toxp    = 1.5e-009        toxm    = 1.8e-009      

    +dtox    = 3e-010          epsrox  = 3.9             wint    = 5e-009          lint    = 0             

    +ll      = 0               wl      = 0               lln     = 1               wln     = 1             

    +lw      = 0               ww      = 0               lwn     = 1               wwn     = 1             

    +lwl     = 0               wwl     = 0               xpart   = 0               toxref  = 1.8e-009      

    +vth0    = 0.62261         k1      = 0.4             k2      = 0               k3      = 0             

    +k3b     = 0               w0      = 2.5e-006        dvt0    = 0       dvt1    = 2             

    +dvt2    = 0               dvt0w   = 0               dvt1w   = 0               dvt2w   = 0             

    +dsub    = 0.1             minv    = 0.05            voffl   = 0               dvtp0   = 1e-010        

    +dvtp1   = 0.1             lpe0    = 0               lpeb    = 0               xj      = 1.4e-008      

    +ngate   = 1e+023          ndep    = 3.24e+018       nsd     = 2e+020          phin    = 0             

    +cdsc    = 0               cdscb   = 0               cdscd   = 0               cit     = 0             

    +voff    = -0.13           nfactor = 1.6             eta0    = 0.0125          etab    = 0             

    +vfb     = -0.55           u0      = 0.049           ua      = 6e-010          ub      = 1.2e-018      

    +uc      = 0               vsat    = 130000          a0      = 1               ags     = 0             

    +a1      = 0               a2      = 1               b0      = 0               b1      = 0             

    +keta    = 0.04            dwg     = 0               dwb     = 0               pclm    = 0.02          

    +pdiblc1 = 0.001           pdiblc2 = 0.001           pdiblcb = -0.005          drout   = 0.5           

    +pvag    = 1e-020          delta   = 0.01            pscbe1  = 8.14e+008       pscbe2  = 1e-007        

    +fprout  = 0.2             pdits   = 0.08            pditsd  = 0.23            pditsl  = 2300000       

    +rsh     = 5               rdsw    = 210             rsw     = 80              rdw     = 80            

    +rdswmin = 0               rdwmin  = 0               rswmin  = 0               prwg    = 0             

    +prwb    = 0               wr      = 1               alpha0  = 0.074           alpha1  = 0.005         

    +beta0   = 30              agidl   = 0.0002          bgidl   = 2.1e+009        cgidl   = 0.0002        

    +egidl   = 0.8             aigbacc = 0.012           bigbacc = 0.0028          cigbacc = 0.002         

    +nigbacc = 1               aigbinv = 0.014           bigbinv = 0.004           cigbinv = 0.004         

    +eigbinv = 1.1             nigbinv = 3               aigc    = 0.015211        bigc    = 0.0027432     

    +cigc    = 0.002           aigsd   = 0.015211        bigsd   = 0.0027432       cigsd   = 0.002         

    +nigc    = 1               poxedge = 1               pigcd   = 1               ntox    = 1             

    +xrcrg1  = 12              xrcrg2  = 5             

    +cgso    = 1.1e-010        cgdo    = 1.1e-010        cgbo    = 2.56e-011       cgdl    = 2.653e-010    

    +cgsl    = 2.653e-010      ckappas = 0.03            ckappad = 0.03            acde    = 1             

    +moin    = 15              noff    = 0.9             voffcv  = 0.02          

    +kt1     = -0.11           kt1l    = 0               kt2     = 0.022           ute     = -1.5          

    +ua1     = 4.31e-009       ub1     = 7.61e-018       uc1     = -5.6e-011       prt     = 0             

    +at      = 33000         

    +fnoimod = 1               tnoimod = 0             

    +jss     = 0.0001          jsws    = 1e-011          jswgs   = 1e-010          njs     = 1             

    +ijthsfwd= 0.01            ijthsrev= 0.001           bvs     = 10              xjbvs   = 1             

    +jsd     = 0.0001          jswd    = 1e-011          jswgd   = 1e-010          njd     = 1             

    +ijthdfwd= 0.01            ijthdrev= 0.001           bvd     = 10              xjbvd   = 1             

    +pbs     = 1               cjs     = 0.0005          mjs     = 0.5             pbsws   = 1             

    +cjsws   = 5e-010          mjsws   = 0.33            pbswgs  = 1               cjswgs  = 3e-010        

    +mjswgs  = 0.33            pbd     = 1               cjd     = 0.0005          mjd     = 0.5           

    +pbswd   = 1               cjswd   = 5e-010          mjswd   = 0.33            pbswgd  = 1             

    +cjswgd  = 5e-010          mjswgd  = 0.33            tpb     = 0.005           tcj     = 0.001         

    +tpbsw   = 0.005           tcjsw   = 0.001           tpbswg  = 0.005           tcjswg  = 0.001         

    +xtis    = 3               xtid    = 3             

    +dmcg    = 0               dmci    = 0               dmdg    = 0               dmcgt   = 0             

    +dwj     = 0               xgw     = 0               xgl     = 0             

    +rshg    = 0.4             gbmin   = 1e-010          rbpb    = 5               rbpd    = 15            

    +rbps    = 15              rbdb    = 15              rbsb    = 15              ngcon   = 1    

    simulator lang=spectre

    ends NMOS2

    subckt PMOS2 (n3 n1 n4 n5)

    P0 (n3 n1 n4 n5) pmos l=45n w=90n delvto = Pdelvt0

    ends PMOS2

    N1 (3 1 0 0) NMOS2 

    N2 (3 2 0 0) NMOS2 

    P1 (3 1 4 5) PMOS2 

    P2 (4 2 5 5) PMOS2 

    vdd 5 0 vsource dc=1.1

    statistics {

    process{

    vary Ndelvt0 dist=gauss std=.3

    vary Pdelvt0 dist=gauss std=.4

    }

    mismatch{

    vary Ndelvt0 dist=gauss std=.3

    }

    }

    mc1 montecarlo variations=mismatch saveprocessparams=yes seed=100 numruns=1{

    mytran tran start=0 stop=10u step=.1u errpreset = conservative

    }

    ---------------------------------------------------------------------------------------------------------------------------------------------------------

    Do you have any suggestion regarding this? Your help will be appreciated. 

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
Children
No Data

Community Guidelines

The Cadence Design Communities support Cadence users and technologists interacting to exchange ideas, news, technical information, and best practices to solve problems and get the most from Cadence technology. The community is open to everyone, and to provide the most value, we require participants to follow our Community Guidelines that facilitate a quality exchange of ideas and information. By accessing, contributing, using or downloading any materials from the site, you agree to be bound by the full Community Guidelines.

© 2025 Cadence Design Systems, Inc. All Rights Reserved.

  • Terms of Use
  • Privacy
  • Cookie Policy
  • US Trademarks
  • Do Not Sell or Share My Personal Information