Skip to content

Commit 878a3b9

Browse files
author
Dietmar Warning
committed
Safe Operating Area check for lv- and hv-mos
Signed-off-by: Dietmar Warning <[email protected]>
1 parent 47391c6 commit 878a3b9

File tree

6 files changed

+56
-2
lines changed

6 files changed

+56
-2
lines changed

.gitignore

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -186,3 +186,6 @@ run_git-pulse
186186

187187
# Git-cliff
188188
cliff*toml
189+
190+
# OpneVAF compiled models dir
191+
*/*/ngspice/osdi

ihp-sg13g2/libs.tech/ngspice/models/sg13g2_moshv_mod.lib

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
.param SWSOA = 0
12
*******************************************************************************
23
* *
34
* Library: SG13G2_dev *

ihp-sg13g2/libs.tech/ngspice/models/sg13g2_moshv_parm.lib

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -187,7 +187,9 @@
187187
+ rshg = 'rfmode * 20.0' rgo = 'rfmode * 35.0'
188188
+ rbulko = 'rfmode * 0.002 * ng/w' rwello = 'rfmode * 0.002 * ng/w'
189189
+ rjunso = 'rfmode * 5000.0 * l/w' rjundo = 'rfmode * 5000.0 * l/w'
190-
190+
+ SWSOA = 'SWSOA'
191+
+ VGS_MAX = 3.0 VGD_MAX = 3.0 VGB_MAX = 3.0
192+
+ VDS_MAX = 3.0 VDB_MAX = 1.6 VSB_MAX = 1.6
191193

192194
*******************************************************************************
193195
*
@@ -337,4 +339,7 @@
337339
+ rshg = 'rfmode * 40.0' rgo = 'rfmode * 15.0'
338340
+ rbulko = 'rfmode * 0.002 * ng/w' rwello = 'rfmode * 0.001 * ng/w'
339341
+ rjunso = 'rfmode * 5000.0 * l/w' rjundo = 'rfmode * 5000.0 * l/w'
342+
+ SWSOA = 'SWSOA'
343+
+ VGS_MAX = 3.0 VGD_MAX = 3.0 VGB_MAX = 3.0
344+
+ VDS_MAX = 3.0 VDB_MAX = 1.6 VSB_MAX = 1.6
340345

ihp-sg13g2/libs.tech/ngspice/models/sg13g2_moslv_mod.lib

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
.param SWSOA = 0
12
*******************************************************************************
23
* *
34
* Library: SG13G2_dev *

ihp-sg13g2/libs.tech/ngspice/models/sg13g2_moslv_parm.lib

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -186,6 +186,9 @@
186186
+ rshg = 'rfmode * 3.0' rgo = 'rfmode * 40.0'
187187
+ rbulko = 'rfmode * 0.002 * ng/w' rwello = 'rfmode * 0.002 * ng/w'
188188
+ rjunso = 'rfmode * 5000.0 * l/w' rjundo = 'rfmode * 5000.0 * l/w'
189+
+ SWSOA = 'SWSOA'
190+
+ VGS_MAX = 1.6 VGD_MAX = 1.6 VGB_MAX = 1.6
191+
+ VDS_MAX = 1.6 VDB_MAX = 1.6 VSB_MAX = 1.6
189192

190193
*******************************************************************************
191194
*
@@ -336,7 +339,9 @@
336339
+ rshg = 'rfmode * 20.0' rgo = 'rfmode * 22.0'
337340
+ rbulko = 'rfmode * 0.002 * ng/w' rwello = 'rfmode * 0.001 * ng/w'
338341
+ rjunso = 'rfmode * 5000.0 * l/w' rjundo = 'rfmode * 5000.0 * l/w'
339-
342+
+ SWSOA = 'SWSOA'
343+
+ VGS_MAX = 1.6 VGD_MAX = 1.6 VGB_MAX = 1.6
344+
+ VDS_MAX = 1.6 VDB_MAX = 1.6 VSB_MAX = 1.6
340345

341346

342347
.model nmoscl_psp pspnqs103va type = +1
@@ -467,3 +472,6 @@
467472
+ rshg = 'rfmode * 3.0' rgo = 'rfmode * 40.0'
468473
+ rbulko = 'rfmode * 0.002 * ng/w' rwello = 'rfmode * 0.002 * ng/w'
469474
+ rjunso = 'rfmode * 5000.0 * l/w' rjundo = 'rfmode * 5000.0 * l/w'
475+
+ SWSOA = 'SWSOA'
476+
+ VGS_MAX = 1.6 VGD_MAX = 1.6 VGB_MAX = 1.6
477+
+ VDS_MAX = 1.6 VDB_MAX = 1.6 VSB_MAX = 1.6

ihp-sg13g2/libs.tech/verilog-a/psp103/PSP103_module.include

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,8 @@
2525
//
2626
// Further information can be found in the file releasenotesPSP103.txt
2727
//
28+
// Define it to check overvoltage for all 6 branches
29+
`define SOAcheck
2830
// --------------------------------------------------------------------------------------------------------------
2931
// Node definitions
3032
// --------------------------------------------------------------------------------------------------------------
@@ -651,6 +653,17 @@ electrical BD;
651653
`MPRnb(WEB ,0.0 ,"" ,"Coefficient for SCB")
652654
`MPRnb(WEC ,0.0 ,"" ,"Coefficient for SCC")
653655

656+
// Safe operating area check
657+
`ifdef SOAcheck
658+
`MPIcc(SWSOA ,0 ,"" ,0 ,1 ,"Flag for safe operating area check")
659+
`MPRoo(VGS_MAX ,1e99 ,"" ,0 ,inf ,"Max gate source voltage")
660+
`MPRoo(VGD_MAX ,1e99 ,"" ,0 ,inf ,"Max gate drain voltage")
661+
`MPRoo(VGB_MAX ,1e99 ,"" ,0 ,inf ,"Max gate bulk voltage")
662+
`MPRoo(VDS_MAX ,1e99 ,"" ,0 ,inf ,"Max drain source voltage")
663+
`MPRoo(VDB_MAX ,1e99 ,"" ,0 ,inf ,"Max drain bulk voltage")
664+
`MPRoo(VSB_MAX ,1e99 ,"" ,0 ,inf ,"Max source bulk voltage")
665+
`endif
666+
654667
// --------------------------------------------------------------------------------------------------------------
655668
// JUNCAP Parameters
656669
// --------------------------------------------------------------------------------------------------------------
@@ -2142,6 +2155,29 @@ analog begin
21422155
xgs_ov = -VgsPrime * inv_phita;
21432156
xgd_ov = -VgdPrime * inv_phita;
21442157

2158+
`ifdef SOAcheck
2159+
if (SWSOA > 0) begin
2160+
if (abs(Vgs) > VGS_MAX) begin
2161+
$strobe("%M: Vgs=%g has exceeded Vgs_max=%g", Vgs, VGS_MAX);
2162+
end
2163+
if (abs(VgdPrime) > VGD_MAX) begin
2164+
$strobe("%M: Vgd=%g has exceeded Vgd_max=%g", VgdPrime, VGD_MAX);
2165+
end
2166+
if (abs(Vds) > VDS_MAX) begin
2167+
$strobe("%M: Vds=%g has exceeded Vds_max=%g", Vds, VDS_MAX);
2168+
end
2169+
if (abs(Vgs+Vsb) > VGB_MAX) begin
2170+
$strobe("%M: Vgb=%g has exceeded Vgb_max=%g", Vgs+Vsb, VGB_MAX);
2171+
end
2172+
if (abs(Vsb) > VSB_MAX) begin
2173+
$strobe("%M: Vsb=%g has exceeded Vsb_max=%g", Vsb, VSB_MAX);
2174+
end
2175+
if (abs(VdbPrime) > VDB_MAX) begin
2176+
$strobe("%M: Vdb=%g has exceeded Vdb_max=%g", VdbPrime, VDB_MAX);
2177+
end
2178+
end
2179+
`endif // SOAcheck
2180+
21452181
// Source-drain interchange
21462182
sigVds = 1.0;
21472183
if (Vds < 0.0) begin

0 commit comments

Comments
 (0)