Merge pull request #121 from mabrains/diode_bcd
diff --git a/BCDLite/klayout/lvs/rule_decks/diode_connections.lvs b/BCDLite/klayout/lvs/rule_decks/diode_connections.lvs
index c0be24e..167c4fc 100644
--- a/BCDLite/klayout/lvs/rule_decks/diode_connections.lvs
+++ b/BCDLite/klayout/lvs/rule_decks/diode_connections.lvs
@@ -75,43 +75,12 @@
# diode_pw2dw: Model for LVPWELL/DNWELL diode (applicable for both 1.8V/6V) [dnwpw]
connect(diode_pw2dw_terminal_p, contact)
-#======================
-# --- DNWPWHV DIODE ---
-#======================
-
-# diode_pw2dw_hv: Model for NW/PWHV diode (10V diode) [dnwpwhv]
-connect(diode_pw2dw_hv_terminal_n, contact)
-connect(diode_pw2dw_hv_terminal_p, contact)
-
-#=======================
-# --- DPWHVDNW DIODE ---
-#=======================
-
-# diode_pw2dnw_hv: Model for PWHV/DNW diode [dpwhvdnw]
-connect(diode_pw2dnw_hv_terminal_n, contact)
-connect(diode_pw2dnw_hv_terminal_p, contact)
-
-#======================
-# --- NP 30P0 DIODE ---
-#======================
-
-# diode_nd2ps_30v0: Model for HVNDDD/Psub diode [np_30p0]
-connect(diode_nd2ps_30v0_terminal_n, contact)
-connect(diode_nd2ps_30v0_terminal_p, contact)
-
-#======================
-# --- PN 30P0 DIODE ---
-#======================
-
-# diode_pd2nw_30v0: Model for HVPDDD/DNWELL diode [np_30p0]
-connect(diode_pd2nw_30v0_terminal_n, contact)
-
#====================
# --- DNWPS DIODE ---
#====================
# diode_dw2ps: Model for DNWELL/Psub diode(1.8V/6V) [dnwps]
-connect(diode_dw2ps_terminal_p, contact)
+connect(diode_dw2ps_terminal_p, ptap)
#=================
# --- SC DIODE ---
@@ -120,23 +89,3 @@
# diode_sc: Model for schottky diode [sc_diode]
connect(diode_sc_terminal_n, contact)
connect(diode_sc_terminal_p, schottky_diode)
-
-#====================
-# --- ZENER DIODE ---
-#====================
-
-# diode_zener: Model for zener diode outside DNWELL [zener_diode]
-connect(diode_zener_terminal_n, contact)
-connect(diode_zener_terminal_p, zener)
-
-# diode_zener_dn: Model for zener diode inside DNWELL [zener_diode_dw]
-connect(diode_zener_dn_terminal_n, contact)
-connect(diode_zener_dn_terminal_p, zener)
-
-#===================
-# --- POLY DIODE ---
-#===================
-
-# diode_poly: Model for poly diode [poly_diode]
-connect(diode_poly_terminal_n, contact)
-connect(diode_poly_terminal_p, contact)
diff --git a/BCDLite/klayout/lvs/rule_decks/diode_derivations.lvs b/BCDLite/klayout/lvs/rule_decks/diode_derivations.lvs
index be7cc47..fb71277 100644
--- a/BCDLite/klayout/lvs/rule_decks/diode_derivations.lvs
+++ b/BCDLite/klayout/lvs/rule_decks/diode_derivations.lvs
@@ -45,7 +45,7 @@
#=====================
diode_nd2ps_01v8_exclude = diode_nd2ps_pd2nw_exclude.join(nwell).join(pplus).join(dualgate2_d)
-diode_nd2ps_01v8 = ncomp.and(diode_mk).not(diode_nd2ps_01v8_exclude)
+diode_nd2ps_01v8 = ncomp.and(diode_mk).not_interacting(diode_nd2ps_01v8_exclude)
# diode_nd2ps_01v8: Model for 1.8V N+/Psub diode (outside DNWELL) [np_1p8]
diode_nd2ps_01v8_terminal_n = diode_nd2ps_01v8.not(dnwell)
@@ -58,7 +58,7 @@
#=====================
diode_pd2nw_01v8_exclude = diode_nd2ps_pd2nw_exclude.join(lvpwell).join(nplus).join(dualgate2_d)
-diode_pd2nw_01v8 = pcomp.and(diode_mk).not(diode_pd2nw_01v8_exclude)
+diode_pd2nw_01v8 = pcomp.and(diode_mk).not_interacting(diode_pd2nw_01v8_exclude)
# diode_pd2nw_01v8: Model for 1.8V P+/Nwell diode (outside DNWELL) [pn_1p8]
diode_pd2nw_01v8_terminal_p = diode_pd2nw_01v8.not(dnwell)
@@ -71,7 +71,7 @@
#=====================
diode_nd2ps_06v0_exclude = diode_nd2ps_pd2nw_exclude.join(nwell).join(pplus)
-diode_nd2ps_06v0 = ncomp.and(diode_mk).and(dualgate2_d).not(diode_nd2ps_06v0_exclude)
+diode_nd2ps_06v0 = ncomp.and(diode_mk).and(dualgate2_d).not_interacting(diode_nd2ps_06v0_exclude)
# diode_nd2ps_06v0: Model for 6V N+/Pwell diode (outside DNWELL) [np_6p0]
diode_nd2ps_06v0_terminal_n = diode_nd2ps_06v0.not(dnwell)
@@ -84,7 +84,7 @@
#=====================
diode_pd2nw_06v0_exclude = diode_nd2ps_pd2nw_exclude.join(lvpwell).join(nplus)
-diode_pd2nw_06v0 = pcomp.and(diode_mk).and(dualgate2_d).not(diode_pd2nw_06v0_exclude)
+diode_pd2nw_06v0 = pcomp.and(diode_mk).and(dualgate2_d).not_interacting(diode_pd2nw_06v0_exclude)
# diode_pd2nw_06v0: Model for 6V P+/Nwell diode (outside DNWELL) [pn_6p0]
diode_pd2nw_06v0_terminal_p = diode_pd2nw_06v0.not(dnwell)
@@ -100,7 +100,7 @@
# diode_nw2ps_06v0: Model for Nwell/Psub diode (applicable for both 1.8V/6V) [nwp_6p0]
diode_nw2ps_06v0_terminal_p = pcomp.and(diode_mk).not(diode_nw2ps_06v0_exclude)
-diode_nw2ps_06v0_terminal_n = diode_mk.covering(nwell.covering(ncomp)).not(diode_nw2ps_06v0_exclude)
+diode_nw2ps_06v0_terminal_n = diode_mk.covering(nwell.covering(ncomp)).not_interacting(diode_nw2ps_06v0_exclude)
#====================
# --- DNWPW DIODE ---
@@ -109,69 +109,21 @@
diode_pw2dw_exclude = diode_nd2ps_pd2nw_exclude.join(nwell).join(nplus)
# diode_pw2dw: Model for LVPWELL/DNWELL diode (applicable for both 1.8V/6V) [dnwpw]
-diode_pw2dw_terminal_p = lvpwell.interacting(pcomp).and(well_diode_mk).not(diode_pw2dw_exclude)
-
-#======================
-# --- DNWPWHV DIODE ---
-#======================
-
-diode_pw2dw_hv_exclude = diode_exclude.join(lvpwell).join(poly2)
- .join(pplus).join(schottky_diode).join(zener)
- .join(res_mk).join(hvnddd).join(hvpddd)
- .join(nwell)
-
-# diode_pw2dw_hv: Model for NW/PWHV diode (10V diode) [dnwpwhv]
-dnwell_hv = dnwell.and(dualgate2_d)
-diode_pw2dw_hv_terminal_p = pwhv.and(well_diode_mk).and(ldmos_xtor).not(diode_pw2dw_hv_exclude)
-diode_pw2dw_hv_terminal_n = well_diode_mk.covering(dnwell_hv.covering(ncomp)).and(ldmos_xtor)
- .interacting(mvsd).not(diode_pw2dw_hv_exclude)
-
-#=======================
-# --- DPWHVDNW DIODE ---
-#=======================
-
-diode_pw2dnw_hv_exclude = diode_exclude.join(lvpwell).join(poly2)
- .join(nplus).join(schottky_diode).join(zener)
- .join(res_mk).join(hvnddd).join(hvpddd)
- .join(nwell)
-
-# diode_pw2dnw_hv: Model for PWHV/DNW diode [dpwhvdnw]
-diode_pw2dnw_hv_terminal_p = pwhv.and(well_diode_mk).and(ldmos_xtor).not(diode_pw2dnw_hv_exclude)
-diode_pw2dnw_hv_terminal_n = well_diode_mk.covering(dnwell_hv.covering(pcomp)).and(ldmos_xtor)
- .interacting(mvsd).not(diode_pw2dnw_hv_exclude)
-
-#======================
-# --- NP 30P0 DIODE ---
-#======================
-
-diode_nd2ps_30v0_exclude = diode_exclude.join(dnwell).join(nwell)
- .join(lvpwell).join(poly2)
-
-# diode_nd2ps_30v0: Model for HVNDDD/Psub diode [np_30p0]
-diode_nd2ps_30v0_terminal_n = dualgate2_d.covering(hvnddd.and(diode_mk)).not(diode_nd2ps_30v0_exclude)
-diode_nd2ps_30v0_terminal_p = pcomp.and(diode_mk).not(diode_nd2ps_30v0_exclude)
-
-#======================
-# --- PN 30P0 DIODE ---
-#======================
-
-diode_pd2nw_30v0_exclude = diode_exclude.join(nwell).join(lvpwell).join(poly2)
-
-# diode_pd2nw_30v0: Model for HVPDDD/DNWELL diode [np_30p0]
-diode_pd2nw_30v0_terminal_n = hvpddd.and(diode_mk).and(dualgate2_d).not(diode_pd2nw_30v0_exclude)
+diode_pw2dw_terminal_p = lvpwell.interacting(pcomp).and(well_diode_mk).not_interacting(diode_pw2dw_exclude)
#====================
# --- DNWPS DIODE ---
#====================
# diode_dw2ps: Model for DNWELL/Psub diode(1.8V/6V) [dnwps]
+diode_dw2ps_terminal_p_ = ptap.extents.covering(ncomp)
diode_dw2ps_exclude = diode_exclude.join(nwell).join(lvpwell)
.join(poly2).join(pwhv).join(schottky_diode)
.join(zener).join(mvsd).join(hvnddd)
.join(hvpddd).join(ldmos_xtor)
-diode_dw2ps_terminal_p = pcomp.and(dualgate2_d).and(dnwell).and(well_diode_mk)
- .not(diode_dw2ps_exclude)
+diode_dw2ps_terminal_p = diode_dw2ps_terminal_p_.interacting(dnwell).interacting(well_diode_mk)
+ .not_interacting(diode_dw2ps_exclude)
#=================
# --- SC DIODE ---
@@ -182,44 +134,5 @@
.join(hvnddd).join(hvpddd).join(ldmos_xtor)
# diode_sc: Model for schottky diode [sc_diode]
-diode_sc_terminal_n = ncomp.and(dnwell).and(schottky_diode).not(diode_sc_exclude)
-diode_sc_terminal_p = metal1.and(dnwell).not_interacting(diode_sc_terminal_n).not(diode_sc_exclude)
-
-#====================
-# --- ZENER DIODE ---
-#====================
-
-diode_zener_exclude = diode_exclude.join(lvpwell).join(poly2)
- .join(pplus).join(zener).join(res_mk)
- .join(hvnddd).join(hvpddd).join(ldmos_xtor)
-
-# diode_zener: Model for zener diode outside DNWELL [zener_diode]
-zener_mv = zener.and(dualgate2_d)
-diode_zener_terminal_n = ncomp.and(zener_mv).not(dnwell).not(diode_zener_exclude)
-diode_zener_terminal_p = nwell.and(zener_mv).not(dnwell).covering(pcomp).and(diode_mk).not(diode_zener_exclude)
-
-# diode_zener_dn: Model for zener diode inside DNWELL [zener_diode_dw]
-diode_zener_dn_terminal_n = ncomp.and(zener_mv).and(dnwell).and(diode_mk).not(diode_zener_exclude)
-diode_zener_dn_terminal_p = nwell.and(zener_mv).and(dnwell).covering(pcomp).and(diode_mk).not(diode_zener_exclude)
-
-
-#===================
-# --- POLY DIODE ---
-#===================
-
-# diode_poly: Model for poly diode [poly_diode]
-diode_poly_exclude = comp.join(resistor).join(esd)
- .join(pwhv).join(polyfuse).join(fusewindow_d)
- .join(schottky_diode).join(piscap).join(zener)
- .join(res_mk).join(v5_xtor).join(nat)
- .join(fhres).join(mvsd).join(mvpsd)
- .join(elmd_mk).join(elmd2_mk).join(lvs_rf)
- .join(lvs_source).join(lvs_35v).join(mk_35v)
- .join(well_diode_mk).join(esd_hbm_mk).join(mos_mk_type1)
- .join(hvnddd).join(hvpddd).join(hvpolyrs)
- .join(ldmos_xtor)
-
-diode_poly_terminal_p = poly2.and(sab).interacting(nplus).interacting(pplus)
- .and(diode_mk).not(diode_poly_exclude)
-diode_poly_terminal_n = diode_mk.covering(diode_poly_terminal_p)
-
+diode_sc_terminal_n = ncomp.and(dnwell).and(schottky_diode).not_interacting(diode_sc_exclude)
+diode_sc_terminal_p = metal1.and(dnwell).not_interacting(diode_sc_terminal_n).not_interacting(diode_sc_exclude)
diff --git a/BCDLite/klayout/lvs/rule_decks/diode_extraction.lvs b/BCDLite/klayout/lvs/rule_decks/diode_extraction.lvs
index c598159..67adef9 100644
--- a/BCDLite/klayout/lvs/rule_decks/diode_extraction.lvs
+++ b/BCDLite/klayout/lvs/rule_decks/diode_extraction.lvs
@@ -84,38 +84,6 @@
logger.info('Extracting diode_pw2dw diode')
extract_devices(diode('diode_pw2dw'), { 'N' => dnwell, 'P' => diode_pw2dw_terminal_p })
-#======================
-# --- DNWPWHV DIODE ---
-#======================
-
-# diode_pw2dw_hv: Model for NW/PWHV diode (10V diode) [dnwpwhv]
-logger.info('Extracting diode_pw2dw_hv diode')
-extract_devices(diode('diode_pw2dw_hv'), { 'N' => diode_pw2dw_hv_terminal_n, 'P' => diode_pw2dw_hv_terminal_p })
-
-#=======================
-# --- DPWHVDNW DIODE ---
-#=======================
-
-# diode_pw2dnw_hv: Model for PWHV/DNW diode [dpwhvdnw]
-logger.info('Extracting diode_pw2dnw_hv diode')
-extract_devices(diode('diode_pw2dnw_hv'), { 'N' => diode_pw2dnw_hv_terminal_n, 'P' => diode_pw2dnw_hv_terminal_p })
-
-#======================
-# --- NP 30P0 DIODE ---
-#======================
-
-# diode_nd2ps_30v0: Model for HVNDDD/Psub diode [np_30p0]
-logger.info('Extracting diode_nd2ps_30v0 diode')
-extract_devices(diode('diode_nd2ps_30v0'), { 'N' => diode_nd2ps_30v0_terminal_n, 'P' => diode_nd2ps_30v0_terminal_p })
-
-#======================
-# --- PN 30P0 DIODE ---
-#======================
-
-# diode_pd2nw_30v0: Model for HVPDDD/DNWELL diode [np_30p0]
-logger.info('Extracting diode_pd2nw_30v0 diode')
-extract_devices(diode('diode_pd2nw_30v0'), { 'N' => diode_pd2nw_30v0_terminal_n, 'P' => dnwell })
-
#====================
# --- DNWPS DIODE ---
#====================
@@ -131,24 +99,3 @@
# diode_sc: Model for schottky diode [sc_diode]
logger.info('Extracting diode_sc diode')
extract_devices(diode('diode_sc'), { 'N' => diode_sc_terminal_n, 'P' => schottky_diode })
-
-#====================
-# --- ZENER DIODE ---
-#====================
-
-# diode_zener: Model for zener diode outside DNWELL [zener_diode]
-logger.info('Extracting diode_zener diode')
-extract_devices(diode('diode_zener'), { 'N' => diode_zener_terminal_n, 'P' => zener })
-
-# diode_zener_dn: Model for zener diode inside DNWELL [zener_diode_dw]
-logger.info('Extracting diode_zener_dn diode')
-extract_devices(diode('diode_zener_dn'), { 'N' => diode_zener_dn_terminal_n, 'P' => zener })
-
-#===================
-# --- POLY DIODE ---
-#===================
-
-# diode_poly: Model for poly diode [poly_diode]
-logger.info('Extracting diode_poly diode')
-extract_devices(diode('diode_poly'), { 'N' => diode_poly_terminal_n, 'P' => diode_poly_terminal_p })
-
diff --git a/BCDLite/klayout/lvs/testing/testcases/unit/diode_devices/layout/diode_dw2ps.gds b/BCDLite/klayout/lvs/testing/testcases/unit/diode_devices/layout/diode_dw2ps.gds
new file mode 100644
index 0000000..563ebe2
--- /dev/null
+++ b/BCDLite/klayout/lvs/testing/testcases/unit/diode_devices/layout/diode_dw2ps.gds
Binary files differ
diff --git a/BCDLite/klayout/lvs/testing/testcases/unit/diode_devices/layout/diode_pw2dw.gds b/BCDLite/klayout/lvs/testing/testcases/unit/diode_devices/layout/diode_pw2dw.gds
new file mode 100644
index 0000000..9c6b060
--- /dev/null
+++ b/BCDLite/klayout/lvs/testing/testcases/unit/diode_devices/layout/diode_pw2dw.gds
Binary files differ
diff --git a/BCDLite/klayout/lvs/testing/testcases/unit/diode_devices/layout/diode_sc.gds b/BCDLite/klayout/lvs/testing/testcases/unit/diode_devices/layout/diode_sc.gds
new file mode 100644
index 0000000..a7db85c
--- /dev/null
+++ b/BCDLite/klayout/lvs/testing/testcases/unit/diode_devices/layout/diode_sc.gds
Binary files differ
diff --git a/BCDLite/klayout/lvs/testing/testcases/unit/diode_devices/netlist/diode_dw2ps.cdl b/BCDLite/klayout/lvs/testing/testcases/unit/diode_devices/netlist/diode_dw2ps.cdl
new file mode 100644
index 0000000..ebdf256
--- /dev/null
+++ b/BCDLite/klayout/lvs/testing/testcases/unit/diode_devices/netlist/diode_dw2ps.cdl
@@ -0,0 +1,49 @@
+************************************************************************
+* auCdl Netlist:
+*
+* Library Name: TCG_Library
+* Top Cell Name: diode_dw2ps
+* View Name: schematic
+* Netlisted on: Nov 24 09:04:18 2021
+************************************************************************
+
+*.BIPOLAR
+*.RESI = 2000
+*.RESVAL
+*.CAPVAL
+*.DIOPERI
+*.DIOAREA
+*.EQUATION
+*.SCALE METER
+*.MEGA
+.PARAM
+
+*.GLOBAL gnd!
+
+*.PIN gnd!
+
+************************************************************************
+* Library Name: TCG_Library
+* Cell Name: diode_dw2ps
+* View Name: schematic
+************************************************************************
+
+.SUBCKT diode_dw2ps I1_0_0_0_0_R0_NEG I1_0_1_0_0_R0_NEG I1_0_2_0_0_R0_NEG
++ I1_1_0_0_0_R0_NEG I1_1_1_0_0_R0_NEG I1_1_2_0_0_R0_NEG I1_2_0_0_0_R0_NEG
++ I1_2_1_0_0_R0_NEG I1_2_2_0_0_R0_NEG I1_default_NEG gnd!
+*.PININFO I1_0_0_0_0_R0_NEG:I I1_0_1_0_0_R0_NEG:I I1_0_2_0_0_R0_NEG:I
+*.PININFO I1_1_0_0_0_R0_NEG:I I1_1_1_0_0_R0_NEG:I I1_1_2_0_0_R0_NEG:I
+*.PININFO I1_2_0_0_0_R0_NEG:I I1_2_1_0_0_R0_NEG:I I1_2_2_0_0_R0_NEG:I
+*.PININFO I1_default_NEG:I gnd!:I
+DI1_2_2_0_0_R0 gnd! I1_2_2_0_0_R0_NEG diode_dw2ps AREA=10n PJ=400e-6 m=1
+DI1_2_1_0_0_R0 gnd! I1_2_1_0_0_R0_NEG diode_dw2ps AREA=1.034n PJ=220.68e-6 m=1
+DI1_2_0_0_0_R0 gnd! I1_2_0_0_0_R0_NEG diode_dw2ps AREA=170p PJ=203.4e-6 m=1
+DI1_1_2_0_0_R0 gnd! I1_1_2_0_0_R0_NEG diode_dw2ps AREA=1.034n PJ=220.68e-6 m=1
+DI1_1_1_0_0_R0 gnd! I1_1_1_0_0_R0_NEG diode_dw2ps AREA=106.916p PJ=41.36e-6 m=1
+DI1_1_0_0_0_R0 gnd! I1_1_0_0_0_R0_NEG diode_dw2ps AREA=17.578p PJ=24.08e-6 m=1
+DI1_0_2_0_0_R0 gnd! I1_0_2_0_0_R0_NEG diode_dw2ps AREA=170p PJ=203.4e-6 m=1
+DI1_0_1_0_0_R0 gnd! I1_0_1_0_0_R0_NEG diode_dw2ps AREA=17.578p PJ=24.08e-6 m=1
+DI1_0_0_0_0_R0 gnd! I1_0_0_0_0_R0_NEG diode_dw2ps AREA=3.1535p PJ=7.11e-6 m=1
+DI1_default gnd! I1_default_NEG diode_dw2ps AREA=100e-12 PJ=40e-6 m=1
+.ENDS
+
diff --git a/BCDLite/klayout/lvs/testing/testcases/unit/diode_devices/netlist/diode_pw2dw.cdl b/BCDLite/klayout/lvs/testing/testcases/unit/diode_devices/netlist/diode_pw2dw.cdl
new file mode 100644
index 0000000..3b58e57
--- /dev/null
+++ b/BCDLite/klayout/lvs/testing/testcases/unit/diode_devices/netlist/diode_pw2dw.cdl
@@ -0,0 +1,50 @@
+************************************************************************
+* auCdl Netlist:
+*
+* Library Name: TCG_Library
+* Top Cell Name: diode_pw2dw
+* View Name: schematic
+* Netlisted on: Nov 24 09:06:01 2021
+************************************************************************
+
+*.BIPOLAR
+*.RESI = 2000
+*.RESVAL
+*.CAPVAL
+*.DIOPERI
+*.DIOAREA
+*.EQUATION
+*.SCALE METER
+*.MEGA
+.PARAM
+
+*.GLOBAL vdd!
+
+*.PIN vdd!
+
+************************************************************************
+* Library Name: TCG_Library
+* Cell Name: diode_pw2dw
+* View Name: schematic
+************************************************************************
+
+.SUBCKT diode_pw2dw I1_0_0_0_0_0_R0_POS I1_0_1_0_0_0_R0_POS I1_0_2_0_0_0_R0_POS
++ I1_1_0_0_0_0_R0_POS I1_1_1_0_0_0_R0_POS I1_1_2_0_0_0_R0_POS
++ I1_2_0_0_0_0_R0_POS I1_2_1_0_0_0_R0_POS I1_2_2_0_0_0_R0_POS I1_default_POS
++ vdd!
+*.PININFO I1_0_0_0_0_0_R0_POS:I I1_0_1_0_0_0_R0_POS:I I1_0_2_0_0_0_R0_POS:I
+*.PININFO I1_1_0_0_0_0_R0_POS:I I1_1_1_0_0_0_R0_POS:I I1_1_2_0_0_0_R0_POS:I
+*.PININFO I1_2_0_0_0_0_R0_POS:I I1_2_1_0_0_0_R0_POS:I I1_2_2_0_0_0_R0_POS:I
+*.PININFO I1_default_POS:I vdd!:I
+DI1_2_2_0_0_0_R0 I1_2_2_0_0_0_R0_POS vdd! diode_pw2dw AREA=10n PJ=400e-6 m=1
+DI1_2_1_0_0_0_R0 I1_2_1_0_0_0_R0_POS vdd! diode_pw2dw AREA=1.023n PJ=220.46e-6 m=1
+DI1_2_0_0_0_0_R0 I1_2_0_0_0_0_R0_POS vdd! diode_pw2dw AREA=60p PJ=201.2e-6 m=1
+DI1_1_2_0_0_0_R0 I1_1_2_0_0_0_R0_POS vdd! diode_pw2dw AREA=1.023n PJ=220.46e-6 m=1
+DI1_1_1_0_0_0_R0 I1_1_1_0_0_0_R0_POS vdd! diode_pw2dw AREA=104.653p PJ=40.92e-6 m=1
+DI1_1_0_0_0_0_R0 I1_1_0_0_0_0_R0_POS vdd! diode_pw2dw AREA=6.138p PJ=21.66e-6 m=1
+DI1_0_2_0_0_0_R0 I1_0_2_0_0_0_R0_POS vdd! diode_pw2dw AREA=60p PJ=201.2e-6 m=1
+DI1_0_1_0_0_0_R0 I1_0_1_0_0_0_R0_POS vdd! diode_pw2dw AREA=6.138p PJ=21.66e-6 m=1
+DI1_0_0_0_0_0_R0 I1_0_0_0_0_0_R0_POS vdd! diode_pw2dw AREA=627f PJ=3.29e-6 m=1
+DI1_default I1_default_POS vdd! diode_pw2dw AREA=100e-12 PJ=40e-6 m=1
+.ENDS
+
diff --git a/BCDLite/klayout/lvs/testing/testcases/unit/diode_devices/netlist/diode_sc.cdl b/BCDLite/klayout/lvs/testing/testcases/unit/diode_devices/netlist/diode_sc.cdl
new file mode 100644
index 0000000..f077c9f
--- /dev/null
+++ b/BCDLite/klayout/lvs/testing/testcases/unit/diode_devices/netlist/diode_sc.cdl
@@ -0,0 +1,49 @@
+************************************************************************
+* auCdl Netlist:
+*
+* Library Name: TCG_Library
+* Top Cell Name: diode_sc
+* View Name: schematic
+* Netlisted on: Nov 24 10:18:05 2021
+************************************************************************
+
+*.BIPOLAR
+*.RESI = 2000
+*.RESVAL
+*.CAPVAL
+*.DIOPERI
+*.DIOAREA
+*.EQUATION
+*.SCALE METER
+*.MEGA
+.PARAM
+
+
+
+************************************************************************
+* Library Name: TCG_Library
+* Cell Name: diode_sc
+* View Name: schematic
+************************************************************************
+
+.SUBCKT diode_sc I1_0_0_R0_n I1_0_0_R0_p I1_0_1_R0_n I1_0_1_R0_p I1_0_2_R0_n
++ I1_0_2_R0_p I1_1_0_R0_n I1_1_0_R0_p I1_1_1_R0_n I1_1_1_R0_p I1_1_2_R0_n
++ I1_1_2_R0_p I1_2_0_R0_n I1_2_0_R0_p I1_2_1_R0_n I1_2_1_R0_p I1_2_2_R0_n
++ I1_2_2_R0_p I1_default_n I1_default_p
+*.PININFO I1_0_0_R0_n:I I1_0_0_R0_p:I I1_0_1_R0_n:I I1_0_1_R0_p:I
+*.PININFO I1_0_2_R0_n:I I1_0_2_R0_p:I I1_1_0_R0_n:I I1_1_0_R0_p:I
+*.PININFO I1_1_1_R0_n:I I1_1_1_R0_p:I I1_1_2_R0_n:I I1_1_2_R0_p:I
+*.PININFO I1_2_0_R0_n:I I1_2_0_R0_p:I I1_2_1_R0_n:I I1_2_1_R0_p:I
+*.PININFO I1_2_2_R0_n:I I1_2_2_R0_p:I I1_default_n:I I1_default_p:I
+DI1_2_2_R0 I1_2_2_R0_p I1_2_2_R0_n diode_sc m=9.0 l=100u w=620.00n
+DI1_2_1_R0 I1_2_1_R0_p I1_2_1_R0_n diode_sc m=6.0 l=100u w=620.00n
+DI1_2_0_R0 I1_2_0_R0_p I1_2_0_R0_n diode_sc m=1.0 l=100u w=620.00n
+DI1_1_2_R0 I1_1_2_R0_p I1_1_2_R0_n diode_sc m=9.0 l=12.3u w=620.00n
+DI1_1_1_R0 I1_1_1_R0_p I1_1_1_R0_n diode_sc m=6.0 l=12.3u w=620.00n
+DI1_1_0_R0 I1_1_0_R0_p I1_1_0_R0_n diode_sc m=1.0 l=12.3u w=620.00n
+DI1_0_2_R0 I1_0_2_R0_p I1_0_2_R0_n diode_sc m=9.0 l=1u w=620.00n
+DI1_0_1_R0 I1_0_1_R0_p I1_0_1_R0_n diode_sc m=6.0 l=1u w=620.00n
+DI1_0_0_R0 I1_0_0_R0_p I1_0_0_R0_n diode_sc m=1.0 l=1u w=620.00n
+DI1_default I1_default_p I1_default_n diode_sc m=4.0 l=20u w=620.00n
+.ENDS
+