Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

rsz: makeRepeater check IO dont touch #6708

Merged
merged 6 commits into from
Feb 20, 2025

Conversation

gadfort
Copy link
Collaborator

@gadfort gadfort commented Feb 13, 2025

Fixes:

  • previously, the dont touches would result in floating nets and double driven nets
  • this avoid this by rejecting the repeater when its not possible to add it and cleanup afterwards if the buffer ended up being left floating due to dont touches.

@gadfort gadfort requested a review from maliberty February 13, 2025 17:26
Copy link
Contributor

clang-tidy review says "All clean, LGTM! 👍"

@maliberty
Copy link
Member

@andyfox-rushc FYI

@andyfox-rushc
Copy link
Contributor

andyfox-rushc commented Feb 14, 2025 via email

@@ -1850,6 +1854,30 @@ void RepairDesign::makeRepeater(
}
}

if (!hasInputPort(load_net) && preserve_outputs) {
Copy link
Member

Choose a reason for hiding this comment

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

If hasInputPort(load_net) && preserve_outputs is true then it seems you can't insert a buffer.

Copy link
Collaborator Author

Choose a reason for hiding this comment

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

this is just the not(hasInputPort(load_net) || !preserve_outputs) from below since this is checking a specific case, I'll redo that logic to make it clear

@@ -2019,6 +2051,27 @@ void RepairDesign::makeRepeater(
sta_->connectPin(buffer, buffer_output_port, buffer_op_net);
} // case 2

if (!connections_modified) {
Copy link
Member

Choose a reason for hiding this comment

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

When would this happen? It seems both cases modify connections.

Copy link
Collaborator Author

Choose a reason for hiding this comment

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

if the buffer is only connected to instances that are marked dont_touch then no connections would be made

Copy link
Member

Choose a reason for hiding this comment

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

You can still insert a repeater in that case unless the driver is also dont-touch or a primary input

Copy link
Collaborator Author

Choose a reason for hiding this comment

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

you cannot, because you cannot change the net that the dont_touch buffers are attached to (thats what is failing). If you cannot break the net into two parts because all the instances on one or the other side of it are marked dont_touch then adding the buffer just results in a floating net somewhere.

Copy link
Member

Choose a reason for hiding this comment

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

You just leave the loads on their current net and add a new net at the repeater input instead.

Copy link
Member

Choose a reason for hiding this comment

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

In any case it is better to avoid this upstream impossible combinations

Copy link
Collaborator Author

Choose a reason for hiding this comment

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

I mode the check up to earlier, so the original code is not really modified.

@gadfort gadfort requested a review from maliberty February 18, 2025 16:47
Signed-off-by: Peter Gadfort <[email protected]>
@maliberty maliberty merged commit b330a8a into The-OpenROAD-Project:master Feb 20, 2025
11 checks passed
@gadfort gadfort deleted the rsz-check-io branch February 20, 2025 22:50
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.

3 participants