diff --git a/.github/workflows/linting.yml b/.github/workflows/linting.yml index ff8a5a54..64a278f2 100644 --- a/.github/workflows/linting.yml +++ b/.github/workflows/linting.yml @@ -25,7 +25,7 @@ jobs: lint_python: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 with: submodules: 'recursive' - name: Lint with flake8 diff --git a/.github/workflows/lvs_regression.yml b/.github/workflows/lvs_regression.yml index e5313079..5a8f9a17 100644 --- a/.github/workflows/lvs_regression.yml +++ b/.github/workflows/lvs_regression.yml @@ -34,7 +34,7 @@ jobs: outputs: lvs_table: ${{ steps.set-matrix.outputs.lvs_table }} steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - id: set-matrix run: | cd ihp-sg13g2/libs.tech/klayout/tech/lvs/rule_decks/ @@ -67,7 +67,7 @@ jobs: # Check that KLayout was successfully installed! klayout -v - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 with: submodules: 'recursive' - name: Testing ${{ matrix.part }} for ${{ matrix.test }} @@ -89,7 +89,7 @@ jobs: # Check that KLayout was successfully installed! klayout -v - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 with: submodules: 'recursive' - name: Testing LVS for SG13G2 cells diff --git a/ihp-sg13g2/libs.tech/klayout/tech/lvs/README.md b/ihp-sg13g2/libs.tech/klayout/tech/lvs/README.md index b23de49b..43c439aa 100644 --- a/ihp-sg13g2/libs.tech/klayout/tech/lvs/README.md +++ b/ihp-sg13g2/libs.tech/klayout/tech/lvs/README.md @@ -222,4 +222,4 @@ Finally, after setting your option, you could execute the LVS using `Run Klayout Upon executing the LVS, the result database will appear on your layout interface, allowing you to verify the outcome of the run similarly as shown above in Fig. 4. -Additionally, you can find the extracted netlist generated from your design at (`_extracted.cir`) in the same directory as the layout file. \ No newline at end of file +Additionally, you can find the extracted netlist generated from your design at (`_extracted.cir`) in the same directory as the layout file. diff --git a/ihp-sg13g2/libs.tech/klayout/tech/lvs/images/lvs_menus_2.png b/ihp-sg13g2/libs.tech/klayout/tech/lvs/images/lvs_menus_2.png index bedcee15..1a634a24 100644 Binary files a/ihp-sg13g2/libs.tech/klayout/tech/lvs/images/lvs_menus_2.png and b/ihp-sg13g2/libs.tech/klayout/tech/lvs/images/lvs_menus_2.png differ diff --git a/ihp-sg13g2/libs.tech/klayout/tech/lvs/rule_decks/cap_connections.lvs b/ihp-sg13g2/libs.tech/klayout/tech/lvs/rule_decks/cap_connections.lvs index 52475f7a..645dde29 100644 --- a/ihp-sg13g2/libs.tech/klayout/tech/lvs/rule_decks/cap_connections.lvs +++ b/ihp-sg13g2/libs.tech/klayout/tech/lvs/rule_decks/cap_connections.lvs @@ -24,12 +24,12 @@ logger.info('Starting LVS CAP CONNECTIONS') # === cap_mim === -connect(cmim_btm, metal5_drw) +connect(cmim_btm, metal5_con) connect(cmim_top, mim_via) connect(mim_via, topmetal1_con) # === rfcmim === -connect(rfmim_btm, metal5_drw) +connect(rfmim_btm, metal5_con) connect(rfmim_top, mim_via) connect(rfmim_sub, ptap) 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 cbbbd749..707d018f 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 @@ -28,8 +28,8 @@ rfmimcap_exc = ind_drw.join(ind_pin) # === MIMCAP === mimcap_exclude = pwell_block.join(rfmimcap_exc) -mim_top = mim_drw.overlapping(topmetal1_drw).and(metal5_drw) -mim_btm = metal5_drw.and(mim_drw).sized(0.6.um) +mim_top = mim_drw.overlapping(topmetal1_con).and(metal5_con) +mim_btm = metal5_con.and(mim_drw).sized(0.6.um) mim_via = vmim_drw.join(topvia1_drw).and(mim_drw) topvia1_n_cap = topvia1_drw.not(mim_via) @@ -44,7 +44,7 @@ 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) rfmim_sub = ptap.extents.interacting(rfmim_area) -rfmeas_mk = metal5_drw.overlapping(rfmim_btm).and(rfmim_area) +rfmeas_mk = metal5_con.overlapping(rfmim_btm).and(rfmim_area) # === svaricap === cap_exc = nsd_drw.join(trans_drw).join(emwind_drw) diff --git a/ihp-sg13g2/libs.tech/klayout/tech/lvs/rule_decks/custom_extractor.lvs b/ihp-sg13g2/libs.tech/klayout/tech/lvs/rule_decks/custom_extractor.lvs index 9aea0ffa..55a7a4e8 100644 --- a/ihp-sg13g2/libs.tech/klayout/tech/lvs/rule_decks/custom_extractor.lvs +++ b/ihp-sg13g2/libs.tech/klayout/tech/lvs/rule_decks/custom_extractor.lvs @@ -171,6 +171,7 @@ class GeneralNTerminalExtractor < RBA::GenericDeviceExtractor if bends.positive? poly_sp_polygon = meas_mk.interacting(dev) poly_sp = get_notch_min(poly_sp_polygon, 10 * length) + length = length + width end # Default values 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 2d79ab04..2b367f9e 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 @@ -48,7 +48,7 @@ schottky_mk = recog_diode.and(thickgateox_drw).not(diode_exclude) .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) +schottcky_p_ = cont_drw.and(activ_drw).and(metal1_con) .and(schottky_mk) # schottky_nbl1 is a fixed device (0.3um X 1.0 um) 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 a2b07c59..224f1655 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 @@ -39,7 +39,7 @@ idiodevss_exc = esd_exc_d.join(nwell_drw.not_interacting(nwell_holes)) .join(pwell_block) diodevss_exc = idiodevss_exc.join(nbulay_drw) -nw_diode = nwell_n_iso.not_interacting(pwell_block) +nw_diode = nwell_drw.not_interacting(pwell_block) nw_idiode = nwell_iso.interacting(pwell_block) #====================== diff --git a/ihp-sg13g2/libs.tech/klayout/tech/lvs/rule_decks/general_connections.lvs b/ihp-sg13g2/libs.tech/klayout/tech/lvs/rule_decks/general_connections.lvs index 5d2d5013..c279ed68 100644 --- a/ihp-sg13g2/libs.tech/klayout/tech/lvs/rule_decks/general_connections.lvs +++ b/ihp-sg13g2/libs.tech/klayout/tech/lvs/rule_decks/general_connections.lvs @@ -24,7 +24,7 @@ logger.info('Starting GF180 LVS connectivity setup (Inter-layer)') # Inter-layer -connect(pwell_deep, pwell) +connect(pwell_sub, pwell) connect(pwell, ptap) connect(nwell_drw, ntap) connect(ntap, cont_drw) @@ -34,26 +34,30 @@ connect(nsd_fet, cont_drw) connect(psd_fet, cont_drw) connect(cont_drw, metal1_con) connect(metal1_con, via1_drw) -connect(via1_drw, metal2_drw) -connect(metal2_drw, via2_drw) -connect(via2_drw, metal3_drw) -connect(metal3_drw, via3_drw) -connect(via3_drw, metal4_drw) -connect(metal4_drw, via4_drw) -connect(via4_drw, metal5_drw) -connect(metal5_drw, topvia1_n_cap) +connect(via1_drw, metal2_con) +connect(metal2_con, via2_drw) +connect(via2_drw, metal3_con) +connect(metal3_con, via3_drw) +connect(via3_drw, metal4_con) +connect(metal4_con, via4_drw) +connect(via4_drw, metal5_con) +connect(metal5_con, topvia1_n_cap) connect(topvia1_n_cap, topmetal1_con) connect(topmetal1_con, topvia2_drw) connect(topvia2_drw, topmetal2_con) +# salicide connection +connect(nsd_fet, nsd_ptap_abutt) +connect(nsd_ptap_abutt, ptap) +connect(psd_fet, psd_ntap_abutt) +connect(psd_ntap_abutt, ntap) + # Attaching labels -connect(activ_drw, activ_label) -connect(poly_con, gatpoly_label) connect(metal1_con, metal1_text) -connect(metal2_drw, metal2_text) -connect(metal3_drw, metal3_text) -connect(metal4_drw, metal4_text) -connect(metal5_drw, metal5_text) +connect(metal2_con, metal2_text) +connect(metal3_con, metal3_text) +connect(metal4_con, metal4_text) +connect(metal5_con, metal5_text) connect(topmetal1_con, topmetal1_text) connect(topmetal2_con, topmetal2_text) 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 d3eef551..71973a79 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 @@ -29,13 +29,16 @@ CHIP = extent.sized(0.0) # === General Derivations === # nwell nwell_iso = nwell_drw.and(nbulay_drw) -nwell_n_iso = nwell_drw.not(nbulay_drw) +nwell_holes = nwell_drw.holes.not(nwell_drw) # pwell -pwell_pre = pwell_drw.join(CHIP.not(nwell_drw.join(pwell_block).join(digisub_drw))) +pwell_pre = CHIP.not(nwell_drw).not(pwell_block).not(digisub_drw) digisub_pre = digisub_drw.sized(-1.nm).not(nwell_drw).not(pwell_block) pwell = pwell_pre.join(digisub_pre) +# General pwell +pwell_sub = CHIP.not(digisub_drw).not(pwell_block).not(nbulay_drw.interacting(nwell_holes)) + # psd, nsd active & res psd = psd_drw nsd_res = nsd_drw.and(psd).interacting(polyres_drw) @@ -49,8 +52,12 @@ pactiv = activ_drw.and(psd) res_mk = polyres_drw.join(res_drw) poly_con = gatpoly_drw.not(res_mk) metal1_con = metal1_drw.not(metal1_res) -topmetal1_con = topmetal1_drw.not(ind_drw) -topmetal2_con = topmetal2_drw.not(ind_drw) +metal2_con = metal2_drw.not(metal2_res) +metal3_con = metal3_drw.not(metal3_res) +metal4_con = metal4_drw.not(metal4_res) +metal5_con = metal5_drw.not(metal5_res) +topmetal1_con = topmetal1_drw.not(topmetal1_res).not(ind_drw) +topmetal2_con = topmetal2_drw.not(topmetal2_res).not(ind_drw) # Gate FETs tgate = gatpoly_drw.and(activ_drw).not(res_mk) @@ -65,14 +72,28 @@ pgate_hv_base = pgate.and(thickgateox_drw) nsd_fet = nactiv.not(nwell_drw).interacting(ngate).not(ngate).not_interacting(res_mk) psd_fet = pactiv.and(nwell_drw).interacting(pgate).not(pgate).not_interacting(res_mk) -# n & p taps (short connections) -ntap = nactiv.and(nwell_n_iso).not(res_mk).not(recog_diode).not(gatpoly_drw) -ptap = pactiv.and(pwell).not(substrate_drw).not(res_mk).not(recog_diode).not(gatpoly_drw) -# Derived - Layers (Special) -nwell_holes = nwell_drw.holes.not(nwell_drw) +# n1/p1 taps labels +ntap1_lbl = text_drw.texts("well") +ntap1_mk = nwell_drw.interacting(ntap1_lbl) + +ptap1_lbl = text_drw.texts("sub!") +ptap1_mk = substrate_drw.and(pwell).interacting(ptap1_lbl) + +# n & p taps (short connections) +ntap = nactiv.and(nwell_drw).not(recog_diode).not(gatpoly_drw).not(ntap1_mk) +ptap = pactiv.and(pwell).not(ptap1_mk).not(recog_diode).not(gatpoly_drw) ptap_holes = ptap.holes ntap_holes = ntap.holes -# General pwell -pwell_deep = CHIP.not(digisub_drw).not(pwell_block).not(nbulay_drw.interacting(nwell_holes)) +# S/D (salicide) +nsd_sal = nsd_fet.not(salblock_drw) +psd_sal = psd_fet.not(salblock_drw) + +# n & p taps (salicide) +ntap_sal = ntap.not(salblock_drw) +ptap_sal = ptap.not(salblock_drw) + +# n/p SD abutted with n/p taps (salicide) +nsd_ptap_abutt = nsd_sal.edges.and(ptap_sal.edges).extended(:in => 1.nm, :out => 1.nm) +psd_ntap_abutt = psd_sal.edges.and(ntap_sal.edges).extended(:in => 1.nm, :out => 1.nm) diff --git a/ihp-sg13g2/libs.tech/klayout/tech/lvs/rule_decks/layers_definitions.lvs b/ihp-sg13g2/libs.tech/klayout/tech/lvs/rule_decks/layers_definitions.lvs index 546cce2b..693c3ab9 100644 --- a/ihp-sg13g2/libs.tech/klayout/tech/lvs/rule_decks/layers_definitions.lvs +++ b/ihp-sg13g2/libs.tech/klayout/tech/lvs/rule_decks/layers_definitions.lvs @@ -32,41 +32,16 @@ def get_polygons(lay_no, lay_dt) end end -l0_drw = get_polygons(0, 0) -count = l0_drw.count -logger.info("l0_drw has #{count} polygons") -polygons_count += count - activ_drw = get_polygons(1, 0) count = activ_drw.count logger.info("activ_drw has #{count} polygons") polygons_count += count -activ_label = labels(1, 1) -count = activ_label.count -logger.info("activ_label has #{count} polygons") -polygons_count += count - activ_pin = get_polygons(1, 2) count = activ_pin.count logger.info("activ_pin has #{count} polygons") polygons_count += count -activ_net = get_polygons(1, 3) -count = activ_net.count -logger.info("activ_net has #{count} polygons") -polygons_count += count - -activ_boundary = get_polygons(1, 4) -count = activ_boundary.count -logger.info("activ_boundary has #{count} polygons") -polygons_count += count - -activ_lvs = get_polygons(1, 19) -count = activ_lvs.count -logger.info("activ_lvs has #{count} polygons") -polygons_count += count - activ_mask = get_polygons(1, 20) count = activ_mask.count logger.info("activ_mask has #{count} polygons") @@ -92,9 +67,9 @@ count = activ_iopc.count logger.info("activ_iopc has #{count} polygons") polygons_count += count -l2_drw = get_polygons(2, 0) -count = l2_drw.count -logger.info("l2_drw has #{count} polygons") +activ_noqrc = get_polygons(1, 28) +count = activ_noqrc.count +logger.info("activ_noqrc has #{count} polygons") polygons_count += count biwind_drw = get_polygons(3, 0) @@ -112,26 +87,11 @@ count = gatpoly_drw.count logger.info("gatpoly_drw has #{count} polygons") polygons_count += count -gatpoly_label = labels(5, 1) -count = gatpoly_label.count -logger.info("gatpoly_label has #{count} polygons") -polygons_count += count - gatpoly_pin = get_polygons(5, 2) count = gatpoly_pin.count logger.info("gatpoly_pin has #{count} polygons") polygons_count += count -gatpoly_net = get_polygons(5, 3) -count = gatpoly_net.count -logger.info("gatpoly_net has #{count} polygons") -polygons_count += count - -gatpoly_boundary = get_polygons(5, 4) -count = gatpoly_boundary.count -logger.info("gatpoly_boundary has #{count} polygons") -polygons_count += count - gatpoly_filler = get_polygons(5, 22) count = gatpoly_filler.count logger.info("gatpoly_filler has #{count} polygons") @@ -152,21 +112,16 @@ count = gatpoly_iopc.count logger.info("gatpoly_iopc has #{count} polygons") polygons_count += count +gatpoly_noqrc = get_polygons(5, 28) +count = gatpoly_noqrc.count +logger.info("gatpoly_noqrc has #{count} polygons") +polygons_count += count + cont_drw = get_polygons(6, 0) count = cont_drw.count logger.info("cont_drw has #{count} polygons") polygons_count += count -cont_net = get_polygons(6, 3) -count = cont_net.count -logger.info("cont_net has #{count} polygons") -polygons_count += count - -cont_boundary = get_polygons(6, 4) -count = cont_boundary.count -logger.info("cont_boundary has #{count} polygons") -polygons_count += count - cont_opc = get_polygons(6, 26) count = cont_opc.count logger.info("cont_opc has #{count} polygons") @@ -187,24 +142,29 @@ count = metal1_drw.count logger.info("metal1_drw has #{count} polygons") polygons_count += count -metal1_label = labels(8, 1) -count = metal1_label.count -logger.info("metal1_label has #{count} polygons") -polygons_count += count - metal1_pin = get_polygons(8, 2) count = metal1_pin.count logger.info("metal1_pin has #{count} polygons") polygons_count += count -metal1_net = get_polygons(8, 3) -count = metal1_net.count -logger.info("metal1_net has #{count} polygons") +metal1_mask = get_polygons(8, 20) +count = metal1_mask.count +logger.info("metal1_mask has #{count} polygons") +polygons_count += count + +metal1_filler = get_polygons(8, 22) +count = metal1_filler.count +logger.info("metal1_filler has #{count} polygons") +polygons_count += count + +metal1_nofill = get_polygons(8, 23) +count = metal1_nofill.count +logger.info("metal1_nofill has #{count} polygons") polygons_count += count -metal1_boundary = get_polygons(8, 4) -count = metal1_boundary.count -logger.info("metal1_boundary has #{count} polygons") +metal1_slit = get_polygons(8, 24) +count = metal1_slit.count +logger.info("metal1_slit has #{count} polygons") polygons_count += count metal1_text = labels(8, 25) @@ -217,6 +177,11 @@ count = metal1_opc.count logger.info("metal1_opc has #{count} polygons") polygons_count += count +metal1_noqrc = get_polygons(8, 28) +count = metal1_noqrc.count +logger.info("metal1_noqrc has #{count} polygons") +polygons_count += count + metal1_res = get_polygons(8, 29) count = metal1_res.count logger.info("metal1_res has #{count} polygons") @@ -237,31 +202,11 @@ count = passiv_drw.count logger.info("passiv_drw has #{count} polygons") polygons_count += count -passiv_label = labels(9, 1) -count = passiv_label.count -logger.info("passiv_label has #{count} polygons") -polygons_count += count - passiv_pin = get_polygons(9, 2) count = passiv_pin.count logger.info("passiv_pin has #{count} polygons") polygons_count += count -passiv_net = get_polygons(9, 3) -count = passiv_net.count -logger.info("passiv_net has #{count} polygons") -polygons_count += count - -passiv_boundary = get_polygons(9, 4) -count = passiv_boundary.count -logger.info("passiv_boundary has #{count} polygons") -polygons_count += count - -passiv_pdl = get_polygons(9, 40) -count = passiv_pdl.count -logger.info("passiv_pdl has #{count} polygons") -polygons_count += count - passiv_sbump = get_polygons(9, 36) count = passiv_sbump.count logger.info("passiv_sbump has #{count} polygons") @@ -272,29 +217,39 @@ count = passiv_pillar.count logger.info("passiv_pillar has #{count} polygons") polygons_count += count +passiv_pdl = get_polygons(9, 40) +count = passiv_pdl.count +logger.info("passiv_pdl has #{count} polygons") +polygons_count += count + metal2_drw = get_polygons(10, 0) count = metal2_drw.count logger.info("metal2_drw has #{count} polygons") polygons_count += count -metal2_label = labels(10, 1) -count = metal2_label.count -logger.info("metal2_label has #{count} polygons") -polygons_count += count - metal2_pin = get_polygons(10, 2) count = metal2_pin.count logger.info("metal2_pin has #{count} polygons") polygons_count += count -metal2_net = get_polygons(10, 3) -count = metal2_net.count -logger.info("metal2_net has #{count} polygons") +metal2_mask = get_polygons(10, 20) +count = metal2_mask.count +logger.info("metal2_mask has #{count} polygons") +polygons_count += count + +metal2_filler = get_polygons(10, 22) +count = metal2_filler.count +logger.info("metal2_filler has #{count} polygons") polygons_count += count -metal2_boundary = get_polygons(10, 4) -count = metal2_boundary.count -logger.info("metal2_boundary has #{count} polygons") +metal2_nofill = get_polygons(10, 23) +count = metal2_nofill.count +logger.info("metal2_nofill has #{count} polygons") +polygons_count += count + +metal2_slit = get_polygons(10, 24) +count = metal2_slit.count +logger.info("metal2_slit has #{count} polygons") polygons_count += count metal2_text = labels(10, 25) @@ -307,6 +262,11 @@ count = metal2_opc.count logger.info("metal2_opc has #{count} polygons") polygons_count += count +metal2_noqrc = get_polygons(10, 28) +count = metal2_noqrc.count +logger.info("metal2_noqrc has #{count} polygons") +polygons_count += count + metal2_res = get_polygons(10, 29) count = metal2_res.count logger.info("metal2_res has #{count} polygons") @@ -327,26 +287,11 @@ count = baspoly_drw.count logger.info("baspoly_drw has #{count} polygons") polygons_count += count -baspoly_label = labels(13, 1) -count = baspoly_label.count -logger.info("baspoly_label has #{count} polygons") -polygons_count += count - baspoly_pin = get_polygons(13, 2) count = baspoly_pin.count logger.info("baspoly_pin has #{count} polygons") polygons_count += count -baspoly_net = get_polygons(13, 3) -count = baspoly_net.count -logger.info("baspoly_net has #{count} polygons") -polygons_count += count - -baspoly_boundary = get_polygons(13, 4) -count = baspoly_boundary.count -logger.info("baspoly_boundary has #{count} polygons") -polygons_count += count - psd_drw = get_polygons(14, 0) count = psd_drw.count logger.info("psd_drw has #{count} polygons") @@ -362,49 +307,39 @@ count = digibnd_drw.count logger.info("digibnd_drw has #{count} polygons") polygons_count += count -digibnd_drawing0 = get_polygons(16, 10) -count = digibnd_drawing0.count -logger.info("digibnd_drawing0 has #{count} polygons") -polygons_count += count - via1_drw = get_polygons(19, 0) count = via1_drw.count logger.info("via1_drw has #{count} polygons") polygons_count += count -via1_net = get_polygons(19, 3) -count = via1_net.count -logger.info("via1_net has #{count} polygons") -polygons_count += count - -via1_boundary = get_polygons(19, 4) -count = via1_boundary.count -logger.info("via1_boundary has #{count} polygons") -polygons_count += count - backmetal1_drw = get_polygons(20, 0) count = backmetal1_drw.count logger.info("backmetal1_drw has #{count} polygons") polygons_count += count -backmetal1_label = labels(20, 1) -count = backmetal1_label.count -logger.info("backmetal1_label has #{count} polygons") -polygons_count += count - backmetal1_pin = get_polygons(20, 2) count = backmetal1_pin.count logger.info("backmetal1_pin has #{count} polygons") polygons_count += count -backmetal1_net = get_polygons(20, 3) -count = backmetal1_net.count -logger.info("backmetal1_net has #{count} polygons") +backmetal1_mask = get_polygons(20, 20) +count = backmetal1_mask.count +logger.info("backmetal1_mask has #{count} polygons") +polygons_count += count + +backmetal1_filler = get_polygons(20, 22) +count = backmetal1_filler.count +logger.info("backmetal1_filler has #{count} polygons") polygons_count += count -backmetal1_boundary = get_polygons(20, 4) -count = backmetal1_boundary.count -logger.info("backmetal1_boundary has #{count} polygons") +backmetal1_nofill = get_polygons(20, 23) +count = backmetal1_nofill.count +logger.info("backmetal1_nofill has #{count} polygons") +polygons_count += count + +backmetal1_slit = get_polygons(20, 24) +count = backmetal1_slit.count +logger.info("backmetal1_slit has #{count} polygons") polygons_count += count backmetal1_text = labels(20, 25) @@ -417,6 +352,11 @@ count = backmetal1_opc.count logger.info("backmetal1_opc has #{count} polygons") polygons_count += count +backmetal1_noqrc = get_polygons(20, 28) +count = backmetal1_noqrc.count +logger.info("backmetal1_noqrc has #{count} polygons") +polygons_count += count + backmetal1_res = get_polygons(20, 29) count = backmetal1_res.count logger.info("backmetal1_res has #{count} polygons") @@ -442,26 +382,11 @@ count = res_drw.count logger.info("res_drw has #{count} polygons") polygons_count += count -res_label = labels(24, 1) -count = res_label.count -logger.info("res_label has #{count} polygons") -polygons_count += count - sram_drw = get_polygons(25, 0) count = sram_drw.count logger.info("sram_drw has #{count} polygons") polygons_count += count -sram_label = labels(25, 1) -count = sram_label.count -logger.info("sram_label has #{count} polygons") -polygons_count += count - -sram_boundary = get_polygons(25, 4) -count = sram_boundary.count -logger.info("sram_boundary has #{count} polygons") -polygons_count += count - trans_drw = get_polygons(26, 0) count = trans_drw.count logger.info("trans_drw has #{count} polygons") @@ -477,11 +402,6 @@ count = ind_pin.count logger.info("ind_pin has #{count} polygons") polygons_count += count -ind_boundary = get_polygons(27, 4) -count = ind_boundary.count -logger.info("ind_boundary has #{count} polygons") -polygons_count += count - ind_text = labels(27, 25) count = ind_text.count logger.info("ind_text has #{count} polygons") @@ -497,39 +417,34 @@ count = via2_drw.count logger.info("via2_drw has #{count} polygons") polygons_count += count -via2_net = get_polygons(29, 3) -count = via2_net.count -logger.info("via2_net has #{count} polygons") -polygons_count += count - -via2_boundary = get_polygons(29, 4) -count = via2_boundary.count -logger.info("via2_boundary has #{count} polygons") -polygons_count += count - metal3_drw = get_polygons(30, 0) count = metal3_drw.count logger.info("metal3_drw has #{count} polygons") polygons_count += count -metal3_label = labels(30, 1) -count = metal3_label.count -logger.info("metal3_label has #{count} polygons") -polygons_count += count - metal3_pin = get_polygons(30, 2) count = metal3_pin.count logger.info("metal3_pin has #{count} polygons") polygons_count += count -metal3_net = get_polygons(30, 3) -count = metal3_net.count -logger.info("metal3_net has #{count} polygons") +metal3_mask = get_polygons(30, 20) +count = metal3_mask.count +logger.info("metal3_mask has #{count} polygons") +polygons_count += count + +metal3_filler = get_polygons(30, 22) +count = metal3_filler.count +logger.info("metal3_filler has #{count} polygons") polygons_count += count -metal3_boundary = get_polygons(30, 4) -count = metal3_boundary.count -logger.info("metal3_boundary has #{count} polygons") +metal3_nofill = get_polygons(30, 23) +count = metal3_nofill.count +logger.info("metal3_nofill has #{count} polygons") +polygons_count += count + +metal3_slit = get_polygons(30, 24) +count = metal3_slit.count +logger.info("metal3_slit has #{count} polygons") polygons_count += count metal3_text = labels(30, 25) @@ -542,6 +457,11 @@ count = metal3_opc.count logger.info("metal3_opc has #{count} polygons") polygons_count += count +metal3_noqrc = get_polygons(30, 28) +count = metal3_noqrc.count +logger.info("metal3_noqrc has #{count} polygons") +polygons_count += count + metal3_res = get_polygons(30, 29) count = metal3_res.count logger.info("metal3_res has #{count} polygons") @@ -562,51 +482,21 @@ count = nwell_drw.count logger.info("nwell_drw has #{count} polygons") polygons_count += count -nwell_label = labels(31, 1) -count = nwell_label.count -logger.info("nwell_label has #{count} polygons") -polygons_count += count - nwell_pin = get_polygons(31, 2) count = nwell_pin.count logger.info("nwell_pin has #{count} polygons") polygons_count += count -nwell_net = get_polygons(31, 3) -count = nwell_net.count -logger.info("nwell_net has #{count} polygons") -polygons_count += count - -nwell_boundary = get_polygons(31, 4) -count = nwell_boundary.count -logger.info("nwell_boundary has #{count} polygons") -polygons_count += count - nbulay_drw = get_polygons(32, 0) count = nbulay_drw.count logger.info("nbulay_drw has #{count} polygons") polygons_count += count -nbulay_label = labels(32, 1) -count = nbulay_label.count -logger.info("nbulay_label has #{count} polygons") -polygons_count += count - nbulay_pin = get_polygons(32, 2) count = nbulay_pin.count logger.info("nbulay_pin has #{count} polygons") polygons_count += count -nbulay_net = get_polygons(32, 3) -count = nbulay_net.count -logger.info("nbulay_net has #{count} polygons") -polygons_count += count - -nbulay_boundary = get_polygons(32, 4) -count = nbulay_boundary.count -logger.info("nbulay_boundary has #{count} polygons") -polygons_count += count - nbulay_block = get_polygons(32, 21) count = nbulay_block.count logger.info("nbulay_block has #{count} polygons") @@ -632,26 +522,11 @@ count = mim_drw.count logger.info("mim_drw has #{count} polygons") polygons_count += count -mim_net = get_polygons(36, 3) -count = mim_net.count -logger.info("mim_net has #{count} polygons") -polygons_count += count - -mim_boundary = get_polygons(36, 4) -count = mim_boundary.count -logger.info("mim_boundary has #{count} polygons") -polygons_count += count - edgeseal_drw = get_polygons(39, 0) count = edgeseal_drw.count logger.info("edgeseal_drw has #{count} polygons") polygons_count += count -edgeseal_boundary = get_polygons(39, 4) -count = edgeseal_boundary.count -logger.info("edgeseal_boundary has #{count} polygons") -polygons_count += count - substrate_drw = get_polygons(40, 0) count = substrate_drw.count logger.info("substrate_drw has #{count} polygons") @@ -692,69 +567,54 @@ count = pwell_drw.count logger.info("pwell_drw has #{count} polygons") polygons_count += count -pwell_label = labels(46, 1) -count = pwell_label.count -logger.info("pwell_label has #{count} polygons") -polygons_count += count - pwell_pin = get_polygons(46, 2) count = pwell_pin.count logger.info("pwell_pin has #{count} polygons") polygons_count += count -pwell_net = get_polygons(46, 3) -count = pwell_net.count -logger.info("pwell_net has #{count} polygons") -polygons_count += count - -pwell_boundary = get_polygons(46, 4) -count = pwell_boundary.count -logger.info("pwell_boundary has #{count} polygons") -polygons_count += count - pwell_block = get_polygons(46, 21) count = pwell_block.count logger.info("pwell_block has #{count} polygons") polygons_count += count +ic_drw = get_polygons(48, 0) +count = ic_drw.count +logger.info("ic_drw has #{count} polygons") +polygons_count += count + via3_drw = get_polygons(49, 0) count = via3_drw.count logger.info("via3_drw has #{count} polygons") polygons_count += count -via3_net = get_polygons(49, 3) -count = via3_net.count -logger.info("via3_net has #{count} polygons") -polygons_count += count - -via3_boundary = get_polygons(49, 4) -count = via3_boundary.count -logger.info("via3_boundary has #{count} polygons") -polygons_count += count - metal4_drw = get_polygons(50, 0) count = metal4_drw.count logger.info("metal4_drw has #{count} polygons") polygons_count += count -metal4_label = labels(50, 1) -count = metal4_label.count -logger.info("metal4_label has #{count} polygons") -polygons_count += count - metal4_pin = get_polygons(50, 2) count = metal4_pin.count logger.info("metal4_pin has #{count} polygons") polygons_count += count -metal4_net = get_polygons(50, 3) -count = metal4_net.count -logger.info("metal4_net has #{count} polygons") +metal4_mask = get_polygons(50, 20) +count = metal4_mask.count +logger.info("metal4_mask has #{count} polygons") +polygons_count += count + +metal4_filler = get_polygons(50, 22) +count = metal4_filler.count +logger.info("metal4_filler has #{count} polygons") +polygons_count += count + +metal4_nofill = get_polygons(50, 23) +count = metal4_nofill.count +logger.info("metal4_nofill has #{count} polygons") polygons_count += count -metal4_boundary = get_polygons(50, 4) -count = metal4_boundary.count -logger.info("metal4_boundary has #{count} polygons") +metal4_slit = get_polygons(50, 24) +count = metal4_slit.count +logger.info("metal4_slit has #{count} polygons") polygons_count += count metal4_text = labels(50, 25) @@ -767,6 +627,11 @@ count = metal4_opc.count logger.info("metal4_opc has #{count} polygons") polygons_count += count +metal4_noqrc = get_polygons(50, 28) +count = metal4_noqrc.count +logger.info("metal4_noqrc has #{count} polygons") +polygons_count += count + metal4_res = get_polygons(50, 29) count = metal4_res.count logger.info("metal4_res has #{count} polygons") @@ -822,39 +687,34 @@ count = via4_drw.count logger.info("via4_drw has #{count} polygons") polygons_count += count -via4_net = get_polygons(66, 3) -count = via4_net.count -logger.info("via4_net has #{count} polygons") -polygons_count += count - -via4_boundary = get_polygons(66, 4) -count = via4_boundary.count -logger.info("via4_boundary has #{count} polygons") -polygons_count += count - metal5_drw = get_polygons(67, 0) count = metal5_drw.count logger.info("metal5_drw has #{count} polygons") polygons_count += count -metal5_label = labels(67, 1) -count = metal5_label.count -logger.info("metal5_label has #{count} polygons") -polygons_count += count - metal5_pin = get_polygons(67, 2) count = metal5_pin.count logger.info("metal5_pin has #{count} polygons") polygons_count += count -metal5_net = get_polygons(67, 3) -count = metal5_net.count -logger.info("metal5_net has #{count} polygons") +metal5_mask = get_polygons(67, 20) +count = metal5_mask.count +logger.info("metal5_mask has #{count} polygons") +polygons_count += count + +metal5_filler = get_polygons(67, 22) +count = metal5_filler.count +logger.info("metal5_filler has #{count} polygons") polygons_count += count -metal5_boundary = get_polygons(67, 4) -count = metal5_boundary.count -logger.info("metal5_boundary has #{count} polygons") +metal5_nofill = get_polygons(67, 23) +count = metal5_nofill.count +logger.info("metal5_nofill has #{count} polygons") +polygons_count += count + +metal5_slit = get_polygons(67, 24) +count = metal5_slit.count +logger.info("metal5_slit has #{count} polygons") polygons_count += count metal5_text = labels(67, 25) @@ -867,6 +727,11 @@ count = metal5_opc.count logger.info("metal5_opc has #{count} polygons") polygons_count += count +metal5_noqrc = get_polygons(67, 28) +count = metal5_noqrc.count +logger.info("metal5_noqrc has #{count} polygons") +polygons_count += count + metal5_res = get_polygons(67, 29) count = metal5_res.count logger.info("metal5_res has #{count} polygons") @@ -1012,21 +877,11 @@ count = polimide_drw.count logger.info("polimide_drw has #{count} polygons") polygons_count += count -polimide_label = labels(98, 1) -count = polimide_label.count -logger.info("polimide_label has #{count} polygons") -polygons_count += count - polimide_pin = get_polygons(98, 2) count = polimide_pin.count logger.info("polimide_pin has #{count} polygons") polygons_count += count -polimide_net = get_polygons(98, 3) -count = polimide_net.count -logger.info("polimide_net has #{count} polygons") -polygons_count += count - recog_drw = get_polygons(99, 0) count = recog_drw.count logger.info("recog_drw has #{count} polygons") @@ -1112,6 +967,41 @@ count = graphmetal1_nofill.count logger.info("graphmetal1_nofill has #{count} polygons") polygons_count += count +graphmetal1_slit = get_polygons(109, 24) +count = graphmetal1_slit.count +logger.info("graphmetal1_slit has #{count} polygons") +polygons_count += count + +graphmetal1_opc = get_polygons(109, 26) +count = graphmetal1_opc.count +logger.info("graphmetal1_opc has #{count} polygons") +polygons_count += count + +graphmet1l_drw = get_polygons(110, 0) +count = graphmet1l_drw.count +logger.info("graphmet1l_drw has #{count} polygons") +polygons_count += count + +graphmet1l_filler = get_polygons(110, 22) +count = graphmet1l_filler.count +logger.info("graphmet1l_filler has #{count} polygons") +polygons_count += count + +graphmet1l_nofill = get_polygons(110, 23) +count = graphmet1l_nofill.count +logger.info("graphmet1l_nofill has #{count} polygons") +polygons_count += count + +graphmet1l_slit = get_polygons(110, 24) +count = graphmet1l_slit.count +logger.info("graphmet1l_slit has #{count} polygons") +polygons_count += count + +graphmet1l_opc = get_polygons(110, 26) +count = graphmet1l_opc.count +logger.info("graphmet1l_opc has #{count} polygons") +polygons_count += count + extblock_drw = get_polygons(111, 0) count = extblock_drw.count logger.info("extblock_drw has #{count} polygons") @@ -1177,34 +1067,34 @@ count = topvia1_drw.count logger.info("topvia1_drw has #{count} polygons") polygons_count += count -topvia1_net = get_polygons(125, 3) -count = topvia1_net.count -logger.info("topvia1_net has #{count} polygons") -polygons_count += count - -topvia1_boundary = get_polygons(125, 4) -count = topvia1_boundary.count -logger.info("topvia1_boundary has #{count} polygons") -polygons_count += count - topmetal1_drw = get_polygons(126, 0) count = topmetal1_drw.count logger.info("topmetal1_drw has #{count} polygons") polygons_count += count -topmetal1_label = labels(126, 1) -count = topmetal1_label.count -logger.info("topmetal1_label has #{count} polygons") -polygons_count += count - topmetal1_pin = get_polygons(126, 2) count = topmetal1_pin.count logger.info("topmetal1_pin has #{count} polygons") polygons_count += count -topmetal1_net = get_polygons(126, 3) -count = topmetal1_net.count -logger.info("topmetal1_net has #{count} polygons") +topmetal1_mask = get_polygons(126, 20) +count = topmetal1_mask.count +logger.info("topmetal1_mask has #{count} polygons") +polygons_count += count + +topmetal1_filler = get_polygons(126, 22) +count = topmetal1_filler.count +logger.info("topmetal1_filler has #{count} polygons") +polygons_count += count + +topmetal1_nofill = get_polygons(126, 23) +count = topmetal1_nofill.count +logger.info("topmetal1_nofill has #{count} polygons") +polygons_count += count + +topmetal1_slit = get_polygons(126, 24) +count = topmetal1_slit.count +logger.info("topmetal1_slit has #{count} polygons") polygons_count += count topmetal1_text = labels(126, 25) @@ -1212,6 +1102,11 @@ count = topmetal1_text.count logger.info("topmetal1_text has #{count} polygons") polygons_count += count +topmetal1_noqrc = get_polygons(126, 28) +count = topmetal1_noqrc.count +logger.info("topmetal1_noqrc has #{count} polygons") +polygons_count += count + topmetal1_res = get_polygons(126, 29) count = topmetal1_res.count logger.info("topmetal1_res has #{count} polygons") @@ -1237,26 +1132,11 @@ count = polyres_drw.count logger.info("polyres_drw has #{count} polygons") polygons_count += count -polyres_label = labels(128, 1) -count = polyres_label.count -logger.info("polyres_label has #{count} polygons") -polygons_count += count - polyres_pin = get_polygons(128, 2) count = polyres_pin.count logger.info("polyres_pin has #{count} polygons") polygons_count += count -polyres_net = get_polygons(128, 3) -count = polyres_net.count -logger.info("polyres_net has #{count} polygons") -polygons_count += count - -polyres_boundary = get_polygons(128, 4) -count = polyres_boundary.count -logger.info("polyres_boundary has #{count} polygons") -polygons_count += count - vmim_drw = get_polygons(129, 0) count = vmim_drw.count logger.info("vmim_drw has #{count} polygons") @@ -1277,34 +1157,34 @@ count = topvia2_drw.count logger.info("topvia2_drw has #{count} polygons") polygons_count += count -topvia2_net = get_polygons(133, 3) -count = topvia2_net.count -logger.info("topvia2_net has #{count} polygons") -polygons_count += count - -topvia2_boundary = get_polygons(133, 4) -count = topvia2_boundary.count -logger.info("topvia2_boundary has #{count} polygons") -polygons_count += count - topmetal2_drw = get_polygons(134, 0) count = topmetal2_drw.count logger.info("topmetal2_drw has #{count} polygons") polygons_count += count -topmetal2_label = labels(134, 1) -count = topmetal2_label.count -logger.info("topmetal2_label has #{count} polygons") -polygons_count += count - topmetal2_pin = get_polygons(134, 2) count = topmetal2_pin.count logger.info("topmetal2_pin has #{count} polygons") polygons_count += count -topmetal2_net = get_polygons(134, 3) -count = topmetal2_net.count -logger.info("topmetal2_net has #{count} polygons") +topmetal2_mask = get_polygons(134, 20) +count = topmetal2_mask.count +logger.info("topmetal2_mask has #{count} polygons") +polygons_count += count + +topmetal2_filler = get_polygons(134, 22) +count = topmetal2_filler.count +logger.info("topmetal2_filler has #{count} polygons") +polygons_count += count + +topmetal2_nofill = get_polygons(134, 23) +count = topmetal2_nofill.count +logger.info("topmetal2_nofill has #{count} polygons") +polygons_count += count + +topmetal2_slit = get_polygons(134, 24) +count = topmetal2_slit.count +logger.info("topmetal2_slit has #{count} polygons") polygons_count += count topmetal2_text = labels(134, 25) @@ -1312,14 +1192,324 @@ count = topmetal2_text.count logger.info("topmetal2_text has #{count} polygons") polygons_count += count +topmetal2_noqrc = get_polygons(134, 28) +count = topmetal2_noqrc.count +logger.info("topmetal2_noqrc has #{count} polygons") +polygons_count += count + topmetal2_res = get_polygons(134, 29) count = topmetal2_res.count logger.info("topmetal2_res has #{count} polygons") polygons_count += count +topmetal2_iprobe = get_polygons(134, 33) +count = topmetal2_iprobe.count +logger.info("topmetal2_iprobe has #{count} polygons") +polygons_count += count + +topmetal2_diffprb = get_polygons(134, 34) +count = topmetal2_diffprb.count +logger.info("topmetal2_diffprb has #{count} polygons") +polygons_count += count + +snsring_drw = get_polygons(135, 0) +count = snsring_drw.count +logger.info("snsring_drw has #{count} polygons") +polygons_count += count + +sensor_drw = get_polygons(136, 0) +count = sensor_drw.count +logger.info("sensor_drw has #{count} polygons") +polygons_count += count + +snsarms_drw = get_polygons(137, 0) +count = snsarms_drw.count +logger.info("snsarms_drw has #{count} polygons") +polygons_count += count + +snscmosvia_drw = get_polygons(138, 0) +count = snscmosvia_drw.count +logger.info("snscmosvia_drw has #{count} polygons") +polygons_count += count + +colwind_drw = get_polygons(139, 0) +count = colwind_drw.count +logger.info("colwind_drw has #{count} polygons") +polygons_count += count + +flm_drw = get_polygons(142, 0) +count = flm_drw.count +logger.info("flm_drw has #{count} polygons") +polygons_count += count + +hafniumox_drw = get_polygons(143, 0) +count = hafniumox_drw.count +logger.info("hafniumox_drw has #{count} polygons") +polygons_count += count + +memvia_drw = get_polygons(145, 0) +count = memvia_drw.count +logger.info("memvia_drw has #{count} polygons") +polygons_count += count + +thinfilmres_drw = get_polygons(146, 0) +count = thinfilmres_drw.count +logger.info("thinfilmres_drw has #{count} polygons") +polygons_count += count + +rfmem_drw = get_polygons(147, 0) +count = rfmem_drw.count +logger.info("rfmem_drw has #{count} polygons") +polygons_count += count + +norcx_drw = get_polygons(148, 0) +count = norcx_drw.count +logger.info("norcx_drw has #{count} polygons") +polygons_count += count + +norcx_m2m3 = get_polygons(148, 41) +count = norcx_m2m3.count +logger.info("norcx_m2m3 has #{count} polygons") +polygons_count += count + +norcx_m2m4 = get_polygons(148, 42) +count = norcx_m2m4.count +logger.info("norcx_m2m4 has #{count} polygons") +polygons_count += count + +norcx_m2m5 = get_polygons(148, 43) +count = norcx_m2m5.count +logger.info("norcx_m2m5 has #{count} polygons") +polygons_count += count + +norcx_m2tm1 = get_polygons(148, 44) +count = norcx_m2tm1.count +logger.info("norcx_m2tm1 has #{count} polygons") +polygons_count += count + +norcx_m2tm2 = get_polygons(148, 45) +count = norcx_m2tm2.count +logger.info("norcx_m2tm2 has #{count} polygons") +polygons_count += count + +norcx_m3m4 = get_polygons(148, 46) +count = norcx_m3m4.count +logger.info("norcx_m3m4 has #{count} polygons") +polygons_count += count + +norcx_m3m5 = get_polygons(148, 47) +count = norcx_m3m5.count +logger.info("norcx_m3m5 has #{count} polygons") +polygons_count += count + +norcx_m3tm1 = get_polygons(148, 48) +count = norcx_m3tm1.count +logger.info("norcx_m3tm1 has #{count} polygons") +polygons_count += count + +norcx_m3tm2 = get_polygons(148, 49) +count = norcx_m3tm2.count +logger.info("norcx_m3tm2 has #{count} polygons") +polygons_count += count + +norcx_m4m5 = get_polygons(148, 50) +count = norcx_m4m5.count +logger.info("norcx_m4m5 has #{count} polygons") +polygons_count += count + +norcx_m4tm1 = get_polygons(148, 51) +count = norcx_m4tm1.count +logger.info("norcx_m4tm1 has #{count} polygons") +polygons_count += count + +norcx_m4tm2 = get_polygons(148, 52) +count = norcx_m4tm2.count +logger.info("norcx_m4tm2 has #{count} polygons") +polygons_count += count + +norcx_m5tm1 = get_polygons(148, 53) +count = norcx_m5tm1.count +logger.info("norcx_m5tm1 has #{count} polygons") +polygons_count += count + +norcx_m5tm2 = get_polygons(148, 54) +count = norcx_m5tm2.count +logger.info("norcx_m5tm2 has #{count} polygons") +polygons_count += count + +norcx_tm1tm2 = get_polygons(148, 55) +count = norcx_tm1tm2.count +logger.info("norcx_tm1tm2 has #{count} polygons") +polygons_count += count + +norcx_m1sub = get_polygons(148, 123) +count = norcx_m1sub.count +logger.info("norcx_m1sub has #{count} polygons") +polygons_count += count + +norcx_m2sub = get_polygons(148, 124) +count = norcx_m2sub.count +logger.info("norcx_m2sub has #{count} polygons") +polygons_count += count + +norcx_m3sub = get_polygons(148, 125) +count = norcx_m3sub.count +logger.info("norcx_m3sub has #{count} polygons") +polygons_count += count + +norcx_m4sub = get_polygons(148, 126) +count = norcx_m4sub.count +logger.info("norcx_m4sub has #{count} polygons") +polygons_count += count + +norcx_m5sub = get_polygons(148, 127) +count = norcx_m5sub.count +logger.info("norcx_m5sub has #{count} polygons") +polygons_count += count + +norcx_tm1sub = get_polygons(148, 300) +count = norcx_tm1sub.count +logger.info("norcx_tm1sub has #{count} polygons") +polygons_count += count + +norcx_tm2sub = get_polygons(148, 301) +count = norcx_tm2sub.count +logger.info("norcx_tm2sub has #{count} polygons") +polygons_count += count + +snsbotvia_drw = get_polygons(149, 0) +count = snsbotvia_drw.count +logger.info("snsbotvia_drw has #{count} polygons") +polygons_count += count + +snstopvia_drw = get_polygons(151, 0) +count = snstopvia_drw.count +logger.info("snstopvia_drw has #{count} polygons") +polygons_count += count + +deepvia_drw = get_polygons(152, 0) +count = deepvia_drw.count +logger.info("deepvia_drw has #{count} polygons") +polygons_count += count + +fgetch_drw = get_polygons(153, 0) +count = fgetch_drw.count +logger.info("fgetch_drw has #{count} polygons") +polygons_count += count + +ctrgat_drw = get_polygons(154, 0) +count = ctrgat_drw.count +logger.info("ctrgat_drw has #{count} polygons") +polygons_count += count + +fgimp_drw = get_polygons(155, 0) +count = fgimp_drw.count +logger.info("fgimp_drw has #{count} polygons") +polygons_count += count + emwihv_drw = get_polygons(156, 0) count = emwihv_drw.count logger.info("emwihv_drw has #{count} polygons") polygons_count += count +lbe_drw = get_polygons(157, 0) +count = lbe_drw.count +logger.info("lbe_drw has #{count} polygons") +polygons_count += count + +alcustop_drw = get_polygons(159, 0) +count = alcustop_drw.count +logger.info("alcustop_drw has #{count} polygons") +polygons_count += count + +nometfiller_drw = get_polygons(160, 0) +count = nometfiller_drw.count +logger.info("nometfiller_drw has #{count} polygons") +polygons_count += count + +prboundary_drw = get_polygons(189, 0) +count = prboundary_drw.count +logger.info("prboundary_drw has #{count} polygons") +polygons_count += count + +exchange0_drw = get_polygons(190, 0) +count = exchange0_drw.count +logger.info("exchange0_drw has #{count} polygons") +polygons_count += count + +exchange0_pin = get_polygons(190, 2) +count = exchange0_pin.count +logger.info("exchange0_pin has #{count} polygons") +polygons_count += count + +exchange0_text = labels(190, 25) +count = exchange0_text.count +logger.info("exchange0_text has #{count} polygons") +polygons_count += count + +exchange1_drw = get_polygons(191, 0) +count = exchange1_drw.count +logger.info("exchange1_drw has #{count} polygons") +polygons_count += count + +exchange1_pin = get_polygons(191, 2) +count = exchange1_pin.count +logger.info("exchange1_pin has #{count} polygons") +polygons_count += count + +exchange1_text = labels(191, 25) +count = exchange1_text.count +logger.info("exchange1_text has #{count} polygons") +polygons_count += count + +exchange2_drw = get_polygons(192, 0) +count = exchange2_drw.count +logger.info("exchange2_drw has #{count} polygons") +polygons_count += count + +exchange2_pin = get_polygons(192, 2) +count = exchange2_pin.count +logger.info("exchange2_pin has #{count} polygons") +polygons_count += count + +exchange2_text = labels(192, 25) +count = exchange2_text.count +logger.info("exchange2_text has #{count} polygons") +polygons_count += count + +exchange3_drw = get_polygons(193, 0) +count = exchange3_drw.count +logger.info("exchange3_drw has #{count} polygons") +polygons_count += count + +exchange3_pin = get_polygons(193, 2) +count = exchange3_pin.count +logger.info("exchange3_pin has #{count} polygons") +polygons_count += count + +exchange3_text = labels(193, 25) +count = exchange3_text.count +logger.info("exchange3_text has #{count} polygons") +polygons_count += count + +exchange4_drw = get_polygons(194, 0) +count = exchange4_drw.count +logger.info("exchange4_drw has #{count} polygons") +polygons_count += count + +exchange4_pin = get_polygons(194, 2) +count = exchange4_pin.count +logger.info("exchange4_pin has #{count} polygons") +polygons_count += count + +exchange4_text = labels(194, 25) +count = exchange4_text.count +logger.info("exchange4_text has #{count} polygons") +polygons_count += count + +isonwell_drw = get_polygons(257, 0) +count = isonwell_drw.count +logger.info("isonwell_drw has #{count} polygons") +polygons_count += count + logger.info("Total no. of polygons in the design is #{polygons_count}") diff --git a/ihp-sg13g2/libs.tech/klayout/tech/lvs/rule_decks/res_connections.lvs b/ihp-sg13g2/libs.tech/klayout/tech/lvs/rule_decks/res_connections.lvs index a652884e..c3ec332e 100644 --- a/ihp-sg13g2/libs.tech/klayout/tech/lvs/rule_decks/res_connections.lvs +++ b/ihp-sg13g2/libs.tech/klayout/tech/lvs/rule_decks/res_connections.lvs @@ -32,5 +32,5 @@ connect(rppd_ports, cont_drw) # === rhigh === connect(rhigh_ports, cont_drw) -# === lvsres === +# === Metal Res === # Added in general connections 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 f206065a..e5925731 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 @@ -53,5 +53,23 @@ rsil_ports = gatpoly_drw.interacting(rsil_res).not(rsil_res) # ---- METAL ---- # =============== -# lvsres -lvsres = metal1_drw.and(metal1_res) +# res_metal1 +res_metal1 = metal1_drw.and(metal1_res) + +# res_metal2 +res_metal2 = metal2_drw.and(metal2_res) + +# res_metal3 +res_metal3 = metal3_drw.and(metal3_res) + +# res_metal4 +res_metal4 = metal4_drw.and(metal4_res) + +# res_metal5 +res_metal5 = metal5_drw.and(metal5_res) + +# res_topmetal1 +res_topmetal1 = topmetal1_drw.and(topmetal1_res) + +# res_topmetal2 +res_topmetal2 = topmetal2_drw.and(topmetal2_res) diff --git a/ihp-sg13g2/libs.tech/klayout/tech/lvs/rule_decks/res_extraction.lvs b/ihp-sg13g2/libs.tech/klayout/tech/lvs/rule_decks/res_extraction.lvs index 2d9bb322..d0483911 100644 --- a/ihp-sg13g2/libs.tech/klayout/tech/lvs/rule_decks/res_extraction.lvs +++ b/ihp-sg13g2/libs.tech/klayout/tech/lvs/rule_decks/res_extraction.lvs @@ -61,5 +61,29 @@ extract_devices(GeneralNTerminalExtractor.new('rhigh', 2), { # =============== # RM1 -logger.info('Extracting lvsres resistor') -extract_devices(resistor('lvsres', 1.0, RES2), { 'R' => lvsres, 'C' => metal1_con }) +logger.info('Extracting res_metal1 resistor') +extract_devices(resistor('res_metal1', 1.0, RES2), { 'R' => res_metal1, 'C' => metal1_con }) + +# RM2 +logger.info('Extracting res_metal2 resistor') +extract_devices(resistor('res_metal2', 1.0, RES2), { 'R' => res_metal2, 'C' => metal2_con }) + +# RM3 +logger.info('Extracting res_metal3 resistor') +extract_devices(resistor('res_metal3', 1.0, RES2), { 'R' => res_metal3, 'C' => metal3_con }) + +# RM4 +logger.info('Extracting res_metal4 resistor') +extract_devices(resistor('res_metal4', 1.0, RES2), { 'R' => res_metal4, 'C' => metal4_con }) + +# RM5 +logger.info('Extracting res_metal5 resistor') +extract_devices(resistor('res_metal5', 1.0, RES2), { 'R' => res_metal5, 'C' => metal5_con }) + +# RTM1 +logger.info('Extracting res_topmetal1 resistor') +extract_devices(resistor('res_topmetal1', 1.0, RES2), { 'R' => res_topmetal1, 'C' => topmetal1_con }) + +# RTM2 +logger.info('Extracting res_topmetal2 resistor') +extract_devices(resistor('res_topmetal2', 1.0, RES2), { 'R' => res_topmetal2, 'C' => topmetal2_con }) diff --git a/ihp-sg13g2/libs.tech/klayout/tech/lvs/rule_decks/tap_connections.lvs b/ihp-sg13g2/libs.tech/klayout/tech/lvs/rule_decks/tap_connections.lvs index 4d1c5139..f922e2a6 100644 --- a/ihp-sg13g2/libs.tech/klayout/tech/lvs/rule_decks/tap_connections.lvs +++ b/ihp-sg13g2/libs.tech/klayout/tech/lvs/rule_decks/tap_connections.lvs @@ -24,9 +24,9 @@ logger.info('Starting LVS Taps CONNECTIONS') # ntap1 -connect(ntap1_n, cont_drw) -connect(ntap1_p, nwell_drw) +connect(ntap1_tie, cont_drw) +connect(ntap1_well, nwell_drw) # ptap1 -connect(ptap1_n, cont_drw) -connect(ptap1_p, pwell) +connect(ptap1_tie, cont_drw) +connect(ptap1_sub, pwell) 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 a888b25d..1f70f0b4 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 @@ -31,12 +31,12 @@ taps_exclude = gatpoly_drw.join(nsd_drw).join(trans_drw) # === ntap1 === ntap1_exc = pwell.join(psd_drw).join(taps_exclude) -# ntap1_n = nactiv.and(nwell_iso).not(ntap1_exc) -# Modified to catch similar structure in pnpMPA-Base node -ntap1_n = nactiv.and(nwell_iso).extents.not_interacting(ntap1_exc) -ntap1_p = nwell_iso.covering(ntap1_n) + +ntap1_tie = nactiv.and(ntap1_mk).extents.not(ntap1_exc) +ntap1_well = ntap1_mk.covering(ntap1_tie) # === ptap1 === -ptap1_exc = nwell_drw.join(nbulay_drw).join(taps_exclude) -ptap1_n = pactiv.and(pwell).interacting(substrate_drw).not(ptap1_exc) -ptap1_p = pwell.covering(ptap1_n) +ptap1_exc = nwell_drw.join(taps_exclude) + +ptap1_tie = pactiv.and(ptap1_mk).extents.not(ptap1_exc) +ptap1_sub = pwell.covering(ptap1_tie) diff --git a/ihp-sg13g2/libs.tech/klayout/tech/lvs/rule_decks/tap_extraction.lvs b/ihp-sg13g2/libs.tech/klayout/tech/lvs/rule_decks/tap_extraction.lvs index 8e08e659..d6cc82db 100644 --- a/ihp-sg13g2/libs.tech/klayout/tech/lvs/rule_decks/tap_extraction.lvs +++ b/ihp-sg13g2/libs.tech/klayout/tech/lvs/rule_decks/tap_extraction.lvs @@ -25,8 +25,8 @@ logger.info('Starting Taps EXTRACTION') # ntap1 logger.info('Extracting ntap1 device') -extract_devices(diode('ntap1', CustomTap), { 'N' => ntap1_n, 'P' => ntap1_p }) +extract_devices(diode('ntap1', CustomTap), { 'N' => ntap1_tie, 'P' => ntap1_well }) # ptap1 logger.info('Extracting ptap1 device') -extract_devices(diode('ptap1', CustomTap), { 'N' => ptap1_n, 'P' => ptap1_p }) +extract_devices(diode('ptap1', CustomTap), { 'N' => ptap1_tie, 'P' => ptap1_sub }) diff --git a/ihp-sg13g2/libs.tech/klayout/tech/lvs/testing/run_regression_cells.py b/ihp-sg13g2/libs.tech/klayout/tech/lvs/testing/run_regression_cells.py index aaa84499..58529667 100644 --- a/ihp-sg13g2/libs.tech/klayout/tech/lvs/testing/run_regression_cells.py +++ b/ihp-sg13g2/libs.tech/klayout/tech/lvs/testing/run_regression_cells.py @@ -70,12 +70,6 @@ def build_tests_dataframe(cells_dir, target_cell, cells): # Construct df that holds all info tc_df = pd.DataFrame({"cell_name": cells}) - # Drop specific cell that has issues - values_to_drop = ["sg13g2_tiehi"] - - # Drop rows where cell_name is in the list of values to drop - tc_df = tc_df[~tc_df['cell_name'].isin(values_to_drop)] - all_cells_layout = sorted(Path(cells_dir).rglob("*.{}".format(SUPPORTED_TC_EXT))) all_cells_netlist = sorted( Path(cells_dir).rglob("*.{}".format(SUPPORTED_SPICE_EXT)) @@ -128,16 +122,15 @@ def build_tests_dataframe(cells_dir, target_cell, cells): tc_df["run_id"] = range(len(tc_df)) # Duplicate the original cells for iso/digisub - # iso_df = tc_df.copy() + iso_df = tc_df.copy() sub_df = tc_df.copy() # Add the suffix to each cell in the column - # iso_df["cell_name"] = iso_df["cell_name"] + "_iso" + iso_df["cell_name"] = iso_df["cell_name"] + "_iso" sub_df["cell_name"] = sub_df["cell_name"] + "_digisub" # Concatenate the original DataFrame with the modified DataFrame - # final_df = pd.concat([tc_df, iso_df, sub_df]) - final_df = pd.concat([tc_df, sub_df]) + final_df = pd.concat([tc_df, iso_df, sub_df]) final_df.reset_index(drop=True, inplace=True) final_df["run_id"] = range(len(final_df)) diff --git a/ihp-sg13g2/libs.tech/klayout/tech/lvs/testing/testcases/unit/res_devices/layout/lvsres.gds b/ihp-sg13g2/libs.tech/klayout/tech/lvs/testing/testcases/unit/res_devices/layout/lvsres.gds deleted file mode 100644 index 1b9470d9..00000000 Binary files a/ihp-sg13g2/libs.tech/klayout/tech/lvs/testing/testcases/unit/res_devices/layout/lvsres.gds and /dev/null differ diff --git a/ihp-sg13g2/libs.tech/klayout/tech/lvs/testing/testcases/unit/res_devices/layout/res_metal1.gds b/ihp-sg13g2/libs.tech/klayout/tech/lvs/testing/testcases/unit/res_devices/layout/res_metal1.gds new file mode 100644 index 00000000..9329ae9c Binary files /dev/null and b/ihp-sg13g2/libs.tech/klayout/tech/lvs/testing/testcases/unit/res_devices/layout/res_metal1.gds differ diff --git a/ihp-sg13g2/libs.tech/klayout/tech/lvs/testing/testcases/unit/res_devices/layout/res_metal2.gds b/ihp-sg13g2/libs.tech/klayout/tech/lvs/testing/testcases/unit/res_devices/layout/res_metal2.gds new file mode 100644 index 00000000..dbb9b0ab Binary files /dev/null and b/ihp-sg13g2/libs.tech/klayout/tech/lvs/testing/testcases/unit/res_devices/layout/res_metal2.gds differ diff --git a/ihp-sg13g2/libs.tech/klayout/tech/lvs/testing/testcases/unit/res_devices/layout/res_metal3.gds b/ihp-sg13g2/libs.tech/klayout/tech/lvs/testing/testcases/unit/res_devices/layout/res_metal3.gds new file mode 100644 index 00000000..063c30df Binary files /dev/null and b/ihp-sg13g2/libs.tech/klayout/tech/lvs/testing/testcases/unit/res_devices/layout/res_metal3.gds differ diff --git a/ihp-sg13g2/libs.tech/klayout/tech/lvs/testing/testcases/unit/res_devices/layout/res_metal4.gds b/ihp-sg13g2/libs.tech/klayout/tech/lvs/testing/testcases/unit/res_devices/layout/res_metal4.gds new file mode 100644 index 00000000..2c8e24c4 Binary files /dev/null and b/ihp-sg13g2/libs.tech/klayout/tech/lvs/testing/testcases/unit/res_devices/layout/res_metal4.gds differ diff --git a/ihp-sg13g2/libs.tech/klayout/tech/lvs/testing/testcases/unit/res_devices/layout/res_metal5.gds b/ihp-sg13g2/libs.tech/klayout/tech/lvs/testing/testcases/unit/res_devices/layout/res_metal5.gds new file mode 100644 index 00000000..9ea84a3a Binary files /dev/null and b/ihp-sg13g2/libs.tech/klayout/tech/lvs/testing/testcases/unit/res_devices/layout/res_metal5.gds differ diff --git a/ihp-sg13g2/libs.tech/klayout/tech/lvs/testing/testcases/unit/res_devices/layout/res_topmetal1.gds b/ihp-sg13g2/libs.tech/klayout/tech/lvs/testing/testcases/unit/res_devices/layout/res_topmetal1.gds new file mode 100644 index 00000000..0b21e7f6 Binary files /dev/null and b/ihp-sg13g2/libs.tech/klayout/tech/lvs/testing/testcases/unit/res_devices/layout/res_topmetal1.gds differ diff --git a/ihp-sg13g2/libs.tech/klayout/tech/lvs/testing/testcases/unit/res_devices/layout/res_topmetal2.gds b/ihp-sg13g2/libs.tech/klayout/tech/lvs/testing/testcases/unit/res_devices/layout/res_topmetal2.gds new file mode 100644 index 00000000..dac53d14 Binary files /dev/null and b/ihp-sg13g2/libs.tech/klayout/tech/lvs/testing/testcases/unit/res_devices/layout/res_topmetal2.gds differ diff --git a/ihp-sg13g2/libs.tech/klayout/tech/lvs/testing/testcases/unit/res_devices/layout/rhigh.gds b/ihp-sg13g2/libs.tech/klayout/tech/lvs/testing/testcases/unit/res_devices/layout/rhigh.gds index caa506de..42899529 100644 Binary files a/ihp-sg13g2/libs.tech/klayout/tech/lvs/testing/testcases/unit/res_devices/layout/rhigh.gds and b/ihp-sg13g2/libs.tech/klayout/tech/lvs/testing/testcases/unit/res_devices/layout/rhigh.gds differ diff --git a/ihp-sg13g2/libs.tech/klayout/tech/lvs/testing/testcases/unit/res_devices/netlist/lvsres.cdl b/ihp-sg13g2/libs.tech/klayout/tech/lvs/testing/testcases/unit/res_devices/netlist/res_metal1.cdl similarity index 83% rename from ihp-sg13g2/libs.tech/klayout/tech/lvs/testing/testcases/unit/res_devices/netlist/lvsres.cdl rename to ihp-sg13g2/libs.tech/klayout/tech/lvs/testing/testcases/unit/res_devices/netlist/res_metal1.cdl index 93fdf65b..36922b51 100644 --- a/ihp-sg13g2/libs.tech/klayout/tech/lvs/testing/testcases/unit/res_devices/netlist/lvsres.cdl +++ b/ihp-sg13g2/libs.tech/klayout/tech/lvs/testing/testcases/unit/res_devices/netlist/res_metal1.cdl @@ -15,8 +15,8 @@ * SPDX-License-Identifier: Apache-2.0 *========================================================================== -.SUBCKT lvsres -Rm1 net1 net2 $[lvsres] 20k l=1u w=5u -Rm2 net3 net4 lvsres \ l=1.5u w =5u -Rm3 net5 net6 lvsres / length =1u width=6u +.SUBCKT res_metal1 +Rm1 net1 net2 $[res_metal1] 20k l=1u w=5u +Rm2 net3 net4 res_metal1 \ l=1.5u w =5u +Rm3 net5 net6 res_metal1 / length =1u width=6u .ENDS diff --git a/ihp-sg13g2/libs.tech/klayout/tech/lvs/testing/testcases/unit/res_devices/netlist/res_metal2.cdl b/ihp-sg13g2/libs.tech/klayout/tech/lvs/testing/testcases/unit/res_devices/netlist/res_metal2.cdl new file mode 100644 index 00000000..2bff83de --- /dev/null +++ b/ihp-sg13g2/libs.tech/klayout/tech/lvs/testing/testcases/unit/res_devices/netlist/res_metal2.cdl @@ -0,0 +1,22 @@ +*========================================================================== +* Copyright 2024 IHP PDK Authors +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* https://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* SPDX-License-Identifier: Apache-2.0 +*========================================================================== + +.SUBCKT res_metal2 +Rm1 net1 net2 $[res_metal2] 20k l=1u w=5u +Rm2 net3 net4 res_metal2 \ l=1.5u w =5u +Rm3 net5 net6 res_metal2 / length =1u width=6u +.ENDS diff --git a/ihp-sg13g2/libs.tech/klayout/tech/lvs/testing/testcases/unit/res_devices/netlist/res_metal3.cdl b/ihp-sg13g2/libs.tech/klayout/tech/lvs/testing/testcases/unit/res_devices/netlist/res_metal3.cdl new file mode 100644 index 00000000..4747b168 --- /dev/null +++ b/ihp-sg13g2/libs.tech/klayout/tech/lvs/testing/testcases/unit/res_devices/netlist/res_metal3.cdl @@ -0,0 +1,22 @@ +*========================================================================== +* Copyright 2024 IHP PDK Authors +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* https://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* SPDX-License-Identifier: Apache-2.0 +*========================================================================== + +.SUBCKT res_metal3 +Rm1 net1 net2 $[res_metal3] 20k l=1u w=5u +Rm2 net3 net4 res_metal3 \ l=1.5u w =5u +Rm3 net5 net6 res_metal3 / length =1u width=6u +.ENDS diff --git a/ihp-sg13g2/libs.tech/klayout/tech/lvs/testing/testcases/unit/res_devices/netlist/res_metal4.cdl b/ihp-sg13g2/libs.tech/klayout/tech/lvs/testing/testcases/unit/res_devices/netlist/res_metal4.cdl new file mode 100644 index 00000000..f3711a4c --- /dev/null +++ b/ihp-sg13g2/libs.tech/klayout/tech/lvs/testing/testcases/unit/res_devices/netlist/res_metal4.cdl @@ -0,0 +1,22 @@ +*========================================================================== +* Copyright 2024 IHP PDK Authors +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* https://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* SPDX-License-Identifier: Apache-2.0 +*========================================================================== + +.SUBCKT res_metal4 +Rm1 net1 net2 $[res_metal4] 20k l=1u w=5u +Rm2 net3 net4 res_metal4 \ l=1.5u w =5u +Rm3 net5 net6 res_metal4 / length =1u width=6u +.ENDS diff --git a/ihp-sg13g2/libs.tech/klayout/tech/lvs/testing/testcases/unit/res_devices/netlist/res_metal5.cdl b/ihp-sg13g2/libs.tech/klayout/tech/lvs/testing/testcases/unit/res_devices/netlist/res_metal5.cdl new file mode 100644 index 00000000..96b24ceb --- /dev/null +++ b/ihp-sg13g2/libs.tech/klayout/tech/lvs/testing/testcases/unit/res_devices/netlist/res_metal5.cdl @@ -0,0 +1,22 @@ +*========================================================================== +* Copyright 2024 IHP PDK Authors +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* https://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* SPDX-License-Identifier: Apache-2.0 +*========================================================================== + +.SUBCKT res_metal5 +Rm1 net1 net2 $[res_metal5] 20k l=1u w=5u +Rm2 net3 net4 res_metal5 \ l=1.5u w =5u +Rm3 net5 net6 res_metal5 / length =1u width=6u +.ENDS diff --git a/ihp-sg13g2/libs.tech/klayout/tech/lvs/testing/testcases/unit/res_devices/netlist/res_topmetal1.cdl b/ihp-sg13g2/libs.tech/klayout/tech/lvs/testing/testcases/unit/res_devices/netlist/res_topmetal1.cdl new file mode 100644 index 00000000..2c4cb99d --- /dev/null +++ b/ihp-sg13g2/libs.tech/klayout/tech/lvs/testing/testcases/unit/res_devices/netlist/res_topmetal1.cdl @@ -0,0 +1,22 @@ +*========================================================================== +* Copyright 2024 IHP PDK Authors +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* https://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* SPDX-License-Identifier: Apache-2.0 +*========================================================================== + +.SUBCKT res_topmetal1 +Rm1 net1 net2 $[res_topmetal1] 20k l=1u w=5u +Rm2 net3 net4 res_topmetal1 \ l=1.5u w =5u +Rm3 net5 net6 res_topmetal1 / length =1u width=6u +.ENDS diff --git a/ihp-sg13g2/libs.tech/klayout/tech/lvs/testing/testcases/unit/res_devices/netlist/res_topmetal2.cdl b/ihp-sg13g2/libs.tech/klayout/tech/lvs/testing/testcases/unit/res_devices/netlist/res_topmetal2.cdl new file mode 100644 index 00000000..f1a91aa5 --- /dev/null +++ b/ihp-sg13g2/libs.tech/klayout/tech/lvs/testing/testcases/unit/res_devices/netlist/res_topmetal2.cdl @@ -0,0 +1,22 @@ +*========================================================================== +* Copyright 2024 IHP PDK Authors +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* https://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* SPDX-License-Identifier: Apache-2.0 +*========================================================================== + +.SUBCKT res_topmetal2 +Rm1 net1 net2 $[res_topmetal2] 20k l=1u w=5u +Rm2 net3 net4 res_topmetal2 \ l=1.5u w =5u +Rm3 net5 net6 res_topmetal2 / length =1u width=6u +.ENDS diff --git a/ihp-sg13g2/libs.tech/klayout/tech/lvs/testing/testcases/unit/res_devices/netlist/rhigh.cdl b/ihp-sg13g2/libs.tech/klayout/tech/lvs/testing/testcases/unit/res_devices/netlist/rhigh.cdl index 089192de..15672863 100644 --- a/ihp-sg13g2/libs.tech/klayout/tech/lvs/testing/testcases/unit/res_devices/netlist/rhigh.cdl +++ b/ihp-sg13g2/libs.tech/klayout/tech/lvs/testing/testcases/unit/res_devices/netlist/rhigh.cdl @@ -19,8 +19,8 @@ Rh1 net1 net2 rhigh m=1 l=0.96u w=0.5u Rh2 net3 net4 rhigh m=1 l=1u w=0.5u Rh3 net5 net6 rhigh m=1 l=1.2u w=0.7u -Rh4 net7 net8 rhigh m=1 l=1u w=0.5u ps=0.2u b=1 -Rh5 net9 net10 rhigh m=1 l=1.2u w=0.5u ps=0.2u b=2 +Rh4 net7 net8 rhigh m=1 l=1.5u w=0.5u ps=0.2u b=1 +Rh5 net9 net10 rhigh m=1 l=1.7u w=0.5u ps=0.2u b=2 ** Testing combiner * res-A R1 p_split p1 rhigh w=0.5e-6 l=30e-6 m=1 b=0 @@ -33,83 +33,83 @@ R2 p_intern p6 rhigh w=0.5e-6 l=10e-6 m=1 b=0 M1 p_intern G S B sg13_lv_nmos w=0.15e-6 l=0.2e-6 m=1 ng=1 * Extra patterns -R_pattern_1 a_1 b_1 rhigh w=5.85u l=5.4u b=3 ps=0.2u -R_pattern_2 a_2 b_2 rhigh w=1.67u l=9.14u b=6 ps=0.19u -R_pattern_3 a_3 b_3 rhigh w=4.69u l=7.11u b=4 ps=0.19u -R_pattern_4 a_4 b_4 rhigh w=5.02u l=0.82u b=4 ps=0.2u -R_pattern_5 a_5 b_5 rhigh w=0.64u l=6.3u b=2 ps=0.2u -R_pattern_6 a_6 b_6 rhigh w=4.64u l=1.98u b=4 ps=0.19u -R_pattern_7 a_7 b_7 rhigh w=3.93u l=9.34u b=8 ps=0.19u -R_pattern_8 a_8 b_8 rhigh w=5.1u l=3.03u b=9 ps=0.2u -R_pattern_9 a_9 b_9 rhigh w=5.1u l=9.34u b=4 ps=0.2u -R_pattern_10 a_10 b_10 rhigh w=3.93u l=1.98u b=2 ps=0.2u -R_pattern_11 a_11 b_11 rhigh w=4.64u l=6.3u b=4 ps=0.19u -R_pattern_12 a_12 b_12 rhigh w=0.64u l=0.82u b=4 ps=0.19u -R_pattern_13 a_13 b_13 rhigh w=5.02u l=7.11u b=6 ps=0.2u -R_pattern_14 a_14 b_14 rhigh w=4.69u l=9.14u b=3 ps=0.2u -R_pattern_15 a_15 b_15 rhigh w=1.67u l=5.4u b=9 ps=0.19u -R_pattern_16 a_16 b_16 rhigh w=5.85u l=3.03u b=8 ps=0.19u -R_pattern_17 a_17 b_17 rhigh w=1.67u l=3.03u b=2 ps=0.19u -R_pattern_18 a_18 b_18 rhigh w=5.02u l=9.34u b=4 ps=0.19u -R_pattern_19 a_19 b_19 rhigh w=4.64u l=9.14u b=8 ps=0.2u -R_pattern_20 a_20 b_20 rhigh w=5.1u l=5.4u b=4 ps=0.19u -R_pattern_21 a_21 b_21 rhigh w=5.85u l=0.82u b=6 ps=0.19u -R_pattern_22 a_22 b_22 rhigh w=4.69u l=1.98u b=9 ps=0.19u -R_pattern_23 a_23 b_23 rhigh w=0.64u l=7.11u b=3 ps=0.19u -R_pattern_24 a_24 b_24 rhigh w=3.93u l=6.3u b=4 ps=0.19u -R_pattern_25 a_25 b_25 rhigh w=1.67u l=6.3u b=4 ps=0.2u -R_pattern_26 a_26 b_26 rhigh w=3.93u l=7.11u b=4 ps=0.19u -R_pattern_27 a_27 b_27 rhigh w=0.64u l=5.4u b=4 ps=0.19u -R_pattern_28 a_28 b_28 rhigh w=4.69u l=3.03u b=4 ps=0.19u -R_pattern_29 a_29 b_29 rhigh w=5.85u l=9.34u b=2 ps=0.19u -R_pattern_30 a_30 b_30 rhigh w=5.1u l=9.14u b=2 ps=0.19u -R_pattern_31 a_31 b_31 rhigh w=4.64u l=0.82u b=9 ps=0.19u -R_pattern_32 a_32 b_32 rhigh w=5.02u l=1.98u b=3 ps=0.19u -R_pattern_33 a_33 b_33 rhigh w=5.02u l=3.03u b=8 ps=0.19u -R_pattern_34 a_34 b_34 rhigh w=4.64u l=5.4u b=6 ps=0.19u -R_pattern_35 a_35 b_35 rhigh w=5.1u l=7.11u b=8 ps=0.19u -R_pattern_36 a_36 b_36 rhigh w=5.85u l=6.3u b=9 ps=0.19u -R_pattern_37 a_37 b_37 rhigh w=4.69u l=0.82u b=2 ps=0.19u -R_pattern_38 a_38 b_38 rhigh w=0.64u l=9.34u b=9 ps=0.19u -R_pattern_39 a_39 b_39 rhigh w=3.93u l=9.14u b=9 ps=0.19u -R_pattern_40 a_40 b_40 rhigh w=1.67u l=1.98u b=4 ps=0.19u -R_pattern_41 a_41 b_41 rhigh w=1.67u l=0.82u b=3 ps=0.19u -R_pattern_42 a_42 b_42 rhigh w=3.93u l=3.03u b=6 ps=0.19u -R_pattern_43 a_43 b_43 rhigh w=0.64u l=1.98u b=6 ps=0.19u -R_pattern_44 a_44 b_44 rhigh w=4.69u l=5.4u b=8 ps=0.19u -R_pattern_45 a_45 b_45 rhigh w=5.85u l=9.14u b=4 ps=0.19u -R_pattern_46 a_46 b_46 rhigh w=5.1u l=6.3u b=3 ps=0.19u -R_pattern_47 a_47 b_47 rhigh w=4.64u l=7.11u b=2 ps=0.19u -R_pattern_48 a_48 b_48 rhigh w=5.02u l=6.3u b=4 ps=0.19u -R_pattern_49 a_49 b_49 rhigh w=5.02u l=9.14u b=4 ps=0.19u -R_pattern_50 a_50 b_50 rhigh w=4.64u l=9.34u b=3 ps=0.19u -R_pattern_51 a_51 b_51 rhigh w=5.1u l=1.98u b=4 ps=0.19u -R_pattern_52 a_52 b_52 rhigh w=5.85u l=7.11u b=4 ps=0.19u -R_pattern_53 a_53 b_53 rhigh w=4.69u l=9.34u b=4 ps=0.19u -R_pattern_54 a_54 b_54 rhigh w=0.64u l=3.03u b=4 ps=0.19u -R_pattern_55 a_55 b_55 rhigh w=3.93u l=0.82u b=4 ps=0.19u -R_pattern_56 a_56 b_56 rhigh w=1.67u l=9.34u b=6 ps=0.19u -R_pattern_57 a_57 b_57 rhigh w=5.02u l=5.4u b=2 ps=0.19u -R_pattern_58 a_58 b_58 rhigh w=1.67u l=7.11u b=9 ps=0.19u -R_pattern_59 a_59 b_59 rhigh w=4.64u l=3.03u b=4 ps=0.19u -R_pattern_60 a_60 b_60 rhigh w=1.67u l=0.82u b=8 ps=0.19u -R_pattern_61 a_61 b_61 rhigh w=3.93u l=5.4u b=3 ps=0.19u -R_pattern_62 a_62 b_62 rhigh w=0.64u l=9.14u b=8 ps=0.19u -R_pattern_63 a_63 b_63 rhigh w=4.69u l=6.3u b=6 ps=0.19u -R_pattern_64 a_64 b_64 rhigh w=5.85u l=1.98u b=4 ps=0.19u -R_pattern_65 a_65 b_65 rhigh w=5.1u l=0.82u b=6 ps=0.19u -R_pattern_66 a_66 b_66 rhigh w=5.02u l=0.82u b=9 ps=0.19u -R_pattern_67 a_67 b_67 rhigh w=1.67u l=0.82u b=4 ps=0.19u -R_pattern_68 a_68 b_68 rhigh w=5.1u l=1.98u b=8 ps=0.19u -R_pattern_69 a_69 b_69 rhigh w=5.1u l=9.14u b=4 ps=0.19u -R_pattern_70 a_70 b_70 rhigh w=5.1u l=5.4u b=4 ps=0.19u -R_pattern_71 a_71 b_71 rhigh w=5.1u l=3.03u b=4 ps=0.19u -R_pattern_72 a_72 b_72 rhigh w=5.85u l=3.03u b=3 ps=0.19u -R_pattern_73 a_73 b_73 rhigh w=4.69u l=1.98u b=4 ps=0.19u -R_pattern_74 a_74 b_74 rhigh w=0.64u l=6.3u b=8 ps=0.19u -R_pattern_75 a_75 b_75 rhigh w=3.93u l=7.11u b=4 ps=0.19u -R_pattern_76 a_76 b_76 rhigh w=3.93u l=7.11u b=2 ps=0.19u -R_pattern_77 a_77 b_77 rhigh w=3.93u l=7.11u b=4 ps=0.19u -R_pattern_78 a_78 b_78 rhigh w=4.64u l=7.11u b=4 ps=0.19u -R_pattern_79 a_79 b_79 rhigh w=5.1u l=9.34u b=4 ps=0.19u +R_pattern_1 a_1 b_1 rhigh w=5.85u l=11.25u b=3 ps=0.2u +R_pattern_2 a_2 b_2 rhigh w=1.67u l=10.81u b=6 ps=0.19u +R_pattern_3 a_3 b_3 rhigh w=4.69u l=11.80u b=4 ps=0.19u +R_pattern_4 a_4 b_4 rhigh w=5.02u l=5.84u b=4 ps=0.2u +R_pattern_5 a_5 b_5 rhigh w=0.64u l=6.94u b=2 ps=0.2u +R_pattern_6 a_6 b_6 rhigh w=4.64u l=6.62u b=4 ps=0.19u +R_pattern_7 a_7 b_7 rhigh w=3.93u l=13.27u b=8 ps=0.19u +R_pattern_8 a_8 b_8 rhigh w=5.1u l=8.13u b=9 ps=0.2u +R_pattern_9 a_9 b_9 rhigh w=5.1u l=14.44u b=4 ps=0.2u +R_pattern_10 a_10 b_10 rhigh w=3.93u l=5.91u b=2 ps=0.2u +R_pattern_11 a_11 b_11 rhigh w=4.64u l=10.94u b=4 ps=0.19u +R_pattern_12 a_12 b_12 rhigh w=0.64u l=1.46u b=4 ps=0.19u +R_pattern_13 a_13 b_13 rhigh w=5.02u l=12.13u b=6 ps=0.2u +R_pattern_14 a_14 b_14 rhigh w=4.69u l=13.83u b=3 ps=0.2u +R_pattern_15 a_15 b_15 rhigh w=1.67u l=7.07u b=9 ps=0.19u +R_pattern_16 a_16 b_16 rhigh w=5.85u l=8.88u b=8 ps=0.19u +R_pattern_17 a_17 b_17 rhigh w=1.67u l=4.70u b=2 ps=0.19u +R_pattern_18 a_18 b_18 rhigh w=5.02u l=14.36u b=4 ps=0.19u +R_pattern_19 a_19 b_19 rhigh w=4.64u l=13.78u b=8 ps=0.2u +R_pattern_20 a_20 b_20 rhigh w=5.1u l=10.50u b=4 ps=0.19u +R_pattern_21 a_21 b_21 rhigh w=5.85u l=6.67u b=6 ps=0.19u +R_pattern_22 a_22 b_22 rhigh w=4.69u l=6.67u b=9 ps=0.19u +R_pattern_23 a_23 b_23 rhigh w=0.64u l=7.75u b=3 ps=0.19u +R_pattern_24 a_24 b_24 rhigh w=3.93u l=10.23u b=4 ps=0.19u +R_pattern_25 a_25 b_25 rhigh w=1.67u l=7.97u b=4 ps=0.2u +R_pattern_26 a_26 b_26 rhigh w=3.93u l=11.04u b=4 ps=0.19u +R_pattern_27 a_27 b_27 rhigh w=0.64u l=6.04u b=4 ps=0.19u +R_pattern_28 a_28 b_28 rhigh w=4.69u l=7.72u b=4 ps=0.19u +R_pattern_29 a_29 b_29 rhigh w=5.85u l=15.19u b=2 ps=0.19u +R_pattern_30 a_30 b_30 rhigh w=5.1u l=14.24u b=2 ps=0.19u +R_pattern_31 a_31 b_31 rhigh w=4.64u l=5.46u b=9 ps=0.19u +R_pattern_32 a_32 b_32 rhigh w=5.02u l=7.00u b=3 ps=0.19u +R_pattern_33 a_33 b_33 rhigh w=5.02u l=8.05u b=8 ps=0.19u +R_pattern_34 a_34 b_34 rhigh w=4.64u l=10.04u b=6 ps=0.19u +R_pattern_35 a_35 b_35 rhigh w=5.1u l=12.21u b=8 ps=0.19u +R_pattern_36 a_36 b_36 rhigh w=5.85u l=12.15u b=9 ps=0.19u +R_pattern_37 a_37 b_37 rhigh w=4.69u l=5.51u b=2 ps=0.19u +R_pattern_38 a_38 b_38 rhigh w=0.64u l=9.98u b=9 ps=0.19u +R_pattern_39 a_39 b_39 rhigh w=3.93u l=13.07u b=9 ps=0.19u +R_pattern_40 a_40 b_40 rhigh w=1.67u l=3.65u b=4 ps=0.19u +R_pattern_41 a_41 b_41 rhigh w=1.67u l=2.49u b=3 ps=0.19u +R_pattern_42 a_42 b_42 rhigh w=3.93u l=6.96u b=6 ps=0.19u +R_pattern_43 a_43 b_43 rhigh w=0.64u l=2.62u b=6 ps=0.19u +R_pattern_44 a_44 b_44 rhigh w=4.69u l=10.09u b=8 ps=0.19u +R_pattern_45 a_45 b_45 rhigh w=5.85u l=14.99u b=4 ps=0.19u +R_pattern_46 a_46 b_46 rhigh w=5.1u l=11.40u b=3 ps=0.19u +R_pattern_47 a_47 b_47 rhigh w=4.64u l=11.75u b=2 ps=0.19u +R_pattern_48 a_48 b_48 rhigh w=5.02u l=11.32u b=4 ps=0.19u +R_pattern_49 a_49 b_49 rhigh w=5.02u l=14.16u b=4 ps=0.19u +R_pattern_50 a_50 b_50 rhigh w=4.64u l=13.98u b=3 ps=0.19u +R_pattern_51 a_51 b_51 rhigh w=5.1u l=7.08u b=4 ps=0.19u +R_pattern_52 a_52 b_52 rhigh w=5.85u l=12.96u b=4 ps=0.19u +R_pattern_53 a_53 b_53 rhigh w=4.69u l=14.03u b=4 ps=0.19u +R_pattern_54 a_54 b_54 rhigh w=0.64u l=3.67u b=4 ps=0.19u +R_pattern_55 a_55 b_55 rhigh w=3.93u l=4.75u b=4 ps=0.19u +R_pattern_56 a_56 b_56 rhigh w=1.67u l=11.01u b=6 ps=0.19u +R_pattern_57 a_57 b_57 rhigh w=5.02u l=10.42u b=2 ps=0.19u +R_pattern_58 a_58 b_58 rhigh w=1.67u l=8.78u b=9 ps=0.19u +R_pattern_59 a_59 b_59 rhigh w=4.64u l=7.67u b=4 ps=0.19u +R_pattern_60 a_60 b_60 rhigh w=1.67u l=2.49u b=8 ps=0.19u +R_pattern_61 a_61 b_61 rhigh w=3.93u l=9.33u b=3 ps=0.19u +R_pattern_62 a_62 b_62 rhigh w=0.64u l=9.78u b=8 ps=0.19u +R_pattern_63 a_63 b_63 rhigh w=4.69u l=10.99u b=6 ps=0.19u +R_pattern_64 a_64 b_64 rhigh w=5.85u l=7.83u b=4 ps=0.19u +R_pattern_65 a_65 b_65 rhigh w=5.1u l=5.92u b=6 ps=0.19u +R_pattern_66 a_66 b_66 rhigh w=5.02u l=5.84u b=9 ps=0.19u +R_pattern_67 a_67 b_67 rhigh w=1.67u l=2.49u b=4 ps=0.19u +R_pattern_68 a_68 b_68 rhigh w=5.1u l=7.08u b=8 ps=0.19u +R_pattern_69 a_69 b_69 rhigh w=5.1u l=14.24u b=4 ps=0.19u +R_pattern_70 a_70 b_70 rhigh w=5.1u l=10.50u b=4 ps=0.19u +R_pattern_71 a_71 b_71 rhigh w=5.1u l=8.13u b=4 ps=0.19u +R_pattern_72 a_72 b_72 rhigh w=5.85u l=8.88u b=3 ps=0.19u +R_pattern_73 a_73 b_73 rhigh w=4.69u l=6.67u b=4 ps=0.19u +R_pattern_74 a_74 b_74 rhigh w=0.64u l=6.94u b=8 ps=0.19u +R_pattern_75 a_75 b_75 rhigh w=3.93u l=11.04u b=4 ps=0.19u +R_pattern_76 a_76 b_76 rhigh w=3.93u l=11.04u b=2 ps=0.19u +R_pattern_77 a_77 b_77 rhigh w=3.93u l=11.04u b=4 ps=0.19u +R_pattern_78 a_78 b_78 rhigh w=4.64u l=11.75u b=4 ps=0.19u +R_pattern_79 a_79 b_79 rhigh w=5.1u l=14.44u b=4 ps=0.19u .ENDS diff --git a/ihp-sg13g2/libs.tech/klayout/tech/lvs/testing/testcases/unit/res_devices/netlist/rppd.cdl b/ihp-sg13g2/libs.tech/klayout/tech/lvs/testing/testcases/unit/res_devices/netlist/rppd.cdl index ed71a67c..c90f4274 100644 --- a/ihp-sg13g2/libs.tech/klayout/tech/lvs/testing/testcases/unit/res_devices/netlist/rppd.cdl +++ b/ihp-sg13g2/libs.tech/klayout/tech/lvs/testing/testcases/unit/res_devices/netlist/rppd.cdl @@ -19,87 +19,87 @@ Rp1 net1 net2 rppd m=1 l=0.5u w=0.5u Rp2 net3 net4 rppd m=1 l=1u w=0.5u Rp3 net5 net6 rppd m=1 l=1.2u w=0.7u -Rp4 net7 net8 rppd m=1 l=1u w=0.5u ps=0.2u b=1 -Rp5 net9 net10 rppd m=1 l=1.2u w=0.5u ps=0.2u b=2 +Rp4 net7 net8 rppd m=1 l=1.5u w=0.5u ps=0.2u b=1 +Rp5 net9 net10 rppd m=1 l=1.7u w=0.5u ps=0.2u b=2 * Extra patterns -R_pattern_1 a_1 b_1 rppd w=5.85u l=5.4u b=3 ps=0.2u -R_pattern_2 a_2 b_2 rppd w=1.67u l=9.14u b=6 ps=0.19u -R_pattern_3 a_3 b_3 rppd w=4.69u l=7.11u b=4 ps=0.19u -R_pattern_4 a_4 b_4 rppd w=5.02u l=0.82u b=4 ps=0.2u -R_pattern_5 a_5 b_5 rppd w=0.64u l=6.3u b=2 ps=0.2u -R_pattern_6 a_6 b_6 rppd w=4.64u l=1.98u b=4 ps=0.19u -R_pattern_7 a_7 b_7 rppd w=3.93u l=9.34u b=8 ps=0.19u -R_pattern_8 a_8 b_8 rppd w=5.1u l=3.03u b=9 ps=0.2u -R_pattern_9 a_9 b_9 rppd w=5.1u l=9.34u b=4 ps=0.2u -R_pattern_10 a_10 b_10 rppd w=3.93u l=1.98u b=2 ps=0.2u -R_pattern_11 a_11 b_11 rppd w=4.64u l=6.3u b=4 ps=0.19u -R_pattern_12 a_12 b_12 rppd w=0.64u l=0.82u b=4 ps=0.19u -R_pattern_13 a_13 b_13 rppd w=5.02u l=7.11u b=6 ps=0.2u -R_pattern_14 a_14 b_14 rppd w=4.69u l=9.14u b=3 ps=0.2u -R_pattern_15 a_15 b_15 rppd w=1.67u l=5.4u b=9 ps=0.19u -R_pattern_16 a_16 b_16 rppd w=5.85u l=3.03u b=8 ps=0.19u -R_pattern_17 a_17 b_17 rppd w=1.67u l=3.03u b=2 ps=0.19u -R_pattern_18 a_18 b_18 rppd w=5.02u l=9.34u b=4 ps=0.19u -R_pattern_19 a_19 b_19 rppd w=4.64u l=9.14u b=8 ps=0.2u -R_pattern_20 a_20 b_20 rppd w=5.1u l=5.4u b=4 ps=0.19u -R_pattern_21 a_21 b_21 rppd w=5.85u l=0.82u b=6 ps=0.19u -R_pattern_22 a_22 b_22 rppd w=4.69u l=1.98u b=9 ps=0.19u -R_pattern_23 a_23 b_23 rppd w=0.64u l=7.11u b=3 ps=0.19u -R_pattern_24 a_24 b_24 rppd w=3.93u l=6.3u b=4 ps=0.19u -R_pattern_25 a_25 b_25 rppd w=1.67u l=6.3u b=4 ps=0.2u -R_pattern_26 a_26 b_26 rppd w=3.93u l=7.11u b=4 ps=0.19u -R_pattern_27 a_27 b_27 rppd w=0.64u l=5.4u b=4 ps=0.19u -R_pattern_28 a_28 b_28 rppd w=4.69u l=3.03u b=4 ps=0.19u -R_pattern_29 a_29 b_29 rppd w=5.85u l=9.34u b=2 ps=0.19u -R_pattern_30 a_30 b_30 rppd w=5.1u l=9.14u b=2 ps=0.19u -R_pattern_31 a_31 b_31 rppd w=4.64u l=0.82u b=9 ps=0.19u -R_pattern_32 a_32 b_32 rppd w=5.02u l=1.98u b=3 ps=0.19u -R_pattern_33 a_33 b_33 rppd w=5.02u l=3.03u b=8 ps=0.19u -R_pattern_34 a_34 b_34 rppd w=4.64u l=5.4u b=6 ps=0.19u -R_pattern_35 a_35 b_35 rppd w=5.1u l=7.11u b=8 ps=0.19u -R_pattern_36 a_36 b_36 rppd w=5.85u l=6.3u b=9 ps=0.19u -R_pattern_37 a_37 b_37 rppd w=4.69u l=0.82u b=2 ps=0.19u -R_pattern_38 a_38 b_38 rppd w=0.64u l=9.34u b=9 ps=0.19u -R_pattern_39 a_39 b_39 rppd w=3.93u l=9.14u b=9 ps=0.19u -R_pattern_40 a_40 b_40 rppd w=1.67u l=1.98u b=4 ps=0.19u -R_pattern_41 a_41 b_41 rppd w=1.67u l=0.82u b=3 ps=0.19u -R_pattern_42 a_42 b_42 rppd w=3.93u l=3.03u b=6 ps=0.19u -R_pattern_43 a_43 b_43 rppd w=0.64u l=1.98u b=6 ps=0.19u -R_pattern_44 a_44 b_44 rppd w=4.69u l=5.4u b=8 ps=0.19u -R_pattern_45 a_45 b_45 rppd w=5.85u l=9.14u b=4 ps=0.19u -R_pattern_46 a_46 b_46 rppd w=5.1u l=6.3u b=3 ps=0.19u -R_pattern_47 a_47 b_47 rppd w=4.64u l=7.11u b=2 ps=0.19u -R_pattern_48 a_48 b_48 rppd w=5.02u l=6.3u b=4 ps=0.19u -R_pattern_49 a_49 b_49 rppd w=5.02u l=9.14u b=4 ps=0.19u -R_pattern_50 a_50 b_50 rppd w=4.64u l=9.34u b=3 ps=0.19u -R_pattern_51 a_51 b_51 rppd w=5.1u l=1.98u b=4 ps=0.19u -R_pattern_52 a_52 b_52 rppd w=5.85u l=7.11u b=4 ps=0.19u -R_pattern_53 a_53 b_53 rppd w=4.69u l=9.34u b=4 ps=0.19u -R_pattern_54 a_54 b_54 rppd w=0.64u l=3.03u b=4 ps=0.19u -R_pattern_55 a_55 b_55 rppd w=3.93u l=0.82u b=4 ps=0.19u -R_pattern_56 a_56 b_56 rppd w=1.67u l=9.34u b=6 ps=0.19u -R_pattern_57 a_57 b_57 rppd w=5.02u l=5.4u b=2 ps=0.19u -R_pattern_58 a_58 b_58 rppd w=1.67u l=7.11u b=9 ps=0.19u -R_pattern_59 a_59 b_59 rppd w=4.64u l=3.03u b=4 ps=0.19u -R_pattern_60 a_60 b_60 rppd w=1.67u l=0.82u b=8 ps=0.19u -R_pattern_61 a_61 b_61 rppd w=3.93u l=5.4u b=3 ps=0.19u -R_pattern_62 a_62 b_62 rppd w=0.64u l=9.14u b=8 ps=0.19u -R_pattern_63 a_63 b_63 rppd w=4.69u l=6.3u b=6 ps=0.19u -R_pattern_64 a_64 b_64 rppd w=5.85u l=1.98u b=4 ps=0.19u -R_pattern_65 a_65 b_65 rppd w=5.1u l=0.82u b=6 ps=0.19u -R_pattern_66 a_66 b_66 rppd w=5.02u l=0.82u b=9 ps=0.19u -R_pattern_67 a_67 b_67 rppd w=1.67u l=0.82u b=4 ps=0.19u -R_pattern_68 a_68 b_68 rppd w=5.1u l=1.98u b=8 ps=0.19u -R_pattern_69 a_69 b_69 rppd w=5.1u l=9.14u b=4 ps=0.19u -R_pattern_70 a_70 b_70 rppd w=5.1u l=5.4u b=4 ps=0.19u -R_pattern_71 a_71 b_71 rppd w=5.1u l=3.03u b=4 ps=0.19u -R_pattern_72 a_72 b_72 rppd w=5.85u l=3.03u b=3 ps=0.19u -R_pattern_73 a_73 b_73 rppd w=4.69u l=1.98u b=4 ps=0.19u -R_pattern_74 a_74 b_74 rppd w=0.64u l=6.3u b=8 ps=0.19u -R_pattern_75 a_75 b_75 rppd w=3.93u l=7.11u b=4 ps=0.19u -R_pattern_76 a_76 b_76 rppd w=3.93u l=7.11u b=2 ps=0.19u -R_pattern_77 a_77 b_77 rppd w=3.93u l=7.11u b=4 ps=0.19u -R_pattern_78 a_78 b_78 rppd w=4.64u l=7.11u b=4 ps=0.19u -R_pattern_79 a_79 b_79 rppd w=5.1u l=9.34u b=4 ps=0.19u +R_pattern_1 a_1 b_1 rppd w=5.85u l=11.25u b=3 ps=0.2u +R_pattern_2 a_2 b_2 rppd w=1.67u l=10.81u b=6 ps=0.19u +R_pattern_3 a_3 b_3 rppd w=4.69u l=11.80u b=4 ps=0.19u +R_pattern_4 a_4 b_4 rppd w=5.02u l=5.84u b=4 ps=0.2u +R_pattern_5 a_5 b_5 rppd w=0.64u l=6.94u b=2 ps=0.2u +R_pattern_6 a_6 b_6 rppd w=4.64u l=6.62u b=4 ps=0.19u +R_pattern_7 a_7 b_7 rppd w=3.93u l=13.27u b=8 ps=0.19u +R_pattern_8 a_8 b_8 rppd w=5.1u l=8.13u b=9 ps=0.2u +R_pattern_9 a_9 b_9 rppd w=5.1u l=14.44u b=4 ps=0.2u +R_pattern_10 a_10 b_10 rppd w=3.93u l=5.91u b=2 ps=0.2u +R_pattern_11 a_11 b_11 rppd w=4.64u l=10.94u b=4 ps=0.19u +R_pattern_12 a_12 b_12 rppd w=0.64u l=1.46u b=4 ps=0.19u +R_pattern_13 a_13 b_13 rppd w=5.02u l=12.13u b=6 ps=0.2u +R_pattern_14 a_14 b_14 rppd w=4.69u l=13.83u b=3 ps=0.2u +R_pattern_15 a_15 b_15 rppd w=1.67u l=7.07u b=9 ps=0.19u +R_pattern_16 a_16 b_16 rppd w=5.85u l=8.88u b=8 ps=0.19u +R_pattern_17 a_17 b_17 rppd w=1.67u l=4.70u b=2 ps=0.19u +R_pattern_18 a_18 b_18 rppd w=5.02u l=14.36u b=4 ps=0.19u +R_pattern_19 a_19 b_19 rppd w=4.64u l=13.78u b=8 ps=0.2u +R_pattern_20 a_20 b_20 rppd w=5.1u l=10.50u b=4 ps=0.19u +R_pattern_21 a_21 b_21 rppd w=5.85u l=6.67u b=6 ps=0.19u +R_pattern_22 a_22 b_22 rppd w=4.69u l=6.67u b=9 ps=0.19u +R_pattern_23 a_23 b_23 rppd w=0.64u l=7.75u b=3 ps=0.19u +R_pattern_24 a_24 b_24 rppd w=3.93u l=10.23u b=4 ps=0.19u +R_pattern_25 a_25 b_25 rppd w=1.67u l=7.97u b=4 ps=0.2u +R_pattern_26 a_26 b_26 rppd w=3.93u l=11.04u b=4 ps=0.19u +R_pattern_27 a_27 b_27 rppd w=0.64u l=6.04u b=4 ps=0.19u +R_pattern_28 a_28 b_28 rppd w=4.69u l=7.72u b=4 ps=0.19u +R_pattern_29 a_29 b_29 rppd w=5.85u l=15.19u b=2 ps=0.19u +R_pattern_30 a_30 b_30 rppd w=5.1u l=14.24u b=2 ps=0.19u +R_pattern_31 a_31 b_31 rppd w=4.64u l=5.46u b=9 ps=0.19u +R_pattern_32 a_32 b_32 rppd w=5.02u l=7.00u b=3 ps=0.19u +R_pattern_33 a_33 b_33 rppd w=5.02u l=8.05u b=8 ps=0.19u +R_pattern_34 a_34 b_34 rppd w=4.64u l=10.04u b=6 ps=0.19u +R_pattern_35 a_35 b_35 rppd w=5.1u l=12.21u b=8 ps=0.19u +R_pattern_36 a_36 b_36 rppd w=5.85u l=12.15u b=9 ps=0.19u +R_pattern_37 a_37 b_37 rppd w=4.69u l=5.51u b=2 ps=0.19u +R_pattern_38 a_38 b_38 rppd w=0.64u l=9.98u b=9 ps=0.19u +R_pattern_39 a_39 b_39 rppd w=3.93u l=13.07u b=9 ps=0.19u +R_pattern_40 a_40 b_40 rppd w=1.67u l=3.65u b=4 ps=0.19u +R_pattern_41 a_41 b_41 rppd w=1.67u l=2.49u b=3 ps=0.19u +R_pattern_42 a_42 b_42 rppd w=3.93u l=6.96u b=6 ps=0.19u +R_pattern_43 a_43 b_43 rppd w=0.64u l=2.62u b=6 ps=0.19u +R_pattern_44 a_44 b_44 rppd w=4.69u l=10.09u b=8 ps=0.19u +R_pattern_45 a_45 b_45 rppd w=5.85u l=14.99u b=4 ps=0.19u +R_pattern_46 a_46 b_46 rppd w=5.1u l=11.40u b=3 ps=0.19u +R_pattern_47 a_47 b_47 rppd w=4.64u l=11.75u b=2 ps=0.19u +R_pattern_48 a_48 b_48 rppd w=5.02u l=11.32u b=4 ps=0.19u +R_pattern_49 a_49 b_49 rppd w=5.02u l=14.16u b=4 ps=0.19u +R_pattern_50 a_50 b_50 rppd w=4.64u l=13.98u b=3 ps=0.19u +R_pattern_51 a_51 b_51 rppd w=5.1u l=7.08u b=4 ps=0.19u +R_pattern_52 a_52 b_52 rppd w=5.85u l=12.96u b=4 ps=0.19u +R_pattern_53 a_53 b_53 rppd w=4.69u l=14.03u b=4 ps=0.19u +R_pattern_54 a_54 b_54 rppd w=0.64u l=3.67u b=4 ps=0.19u +R_pattern_55 a_55 b_55 rppd w=3.93u l=4.75u b=4 ps=0.19u +R_pattern_56 a_56 b_56 rppd w=1.67u l=11.01u b=6 ps=0.19u +R_pattern_57 a_57 b_57 rppd w=5.02u l=10.42u b=2 ps=0.19u +R_pattern_58 a_58 b_58 rppd w=1.67u l=8.78u b=9 ps=0.19u +R_pattern_59 a_59 b_59 rppd w=4.64u l=7.67u b=4 ps=0.19u +R_pattern_60 a_60 b_60 rppd w=1.67u l=2.49u b=8 ps=0.19u +R_pattern_61 a_61 b_61 rppd w=3.93u l=9.33u b=3 ps=0.19u +R_pattern_62 a_62 b_62 rppd w=0.64u l=9.78u b=8 ps=0.19u +R_pattern_63 a_63 b_63 rppd w=4.69u l=10.99u b=6 ps=0.19u +R_pattern_64 a_64 b_64 rppd w=5.85u l=7.83u b=4 ps=0.19u +R_pattern_65 a_65 b_65 rppd w=5.1u l=5.92u b=6 ps=0.19u +R_pattern_66 a_66 b_66 rppd w=5.02u l=5.84u b=9 ps=0.19u +R_pattern_67 a_67 b_67 rppd w=1.67u l=2.49u b=4 ps=0.19u +R_pattern_68 a_68 b_68 rppd w=5.1u l=7.08u b=8 ps=0.19u +R_pattern_69 a_69 b_69 rppd w=5.1u l=14.24u b=4 ps=0.19u +R_pattern_70 a_70 b_70 rppd w=5.1u l=10.50u b=4 ps=0.19u +R_pattern_71 a_71 b_71 rppd w=5.1u l=8.13u b=4 ps=0.19u +R_pattern_72 a_72 b_72 rppd w=5.85u l=8.88u b=3 ps=0.19u +R_pattern_73 a_73 b_73 rppd w=4.69u l=6.67u b=4 ps=0.19u +R_pattern_74 a_74 b_74 rppd w=0.64u l=6.94u b=8 ps=0.19u +R_pattern_75 a_75 b_75 rppd w=3.93u l=11.04u b=4 ps=0.19u +R_pattern_76 a_76 b_76 rppd w=3.93u l=11.04u b=2 ps=0.19u +R_pattern_77 a_77 b_77 rppd w=3.93u l=11.04u b=4 ps=0.19u +R_pattern_78 a_78 b_78 rppd w=4.64u l=11.75u b=4 ps=0.19u +R_pattern_79 a_79 b_79 rppd w=5.1u l=14.44u b=4 ps=0.19u .ENDS diff --git a/ihp-sg13g2/libs.tech/klayout/tech/lvs/testing/testcases/unit/res_devices/netlist/rsil.cdl b/ihp-sg13g2/libs.tech/klayout/tech/lvs/testing/testcases/unit/res_devices/netlist/rsil.cdl index eabf0236..053b9624 100644 --- a/ihp-sg13g2/libs.tech/klayout/tech/lvs/testing/testcases/unit/res_devices/netlist/rsil.cdl +++ b/ihp-sg13g2/libs.tech/klayout/tech/lvs/testing/testcases/unit/res_devices/netlist/rsil.cdl @@ -19,89 +19,89 @@ Rs1 net1 net2 rsil m=1 l=0.5u w=0.5u Rs2 net3 net4 rsil m=1 l=1u w=0.5u Rs3 net5 net6 rsil m=1 l=1.2u w=0.7u -Rs4 net7 net8 rsil m=1 l=1u w=0.5u ps=0.2u b=1 -Rs5 net9 net10 rsil m=1 l=1.2u w=0.5u ps=0.2u b=2 +Rs4 net7 net8 rsil m=1 l=1.5u w=0.5u ps=0.2u b=1 +Rs5 net9 net10 rsil m=1 l=1.7u w=0.5u ps=0.2u b=2 Rs6 net11 net12 rsil m=2 l=0.5u w=0.5u Rs7 net13 net14 rsil m=1 l=1u w=0.5u * Extra patterns -R_pattern_1 a_1 b_1 rsil w=5.85u l=5.4u b=3 ps=0.2u -R_pattern_2 a_2 b_2 rsil w=1.67u l=9.14u b=6 ps=0.19u -R_pattern_3 a_3 b_3 rsil w=4.69u l=7.11u b=4 ps=0.19u -R_pattern_4 a_4 b_4 rsil w=5.02u l=0.82u b=4 ps=0.2u -R_pattern_5 a_5 b_5 rsil w=0.64u l=6.3u b=2 ps=0.2u -R_pattern_6 a_6 b_6 rsil w=4.64u l=1.98u b=4 ps=0.19u -R_pattern_7 a_7 b_7 rsil w=3.93u l=9.34u b=8 ps=0.19u -R_pattern_8 a_8 b_8 rsil w=5.1u l=3.03u b=9 ps=0.2u -R_pattern_9 a_9 b_9 rsil w=5.1u l=9.34u b=4 ps=0.2u -R_pattern_10 a_10 b_10 rsil w=3.93u l=1.98u b=2 ps=0.2u -R_pattern_11 a_11 b_11 rsil w=4.64u l=6.3u b=4 ps=0.19u -R_pattern_12 a_12 b_12 rsil w=0.64u l=0.82u b=4 ps=0.19u -R_pattern_13 a_13 b_13 rsil w=5.02u l=7.11u b=6 ps=0.2u -R_pattern_14 a_14 b_14 rsil w=4.69u l=9.14u b=3 ps=0.2u -R_pattern_15 a_15 b_15 rsil w=1.67u l=5.4u b=9 ps=0.19u -R_pattern_16 a_16 b_16 rsil w=5.85u l=3.03u b=8 ps=0.19u -R_pattern_17 a_17 b_17 rsil w=1.67u l=3.03u b=2 ps=0.19u -R_pattern_18 a_18 b_18 rsil w=5.02u l=9.34u b=4 ps=0.19u -R_pattern_19 a_19 b_19 rsil w=4.64u l=9.14u b=8 ps=0.2u -R_pattern_20 a_20 b_20 rsil w=5.1u l=5.4u b=4 ps=0.19u -R_pattern_21 a_21 b_21 rsil w=5.85u l=0.82u b=6 ps=0.19u -R_pattern_22 a_22 b_22 rsil w=4.69u l=1.98u b=9 ps=0.19u -R_pattern_23 a_23 b_23 rsil w=0.64u l=7.11u b=3 ps=0.19u -R_pattern_24 a_24 b_24 rsil w=3.93u l=6.3u b=4 ps=0.19u -R_pattern_25 a_25 b_25 rsil w=1.67u l=6.3u b=4 ps=0.2u -R_pattern_26 a_26 b_26 rsil w=3.93u l=7.11u b=4 ps=0.19u -R_pattern_27 a_27 b_27 rsil w=0.64u l=5.4u b=4 ps=0.19u -R_pattern_28 a_28 b_28 rsil w=4.69u l=3.03u b=4 ps=0.19u -R_pattern_29 a_29 b_29 rsil w=5.85u l=9.34u b=2 ps=0.19u -R_pattern_30 a_30 b_30 rsil w=5.1u l=9.14u b=2 ps=0.19u -R_pattern_31 a_31 b_31 rsil w=4.64u l=0.82u b=9 ps=0.19u -R_pattern_32 a_32 b_32 rsil w=5.02u l=1.98u b=3 ps=0.19u -R_pattern_33 a_33 b_33 rsil w=5.02u l=3.03u b=8 ps=0.19u -R_pattern_34 a_34 b_34 rsil w=4.64u l=5.4u b=6 ps=0.19u -R_pattern_35 a_35 b_35 rsil w=5.1u l=7.11u b=8 ps=0.19u -R_pattern_36 a_36 b_36 rsil w=5.85u l=6.3u b=9 ps=0.19u -R_pattern_37 a_37 b_37 rsil w=4.69u l=0.82u b=2 ps=0.19u -R_pattern_38 a_38 b_38 rsil w=0.64u l=9.34u b=9 ps=0.19u -R_pattern_39 a_39 b_39 rsil w=3.93u l=9.14u b=9 ps=0.19u -R_pattern_40 a_40 b_40 rsil w=1.67u l=1.98u b=4 ps=0.19u -R_pattern_41 a_41 b_41 rsil w=1.67u l=0.82u b=3 ps=0.19u -R_pattern_42 a_42 b_42 rsil w=3.93u l=3.03u b=6 ps=0.19u -R_pattern_43 a_43 b_43 rsil w=0.64u l=1.98u b=6 ps=0.19u -R_pattern_44 a_44 b_44 rsil w=4.69u l=5.4u b=8 ps=0.19u -R_pattern_45 a_45 b_45 rsil w=5.85u l=9.14u b=4 ps=0.19u -R_pattern_46 a_46 b_46 rsil w=5.1u l=6.3u b=3 ps=0.19u -R_pattern_47 a_47 b_47 rsil w=4.64u l=7.11u b=2 ps=0.19u -R_pattern_48 a_48 b_48 rsil w=5.02u l=6.3u b=4 ps=0.19u -R_pattern_49 a_49 b_49 rsil w=5.02u l=9.14u b=4 ps=0.19u -R_pattern_50 a_50 b_50 rsil w=4.64u l=9.34u b=3 ps=0.19u -R_pattern_51 a_51 b_51 rsil w=5.1u l=1.98u b=4 ps=0.19u -R_pattern_52 a_52 b_52 rsil w=5.85u l=7.11u b=4 ps=0.19u -R_pattern_53 a_53 b_53 rsil w=4.69u l=9.34u b=4 ps=0.19u -R_pattern_54 a_54 b_54 rsil w=0.64u l=3.03u b=4 ps=0.19u -R_pattern_55 a_55 b_55 rsil w=3.93u l=0.82u b=4 ps=0.19u -R_pattern_56 a_56 b_56 rsil w=1.67u l=9.34u b=6 ps=0.19u -R_pattern_57 a_57 b_57 rsil w=5.02u l=5.4u b=2 ps=0.19u -R_pattern_58 a_58 b_58 rsil w=1.67u l=7.11u b=9 ps=0.19u -R_pattern_59 a_59 b_59 rsil w=4.64u l=3.03u b=4 ps=0.19u -R_pattern_60 a_60 b_60 rsil w=1.67u l=0.82u b=8 ps=0.19u -R_pattern_61 a_61 b_61 rsil w=3.93u l=5.4u b=3 ps=0.19u -R_pattern_62 a_62 b_62 rsil w=0.64u l=9.14u b=8 ps=0.19u -R_pattern_63 a_63 b_63 rsil w=4.69u l=6.3u b=6 ps=0.19u -R_pattern_64 a_64 b_64 rsil w=5.85u l=1.98u b=4 ps=0.19u -R_pattern_65 a_65 b_65 rsil w=5.1u l=0.82u b=6 ps=0.19u -R_pattern_66 a_66 b_66 rsil w=5.02u l=0.82u b=9 ps=0.19u -R_pattern_67 a_67 b_67 rsil w=1.67u l=0.82u b=4 ps=0.19u -R_pattern_68 a_68 b_68 rsil w=5.1u l=1.98u b=8 ps=0.19u -R_pattern_69 a_69 b_69 rsil w=5.1u l=9.14u b=4 ps=0.19u -R_pattern_70 a_70 b_70 rsil w=5.1u l=5.4u b=4 ps=0.19u -R_pattern_71 a_71 b_71 rsil w=5.1u l=3.03u b=4 ps=0.19u -R_pattern_72 a_72 b_72 rsil w=5.85u l=3.03u b=3 ps=0.19u -R_pattern_73 a_73 b_73 rsil w=4.69u l=1.98u b=4 ps=0.19u -R_pattern_74 a_74 b_74 rsil w=0.64u l=6.3u b=8 ps=0.19u -R_pattern_75 a_75 b_75 rsil w=3.93u l=7.11u b=4 ps=0.19u -R_pattern_76 a_76 b_76 rsil w=3.93u l=7.11u b=2 ps=0.19u -R_pattern_77 a_77 b_77 rsil w=3.93u l=7.11u b=4 ps=0.19u -R_pattern_78 a_78 b_78 rsil w=4.64u l=7.11u b=4 ps=0.19u -R_pattern_79 a_79 b_79 rsil w=5.1u l=9.34u b=4 ps=0.19u +R_pattern_1 a_1 b_1 rsil w=5.85u l=11.25u b=3 ps=0.2u +R_pattern_2 a_2 b_2 rsil w=1.67u l=10.81u b=6 ps=0.19u +R_pattern_3 a_3 b_3 rsil w=4.69u l=11.80u b=4 ps=0.19u +R_pattern_4 a_4 b_4 rsil w=5.02u l=5.84u b=4 ps=0.2u +R_pattern_5 a_5 b_5 rsil w=0.64u l=6.94u b=2 ps=0.2u +R_pattern_6 a_6 b_6 rsil w=4.64u l=6.62u b=4 ps=0.19u +R_pattern_7 a_7 b_7 rsil w=3.93u l=13.27u b=8 ps=0.19u +R_pattern_8 a_8 b_8 rsil w=5.1u l=8.13u b=9 ps=0.2u +R_pattern_9 a_9 b_9 rsil w=5.1u l=14.44u b=4 ps=0.2u +R_pattern_10 a_10 b_10 rsil w=3.93u l=5.91u b=2 ps=0.2u +R_pattern_11 a_11 b_11 rsil w=4.64u l=10.94u b=4 ps=0.19u +R_pattern_12 a_12 b_12 rsil w=0.64u l=1.46u b=4 ps=0.19u +R_pattern_13 a_13 b_13 rsil w=5.02u l=12.13u b=6 ps=0.2u +R_pattern_14 a_14 b_14 rsil w=4.69u l=13.83u b=3 ps=0.2u +R_pattern_15 a_15 b_15 rsil w=1.67u l=7.07u b=9 ps=0.19u +R_pattern_16 a_16 b_16 rsil w=5.85u l=8.88u b=8 ps=0.19u +R_pattern_17 a_17 b_17 rsil w=1.67u l=4.70u b=2 ps=0.19u +R_pattern_18 a_18 b_18 rsil w=5.02u l=14.36u b=4 ps=0.19u +R_pattern_19 a_19 b_19 rsil w=4.64u l=13.78u b=8 ps=0.2u +R_pattern_20 a_20 b_20 rsil w=5.1u l=10.50u b=4 ps=0.19u +R_pattern_21 a_21 b_21 rsil w=5.85u l=6.67u b=6 ps=0.19u +R_pattern_22 a_22 b_22 rsil w=4.69u l=6.67u b=9 ps=0.19u +R_pattern_23 a_23 b_23 rsil w=0.64u l=7.75u b=3 ps=0.19u +R_pattern_24 a_24 b_24 rsil w=3.93u l=10.23u b=4 ps=0.19u +R_pattern_25 a_25 b_25 rsil w=1.67u l=7.97u b=4 ps=0.2u +R_pattern_26 a_26 b_26 rsil w=3.93u l=11.04u b=4 ps=0.19u +R_pattern_27 a_27 b_27 rsil w=0.64u l=6.04u b=4 ps=0.19u +R_pattern_28 a_28 b_28 rsil w=4.69u l=7.72u b=4 ps=0.19u +R_pattern_29 a_29 b_29 rsil w=5.85u l=15.19u b=2 ps=0.19u +R_pattern_30 a_30 b_30 rsil w=5.1u l=14.24u b=2 ps=0.19u +R_pattern_31 a_31 b_31 rsil w=4.64u l=5.46u b=9 ps=0.19u +R_pattern_32 a_32 b_32 rsil w=5.02u l=7.00u b=3 ps=0.19u +R_pattern_33 a_33 b_33 rsil w=5.02u l=8.05u b=8 ps=0.19u +R_pattern_34 a_34 b_34 rsil w=4.64u l=10.04u b=6 ps=0.19u +R_pattern_35 a_35 b_35 rsil w=5.1u l=12.21u b=8 ps=0.19u +R_pattern_36 a_36 b_36 rsil w=5.85u l=12.15u b=9 ps=0.19u +R_pattern_37 a_37 b_37 rsil w=4.69u l=5.51u b=2 ps=0.19u +R_pattern_38 a_38 b_38 rsil w=0.64u l=9.98u b=9 ps=0.19u +R_pattern_39 a_39 b_39 rsil w=3.93u l=13.07u b=9 ps=0.19u +R_pattern_40 a_40 b_40 rsil w=1.67u l=3.65u b=4 ps=0.19u +R_pattern_41 a_41 b_41 rsil w=1.67u l=2.49u b=3 ps=0.19u +R_pattern_42 a_42 b_42 rsil w=3.93u l=6.96u b=6 ps=0.19u +R_pattern_43 a_43 b_43 rsil w=0.64u l=2.62u b=6 ps=0.19u +R_pattern_44 a_44 b_44 rsil w=4.69u l=10.09u b=8 ps=0.19u +R_pattern_45 a_45 b_45 rsil w=5.85u l=14.99u b=4 ps=0.19u +R_pattern_46 a_46 b_46 rsil w=5.1u l=11.40u b=3 ps=0.19u +R_pattern_47 a_47 b_47 rsil w=4.64u l=11.75u b=2 ps=0.19u +R_pattern_48 a_48 b_48 rsil w=5.02u l=11.32u b=4 ps=0.19u +R_pattern_49 a_49 b_49 rsil w=5.02u l=14.16u b=4 ps=0.19u +R_pattern_50 a_50 b_50 rsil w=4.64u l=13.98u b=3 ps=0.19u +R_pattern_51 a_51 b_51 rsil w=5.1u l=7.08u b=4 ps=0.19u +R_pattern_52 a_52 b_52 rsil w=5.85u l=12.96u b=4 ps=0.19u +R_pattern_53 a_53 b_53 rsil w=4.69u l=14.03u b=4 ps=0.19u +R_pattern_54 a_54 b_54 rsil w=0.64u l=3.67u b=4 ps=0.19u +R_pattern_55 a_55 b_55 rsil w=3.93u l=4.75u b=4 ps=0.19u +R_pattern_56 a_56 b_56 rsil w=1.67u l=11.01u b=6 ps=0.19u +R_pattern_57 a_57 b_57 rsil w=5.02u l=10.42u b=2 ps=0.19u +R_pattern_58 a_58 b_58 rsil w=1.67u l=8.78u b=9 ps=0.19u +R_pattern_59 a_59 b_59 rsil w=4.64u l=7.67u b=4 ps=0.19u +R_pattern_60 a_60 b_60 rsil w=1.67u l=2.49u b=8 ps=0.19u +R_pattern_61 a_61 b_61 rsil w=3.93u l=9.33u b=3 ps=0.19u +R_pattern_62 a_62 b_62 rsil w=0.64u l=9.78u b=8 ps=0.19u +R_pattern_63 a_63 b_63 rsil w=4.69u l=10.99u b=6 ps=0.19u +R_pattern_64 a_64 b_64 rsil w=5.85u l=7.83u b=4 ps=0.19u +R_pattern_65 a_65 b_65 rsil w=5.1u l=5.92u b=6 ps=0.19u +R_pattern_66 a_66 b_66 rsil w=5.02u l=5.84u b=9 ps=0.19u +R_pattern_67 a_67 b_67 rsil w=1.67u l=2.49u b=4 ps=0.19u +R_pattern_68 a_68 b_68 rsil w=5.1u l=7.08u b=8 ps=0.19u +R_pattern_69 a_69 b_69 rsil w=5.1u l=14.24u b=4 ps=0.19u +R_pattern_70 a_70 b_70 rsil w=5.1u l=10.50u b=4 ps=0.19u +R_pattern_71 a_71 b_71 rsil w=5.1u l=8.13u b=4 ps=0.19u +R_pattern_72 a_72 b_72 rsil w=5.85u l=8.88u b=3 ps=0.19u +R_pattern_73 a_73 b_73 rsil w=4.69u l=6.67u b=4 ps=0.19u +R_pattern_74 a_74 b_74 rsil w=0.64u l=6.94u b=8 ps=0.19u +R_pattern_75 a_75 b_75 rsil w=3.93u l=11.04u b=4 ps=0.19u +R_pattern_76 a_76 b_76 rsil w=3.93u l=11.04u b=2 ps=0.19u +R_pattern_77 a_77 b_77 rsil w=3.93u l=11.04u b=4 ps=0.19u +R_pattern_78 a_78 b_78 rsil w=4.64u l=11.75u b=4 ps=0.19u +R_pattern_79 a_79 b_79 rsil w=5.1u l=14.44u b=4 ps=0.19u .ENDS diff --git a/ihp-sg13g2/libs.tech/klayout/tech/lvs/testing/testcases/unit/tap_devices/layout/ntap1.gds b/ihp-sg13g2/libs.tech/klayout/tech/lvs/testing/testcases/unit/tap_devices/layout/ntap1.gds index f9081c80..b4072b4e 100644 Binary files a/ihp-sg13g2/libs.tech/klayout/tech/lvs/testing/testcases/unit/tap_devices/layout/ntap1.gds and b/ihp-sg13g2/libs.tech/klayout/tech/lvs/testing/testcases/unit/tap_devices/layout/ntap1.gds differ diff --git a/ihp-sg13g2/libs.tech/klayout/tech/macros/sg13g2_options.lym b/ihp-sg13g2/libs.tech/klayout/tech/macros/sg13g2_options.lym index 5d5b76cc..c45d8799 100644 --- a/ihp-sg13g2/libs.tech/klayout/tech/macros/sg13g2_options.lym +++ b/ihp-sg13g2/libs.tech/klayout/tech/macros/sg13g2_options.lym @@ -134,17 +134,25 @@ default_options end - # Get all names for top cells + # Get all names for top cells with the active cell as the first element # - # Returns a list contains all top cell names + # Returns a list containing all top cell names with the active cell as the first element def self.get_top_cell_names cells = [] layout = RBA::Layout.new layout.read(Pathname.new(RBA::CellView.active.filename)) + active_cellview = RBA::CellView.active + active_cell_name = active_cellview.cell.name + layout.each_cell do |cell| cells.push(cell.name) end + + # Remove the active cell name from the list if it exists and add it to the front + cells.delete(active_cell_name) + cells.unshift(active_cell_name) + cells end