Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Dev -> Main update TO_NOV2024 #258

Merged
merged 23 commits into from
Nov 12, 2024
Merged
Show file tree
Hide file tree
Changes from 20 commits
Commits
Show all changes
23 commits
Select commit Hold shift + click to select a range
b4e10a5
libs.tech: Fix a couple of remnent of GF180 reference in LVS macro
smunaut Oct 17, 2024
5119619
Fix https://github.com/IHP-GmbH/IHP-Open-PDK/issues/226
Oct 19, 2024
5b81303
Fix https://github.com/IHP-GmbH/IHP-Open-PDK/issues/226
Oct 19, 2024
67b3632
Update README.md
ThomasZecha Oct 19, 2024
5d4138d
new instantiation scheme for lv and hv MOS to fix bug in RG calculation
Oct 23, 2024
6a89d4e
Merge pull request #224 from TinyTapeout/pr-fix-180-ref
sergeiandreyev Oct 23, 2024
a25ff74
Merge pull request #230 from ThomasZecha/dev
KrzysztofHerman Oct 23, 2024
98e5b2d
Merge branch 'IHP-GmbH:dev' into dev
dwarning Oct 24, 2024
860268e
Merge pull request #233 from dwarning/dev
sergeiandreyev Oct 25, 2024
8015391
libs.tech/klayout: Fix the seal ring pcell EdgeSeal/boundary
smunaut Oct 29, 2024
f64c0cf
Merge pull request #244 from TinyTapeout/pr-seal-ring
sergeiandreyev Nov 1, 2024
b6cbdfb
SRAM cells layout: fixed layer
sergeiandreyev Nov 1, 2024
7c124b7
SRAM cells layout: fixed PG pins Metal1.txt and Metal4.txt layers (#239)
sergeiandreyev Nov 1, 2024
af478c8
feat(AUTHORS): added Markus Fritscher
sergeiandreyev Nov 3, 2024
ab6c456
PyCell for Klayout
Nov 4, 2024
3cdf29f
Merge pull request #253 from ThomasZecha/dev
sergeiandreyev Nov 5, 2024
83bf8ba
fix(xschem install script): change permissions to execute
sergeiandreyev Nov 6, 2024
516b01c
feat(Sealring Pycell): filler processing enhancement
sergeiandreyev Nov 8, 2024
8382287
feat(inductors): removed obsolete 'inductor*_sc|sp' devices from Pyce…
sergeiandreyev Nov 11, 2024
ae3c742
feat(.gitignore): added ignores for Git-pulse and Git-Cliff
sergeiandreyev Nov 11, 2024
f5d1b84
Update lvs_regression.yml
KrzysztofHerman Nov 12, 2024
1f7a18c
Update lvs_regression.yml
KrzysztofHerman Nov 12, 2024
b909af6
Update lvs_regression.yml
KrzysztofHerman Nov 12, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -177,3 +177,10 @@ cells_tests_*

# KLayout LVS options
lvs_options.yml

# Git-pulse
*-pulse.*
run_git-pulse

# Git-cliff
cliff*toml
1 change: 1 addition & 0 deletions AUTHORS
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ Farag Elsayed
Gerhard Fischer
Krzysztof Herman
Mario Krattenmacher
Markus Fritscher
Markus Mueller
Melik Yazici
Mike Brinson
Expand Down
Binary file modified ihp-sg13g2/libs.ref/sg13g2_pr/gds/sg13g2_pr.gds
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
24 changes: 24 additions & 0 deletions ihp-sg13g2/libs.tech/klayout/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,3 +3,27 @@ Location of the Python-generated pre-compiled cached files (*.pyc) can be contro
```bash
export PYTHONPYCACHEPREFIX=/tmp
```

Support for 'conditional compilation' in a C-style manner of PyCell code:

```
#ifdef name (|| name)*
...some code...
#else
...some other code...
#endif
```

The #ifdef-block is executed (name is considered as defined) if
1. An environment variable name can be found case-insentive, or
2. The name can be found case-insentive as part of a process name of the process chain beginnig at
the current process upwards through all parent processes.
otherwise the #else-block is executed

The current process chain will be dumped if the environment variable 'IHP\_PYCELL\_LIB\_PRINT\_PROCESS_TREE'
is set.

The list of names which are used in an #ifdef-statement and are considered as 'defined' will be dumped
if the environment variable 'IHP\_PYCELL\_LIB\_PRINT\_DEFINES\_SET' is set.

On non-windows platforms using the 'conditional PyCell compilation' feature, the Python library psutil must be installed.
Original file line number Diff line number Diff line change
Expand Up @@ -56,11 +56,7 @@
'npn13G2L_code',
'npn13G2V_code',
'inductor2_code',
'inductor2_sc_code',
'inductor2_sp_code',
'inductor3_code',
'inductor3_sc_code',
'inductor3_sp_code',
'dantenna_code',
'dpantenna_code'
]
Expand Down Expand Up @@ -117,6 +113,8 @@ def getProcessNames():
processNames.append(parent.name().lower())
parent = parent.parent()

