Skip to content

initial add of GT2N#212

Merged
gadfort merged 6 commits into
mainfrom
gt2n
Jun 6, 2026
Merged

initial add of GT2N#212
gadfort merged 6 commits into
mainfrom
gt2n

Conversation

@gadfort

@gadfort gadfort commented Jun 6, 2026

Copy link
Copy Markdown
Member

Summary by CodeRabbit

Release Notes

  • New Features

    • Added support for GT2N process design kit (2nm GAAFET node)
    • Introduced 72 standard cells across multiple voltage thresholds and track widths
    • Integrated complete tool chain support (synthesis, place & route, power delivery, parasitic extraction)
    • Enabled full ASIC design flow with timing analysis and physical design constraints
  • Documentation

    • Added GT2N PDK documentation with feature summary and citation guidelines

@coderabbitai

coderabbitai Bot commented Jun 6, 2026

Copy link
Copy Markdown

Review Change Stack

Warning

Review limit reached

@gadfort, we couldn't start this review because you've reached your PR review rate limit.

More reviews will be available in 3 minutes and 13 seconds. Learn how PR review limits work.

Your organization has run out of usage credits. Purchase more in the billing tab.

⌛ How to resolve this issue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

We recommend that you space out your commits to avoid hitting the rate limit.

🚦 How do rate limits work?

CodeRabbit enforces hourly rate limits for each developer per organization.

Our paid plans include higher PR review limits than trial, open-source, and free plans. In all cases, reviews become available again over time. During sustained high-volume PR review activity, CodeRabbit may temporarily slow when the next review becomes available.

Please see our Fair Usage Limits Policy for further information.

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: 7a6c2258-25e2-4a59-a3f5-668d822e8108

📥 Commits

Reviewing files that changed from the base of the PR and between 8e03667 and 1aeeaad.

📒 Files selected for processing (16)
  • README.md
  • lambdapdk/__init__.py
  • lambdapdk/gt2n/__init__.py
  • lambdapdk/gt2n/base/setup/klayout/gt2n.lyt
  • lambdapdk/gt2n/libs/gt2_6t/apr/openroad/pdngen.tcl
  • lambdapdk/gt2n/libs/gt2_6t_w13_elvt/apr/openroad/tapcells.tcl
  • lambdapdk/gt2n/libs/gt2_6t_w13_hvt/apr/openroad/tapcells.tcl
  • lambdapdk/gt2n/libs/gt2_6t_w13_lvt/apr/openroad/tapcells.tcl
  • lambdapdk/gt2n/libs/gt2_6t_w13_svt/apr/openroad/tapcells.tcl
  • lambdapdk/gt2n/libs/gt2_6t_w13_ulvt/apr/openroad/tapcells.tcl
  • lambdapdk/gt2n/libs/gt2_6t_w31_elvt/apr/openroad/tapcells.tcl
  • lambdapdk/gt2n/libs/gt2_6t_w31_hvt/apr/openroad/tapcells.tcl
  • lambdapdk/gt2n/libs/gt2_6t_w31_lvt/apr/openroad/tapcells.tcl
  • lambdapdk/gt2n/libs/gt2_6t_w31_svt/apr/openroad/tapcells.tcl
  • lambdapdk/gt2n/libs/gt2_6t_w31_ulvt/apr/openroad/tapcells.tcl
  • lambdapdk/gt2n/target.py
📝 Walkthrough

Walkthrough

This PR introduces the complete GT2N PDK—a 2nm GAAFET technology node with 72 standard cells—into the lambdapdk repository. The changes include the PDK infrastructure definition, standard-cell library classes for multiple voltage thresholds and track widths, APR configuration files, and a demo SiliconCompiler target.

Changes

GT2N PDK and Libraries

