Skip to content

store original pin names during mbff clustering, add regressions, #10093

Merged
maliberty merged 5 commits intoThe-OpenROAD-Project:masterfrom
The-OpenROAD-Project-staging:mbff_pin_name
Apr 10, 2026
Merged

store original pin names during mbff clustering, add regressions, #10093
maliberty merged 5 commits intoThe-OpenROAD-Project:masterfrom
The-OpenROAD-Project-staging:mbff_pin_name

Conversation

@openroad-ci
Copy link
Copy Markdown
Collaborator

Summary

When OpenROAD's MBFF clustering pass (cluster_flops) merges single-bit flip-flops into multi-bit tray instances, the original instance and pin names are lost. Timing reports show names like _tray_size4_940/Q2 which are meaningless to the designer. The original name — e.g. reg_b/Q — is needed to correlate timing violations back to the RTL.

This PR is for changes in OpenROAD side:

Type of Change

  • New feature

Impact

This change preserves original flip-flop instance/pin names through MBFF clustering by storing per-pin orig_name_* properties on the created tray instances, and exposes the data in OpenSTA timing reports via a new opt-in report field (orig_name).

Verification

  • I have verified that the local build succeeds (./etc/Build.sh).
  • I have run the relevant tests and they pass.
  • My code follows the repository's formatting guidelines.
  • I have signed my commits (DCO).

…te sta with reporting changes

Signed-off-by: dsengupta0628 <dsengupta@precisioninno.com>
Signed-off-by: dsengupta0628 <dsengupta@precisioninno.com>
@github-actions
Copy link
Copy Markdown
Contributor

github-actions bot commented Apr 9, 2026

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

Copy link
Copy Markdown
Contributor

@gemini-code-assist gemini-code-assist bot left a comment

Choose a reason for hiding this comment

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

Code Review

This pull request enhances the MBFF::ModifyPinConnections function by adding logic to store original flip-flop instance and port names as properties on the new tray instances. This allows timing reports to display these original names, improving traceability. The pin classification logic was also refactored for clarity. A new integration test, mbff_orig_name, has been added to verify this functionality, including a DEF file, a TCL script to run the test and generate a timing report, and an .ok file with the expected output. Additionally, the src/sta submodule has been updated, likely to support the display of these new orig_name properties in timing reports. There is no feedback to provide on the review comments.

const std::string orig_port_name = iterm->getMTerm()->getName();

dbNet* net = iterm->getNet();
while (net) {
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

@maliberty Why a while loop to disconnect the iterm? An iterm cannot have multiple connections in OpenDB, can it? If an dbITerm connects to exactly zero or one dbNet, then this while loop runs exactly once always. This was an existing structure so I did not touch it, but have this question.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

@therealshreyas I believe question goes back to your original implementation. Do you recall the reasoning?

@github-actions
Copy link
Copy Markdown
Contributor

github-actions bot commented Apr 9, 2026

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

@dsengupta0628
Copy link
Copy Markdown
Contributor

Signed-off-by: dsengupta0628 <dsengupta@precisioninno.com>
@github-actions
Copy link
Copy Markdown
Contributor

github-actions bot commented Apr 9, 2026

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

@maliberty maliberty merged commit 33c72bf into The-OpenROAD-Project:master Apr 10, 2026
16 checks passed
@maliberty maliberty deleted the mbff_pin_name branch April 10, 2026 02:49
@jhkim-pii
Copy link
Copy Markdown
Contributor

Need to register the new test cases for Bazel

- ff4 DFFHQNx1_ASAP7_75t_L + PLACED ( 6000 4000 ) N ;
END COMPONENTS

PINS 1 ;
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Trivial. Pin count is wrong

END PINS


NETS 1 ;
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Net count is also wrong.

Average slot-to-flop displacement: 0.865
Final Objective Value: 97.228
Sizes used
2-bit: 2
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Minor. How about adding 4-bit test too?

@QuantamHD
Copy link
Copy Markdown
Collaborator

Thank you @dsengupta0628. We really appreciate it.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants