Uploaded by hffyh

BSIM-CMG 112.0.0beta2 Updates

advertisement
Summary of changes from
BSIM-CMG_112.0.0beta1 to BSIM-CMG_112.0.0beta2
BSIM Group, UC Berkeley
A. Pampori (pampori@berkeley.edu), C.K. Dabhi, D. Rajasekharan, and
Shivendra Singh Parihar
A. Summary of Bugs
1. 2024bug6(ADI): Use updated hypsmooth function.
2. 2024bug7(ADI): Initialize gate current variables.
B. Summary of Enhancements
1. N/A.
C. Description of Bug fixes
1. 2024bug6(ADI): Use updated hypsmooth function.
The hypsmooth macro was improved following the improvements in the hypsmooth
function in BSIM-BULK, aimed at preventing divide-by-zero errors caused by large
negative arguments to hypsmooth. The existing macro reads as:
`define hypsmooth(x, c) (0.5 * (x + sqrt((x) * (x) + 4.0 * c * c)))
In the case that |x| is large, we can use a Taylor series:
sqrt(1 + ε) = 1 + ε/2 – ε^2/8 + ...
sqrt(x * x + 4.0 * c * c) = |x| * sqrt(1.0 + 4.0*c*c/(x*x))
1
≈ |x| * (1 + 2*(c/x)^2 – 2*(c/x)^4 + ...)
When x < 0, the leading 1 cancels the x in hypsmooth (x + |x| = 0), and the
hypsmooth macro evaluates to zero. This can create problems if the output of the
hypsmooth macro is used as a denominator – leading to divide-by-zero errors. To
prevent this, large negative cases are handled by an updated definition as:
`define hypsmooth(x, c) ((x < -1e4 * (c)) ? (-(c) * (c) / (x)) : (0.5 * (x + sqrt((x) * (x)
+ 4.0 * (c) * (c)))))
2. 2024bug7(ADI): Initialize gate current variables.
The variables igbacc_v, igbd_v, igbinv_v, igbs_v, igcd_v, igcs_v, igd_v, igidl_v,
igisl_v, and igs_v were not initialized. This has been updated in the latest code, with
these variables set to zero.
D. Description of Enhancements
N/A
2
Download