Dear Xyce team and community,
I have recently ported a compact model I originally developed in hspice into Xyce via Xyce/ADMS; however, I am experiencing convergence issues when forward biasing the various device p-n junctions. I believe this has to do with different way that hspice and Xyce handle the limexp function when generating code; specifically hspice is compliant with the LRM-2.2 while Xyce appears not to be. Below is an exert for the LRM 2.4.0, however, I the same is true
at least as far back as 2.2:
"The limexp() function is an operator whose internal state contains information about the argument on previous iterations. It returns a real value which is the exponential of its single real argument, however, it internally limits the change of its output from iteration to iteration in order to improve convergence. On any iteration where the change in the output of the limexp() function is bounded, the simulator is prevented from terminating the iteration. Thus, the simulator can only converge when the output of limexp() equals the exponential of the input...The apparent behavior of limexp() is not distinguishable from exp(), except using limexp() to model semiconductor junctions generally results in dramatically improved convergence. There are different ways of implementing limiting algorithms for the exponential. Other nonlinearities besides the exponential may be in behavioral models. The $limit() system function described in 9.17.3 provides a method to indicate these nonlinearities to the simulator to improve convergence."
Am I correct in thinking that the implementation of the Verilog-A limexp
function produced through Xyce/ADMS is not consistent with the Accelera
LMR?
In hspice one could use $limit with exp to create the same pnjlim limiting function already provided by limexp. Can the same be achieved in Xyce/ADMS and if so are there any examples where this has been done?
Interestingly, the Xyce/ADMS implementation of limexp, which makes exp linear above a certain limit, can be enabled in hspice as a global simulator .options (affects all models including those compiled from Verilog-A) with a user controllable value rather than a hard coded value; this is one of the things that needs to be changed in order to model wide band gap semiconductor p-n junctions, otherwise the limit kicks in too soon and the junction never conducts; e.g., SiC p-n junctions will not conduct heavily at room temperature until they are forwards biased by at least 3 volts. Is there a reason why a similar arrangement hasn't been adapted in Xyce as this seems like a more flexible and consistent arrangement.
Thank you for your time.
Kind regards,
Dr N. Wood