Skip to content

Commit

Permalink
feat!: quit on hold violations on all corners (#587)
Browse files Browse the repository at this point in the history
Causes hold violations to raise an error on any corner, not just typical corners.

---------

Signed-off-by: Kareem Farid <[email protected]>
  • Loading branch information
kareefardi authored Jan 14, 2025
1 parent dffc442 commit 856cbf0
Show file tree
Hide file tree
Showing 4 changed files with 37 additions and 2 deletions.
18 changes: 18 additions & 0 deletions Changelog.md
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,11 @@

## Steps

* `Checker.HoldViolations`

* Changed default value of `HOLD_VIOLATION_CORNERS` to `['*']`, which will
raise an error for hold violations on *any* corners.

* `Odb.AddPDNObstructions`, `Odb.AddRoutingObstructions`

* `PDN_OBSTRUCTIONS` and `ROUTING_OBSTRUCTIONS` are now lists of tuples
Expand Down Expand Up @@ -108,6 +113,13 @@
* Updated OpenROAD to `1d61007`
* Updated OpenSTA to `aa598a2`

## Testing

* Step unit tests now load the PDK configs first before overriding them. This
has a minor performance penalty compared to the previous "raw" load, but
allows unit tests to be updated less frequently (especially to work with new
PDK variables.)

## Misc. Enhancements/Bugfixes

* `openlane.state`
Expand Down Expand Up @@ -143,6 +155,12 @@

## API Breaks

* `Checker.HoldViolations`

* `HOLD_VIOLATION_CORNERS` now defaulting to all corners will require designs
that have hold violations at non-typical corners to set its value explicitly
to `["*tt*"]`.

* `Odb.AddRoutingObstructions`, `Odb.AddPDNObstructions`

* Typing for representation of obstructions has been changed. Designs with a
Expand Down
2 changes: 2 additions & 0 deletions openlane/steps/checker.py
Original file line number Diff line number Diff line change
Expand Up @@ -486,6 +486,7 @@ def get_corner_variable(cls) -> Variable:
cls.base_corner_var_name.replace("TIMING", replace_by),
Optional[List[str]],
f"A list of wildcards matching IPVT corners to use during checking for {cls.violation_type} violations.",
pdk=True,
)
if cls.corner_override:
variable.default = cls.corner_override
Expand Down Expand Up @@ -644,3 +645,4 @@ class HoldViolations(TimingViolations):
violation_type = "hold"

metric_name = "timing__hold_vio__count"
corner_override = ["*"]
2 changes: 1 addition & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[tool.poetry]
name = "openlane"
version = "3.0.0.dev8"
version = "3.0.0.dev9"
description = "An infrastructure for implementing chip design flows"
authors = ["Efabless Corporation and Contributors <[email protected]>"]
readme = "Readme.md"
Expand Down
17 changes: 16 additions & 1 deletion test/steps/test_all_steps.py
Original file line number Diff line number Diff line change
Expand Up @@ -75,8 +75,11 @@ def attribute_from_file(file: str, attribute: str):
def test_step_folder(test: str, pdk_root: str, caplog: pytest.LogCaptureFixture):
from openlane.steps import Step
from openlane.state import State
from openlane.config import Config
from openlane.common import Toolbox, get_script_dir
from openlane.steps.openroad_alerts import SupportsOpenROADAlerts
from decimal import Decimal
import json

sys.path.insert(0, os.getcwd())

Expand Down Expand Up @@ -134,7 +137,19 @@ def on_alert(self, alert):
state_in = State()

# 2. Load and Launch Step
target = Target.load(config, state_in, pdk_root)

if not isinstance(config, Config):
config_object, _ = Config.load(
config_in=json.loads(open(config).read(), parse_float=Decimal),
flow_config_vars=Target.get_all_config_variables(),
design_dir=".",
pdk_root=pdk_root,
_load_pdk_configs=True,
)
else:
config_object = config

target = Target.load(config_object, state_in, pdk_root)

exception: Optional[Exception] = None
try:
Expand Down

0 comments on commit 856cbf0

Please sign in to comment.