Sampling Local Variaiton Appears to Fail in Certain Cases (Xyce 7.8)

12 views
Skip to first unread message

John Mayega

unread,
Mar 28, 2025, 3:55:35 AMMar 28
to xyce-users
In Xyce 7.8 local sampling appears to fail when the parameter is passed to a transistor model parameter.

The following gaussian definition is used:
.PARAM DVTN_LV= agauss(0,'avtn_lv/sqrt(w*l*mult)',1)
.PARAM MULTN_LV=agauss(0,'aidn_lv/sqrt(w*l*mult)',1)

In the following transistor definition the variation im "M" fails to sample correctly treats it as a global variation, whereas W samples correctly treated as a local variation.
-------
Mint d g s b nlv
+ M='(1*nf)+multn_lv' AD='ad/nf' AS='as/nf' L='l' NRD='nrd*nf' NRS='nrs*nf'
+ PD='pd/nf' PS='ps/nf' W='wf+wf*multn_lv'
-------

In addition within the model the following call is treated as global.
-------
.MODEL nlv.1 NMOS
.....
+VTH0='0.5447+skew_lv_vtn + DVTN_LV'
......
+ LEVEL=9
-------

xyce-users

unread,
Mar 28, 2025, 12:38:50 PMMar 28
to xyce-users
Hello,

thanks for reporting this.   I haven't attempted to reproduce this yet, but my guess is that part of the explanation has to do with the use of the "M" parameter.   Since the "M" parameter gets implicitly applied thru subcircuit calls, it has to be treated as "special" in the parsing and setup, and gets a special AST.   Also, when I wrote that code I don't think it occurred to me that people would apply sampling to a multiplier, since I tend to assume those will be whole numbers.  So I definitely never tested the use case of applying sampling to "M".

In general (as I sure you know) the convention for global vs. local has to do with how many layers there are between the parameter that has a random operator (like agauss) and where it is used.    Especially when it comes to a "special" parameter like "M", the number of layers (implied or in reality) might be different enough to have caused this behavior.

I'll dig into this once I have more time.

thanks,
Eric
Reply all
Reply to author
Forward
0 new messages