From 8989eabee243cdc0a63629c7ad47ab05b08e5f56 Mon Sep 17 00:00:00 2001 From: rlar Date: Sun, 23 Jul 2017 20:17:54 +0200 Subject: [PATCH] bsimcmg_body.include, workaround incorrect adms derivative, GM, GDS, GMBS, FIXME ! adms doesn't seem to derive a "output" variable correctly. (was zero) this fix is for GM, GDS, GMBS only, fixme, unknown which other variables suffer from the same problem --- .../devices/adms/bsimcmg/admsva/bsimcmg_body.include | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/spicelib/devices/adms/bsimcmg/admsva/bsimcmg_body.include b/src/spicelib/devices/adms/bsimcmg/admsva/bsimcmg_body.include index c67eb85d5..dd1f2620c 100644 --- a/src/spicelib/devices/adms/bsimcmg/admsva/bsimcmg_body.include +++ b/src/spicelib/devices/adms/bsimcmg/admsva/bsimcmg_body.include @@ -3904,10 +3904,10 @@ analog begin VTH = VFB + devsign * (Vtm * `lln(T2 / T3) + dvch_qm + phib + qbs + Vtm + dvth_all - DELVTRAND); // Conductances - GM = ddx(IDS,V(`IntrinsicGate)); // Transconductance - GDS = ddx(IDS,V(di)); // Output Conductance + GM = ddx(devsign * ids,V(`IntrinsicGate)); // Transconductance + GDS = ddx(devsign * ids,V(di)); // Output Conductance if (BULKMOD != 0) - GMBS = ddx(IDS,V(e)); // Body Transconductance + GMBS = ddx(devsign * ids,V(e)); // Body Transconductance else GMBS = 0.0;