refactor: separate tech specific code

Make the codebase more PDK-agnostic by moving tech-specific code to `tech.py` and tech specific files (e.g. def files, tile_sizes.yaml) to `tech/<pdkname>` subdirectory.
This commit is contained in:
Uri Shaked
2025-09-13 20:28:48 +03:00
parent c67d54ee54
commit 28fd25f684
57 changed files with 264 additions and 271 deletions
+5 -4
View File
@@ -317,15 +317,16 @@ def main():
pinout = yaml_data.get("pinout", {})
if uses_3v3 and not is_analog:
raise PrecheckFailure("Projects with 3v3 power need at least one analog pin")
def_root = f"../tech/{tech}/def"
if is_analog:
if uses_3v3:
template_def = f"../def/analog/tt_analog_{tiles}_3v3.def"
template_def = f"{def_root}/analog/tt_analog_{tiles}_3v3.def"
else:
template_def = f"../def/analog/tt_analog_{tiles}.def"
template_def = f"{def_root}/analog/tt_analog_{tiles}.def"
elif tech == "ihp-sg13g2":
template_def = f"../ihp/def/tt_block_{tiles}_pgvdd.def"
template_def = f"{def_root}/tt_block_{tiles}_pgvdd.def"
else:
template_def = f"../def/tt_block_{tiles}_pg.def"
template_def = f"{def_root}/tt_block_{tiles}_pg.def"
logging.info(f"using def template {template_def}")
lef_file = gds_stem + ".lef"
+9 -9
View File
@@ -251,7 +251,7 @@ def generate_analog_example(
tcl_append(
f"""
def read ../def/analog/tt_analog_1x2.def
def read ../tech/sky130A/def/analog/tt_analog_1x2.def
cellname rename tt_um_template {toplevel}
"""
)
@@ -557,7 +557,7 @@ def test_pin_analog_example(gds_lef_analog_example: tuple[str, str]):
precheck.pin_check(
gds_file,
lef_file,
"../def/analog/tt_analog_1x2.def",
"../tech/sky130A/def/analog/tt_analog_1x2.def",
"TEST_analog_example",
False,
"sky130",
@@ -569,7 +569,7 @@ def test_pin_analog_power_compat(gds_lef_analog_power_compat: tuple[str, str]):
precheck.pin_check(
gds_file,
lef_file,
"../def/analog/tt_analog_1x2.def",
"../tech/sky130A/def/analog/tt_analog_1x2.def",
"TEST_analog_power_compat",
False,
"sky130",
@@ -585,7 +585,7 @@ def test_pin_analog_wrong_vgnd(gds_lef_analog_wrong_vgnd: tuple[str, str]):
precheck.pin_check(
gds_file,
lef_file,
"../def/analog/tt_analog_1x2.def",
"../tech/sky130A/def/analog/tt_analog_1x2.def",
"TEST_analog_wrong_vgnd",
False,
"sky130",
@@ -601,7 +601,7 @@ def test_pin_analog_overlapping_vgnd(gds_lef_analog_overlapping_vgnd: tuple[str,
precheck.pin_check(
gds_file,
lef_file,
"../def/analog/tt_analog_1x2.def",
"../tech/sky130A/def/analog/tt_analog_1x2.def",
"TEST_analog_overlapping_vgnd",
False,
"sky130",
@@ -613,7 +613,7 @@ def test_pin_analog_compound_vgnd(gds_lef_analog_compound_vgnd: tuple[str, str])
precheck.pin_check(
gds_file,
lef_file,
"../def/analog/tt_analog_1x2.def",
"../tech/sky130A/def/analog/tt_analog_1x2.def",
"TEST_analog_compound_vgnd",
False,
"sky130",
@@ -625,7 +625,7 @@ def test_pin_analog_example_3v3(gds_lef_analog_example_3v3: tuple[str, str]):
precheck.pin_check(
gds_file,
lef_file,
"../def/analog/tt_analog_1x2.def",
"../tech/sky130A/def/analog/tt_analog_1x2.def",
"TEST_analog_example_3v3",
True,
"sky130",
@@ -641,7 +641,7 @@ def test_pin_analog_3v3_mismatch1(gds_lef_analog_example: tuple[str, str]):
precheck.pin_check(
gds_file,
lef_file,
"../def/analog/tt_analog_1x2.def",
"../tech/sky130A/def/analog/tt_analog_1x2.def",
"TEST_analog_example",
True,
"sky130",
@@ -657,7 +657,7 @@ def test_pin_analog_3v3_mismatch2(gds_lef_analog_example_3v3: tuple[str, str]):
precheck.pin_check(
gds_file,
lef_file,
"../def/analog/tt_analog_1x2.def",
"../tech/sky130A/def/analog/tt_analog_1x2.def",
"TEST_analog_example_3v3",
False,
"sky130",