From 305f3ecaf8fa35508acb6fbb34fcc274b56a1a13 Mon Sep 17 00:00:00 2001 From: Uri Shaked Date: Wed, 17 Sep 2025 13:33:42 +0300 Subject: [PATCH] fix(tt_tool): vary RT_MAX_LAYER per tech Each tech has a different metal stackup, so user projects get a different top routing metal layer. tt-support-tools now handles this instead of the user having to worry about this when switching PDKs. --- project.py | 1 + tech.py | 3 +++ 2 files changed, 4 insertions(+) diff --git a/project.py b/project.py index 8e18b1c..fb2fdc5 100644 --- a/project.py +++ b/project.py @@ -482,6 +482,7 @@ class Project: "VERILOG_FILES": [f"dir::{src}" for src in self.sources], "DIE_AREA": die_area, "FP_DEF_TEMPLATE": def_template, + "RT_MAX_LAYER": self.tech.project_top_metal_layer, } write_config(config, os.path.join(self.src_dir, "user_config"), ("json",)) diff --git a/tech.py b/tech.py index d1af1f3..1c63b81 100644 --- a/tech.py +++ b/tech.py @@ -18,6 +18,7 @@ class Tech(Protocol): tt_corner: str cell_regexp: str netlist_type: Literal["pnl", "nl"] + project_top_metal_layer: str """ These layers will be removed from the SVG render of the layout """ label_layers: List[Tuple[int, int]] @@ -43,6 +44,7 @@ class Sky130Tech(Tech): tt_corner = "nom_tt_025C_1v80" cell_regexp = r"sky130_(?P\S+)__(?P\S+)_(?P\d+)" netlist_type = "pnl" + project_top_metal_layer = "met4" label_layers = [ (64, 59), # pwell.label (64, 5), # nwell.label @@ -94,6 +96,7 @@ class IHPTech(Tech): tt_corner = "nom_typ_1p20V_25C" cell_regexp = r"sg13g2_(?P\S+)_(?P\d+)" netlist_type = "nl" + project_top_metal_layer = "Metal5" label_layers = [ (8, 1), # Metal1.label (8, 25), # Metal1.text