feat(precheck): initial IHP support

still missing the IHP Klayout DRC deck
This commit is contained in:
Uri Shaked
2025-04-16 08:28:51 +03:00
parent 49b57ea0bb
commit c350c2ed16
5 changed files with 532 additions and 58 deletions
+15 -5
View File
@@ -477,14 +477,14 @@ def test_klayout_beol_fail(gds_fail_met1_poly: str):
def test_klayout_checks_pass(gds_valid: str):
precheck.klayout_checks(gds_valid, "TEST_valid")
precheck.klayout_checks(gds_valid, "TEST_valid", "sky130")
def test_klayout_checks_fail_metal5(gds_fail_metal5_poly: str):
with pytest.raises(
precheck.PrecheckFailure, match=r"Forbidden layer met5\.drawing found in .+"
):
precheck.klayout_checks(gds_fail_metal5_poly, "TEST_met5_error")
precheck.klayout_checks(gds_fail_metal5_poly, "TEST_met5_error", "sky130")
def test_klayout_checks_fail_pr_boundary(gds_no_pr_boundary: str):
@@ -492,7 +492,7 @@ def test_klayout_checks_fail_pr_boundary(gds_no_pr_boundary: str):
precheck.PrecheckFailure,
match=r"prBoundary.boundary \(235/4\) layer not found in .+",
):
precheck.klayout_checks(gds_no_pr_boundary, "TEST_no_prboundary")
precheck.klayout_checks(gds_no_pr_boundary, "TEST_no_prboundary", "sky130")
def test_klayout_top_module_name(gds_invalid_macro_name: str):
@@ -500,7 +500,9 @@ def test_klayout_top_module_name(gds_invalid_macro_name: str):
precheck.PrecheckFailure,
match="Top macro name mismatch: expected TEST_invalid_macro_name, got wrong_name",
):
precheck.klayout_checks(gds_invalid_macro_name, "TEST_invalid_macro_name")
precheck.klayout_checks(
gds_invalid_macro_name, "TEST_invalid_macro_name", "sky130"
)
def test_klayout_zero_area_drc_pass(gds_valid: str):
@@ -514,7 +516,7 @@ def test_klayout_zero_area_drc_fail(gds_zero_area: str):
def test_shapes_outside_area(gds_shapes_outside_area: str):
with pytest.raises(precheck.PrecheckFailure, match="Shapes outside project area"):
precheck.boundary_check(gds_shapes_outside_area)
precheck.boundary_check(gds_shapes_outside_area, "sky130")
def test_wrong_power_pins_1(verilog_lef_wrong_power_pins: tuple[str, str]):
@@ -558,6 +560,7 @@ def test_pin_analog_example(gds_lef_analog_example: tuple[str, str]):
"../def/analog/tt_analog_1x2.def",
"TEST_analog_example",
False,
"sky130",
)
@@ -569,6 +572,7 @@ def test_pin_analog_power_compat(gds_lef_analog_power_compat: tuple[str, str]):
"../def/analog/tt_analog_1x2.def",
"TEST_analog_power_compat",
False,
"sky130",
)
@@ -584,6 +588,7 @@ def test_pin_analog_wrong_vgnd(gds_lef_analog_wrong_vgnd: tuple[str, str]):
"../def/analog/tt_analog_1x2.def",
"TEST_analog_wrong_vgnd",
False,
"sky130",
)
@@ -599,6 +604,7 @@ def test_pin_analog_overlapping_vgnd(gds_lef_analog_overlapping_vgnd: tuple[str,
"../def/analog/tt_analog_1x2.def",
"TEST_analog_overlapping_vgnd",
False,
"sky130",
)
@@ -610,6 +616,7 @@ def test_pin_analog_compound_vgnd(gds_lef_analog_compound_vgnd: tuple[str, str])
"../def/analog/tt_analog_1x2.def",
"TEST_analog_compound_vgnd",
False,
"sky130",
)
@@ -621,6 +628,7 @@ def test_pin_analog_example_3v3(gds_lef_analog_example_3v3: tuple[str, str]):
"../def/analog/tt_analog_1x2.def",
"TEST_analog_example_3v3",
True,
"sky130",
)
@@ -636,6 +644,7 @@ def test_pin_analog_3v3_mismatch1(gds_lef_analog_example: tuple[str, str]):
"../def/analog/tt_analog_1x2.def",
"TEST_analog_example",
True,
"sky130",
)
@@ -651,6 +660,7 @@ def test_pin_analog_3v3_mismatch2(gds_lef_analog_example_3v3: tuple[str, str]):
"../def/analog/tt_analog_1x2.def",
"TEST_analog_example_3v3",
False,
"sky130",
)