Layer / File(s) Summary
PDK Core Definition and Tool Configuration
lambdapdk/gt2n/__init__.py, lambdapdk/gt2n/README.md, lambdapdk/gt2n/base/pex/openroad/typical.tcl, lambdapdk/gt2n/base/setup/klayout/gt2n.lyt
GT2NPDK class sets PDK identity (name, foundry, version), node/stackup/wafersize parameters, and registers APR tech LEF, KLayout techmaps, OpenROAD routing layer bounds, global routing derating across metal layers, pin layer rules, and PEX typical model file. KLayout technology XML and OpenROAD RC settings are configured.
Standard Cell Library Base and Variants
lambdapdk/gt2n/libs/stdcells.py
_GT2NBase class registers PDK/site, declares cell lists (tie, filler, tap, physical-only), configures timing/spice/LEF/GDS file inputs, wires Yosys driver/buffer/tie cells with per-threshold ABC capacitance scaling, and registers OpenROAD PDN/globalconnect/tapcell scripts. Concrete subclasses instantiate the base for 5 voltage thresholds (HVT, SVT, LVT, ULVT, ELVT) at widths 13 and 31.
APR Flow Configuration Scripts
lambdapdk/gt2n/libs/gt2_6t/apr/openroad/global_connect.tcl, lambdapdk/gt2n/libs/gt2_6t/apr/openroad/pdngen.tcl, lambdapdk/gt2n/libs/gt2_6t_w[13|31]_[hvt|svt|lvt|ulvt|elvt]/apr/openroad/tapcells.tcl
Global connections map vdd/vss to pin patterns; PDN generation defines CORE domain with BPR/BM1/BM2 stripe topology; tapcells specify 5µm spacing and master cells for all 10 voltage-threshold/track-width combinations.
Package-Level Registration
lambdapdk/__init__.py, README.md
GT2NPDK registered in get_pdks(); GT2N6TW13/W31 library variants registered in get_libs(); GT2N added to Supported PDKs table with node description and attribution.
Demo Target Setup
lambdapdk/gt2n/target.py
gt2n_demo function initializes ASIC project with GT2N libraries, configures full flow and synthesis-only dependency with parallelism parameters, creates typical timing scenario with setup/hold/power checks, sets NLDM delay model, and applies core area density (40) and margin (1.0) constraints.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

Poem

🐰 A new node hops into view,
GT2N in shades of two—
Tapcells dance in threshold hues,
Standard cells in tracks they choose.
The PDK stack now stands so tall! ✨

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 18.75% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title 'initial add of GT2N' directly summarizes the main change: adding the GT2N PDK and its associated libraries, configuration files, and tooling setup.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch gt2n

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 7

🧹 Nitpick comments (1)
lambdapdk/gt2n/target.py (1)

20-22: ⚡ Quick win

Align docs/comments with implemented constraints and scenarios.

The docstring/comments describe slow/typical/fast analysis and a 4.8µm margin, but the code only creates typical and sets core margin to 1.0. Please update text (or behavior) so the target contract is unambiguous.

Also applies to: 63-67, 77-78

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@lambdapdk/gt2n/target.py` around lines 20 - 22, The module docstring/comments
currently claim slow/typical/fast STA and a 4.8µm margin, but the implementation
only creates a "typical" scenario and sets core margin to 1.0; update the
lambdapdk.gt2n.target docstring and any inline comments to accurately state that
only the "typical" STA scenario is created and that core_margin is 1.0 (remove
references to slow/fast scenarios and the 4.8µm margin), or alternatively
implement the missing behavior by adding creation of "slow" and "fast" scenarios
and changing core_margin to 4.8µm—pick one approach and make comments match the
chosen behavior; look for references to "typical" and "core_margin" in the file
to locate the relevant code and docs.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@lambdapdk/gt2n/base/setup/klayout/gt2n.lyt`:
- Line 8: The layer-properties filename in gt2n.lyt is incorrect: change the
<layer-properties_file> entry from "gt2.lyp" to "gt2n.lyp" so it matches the
registered resource name used in lambdapdk/gt2n/__init__.py (the registration
call that registers "gt2n.lyp"); update gt2n.lyt accordingly to ensure KLayout
can load the correct properties file.
- Line 54: The <lef-files> entry in gt2n.lyt is hardcoded to
./platforms/gt2n/lef/gt2_tech.lef which does not match the registered dataroot
path (techlib/gt2_tech.lef) set up in lambdapdk/gt2n/__init__.py; update the
<lef-files> value in gt2n.lyt to the dataroot-relative path (for example
./techlib/gt2_tech.lef) or modify gt2n.lyt to use a configurable base-path
variable and reference ./techlib/gt2_tech.lef via that variable so KLayout
resolves the LEF against active_dataroot("gt2n") correctly.

In `@lambdapdk/gt2n/libs/gt2_6t_w13_elvt/apr/openroad/tapcells.tcl`:
- Around line 1-4: The tapcell invocation references a master name
"gt2_6t_tapbspdn_w13_elvt" for both -tapcell_master and -endcap_master that does
not exist in the LEF library; either add a corresponding MACRO definition named
exactly "gt2_6t_tapbspdn_w13_elvt" to the project's LEF files or change the
-tapcell_master and -endcap_master arguments in the tapcell call to the correct
existing MACRO name(s) (e.g., replace "gt2_6t_tapbspdn_w13_elvt" with the actual
macro identifier present in the LEF), ensuring the names match exactly including
underscores and casing.

In `@lambdapdk/gt2n/libs/stdcells.py`:
- Around line 67-74: The cap_table dictionary lookup in the set_yosys_abc call
uses cap_table[vt] without validating that the voltage threshold parameter vt
exists as a valid key. Add validation before accessing the dictionary to check
if vt is present in cap_table, and raise a descriptive error with the invalid
threshold value if it is not found, preventing KeyError exceptions from
unexpected threshold strings.