assert len(processNames) > 0

return processNames


Expand Down Expand Up @@ -148,9 +146,10 @@ def __init__(self):

tech = Tech.get('SG13_dev')

processNames = getProcessNames()
processNames = []

if os.getenv('IHP_PYCELL_LIB_PRINT_PROCESS_TREE') is not None:
processNames = getProcessNames()
processChain = ''
isFirst = True
for processName in reversed(processNames):
Expand All @@ -160,6 +159,7 @@ def __init__(self):
isFirst = False
print(f'Current process chain: {processChain}')


module = importlib.import_module(f"{__name__}.ihp.pypreprocessor")
preProcessor = getattr(module, "preprocessor")

Expand Down Expand Up @@ -190,6 +190,9 @@ def __init__(self):
envs.append(env.lower())

for define in defines:
if len(processNames) == 0:
processNames = getProcessNames()

locDefine = define.lower()
for processName in processNames:
if processName.find(locDefine) != -1:
Expand Down

This file was deleted.

This file was deleted.

This file was deleted.

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -160,6 +160,12 @@ def genLayout(self):
dbCreateRect(self, Layer('Passiv', 'drawing'), Box(corner_end, edgeBox, l - corner_end, corner_width + edgeBox))
dbCreateRect(self, Layer('Passiv', 'drawing'), Box(l - edgeBox, corner_end, l - corner_width - edgeBox, w - corner_end))
dbCreateRect(self, Layer('Passiv', 'drawing'), Box(corner_end, w - edgeBox, l - corner_end, w - corner_width - edgeBox))

# Filler processing enhancement
dbCreateRect(self, Layer('Metal1', 'filler'), Box(edgeBox, corner_end, corner_width + edgeBox, w - corner_end))
dbCreateRect(self, Layer('Metal1', 'filler'), Box(corner_end, edgeBox, l - corner_end, corner_width + edgeBox))
dbCreateRect(self, Layer('Metal1', 'filler'), Box(l - edgeBox, corner_end, l - corner_width - edgeBox, w - corner_end))
dbCreateRect(self, Layer('Metal1', 'filler'), Box(corner_end, w - edgeBox, l - corner_end, w - corner_width - edgeBox))

for layer in layers :
dbCreateRect(self, Layer(layer, 'drawing'), Box(metalOffset, corner_end, metalOffset + corner_width, w - corner_end))
Expand Down Expand Up @@ -188,7 +194,7 @@ def genLayout(self):

# EdgeSeal box around sealring
dbCreateRect(self, Layer('EdgeSeal', 'boundary'),
Box(edgeBox_startx, edgeBox_starty, w, l))
Box(edgeBox_startx, edgeBox_starty, l, w))

# Creating text label w/ area for device registration
sealringArea = (l * w) / 1e12 # mm2
Expand Down
4 changes: 2 additions & 2 deletions ihp-sg13g2/libs.tech/klayout/tech/lvs/sg13g2_full.lylvs
Original file line number Diff line number Diff line change
Expand Up @@ -3866,13 +3866,13 @@ ptap1_sub = pwell.covering(ptap1_tie)
#------------ DEVICES CONNECTIVITY --------------
#================================================

logger.info('Starting GF180 LVS connectivity setup')
logger.info('Starting SG13G2 LVS connectivity setup')

#================================
# ----- GENERAL CONNECTIONS -----
#================================

logger.info('Starting GF180 LVS connectivity setup (Inter-layer)')
logger.info('Starting SG13G2 LVS connectivity setup (Inter-layer)')

# Inter-layer
connect(pwell_sub, pwell)
Expand Down
44 changes: 22 additions & 22 deletions ihp-sg13g2/libs.tech/ngspice/models/sg13g2_moshv_mod.lib
Original file line number Diff line number Diff line change
Expand Up @@ -73,24 +73,24 @@

.if (as <= 1e-50)
.if (floor(floor(ng/2+0.501)*2+0.001) != ng)
Nsg13_hv_nmos d g s b sg13g2_hv_nmos_psp w='w/ng' l=l mult='ng*m'
+ as='max(w/ng,wmin)*(z1+((ng-1)/2)*z2)/ng'
+ ad='max(w/ng,wmin)*(z1+((ng-1)/2)*z2)/ng'
+ ps='2*(max(w/ng,wmin)*((ng-1)/2+1)+z1+(ng-1)/2*z2)/ng'
+ pd='2*(max(w/ng,wmin)*((ng-1)/2+1)+z1+(ng-1)/2*z2)/ng'
Nsg13_hv_nmos d g s b sg13g2_hv_nmos_psp w='w' l=l nf='ng' mult='m'
+ as='max(w/ng,wmin)*(z1+((ng-1)/2)*z2)'
+ ad='max(w/ng,wmin)*(z1+((ng-1)/2)*z2)'
+ ps='2*(max(w/ng,wmin)*((ng-1)/2+1)+z1+(ng-1)/2*z2)'
+ pd='2*(max(w/ng,wmin)*((ng-1)/2+1)+z1+(ng-1)/2*z2)'
+ dta=trise
+ ngcon=2
.else
Nsg13_hv_nmos d g s b sg13g2_hv_nmos_psp w='w/ng' l=l mult='ng*m'
+ as='max(w/ng,wmin)*(2*z1+max(0,(ng-2)/2)*z2)/ng'
+ ad='max(w/ng,wmin)*z2/2'
+ ps='2*(max(w/ng,wmin)*(2+max(ng-2,0)/2)+2*z1+max(ng-2,0)/2*z2)/ng'
+ pd='max(w/ng,wmin)+z2'
Nsg13_hv_nmos d g s b sg13g2_hv_nmos_psp w='w' l=l nf='ng' mult='m'
+ as='max(w/ng,wmin)*(2*z1+max(0,(ng-2)/2)*z2)'
+ ad='max(w/ng,wmin)*z2/2*ng'
+ ps='2*(max(w/ng,wmin)*(2+max(ng-2,0)/2)+2*z1+max(ng-2,0)/2*z2)'
+ pd='(max(w/ng,wmin)+z2)*ng'
+ dta=trise
+ ngcon=2
.endif
.else
Nsg13_hv_nmos d g s b sg13g2_hv_nmos_psp w='w/ng' l=l as='as/ng' ad='ad/ng' pd='pd/ng' ps='ps/ng' mult='ng*m'
Nsg13_hv_nmos d g s b sg13g2_hv_nmos_psp w='w' l=l as='as' ad='ad' pd='pd' ps='ps' nf='ng' mult='m'
+ dta=trise
+ ngcon=2
.endif
Expand All @@ -103,24 +103,24 @@
.include sg13g2_moshv_parm.lib
.if (as <= 1e-50)
.if (floor(floor(ng/2+0.501)*2+0.001) != ng)
Nsg13_hv_pmos d g s b sg13g2_hv_pmos_psp w='w/ng' l=l mult='ng*m'
+ as='max(w/ng,wmin)*(z1+((ng-1)/2)*z2)/ng'
+ ad='max(w/ng,wmin)*(z1+((ng-1)/2)*z2)/ng'
+ ps='2*(max(w/ng,wmin)*((ng-1)/2+1)+z1+(ng-1)/2*z2)/ng'
+ pd='2*(max(w/ng,wmin)*((ng-1)/2+1)+z1+(ng-1)/2*z2)/ng'
Nsg13_hv_pmos d g s b sg13g2_hv_pmos_psp w='w' l=l nf='ng' mult='m'
+ as='max(w/ng,wmin)*(z1+((ng-1)/2)*z2)'
+ ad='max(w/ng,wmin)*(z1+((ng-1)/2)*z2)'
+ ps='2*(max(w/ng,wmin)*((ng-1)/2+1)+z1+(ng-1)/2*z2)'
+ pd='2*(max(w/ng,wmin)*((ng-1)/2+1)+z1+(ng-1)/2*z2)'
+ dta=trise
+ ngcon=2
.else
Nsg13_hv_pmos d g s b sg13g2_hv_pmos_psp w='w/ng' l=l mult='ng*m'
+ as='max(w/ng,wmin)*(2*z1+max(0,(ng-2)/2)*z2)/ng'
+ ad='max(w/ng,wmin)*z2/2'
+ ps='2*(max(w/ng,wmin)*(2+max(ng-2,0)/2)+2*z1+max(ng-2,0)/2*z2)/ng'
+ pd='max(w/ng,wmin)+z2'
Nsg13_hv_pmos d g s b sg13g2_hv_pmos_psp w='w' l=l nf='ng' mult='m'
+ as='max(w/ng,wmin)*(2*z1+max(0,(ng-2)/2)*z2)'
+ ad='max(w/ng,wmin)*z2/2*ng'
+ ps='2*(max(w/ng,wmin)*(2+max(ng-2,0)/2)+2*z1+max(ng-2,0)/2*z2)'
+ pd='(max(w/ng,wmin)+z2)*ng'
+ dta=trise
+ ngcon=2
.endif
.else
Nsg13_hv_pmos d g s b sg13g2_hv_pmos_psp w='w/ng' l=l as='as/ng' ad='ad/ng' pd='pd/ng' ps='ps/ng' mult='ng*m'
Nsg13_hv_pmos d g s b sg13g2_hv_pmos_psp w='w' l=l as='as' ad='ad' pd='pd' ps='ps' nf='ng' mult='m'
+ dta=trise
+ ngcon=2
.endif
Expand Down
Loading
Loading