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

Jumper insertion: modifications in DRT and ODB #6138

Open
wants to merge 39 commits into
base: master
Choose a base branch
from

Conversation

luis201420
Copy link
Contributor

@luis201420 luis201420 commented Nov 11, 2024

Fixes The-OpenROAD-Project/OpenROAD-flow-scripts#2477
It contains the modifications required to use jumper insertion in the flow.
ODB:

  • Added a flag in dbNet to check if a net has jumpers in its guide.
  • Added a flag in dbGuide to check if the guide is a jumper.

DRT:

  • Using the dbNet flag to increase the cost of not using a guide when routing a net with a jumper.

GRT:

  • Running jumper insertion in repair antenna iterations when you have new nets with a violation.

Results:
I ran a test-branch with the modifications, the reduction of diodes for sky130hd are:

  • aes:
    GRT diodes: from 190 to 138
    DRT diodes: from 8 to 13
    Total diodes: from 198 to 151 (23.74%)
  • chameleon:
    GRT diodes: from 429 to 108
    DRT diodes: from 38 to 108
    Total diodes: from 467 to 216 (53.75%)
  • jpeg:
    GRT diodes: from 234 to 61
    DRT diodes: from 49 to 64
    Total diodes: from 283 to 125 (55.83%)
  • ibex:
    GRT diodes: from 113 to 51
    DRT diodes: from 35 to 47
    Total diodes: from 148 to 98 (33.8%)
  • microwatt:
    GRT diodes: from 7205 to 4163
    DRT diodes: from 1379 to 1849
    Total diodes: from 8584 to 6012 (30%)
    This design is ending with 3 antenna violations after DRT.

Future works:

  • Use the dbGuide flag in DRT to increase the cost of not using guides when routing a guide.
  • Improve jumper insertion to reduce the number of diodes used.

Signed-off-by: luis201420 <[email protected]>
Signed-off-by: luis201420 <[email protected]>
Signed-off-by: luis201420 <[email protected]>
Signed-off-by: luis201420 <[email protected]>
Signed-off-by: luis201420 <[email protected]>
@luis201420 luis201420 marked this pull request as draft November 11, 2024 19:15
@luis201420 luis201420 marked this pull request as ready for review November 11, 2024 19:16
@luis201420 luis201420 marked this pull request as draft November 11, 2024 19:16
Copy link
Contributor

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

1 similar comment
Copy link
Contributor

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

Copy link
Contributor

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

Copy link
Collaborator

@eder-matheus eder-matheus left a comment

Choose a reason for hiding this comment

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

@luis201420 Please look at the regression errors too.

src/drt/src/dr/FlexDR_maze.cpp Outdated Show resolved Hide resolved
src/drt/src/db/obj/frNet.h Outdated Show resolved Hide resolved
src/drt/src/dr/FlexGridGraph_maze.cpp Outdated Show resolved Hide resolved
@@ -272,6 +274,7 @@ class frNet : public frBlockObject
bool hasInitialRouting_{false};
bool isFixed_{false};

bool hasJumpers_{false};
Copy link
Collaborator

Choose a reason for hiding this comment

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

Add a comment explaining what is the jumper in this context.

src/grt/src/RepairAntennas.cpp Outdated Show resolved Hide resolved
@@ -214,6 +214,7 @@ class RepairAntennas
void destroyNetWires(const std::vector<odb::dbNet*>& nets_to_repair);
odb::dbMTerm* findDiodeMTerm();
double diffArea(odb::dbMTerm* mterm);
bool runJumperInsertion() { return run_jumper_insertion_; }
Copy link
Collaborator

Choose a reason for hiding this comment

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

This function name can mislead to what it actually does. Maybe instead of run... you can use isJumperInsertion.

@@ -295,6 +296,7 @@ class RepairAntennas
AntennaViolations antenna_violations_;
int unique_diode_index_;
int illegal_diode_placement_count_;
bool run_jumper_insertion_;
Copy link
Collaborator

Choose a reason for hiding this comment

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

Same for the class member name.

Copy link
Contributor

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

Copy link
Contributor

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

Copy link
Contributor

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

src/drt/src/db/obj/frNet.h Outdated Show resolved Hide resolved
Copy link
Collaborator

@eder-matheus eder-matheus left a comment

Choose a reason for hiding this comment

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

@luis201420 Please start a new ecure-ci run to ensure it will not break any design.

Copy link
Contributor

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

@luis201420
Copy link
Contributor Author

@luis201420 Please start a new ecure-ci run to ensure it will not break any design.

Ok, I ran a new secure-ci to verify the designs.

@luis201420 luis201420 marked this pull request as ready for review November 18, 2024 23:00
Copy link
Contributor

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

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.

Enable repair_antennas with jumper insertion by default
3 participants