In `@lambdapdk/gt2n/README.md`:
- Line 5: Update the citation line in README.md that currently ends with the
literal word "link." (the GT2N citation string) by either replacing "link." with
the actual URL to the ISCAS 2026 paper or removing the "link." token entirely if
no URL is available; ensure the citation punctuation remains correct after the
change.

In `@lambdapdk/gt2n/target.py`:
- Line 5: The import uses incorrect GT2N stdcell class names (GT2N6TLVT,
GT2N6THVT, etc.) which don't match the registered GT2N classes used elsewhere;
replace those imports with the actual registered names (e.g. GT2N6TW13* and
GT2N6TW31* variants) so the module can import at runtime — update the import
statement that currently references
GT2N6TLVT/GT2N6THVT/GT2N6TSVT/GT2N6TULVT/GT2N6TEVT to the corresponding
GT2N6TW13... (and GT2N6TW31... where appropriate) classes and ensure the demo
target defaults to the W13 variants.

In `@README.md`:
- Line 38: The GT2N table row is missing its trailing pipe which breaks
pipe-style table formatting; edit the GT2N row (the line containing "GT2N | 2nm
GAAFET | Standard cells (HVT/SVT/LVT/ULVT/ELVT) | Georgia Institute of
Technology") and add a closing "|" at the end of the line so the row ends with a
pipe and conforms to pipe-style markdown table formatting.

---

Nitpick comments:
In `@lambdapdk/gt2n/target.py`:
- Around line 20-22: The module docstring/comments currently claim
slow/typical/fast STA and a 4.8µm margin, but the implementation only creates a
"typical" scenario and sets core margin to 1.0; update the lambdapdk.gt2n.target
docstring and any inline comments to accurately state that only the "typical"
STA scenario is created and that core_margin is 1.0 (remove references to
slow/fast scenarios and the 4.8µm margin), or alternatively implement the
missing behavior by adding creation of "slow" and "fast" scenarios and changing
core_margin to 4.8µm—pick one approach and make comments match the chosen
behavior; look for references to "typical" and "core_margin" in the file to
locate the relevant code and docs.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: cf4e5791-5028-4149-bf53-0a8943443ea1

📥 Commits

Reviewing files that changed from the base of the PR and between 6208265 and 8e03667.

📒 Files selected for processing (21)
  • README.md
  • lambdapdk/__init__.py
  • lambdapdk/gt2n/README.md
  • lambdapdk/gt2n/__init__.py
  • lambdapdk/gt2n/base/pex/openroad/typical.tcl
  • lambdapdk/gt2n/base/setup/klayout/gt2n.lyp
  • lambdapdk/gt2n/base/setup/klayout/gt2n.lyt
  • lambdapdk/gt2n/libs/gt2_6t/apr/openroad/global_connect.tcl
  • lambdapdk/gt2n/libs/gt2_6t/apr/openroad/pdngen.tcl
  • lambdapdk/gt2n/libs/gt2_6t_w13_elvt/apr/openroad/tapcells.tcl
  • lambdapdk/gt2n/libs/gt2_6t_w13_hvt/apr/openroad/tapcells.tcl
  • lambdapdk/gt2n/libs/gt2_6t_w13_lvt/apr/openroad/tapcells.tcl
  • lambdapdk/gt2n/libs/gt2_6t_w13_svt/apr/openroad/tapcells.tcl
  • lambdapdk/gt2n/libs/gt2_6t_w13_ulvt/apr/openroad/tapcells.tcl
  • lambdapdk/gt2n/libs/gt2_6t_w31_elvt/apr/openroad/tapcells.tcl
  • lambdapdk/gt2n/libs/gt2_6t_w31_hvt/apr/openroad/tapcells.tcl
  • lambdapdk/gt2n/libs/gt2_6t_w31_lvt/apr/openroad/tapcells.tcl
  • lambdapdk/gt2n/libs/gt2_6t_w31_svt/apr/openroad/tapcells.tcl
  • lambdapdk/gt2n/libs/gt2_6t_w31_ulvt/apr/openroad/tapcells.tcl
  • lambdapdk/gt2n/libs/stdcells.py
  • lambdapdk/gt2n/target.py

Comment thread lambdapdk/gt2n/base/setup/klayout/gt2n.lyt Outdated
Comment thread lambdapdk/gt2n/base/setup/klayout/gt2n.lyt Outdated
Comment thread lambdapdk/gt2n/libs/gt2_6t_w13_elvt/apr/openroad/tapcells.tcl Outdated
Comment thread lambdapdk/gt2n/libs/stdcells.py
Comment thread lambdapdk/gt2n/README.md
Comment thread lambdapdk/gt2n/target.py Outdated
Comment thread README.md Outdated
@gadfort gadfort merged commit 58773fa into main Jun 6, 2026
4 checks passed
@gadfort gadfort deleted the gt2n branch June 6, 2026 18:24
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant