Skip to content

Commit

Permalink
Merge pull request #2066 from The-OpenROAD-Project-staging/ihp-update
Browse files Browse the repository at this point in the history
Ihp update
  • Loading branch information
maliberty authored Jun 13, 2024
2 parents d24181e + f8ee3aa commit 930d6f5
Show file tree
Hide file tree
Showing 47 changed files with 10,198 additions and 3,935 deletions.
18 changes: 9 additions & 9 deletions flow/platforms/ihp-sg13g2/cdl/sg13g2_stdcell.cdl
Original file line number Diff line number Diff line change
Expand Up @@ -758,7 +758,7 @@ MX0 Y A VDD VDD sg13_lv_pmos m=1 w=1.12u l=130.00n ng=1
* View Name: schematic
************************************************************************

.SUBCKT sg13g2_inv_16 A VSS VDD Y
.SUBCKT sg13g2_inv_16 A VDD VSS Y
*.PININFO A:I Y:O VDD:B VSS:B
MX1 Y A VSS VSS sg13_lv_nmos m=16 w=740.00n l=130.00n ng=1
MX0 Y A VDD VDD sg13_lv_pmos m=16 w=1.12u l=130.00n ng=1
Expand All @@ -782,7 +782,7 @@ MX0 Y A VDD VDD sg13_lv_pmos m=2 w=1.12u l=130.00n ng=1
* View Name: schematic
************************************************************************

.SUBCKT sg13g2_inv_4 A VSS VDD Y
.SUBCKT sg13g2_inv_4 A VDD VSS Y
*.PININFO A:I Y:O VDD:B VSS:B
MP0 Y A VDD VDD sg13_lv_pmos m=4 w=1.12u l=130.00n ng=1
MN0 Y A VSS VSS sg13_lv_nmos m=4 w=740.00n l=130.00n ng=1
Expand All @@ -794,7 +794,7 @@ MN0 Y A VSS VSS sg13_lv_nmos m=4 w=740.00n l=130.00n ng=1
* View Name: schematic
************************************************************************

.SUBCKT sg13g2_inv_8 A VSS VDD Y
.SUBCKT sg13g2_inv_8 A VDD VSS Y
*.PININFO A:I Y:O VDD:B VSS:B
MX1 Y A VSS VSS sg13_lv_nmos m=8 w=740.00n l=130.00n ng=1
MX0 Y A VDD VDD sg13_lv_pmos m=8 w=1.12u l=130.00n ng=1
Expand Down Expand Up @@ -966,9 +966,9 @@ MX5 net1 B VSS VSS sg13_lv_nmos m=1 w=740.00n l=130.00n ng=1
MX0 Y A VDD VDD sg13_lv_pmos m=2 w=1.12u l=130.00n ng=1
MX1 A A_N VDD VDD sg13_lv_pmos m=1 w=840.00n l=130.00n ng=1
MX3 Y B VDD VDD sg13_lv_pmos m=2 w=1.12u l=130.00n ng=1
MX2 Y A net1 VSS sg13_lv_nmos m=2 w=720.00n l=130.00n ng=1
MX2 Y B net1 VSS sg13_lv_nmos m=2 w=720.00n l=130.00n ng=1
MX4 A A_N VSS VSS sg13_lv_nmos m=1 w=550.00n l=130.00n ng=1
MX5 net1 B VSS VSS sg13_lv_nmos m=2 w=720.00n l=130.00n ng=1
MX5 net1 A VSS VSS sg13_lv_nmos m=2 w=720.00n l=130.00n ng=1
.ENDS

************************************************************************
Expand Down Expand Up @@ -1063,8 +1063,8 @@ MN0 B B_N VSS VSS sg13_lv_nmos m=1 w=550.00n l=130.00n ng=1
MX0 Y A VSS VSS sg13_lv_nmos m=1 w=740.00n l=130.00n ng=1
MX3 Y B VSS VSS sg13_lv_nmos m=1 w=740.00n l=130.00n ng=1
MP0 B B_N VDD VDD sg13_lv_pmos m=1 w=840.00n l=130.00n ng=1
MX1 net1 A VDD VDD sg13_lv_pmos m=1 w=1.12e-06 l=130.00n ng=1
MX2 Y B net1 VDD sg13_lv_pmos m=1 w=1.12e-06 l=130.00n ng=1
MX1 net1 B VDD VDD sg13_lv_pmos m=1 w=1.12e-06 l=130.00n ng=1
MX2 Y A net1 VDD sg13_lv_pmos m=1 w=1.12e-06 l=130.00n ng=1
.ENDS

