Our foundry provides a subcircuit model which produces correct ID-VD and ID-VG curves. However, the .OP vdssat (based on BSIM definition) is wildy different than what is expected, ~200mV higher.
What I want:
(1) Custom definition of Vdssat, for example vdssatxxx based on Rout degradation
(2) Must be able to back-annotate on the schematic
One way I was thinking is to run a DC sweep, calculate the value vdssatxxx based on my arbitrary definition, and then overwrite the original .dcOpInfo.info file's vdssat with the the calculated value vdssatxxx from the DC sweep. Now, when I back-annotate it should read the .dcOpInfo.info file that was overwritten.
(1) Is this a reasonable way to do it?
(2) How do I overwrite the existing dcOPInfo.info file (replace vdssat with an arbitrary value that I have calculated)? Does OCEAN have this feature?
(3) Is there a better way to have a custom-defined operating point parameter that can be back-annotated?
A couple of options:
You can't really overwrite the dcOpInfo.info file - I'm not sure you'd want to do that anyway.
It's not that clear precisely how you want to compute the vdsat from a dc sweep, but I doubt you'd really need to use a dc sweep?
In reply to Andrew Beckett:
Thanks. I tried #2 listed in your email. It may be the best option. However, it's not easy to come up with an empirical equation for Vdssat based on other operating point parameters (e.g. Vdssat=f(vgs,vds,vth,id,rout,...)). Please let me know if you know of one.
Ideally, I would like to base Vdssat on a DC sweep of Vds holding Vgs for each transistor at the operating point value. Below are the steps:
(1) Create original schematic (e.g. an op amp containing 10 transistors) and run .OP sim
(2) fprint value of Vgs and Vbs using ocean
(3) Create a new schematic copying only the transistors from original schematic
(4) Add dc voltage sources to each pin of the transistor in the new schematic using values from step 2
(5) Run a DC sweep on Vds (Vgs, Vbs is fixed to operating point value) for the new schematic
(6) Calculate Rout=deriv(Id)
(7) Create arbitrary definition: vdssatxxx is the Vds when Rout is degraded 50% from the value from Vds=Vdd/2
(8) Take this value of vdssatxxx and annotate on the schematic using schCreateNoteLabel (since I can't overwrite .dcOpInfo.info)
It's obviously a complicated solution... Please let me know if something like this already exists. I've just started to implement this with Skill and Ocean code (I'm a beginner), so please let me know of any difficulties I may run into.
May I ask some easy questions about opParamExprList expresstion.
Here I need to calculate res rely on v/i which I can get from OP( mappedRoot(\"A\") \"i\") and OP ( mappedRoot(\"A\") \"v\").
But somehow I may equals to 0 which I need to add one condition to display inf if this situation happened.
I try to use the example at document but not working so far.
Could you please give an simple example that I can follow and study?
In reply to XinjiePI:
A little hard to see what you want, but I'd expect something like:
"if(OP(mappedRoot(\"A\") \"i\")<1e-15 then "inf" else OP(mappedRoot(\"A\") \"v\")/OP(mappedRoot(\"A\") \"i\"))"
should do the job.
Great help! Thanks Andrew.