From f54b5513eb4f8a7a7bf94cdb597cc7de9f3f69f3 Mon Sep 17 00:00:00 2001 From: FaragElsayed2 Date: Tue, 23 Apr 2024 19:15:09 +0200 Subject: [PATCH 1/3] Adding docs for req installation Signed-off-by: FaragElsayed2 --- ihp-sg13g2/libs.tech/klayout/tech/lvs/README.md | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/ihp-sg13g2/libs.tech/klayout/tech/lvs/README.md b/ihp-sg13g2/libs.tech/klayout/tech/lvs/README.md index dbe6b012..9b347df8 100644 --- a/ihp-sg13g2/libs.tech/klayout/tech/lvs/README.md +++ b/ihp-sg13g2/libs.tech/klayout/tech/lvs/README.md @@ -32,6 +32,14 @@ You need the following set of tools installed to be able to run SG13G2 LVS: - Python 3.9+ - KLayout 0.28.14+ +## Installation + +To install the required Python packages, execute the following command: + +```bash +pip install -r ../../../../../requirements.txt +``` + ## Devices Status The following table explains the list of available SG13G2 devices we have supported in our LVS runset. @@ -213,7 +221,7 @@ Then, you will get the LVS menus for SG13G2, you could set your desired options

- Fig. 3. Visualization of LVS results on Klayout-GUI + Fig. 5. Visualization of LVS results on Klayout-GUI

Finally, you could run the LVS using `Run Klayout LVS` option. From 7feeb8e4e8a40913dceae05efe15bd66721c965e Mon Sep 17 00:00:00 2001 From: FaragElsayed2 Date: Wed, 24 Apr 2024 14:59:39 +0200 Subject: [PATCH 2/3] Completing some updates for LVS devices Signed-off-by: FaragElsayed2 --- .../tech/lvs/rule_decks/bjt_derivations.lvs | 4 +- .../tech/lvs/rule_decks/cap_derivations.lvs | 24 ++++----- .../tech/lvs/rule_decks/diode_connections.lvs | 3 +- .../tech/lvs/rule_decks/diode_derivations.lvs | 32 ++++++------ .../tech/lvs/rule_decks/diode_extraction.lvs | 4 +- .../tech/lvs/rule_decks/esd_derivations.lvs | 47 +++++++++++------- .../lvs/rule_decks/general_derivations.lvs | 1 - .../tech/lvs/rule_decks/ind_derivations.lvs | 10 +++- .../tech/lvs/rule_decks/mos_derivations.lvs | 4 +- .../tech/lvs/rule_decks/res_derivations.lvs | 4 +- .../tech/lvs/rule_decks/tap_derivations.lvs | 2 +- .../diode_devices/layout/schottky_nbl1.gds | Bin 45984 -> 45984 bytes .../unit/ind_devices/layout/inductor.gds | Bin 10142 -> 10078 bytes 13 files changed, 78 insertions(+), 57 deletions(-) diff --git a/ihp-sg13g2/libs.tech/klayout/tech/lvs/rule_decks/bjt_derivations.lvs b/ihp-sg13g2/libs.tech/klayout/tech/lvs/rule_decks/bjt_derivations.lvs index e51fbe6e..a54da0e2 100644 --- a/ihp-sg13g2/libs.tech/klayout/tech/lvs/rule_decks/bjt_derivations.lvs +++ b/ihp-sg13g2/libs.tech/klayout/tech/lvs/rule_decks/bjt_derivations.lvs @@ -32,8 +32,8 @@ logger.info('Starting NPN-BJT DERIVATIONS') bjt_exclude = gatpoly_drw.join(pwell_block).join(nsd_drw) .join(heatres_drw).join(salblock_drw).join(polyres_drw) .join(mim_drw).join(extblock_drw).join(res_drw) - .join(pwell_blk_holes).join(recog_diode).join(recog_esd) - .join(ind_drw).join(ind_pin).join(substrate_drw) + .join(recog_diode).join(recog_esd).join(ind_drw) + .join(ind_pin).join(substrate_drw) npn_exclude = nwell_drw.join(psd_drw).join(nbulay_drw).join(bjt_exclude) diff --git a/ihp-sg13g2/libs.tech/klayout/tech/lvs/rule_decks/cap_derivations.lvs b/ihp-sg13g2/libs.tech/klayout/tech/lvs/rule_decks/cap_derivations.lvs index f8f2c190..c30371fd 100644 --- a/ihp-sg13g2/libs.tech/klayout/tech/lvs/rule_decks/cap_derivations.lvs +++ b/ihp-sg13g2/libs.tech/klayout/tech/lvs/rule_decks/cap_derivations.lvs @@ -23,13 +23,15 @@ logger.info('Starting CAP DERIVATIONS') -rfmimcap_exc = gatpoly_drw.join(nsd_drw).join(nsd_block) - .join(psd).join(nbulay_drw).join(thickgateox_drw) - .join(heattrans_drw).join(trans_drw).join(emwind_drw) - .join(emwihv_drw).join(heatres_drw).join(salblock_drw) - .join(polyres_drw).join(extblock_drw).join(res_drw) - .join(activ_mask).join(pwell_blk_holes).join(recog_diode) - .join(recog_esd).join(ind_drw).join(ind_pin).join(substrate_drw) +cap_exc = nsd_drw.join(heattrans_drw).join(trans_drw) + .join(emwind_drw).join(emwihv_drw).join(heatres_drw) + .join(salblock_drw).join(polyres_drw).join(extblock_drw) + .join(res_drw).join(activ_mask).join(recog_diode) + .join(recog_esd).join(ind_drw).join(ind_pin) + .join(substrate_drw) + +rfmimcap_exc = gatpoly_drw.join(nsd_block).join(psd) + .join(nbulay_drw).join(thickgateox_drw).join(cap_exc) # === MIMCAP === mimcap_exclude = rfmimcap_exc.join(pwell_block).join(ptap_holes) @@ -45,7 +47,7 @@ cmim_btm = mim_btm.covering(cmim_top) cmim_dev = mim_drw.covering(cmim_top).and(cmim_btm) # === rfcmim === -rfmim_area = pwell_block.and(ptap.extents).interacting(mim_drw) +rfmim_area = pwell_block.interacting(mim_drw) rfmim_top = mim_top.and(rfmim_area).not(rfmimcap_exc) rfmim_btm = mim_btm.and(rfmim_area).covering(rfmim_top) rfmim_dev = mim_drw.covering(rfmim_top).and(rfmim_btm) @@ -53,10 +55,8 @@ rfmim_sub = ptap.extents.interacting(rfmim_area) rfmeas_mk = metal5_drw.overlapping(rfmim_btm).and(rfmim_area) # === svaricap === -varicap_exc = heattrans_drw.join(trans_drw).join(heatres_drw) - .join(polyres_drw).join(salblock_drw).join(extblock_drw) - .join(nsd_drw).join(res_drw).join(recog_diode).join(recog_esd) - .join(substrate_drw) +varicap_exc = pwell.join(pwell_block).join(nwell_holes) + .join(mim_drw).join(cap_exc) varicap_core = ngate_hv_base.and(nwell_iso).not(varicap_exc) varicap_diff_port = nactiv.interacting(varicap_core).not(varicap_core) diff --git a/ihp-sg13g2/libs.tech/klayout/tech/lvs/rule_decks/diode_connections.lvs b/ihp-sg13g2/libs.tech/klayout/tech/lvs/rule_decks/diode_connections.lvs index 1950cecf..106a8b6c 100644 --- a/ihp-sg13g2/libs.tech/klayout/tech/lvs/rule_decks/diode_connections.lvs +++ b/ihp-sg13g2/libs.tech/klayout/tech/lvs/rule_decks/diode_connections.lvs @@ -35,4 +35,5 @@ connect(dpantenna_p, pwell) connect(schottcky_p_1x1, schottcky_p) connect(schottcky_p, metal1_con) connect(schottcky_n, schottcky_n_port) -connect(schottcky_n_port, metal1_con) +connect(schottcky_n_port, schottcky_n_con) +connect(schottcky_n_con, metal1_con) diff --git a/ihp-sg13g2/libs.tech/klayout/tech/lvs/rule_decks/diode_derivations.lvs b/ihp-sg13g2/libs.tech/klayout/tech/lvs/rule_decks/diode_derivations.lvs index a8de7e74..64b44a42 100644 --- a/ihp-sg13g2/libs.tech/klayout/tech/lvs/rule_decks/diode_derivations.lvs +++ b/ihp-sg13g2/libs.tech/klayout/tech/lvs/rule_decks/diode_derivations.lvs @@ -23,41 +23,43 @@ logger.info('Starting DIODE DERIVATIONS') -diode_exclude = gatpoly_drw.join(nsd_drw).join(heattrans_drw) - .join(trans_drw).join(emwind_drw).join(emwihv_drw) - .join(heatres_drw).join(polyres_drw).join(mim_drw) - .join(extblock_drw).join(res_drw).join(activ_mask) - .join(recog_esd).join(ind_drw).join(ind_pin) - .join(substrate_drw) +diode_exclude = gatpoly_drw.join(nwell_drw).join(nsd_drw) + .join(heattrans_drw).join(trans_drw).join(emwind_drw) + .join(emwihv_drw).join(heatres_drw).join(polyres_drw) + .join(mim_drw).join(extblock_drw).join(res_drw) + .join(activ_mask).join(recog_esd).join(ind_drw) + .join(ind_pin).join(substrate_drw) -antenna_d_exc = nwell_drw.join(pwell_block).join(nbulay_drw).join(salblock_drw) - .join(nsd_block).join(pwell_blk_holes).join(diode_exclude) +antenna_d_exc = pwell_block.join(nbulay_drw).join(salblock_drw) + .join(nsd_block).join(diode_exclude) antenna_d_mk = recog_diode.not(antenna_d_exc) -# dantenna diode +# ==== dantenna diode ==== dantenna_n = activ_drw.and(antenna_d_mk).not(psd_drw) dantenna_p = pwell.and(antenna_d_mk).covering(dantenna_n) -# dpantenna diode +# ==== dpantenna diode ==== dpantenna_n = pactiv.and(antenna_d_mk) dpantenna_p = pwell.and(antenna_d_mk).covering(dpantenna_n) -# schottky_nbl1 diode +# ==== schottky_nbl1 diode ==== schottky_mk = recog_diode.and(thickgateox_drw).not(diode_exclude) .and(pwell_block).and(ptap_holes).and(nbulay_drw) .and(salblock_drw).and(nsd_block).and(nwell_holes) .not(psd_drw).not(pwell).not(diode_exclude) schottcky_p_ = cont_drw.and(activ_drw).and(metal1_drw) - .and(schottky_mk).not(nwell_drw) + .and(schottky_mk) # schottky_nbl1 is a fixed device (0.3um X 1.0 um) schottcky_p = schottcky_p_.with_bbox_min(0.3.um).with_bbox_max(1.0.um) # Using box with area 1x1 to be used as a reference to (m) schottcky_p_1x1 = schottcky_p.middle(as_boxes).sized(0.499.um) -schottcky_n = activ_drw.and(nwell_iso).interacting(schottky_mk) - .not(nsd_block).not(salblock_drw).not(diode_exclude) + +schottcky_n = nsd_block.and(activ_drw).covering(schottcky_p) + # define port for schottcky -schottcky_n_port = cont_drw.and(schottcky_n).not_interacting(schottcky_p) +schottcky_n_port = activ_drw.interacting(nwell_iso).interacting(schottcky_n).not(schottcky_n.sized(-1.nm)) +schottcky_n_con = cont_drw.and(schottcky_n_port).not_interacting(schottcky_p) schottcky_sub = ptap.extents.covering(schottcky_p).covering(schottcky_n) diff --git a/ihp-sg13g2/libs.tech/klayout/tech/lvs/rule_decks/diode_extraction.lvs b/ihp-sg13g2/libs.tech/klayout/tech/lvs/rule_decks/diode_extraction.lvs index 599732db..13495ccd 100644 --- a/ihp-sg13g2/libs.tech/klayout/tech/lvs/rule_decks/diode_extraction.lvs +++ b/ihp-sg13g2/libs.tech/klayout/tech/lvs/rule_decks/diode_extraction.lvs @@ -34,8 +34,8 @@ extract_devices(diode('dpantenna', EnDiode), { 'N' => dpantenna_n, 'P' => dpante # schottky_nbl1 diode logger.info('Extracting schottky_nbl1 diode') extract_devices(bjt3('schottky_nbl1', Esd3Term), { 'C' => schottcky_sub, - 'B' => schottcky_n.extents, + 'B' => schottcky_n_port.extents, 'E' => schottcky_p_1x1, 'tC' => ptap, - 'tB' => schottcky_n, + 'tB' => schottcky_n_port, 'tE' => schottcky_p_1x1 }) diff --git a/ihp-sg13g2/libs.tech/klayout/tech/lvs/rule_decks/esd_derivations.lvs b/ihp-sg13g2/libs.tech/klayout/tech/lvs/rule_decks/esd_derivations.lvs index e8a7ec0f..5ed60fe3 100644 --- a/ihp-sg13g2/libs.tech/klayout/tech/lvs/rule_decks/esd_derivations.lvs +++ b/ihp-sg13g2/libs.tech/klayout/tech/lvs/rule_decks/esd_derivations.lvs @@ -24,12 +24,23 @@ logger.info('Starting ESD DERIVATIONS') # General -esd_exclude = trans_drw.join(polyres_drw).join(extblock_drw) - .join(nsd_drw).join(recog_diode).join(recog_diode) - .join(substrate_drw).join(ind_drw) +esd_exclude = nsd_block.join(nsd_drw).join(heattrans_drw) + .join(trans_drw).join(emwind_drw).join(emwihv_drw) + .join(heatres_drw).join(polyres_drw).join(mim_drw) + .join(extblock_drw).join(res_drw).join(recog_diode) + .join(substrate_drw).join(ind_drw).join(ind_pin) + + +esd_exc_d = gatpoly_drw.join(thickgateox_drw).join(salblock_drw) + .join(esd_exclude) + +idiodevdd_exc = esd_exc_d.join(nwell_holes) +diodevdd_exc = idiodevdd_exc.join(nbulay_drw).join(pwell_block) + +idiodevss_exc = esd_exc_d.join(nwell_drw.not_interacting(nwell_holes)) + .join(pwell_block) +diodevss_exc = idiodevss_exc.join(nbulay_drw) -diode_esd_exc = gatpoly_drw.join(salblock_drw).join(pwell_block).join(nbulay_drw).join(esd_exclude) -idiode_esd_exc = gatpoly_drw.join(salblock_drw).join(esd_exclude) nw_diode = nwell_n_iso.not_interacting(pwell_block) nw_idiode = nwell_iso.interacting(pwell_block) @@ -38,12 +49,12 @@ nw_idiode = nwell_iso.interacting(pwell_block) #====================== # diodevdd_2kv -diodevdd_2kv_e = pactiv.and(nw_diode).and(recog_esd).not(diode_esd_exc) +diodevdd_2kv_e = pactiv.and(nw_diode).and(recog_esd).not(diodevdd_exc) diodevdd_2kv_e_1x1 = diodevdd_2kv_e.middle.sized(0.499.um) -diodevdd_2kv_b_ = nactiv.and(nw_diode).and(recog_esd) +diodevdd_2kv_b_ = nactiv.and(nw_diode).and(recog_esd).not(diodevdd_exc) diodevdd_2kv_b = diodevdd_2kv_b_.interacting(diodevdd_2kv_b_.extents.interacting(diodevdd_2kv_e, 1, 1)) diodevdd_2kv_tb = cont_drw.and(diodevdd_2kv_b).not_interacting(diodevdd_2kv_e) -diodevdd_2kv_c_ = pactiv.and(pwell).and(recog_esd) +diodevdd_2kv_c_ = pactiv.and(pwell).and(recog_esd).not(diodevdd_exc) diodevdd_2kv_c = diodevdd_2kv_c_.interacting(diodevdd_2kv_c_.extents.interacting(diodevdd_2kv_b, 1, 1)) # diodevdd_4kv @@ -55,12 +66,12 @@ diodevdd_4kv_te = cont_drw.and(diodevdd_2kv_e).not_interacting(diodevdd_4kv_b) diodevdd_4kv_tb = cont_drw.and(diodevdd_4kv_b).not_interacting(diodevdd_2kv_e) # diodevss_2kv -diodevss_2kv_e = nactiv.and(pwell).and(recog_esd).not(diode_esd_exc) +diodevss_2kv_e = nactiv.and(pwell).and(recog_esd).not(diodevss_exc) diodevss_2kv_e_1x1 = diodevss_2kv_e.middle.sized(0.499.um) -diodevss_2kv_b_ = pactiv.and(pwell).and(recog_esd) +diodevss_2kv_b_ = pactiv.and(pwell).and(recog_esd).not(diodevss_exc) diodevss_2kv_b = diodevss_2kv_b_.interacting(diodevss_2kv_b_.extents.interacting(diodevss_2kv_e, 1, 1)) diodevss_2kv_tb = cont_drw.and(diodevss_2kv_b).not_interacting(diodevss_2kv_e) -diodevss_2kv_c_ = nactiv.and(nw_diode).and(recog_esd) +diodevss_2kv_c_ = nactiv.and(nw_diode).and(recog_esd).not(diodevss_exc) diodevss_2kv_c = diodevss_2kv_c_.interacting(diodevss_2kv_c_.extents.interacting(diodevss_2kv_b, 1, 1)) # diodevss_4kv @@ -76,12 +87,12 @@ diodevss_4kv_tb = cont_drw.and(diodevss_4kv_b).not_interacting(diodevss_2kv_e) #======================= # idiodevdd_2kv -idiodevdd_2kv_e = pactiv.and(nw_idiode).and(recog_esd).not(idiode_esd_exc) +idiodevdd_2kv_e = pactiv.and(nw_idiode).and(recog_esd).not(idiodevdd_exc) idiodevdd_2kv_e_1x1 = idiodevdd_2kv_e.middle.sized(0.499.um) -idiodevdd_2kv_b_ = nactiv.and(nw_idiode).and(recog_esd) +idiodevdd_2kv_b_ = nactiv.and(nw_idiode).and(recog_esd).not(idiodevdd_exc) idiodevdd_2kv_b = idiodevdd_2kv_b_.interacting(idiodevdd_2kv_b_.extents.interacting(idiodevdd_2kv_e, 1, 1)) idiodevdd_2kv_tb = cont_drw.and(idiodevdd_2kv_b).not_interacting(idiodevdd_2kv_e) -idiodevdd_2kv_c_ = pactiv.and(pwell).and(recog_esd) +idiodevdd_2kv_c_ = pactiv.and(pwell).and(recog_esd).not(idiodevdd_exc) idiodevdd_2kv_c = idiodevdd_2kv_c_.interacting(idiodevdd_2kv_c_.extents.interacting(idiodevdd_2kv_b, 1, 1)) # idiodevdd_4kv @@ -93,12 +104,12 @@ idiodevdd_4kv_te = cont_drw.and(idiodevdd_2kv_e).not_interacting(idiodevdd_4kv_b idiodevdd_4kv_tb = cont_drw.and(idiodevdd_4kv_b).not_interacting(idiodevdd_2kv_e) # idiodevss_2kv -idiodevss_2kv_e = nactiv.and(pwell).and(nbulay_drw).and(recog_esd).not(idiode_esd_exc) +idiodevss_2kv_e = nactiv.and(pwell).and(nbulay_drw).and(recog_esd).not(idiodevss_exc) idiodevss_2kv_e_1x1 = idiodevss_2kv_e.middle.sized(0.499.um) -idiodevss_2kv_b_ = pactiv.and(pwell).and(nbulay_drw).and(recog_esd) +idiodevss_2kv_b_ = pactiv.and(pwell).and(nbulay_drw).and(recog_esd).not(idiodevss_exc) idiodevss_2kv_b = idiodevss_2kv_b_.interacting(idiodevss_2kv_b_.extents.interacting(idiodevss_2kv_e, 1, 1)) idiodevss_2kv_tb = cont_drw.and(idiodevss_2kv_b).not_interacting(idiodevss_2kv_e) -idiodevss_2kv_c_ = nactiv.and(nwell_iso).and(recog_esd) +idiodevss_2kv_c_ = nactiv.and(nwell_iso).and(recog_esd).not(idiodevss_exc) idiodevss_2kv_c = idiodevss_2kv_c_.interacting(idiodevss_2kv_c_.extents.interacting(idiodevss_2kv_b, 1, 1)) # idiodevss_4kv @@ -113,7 +124,7 @@ idiodevss_4kv_tb = cont_drw.and(idiodevss_4kv_b).not_interacting(idiodevss_2kv_e # ----- MOSCL-ESD ----- #====================== -nmoscl_exc = esd_exclude.join(heattrans_drw).join(res_drw) +nmoscl_exc = esd_exclude.join(pwell_block) # nmoscl_2 gate_moscl = ngate_hv_base.and(salblock_drw).and(nbulay_drw) diff --git a/ihp-sg13g2/libs.tech/klayout/tech/lvs/rule_decks/general_derivations.lvs b/ihp-sg13g2/libs.tech/klayout/tech/lvs/rule_decks/general_derivations.lvs index bab24406..ebda573c 100644 --- a/ihp-sg13g2/libs.tech/klayout/tech/lvs/rule_decks/general_derivations.lvs +++ b/ihp-sg13g2/libs.tech/klayout/tech/lvs/rule_decks/general_derivations.lvs @@ -71,4 +71,3 @@ ptap = pactiv.and(pwell).not(substrate_drw).not(res_mk).not(recog_diode).not(gat nwell_holes = nwell_drw.holes ptap_holes = ptap.holes ntap_holes = ntap.holes -pwell_blk_holes = pwell_block.holes diff --git a/ihp-sg13g2/libs.tech/klayout/tech/lvs/rule_decks/ind_derivations.lvs b/ihp-sg13g2/libs.tech/klayout/tech/lvs/rule_decks/ind_derivations.lvs index ddf459bc..020936ac 100644 --- a/ihp-sg13g2/libs.tech/klayout/tech/lvs/rule_decks/ind_derivations.lvs +++ b/ihp-sg13g2/libs.tech/klayout/tech/lvs/rule_decks/ind_derivations.lvs @@ -23,9 +23,17 @@ logger.info('Starting Inductor DERIVATIONS') +ind_exc = gatpoly_drw.join(pwell).join(nsd_drw) + .join(nbulay_drw).join(thickgateox_drw).join(heattrans_drw) + .join(emwind_drw).join(emwihv_drw).join(heatres_drw) + .join(salblock_drw).join(polyres_drw).join(mim_drw) + .join(extblock_drw).join(res_drw).join(activ_mask) + .join(recog_diode).join(recog_esd).join(substrate_drw) + # General ind_edges = ind_drw.edges -ind_core_ = topmetal2_drw.join(topmetal1_drw).and(pwell_block).and(ind_drw).merged +ind_core_ = topmetal2_drw.join(topmetal1_drw).and(pwell_block) + .and(ind_drw).merged.not(ind_exc) ind_ports_ = ind_pin.and(ind_core_).interacting(ind_edges) ind_port_la = ind_ports_.interacting(ind_text.texts("LA")) ind_port_lb = ind_ports_.interacting(ind_text.texts("LB")) diff --git a/ihp-sg13g2/libs.tech/klayout/tech/lvs/rule_decks/mos_derivations.lvs b/ihp-sg13g2/libs.tech/klayout/tech/lvs/rule_decks/mos_derivations.lvs index ff49046a..6baf05ff 100644 --- a/ihp-sg13g2/libs.tech/klayout/tech/lvs/rule_decks/mos_derivations.lvs +++ b/ihp-sg13g2/libs.tech/klayout/tech/lvs/rule_decks/mos_derivations.lvs @@ -27,8 +27,8 @@ mos_exclude = pwell_block.join(nsd_drw).join(trans_drw) .join(emwind_drw).join(emwihv_drw).join(heatres_drw) .join(salblock_drw).join(polyres_drw).join(mim_drw) .join(extblock_drw).join(res_drw).join(activ_mask) - .join(pwell_blk_holes).join(recog_diode).join(recog_esd) - .join(ind_drw).join(ind_pin).join(ind_drw).join(substrate_drw) + .join(recog_diode).join(recog_esd).join(ind_drw) + .join(ind_pin).join(ind_drw).join(substrate_drw) # ============== # ---- NMOS ---- diff --git a/ihp-sg13g2/libs.tech/klayout/tech/lvs/rule_decks/res_derivations.lvs b/ihp-sg13g2/libs.tech/klayout/tech/lvs/rule_decks/res_derivations.lvs index a6f18e7f..6b9edda7 100644 --- a/ihp-sg13g2/libs.tech/klayout/tech/lvs/rule_decks/res_derivations.lvs +++ b/ihp-sg13g2/libs.tech/klayout/tech/lvs/rule_decks/res_derivations.lvs @@ -27,8 +27,8 @@ polyres_exclude = activ_drw.join(nwell_drw).join(pwell_block) .join(nsd_block).join(nbulay_drw).join(thickgateox_drw) .join(heattrans_drw).join(trans_drw).join(emwind_drw) .join(emwihv_drw).join(mim_drw).join(activ_mask) - .join(pwell_blk_holes).join(recog_diode).join(recog_esd) - .join(ind_drw).join(ind_pin).join(substrate_drw) + .join(recog_diode).join(recog_esd).join(ind_drw) + .join(ind_pin).join(substrate_drw) # ============== # ---- POLY ---- diff --git a/ihp-sg13g2/libs.tech/klayout/tech/lvs/rule_decks/tap_derivations.lvs b/ihp-sg13g2/libs.tech/klayout/tech/lvs/rule_decks/tap_derivations.lvs index 0fcb0255..93f23a6f 100644 --- a/ihp-sg13g2/libs.tech/klayout/tech/lvs/rule_decks/tap_derivations.lvs +++ b/ihp-sg13g2/libs.tech/klayout/tech/lvs/rule_decks/tap_derivations.lvs @@ -25,7 +25,7 @@ logger.info('Starting Taps DERIVATIONS') taps_exclude = gatpoly_drw.join(nsd_drw).join(heattrans_drw) .join(trans_drw).join(emwind_drw).join(emwihv_drw) - .join(heatres_drw).join(salblock_drw).join(polyres_drw) + .join(salblock_drw).join(heatres_drw).join(polyres_drw) .join(mim_drw).join(extblock_drw).join(res_drw) .join(activ_mask).join(recog_diode).join(recog_esd) .join(ind_drw).join(ind_pin) diff --git a/ihp-sg13g2/libs.tech/klayout/tech/lvs/testing/testcases/unit/diode_devices/layout/schottky_nbl1.gds b/ihp-sg13g2/libs.tech/klayout/tech/lvs/testing/testcases/unit/diode_devices/layout/schottky_nbl1.gds index 5ed989426286c27a41b1b328904c867c9a1b5b23..ae77be865998ad983def74c60bd7a47943790b8e 100644 GIT binary patch delta 68 xcmZ4RoN2*xCM5s_7@B+3=#~y3_1)_$n1$qs=`==H%7T_1^}1-3n~Br delta 68 xcmZ4RoN2*xCM5s_7@B+4B`y@4Au;m$n1$qs=`==H%7T_1^}r93+4a- diff --git a/ihp-sg13g2/libs.tech/klayout/tech/lvs/testing/testcases/unit/ind_devices/layout/inductor.gds b/ihp-sg13g2/libs.tech/klayout/tech/lvs/testing/testcases/unit/ind_devices/layout/inductor.gds index 524bc8d78fd7eed6205e6fe1a4e19a157b3fd416..192d320399d949b32c124fb5c47ca32b6a9f101d 100644 GIT binary patch delta 71 zcmbQ|f6q^efsKKQDS|jW3#W?!0E!w5 AO8@`> delta 115 zcmccTH_u;*fsKKQDS|HOR#TXb5 fH!v_~&0%0XF3Z5YLI*-mc?J=O$ZvimR3ica0>l-^ From fa24e0455b1bcd334aa1ed9505daf0f4dc8809ae Mon Sep 17 00:00:00 2001 From: FaragElsayed2 Date: Wed, 24 Apr 2024 15:53:57 +0200 Subject: [PATCH 3/3] Updating actions to test lvs properly Signed-off-by: FaragElsayed2 --- .github/workflows/lvs_regression.yml | 31 +++++++++++----------------- 1 file changed, 12 insertions(+), 19 deletions(-) diff --git a/.github/workflows/lvs_regression.yml b/.github/workflows/lvs_regression.yml index c7dc5f89..ae5eb9c7 100644 --- a/.github/workflows/lvs_regression.yml +++ b/.github/workflows/lvs_regression.yml @@ -29,24 +29,6 @@ on: workflow_dispatch: jobs: - lvs_switch: - runs-on: ubuntu-latest - strategy: - fail-fast: false - matrix: - include: - - { tool: klayout, part: lvs, test: switch } - - name: ${{ matrix.part }} | ${{ matrix.test }} - - steps: - - uses: actions/checkout@v3 - with: - submodules: 'recursive' - - name: Testing ${{ matrix.part }} for ${{ matrix.test }} - run: | - make test-"$(python -c 'print("${{ matrix.part }}".upper())')"-${{ matrix.test }} - build_lvs-matrix: runs-on: ubuntu-latest outputs: @@ -73,10 +55,21 @@ jobs: name: ${{ matrix.part }} | ${{ matrix.test }} steps: + - name: Installing Klayout + run: | + sudo apt update -qq -y + wget https://www.klayout.org/downloads/Ubuntu-22/klayout_0.28.14-1_amd64.deb + # The dpkg command will fail complaining about missing dependencies. + sudo dpkg -i ./klayout_0.28.14-1_amd64.deb || true + # The apt install command should install the missing dependencies + # needed by KLayout above and finish the install. + sudo apt install -f -y + # Check that KLayout was successfully installed! + klayout -v + - uses: actions/checkout@v3 with: submodules: 'recursive' - name: Testing ${{ matrix.part }} for ${{ matrix.test }} run: | make test-"$(python -c 'print("${{ matrix.part }}".upper())')"-${{ matrix.test }} -