************************************************************************
Expand All @@ -1079,8 +1079,8 @@ MN0 B B_N VSS VSS sg13_lv_nmos m=1 w=640.00n l=130.00n ng=1
MX0 Y A VSS VSS sg13_lv_nmos m=2 w=720.00n l=130.00n ng=1
MX3 Y B VSS VSS sg13_lv_nmos m=2 w=720.00n l=130.00n ng=1
MP0 B B_N VDD VDD sg13_lv_pmos m=1 w=1.000u l=130.00n ng=1
MX1 net1 A VDD VDD sg13_lv_pmos m=2 w=1.12u l=130.00n ng=1
MX2 Y B net1 VDD sg13_lv_pmos m=2 w=1.12u l=130.00n ng=1
MX1 net1 B VDD VDD sg13_lv_pmos m=2 w=1.12u l=130.00n ng=1
MX2 Y A net1 VDD sg13_lv_pmos m=2 w=1.12u l=130.00n ng=1
.ENDS

************************************************************************
Expand Down
1,773 changes: 766 additions & 1,007 deletions flow/platforms/ihp-sg13g2/drc/sg13g2.lydrc

Large diffs are not rendered by default.

Binary file modified flow/platforms/ihp-sg13g2/gds/sg13g2_stdcell.gds
Binary file not shown.
1 change: 0 additions & 1 deletion flow/platforms/ihp-sg13g2/lvs/ihp-sg13g2.lylvs

This file was deleted.

69 changes: 69 additions & 0 deletions flow/platforms/ihp-sg13g2/lvs/rule_decks/bjt_connections.lvs
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
# frozen_string_literal: true

#==========================================================================
# 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
#==========================================================================

#================================
# ------ BJT CONNECTIONS --------
#================================

logger.info('Starting LVS BJT CONNECTIONS')

# =============
# ---- NPN ----
# =============

# General
connect(npn_sub, pwell)

# npn13G2 nodes connections
connect(npn13G2_te, npn13G2_e_pin)
connect(npn13G2_tc, npn13G2_c_pin)
connect(npn13G2_tb, npn13G2_b_pin)
connect(npn13G2_e_pin, cont_drw)
connect(npn13G2_c_pin, cont_drw)
connect(npn13G2_b_pin, cont_drw)
connect(npn_sub, pwell)
connect(npn13G2_e_pin, emwind_drw)
connect(emwind_drw, metal1_con)

# npn13G2L nodes connections
connect(npn13G2l_te, npn13G2l_e_pin)
connect(npn13G2l_tc, npn13G2l_c_pin)
connect(npn13G2l_tb, npn13G2l_b_pin)
connect(npn13G2l_e_pin, cont_drw)
connect(npn13G2l_c_pin, cont_drw)
connect(npn13G2l_b_pin, cont_drw)
connect(npn_sub, pwell)

# npn13G2V nodes connections
connect(npn13G2v_te, npn13G2v_e_pin)
connect(npn13G2v_tc, npn13G2v_c_pin)
connect(npn13G2v_tb, npn13G2v_b_pin)
connect(npn13G2v_e_pin, cont_drw)
connect(npn13G2v_c_pin, cont_drw)
connect(npn13G2v_b_pin, cont_drw)
connect(npn_sub, pwell)

# =============
# ---- PNP ----
# =============

# pnp_mpa nodes connections
connect(pnp_mpa_e, cont_drw)
connect(pnp_mpa_b, cont_drw)
connect(pnp_mpa_c, cont_drw)
125 changes: 125 additions & 0 deletions flow/platforms/ihp-sg13g2/lvs/rule_decks/bjt_derivations.lvs
Original file line number Diff line number Diff line change
@@ -0,0 +1,125 @@
# frozen_string_literal: true

#==========================================================================
# 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
#==========================================================================

#================================
# ------ BJT DERIVATIONS --------
#================================

logger.info('Starting BJT DERIVATIONS')

# =============
# ---- NPN ----
# =============

logger.info('Starting NPN-BJT DERIVATIONS')

bjt_exclude = gatpoly.join(pwell_block).join(nsd_drw)
.join(salblock_drw).join(polyres_drw).join(extblock_drw)
.join(res_drw).join(recog_diode).join(recog_esd)
.join(ind_drw).join(ind_pin).join(substrate_drw)

npn_exclude = nwell_drw.join(psd_drw).join(nbulay_drw).join(bjt_exclude)

# ---------- General NPN ----------
npn_mk = trans_drw.and(pwell).and(ptap_holes)
npn_c_exc = emwind_drw.join(emwihv_drw).join(activ_mask)
.join(nsd_block).join(npn_exclude)
npn_b_exc = emwind_drw.join(emwihv_drw).join(npn_exclude)
npn_sub = npn_mk.not(npn_exclude)
npn_dev = activ.join(activ_mask).and(npn_mk)

# ---------- npn13G2 ----------
# npn13G2 exclusion layers
npn13G2_e_exc = activ.join(emwihv_drw).join(npn_exclude)
npn13G2_b_exc = npn_b_exc.join(activ_mask)

# npn13G2 nodes
npn13G2_e_ = emwind_drw.and(activ_mask).and(nsd_block).and(npn_mk).not(npn13G2_e_exc)
# npn13G2 is a fixed device (0.07um X 0.9um)
npn13G2_e_pin = npn13G2_e_.with_bbox_min(0.07.um).with_bbox_max(0.9.um).with_area(0.063.um)
npn13G2_b_pin = nsd_block.and(npn_mk).not(npn13G2_b_exc)
npn13G2_c_pin = activ.and(npn_mk).not_overlapping(npn_c_exc)

npn13G2_dev = npn_dev.join(nsd_block).extents.covering(npn13G2_e_pin).covering(npn13G2_b_pin).covering(npn13G2_c_pin)
npn13G2_c = npn13G2_dev.sized(-1.nm)
npn13G2_tc = npn13G2_dev.not(npn13G2_c).interacting(npn13G2_c_pin)
npn13G2_b = npn13G2_dev.not(npn13G2_c_pin)
npn13G2_tb = npn13G2_b.not(npn13G2_e_pin).merged
npn13G2_e = npn13G2_e_pin
npn13G2_te = npn13G2_e

# ---------- npn13G2L ----------
# npn13G2L exclusion layers
npn13G2l_e_exc = activ_mask.join(nsd_block).join(emwihv_drw).join(npn_exclude)
npn13G2l_b_exc = npn_b_exc.join(activ).join(nsd_block)

# npn13G2L nodes
npn13G2l_e_ = emwind_drw.and(activ).and(npn_mk).not(npn13G2l_e_exc)
# npn13G2L has fixed width (0.07um), Length could vary from 1:2.5 um
npn13G2l_e_pin = npn13G2l_e_.with_bbox_min(0.07.um).with_bbox_max(1.um, 2.5.um).with_area(0.07.um, 0.175.um)
npn13G2l_b_pin = activ_mask.and(npn_mk).not(npn13G2l_b_exc)
npn13G2l_c_pin = npn13G2_c_pin

npn13G2l_dev = npn_dev.covering(npn13G2l_e_pin).covering(npn13G2l_b_pin).covering(npn13G2l_c_pin)
npn13G2l_c = npn13G2l_dev.sized(1.nm)
npn13G2l_tc = npn13G2l_c.not(npn13G2l_dev).interacting(npn13G2l_c_pin)
npn13G2l_b = npn13G2l_dev.not(npn13G2l_c_pin)
npn13G2l_tb = npn13G2l_b.not(npn13G2l_e_pin).merged
npn13G2l_e = npn13G2l_e_pin
npn13G2l_te = npn13G2l_e

# # ---------- npn13G2V ----------
# npn13G2V exclusion layers
npn13G2v_e_exc = activ_mask.join(nsd_block).join(emwind_drw).join(npn_exclude)

# npn13G2V nodes
npn13G2v_e_ = emwihv_drw.and(activ).and(npn_mk).not(npn13G2v_e_exc)
# npn13G2L has fixed width (0.12um), Length could vary from 1:5 um
npn13G2v_e_pin = npn13G2v_e_.with_bbox_min(0.12.um).with_bbox_max(1.um, 5.um).with_area(0.12.um, 0.6.um)
npn13G2v_b_pin = npn13G2l_b_pin
npn13G2v_c_pin = npn13G2l_c_pin

npn13G2v_dev = npn_dev.covering(npn13G2v_e_pin).covering(npn13G2v_b_pin).covering(npn13G2v_c_pin)
npn13G2v_c = npn13G2v_dev.sized(1.nm)
npn13G2v_tc = npn13G2v_c.not(npn13G2v_dev).interacting(npn13G2v_c_pin)
npn13G2v_b = npn13G2v_dev.not(npn13G2v_c_pin)
npn13G2v_tb = npn13G2v_b.not(npn13G2v_e_pin).merged
npn13G2v_e = npn13G2v_e_pin
npn13G2v_te = npn13G2v_e

# =============
# ---- PNP ----
# =============

logger.info('Starting PNP-BJT DERIVATIONS')

pnp_exclude = trans_drw.join(emwind_drw)
.join(emwihv_drw).join(nsd_block).join(bjt_exclude)

pnp_mk = ptap_holes.not(pnp_exclude)

# pnp general nodes DERIVATIONS
pnp_e = pactiv.and(pnp_mk).and(nwell_iso)
pnp_b = nactiv.and(pnp_mk).and(nwell_iso)
pnp_c = ptap.interacting(pnp_mk).not(pnp_exclude)

# pnp_mpa nodes DERIVATIONS
pnp_mpa_e = pnp_e.and(pnp_b.extents).and(pnp_c.extents)
pnp_mpa_b = pnp_b.interacting(pnp_b.extents.interacting(pnp_mpa_e))
pnp_mpa_c = pnp_c.interacting(pnp_c.extents.interacting(pnp_mpa_e))
81 changes: 81 additions & 0 deletions flow/platforms/ihp-sg13g2/lvs/rule_decks/bjt_extraction.lvs
Original file line number Diff line number Diff line change
@@ -0,0 +1,81 @@
# frozen_string_literal: true

#==========================================================================
# 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
#==========================================================================

#================================
# ------- BJT EXTRACTION --------
#================================

logger.info('Starting BJT EXTRACTION')

# =============
# ---- NPN ----
# =============

logger.info('Starting NPN-BJT EXTRACTION')

logger.info('Extraction of npn13G2 BJT transistor')
extract_devices(bjt4('npn13G2', CustomBJT4), {
'C' => npn13G2_c,
'B' => npn13G2_b,
'E' => npn13G2_e,
'S' => npn_sub,
'tC' => npn13G2_tc,
'tB' => npn13G2_tb,
'tE' => npn13G2_te,
'tS' => npn_sub
})

logger.info('Extraction of npn13G2L BJT transistor')
extract_devices(bjt4('npn13G2l', CustomBJT4), {
'C' => npn13G2l_c,
'B' => npn13G2l_b,
'E' => npn13G2l_e,
'S' => npn_sub,
'tC' => npn13G2l_tc,
'tB' => npn13G2l_tb,
'tE' => npn13G2l_te,
'tS' => npn_sub
})

logger.info('Extraction of npn13G2V BJT transistor')
extract_devices(bjt4('npn13G2v', CustomBJT4), {
'C' => npn13G2v_c,
'B' => npn13G2v_b,
'E' => npn13G2v_e,
'S' => npn_sub,
'tC' => npn13G2v_tc,
'tB' => npn13G2v_tb,
'tE' => npn13G2v_te,
'tS' => npn_sub
})

# =============
# ---- PNP ----
# =============

logger.info('Starting PNP-BJT EXTRACTION')

# pnp_mpa BJT
logger.info('Extracting pnpMPA BJT')
extract_devices(bjt3('pnpMPA', CustomBJT3), { 'C' => pnp_mpa_c.extents,
'B' => pnp_mpa_b.extents,
'E' => pnp_mpa_e,
'tC' => pnp_mpa_c,
'tB' => pnp_mpa_b,
'tE' => pnp_mpa_e })
39 changes: 39 additions & 0 deletions flow/platforms/ihp-sg13g2/lvs/rule_decks/cap_connections.lvs
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
# frozen_string_literal: true

#==========================================================================
# 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
#==========================================================================

#==================================
# ------ MIMCAP CONNECTIONS -------
#==================================

logger.info('Starting LVS CAP CONNECTIONS')

# === cap_mim ===
connect(cmim_btm, metal5_con)
connect(cmim_top, mim_via)
connect(mim_via, topmetal1_con)

# === rfcmim ===
connect(rfmim_btm, metal5_con)
connect(rfmim_top, mim_via)
connect(rfmim_sub, ptap)

# === svarivap ===
connect(varicap_ports, cont_drw)
connect(varicap_ports, text_drw)
connect(varicap_sub, ptap)
Loading

0 comments on commit 930d6f5

Please sign in to comment.