Skip to content

NoC-aware packing optimization and NoC-biased centroid move type #2546

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

Merged
merged 43 commits into from
May 23, 2024

Conversation

soheilshahrouz
Copy link
Contributor

The packing algorithm may infer logical connectivity through high-fanout nets like reset and clock enable, especially in NoC designs. This could lead to atoms from unconnected modules being packed together. Once this happens, more atoms from the unconnected module can join through low-fanout nets. Placing such clustered blocks is challenging because they are connected (not necessarily directly) to NoC routers, but NoC routers are usually very far from each other. As a results, clustered blocks of two unconnected modules are stretched between two NoC routers. To address this, we use BFS on the atom netlist to identify connected components including NoC routers. Once identified, we prevent atoms from different components from clustering together.

In the placement stage, a new move type is introcuded: NoC-baised centroid. After the centroid loaction of a clustered block is computed, it is adjusted towards its reachable NoC routers. To find reachable NoC routers for all blocks, we run BFS on the clustered netlist to find connected components containing NoC routers.

This PR is submitted for code review. QoR results for the initial implementation of this PR are available in the paper. QoR results for the current version will be added soon.

Types of changes

  • Bug fix (change which fixes an issue)
  • New feature (change which adds functionality)
  • Breaking change (fix or feature that would cause existing functionality to change)

Checklist:

  • My change requires a change to the documentation
  • I have updated the documentation accordingly
  • I have added tests to cover my changes
  • All new and existing tests passed

If all routers are constrained, place_noc_routers_randomly crashes.
@github-actions github-actions bot added VPR VPR FPGA Placement & Routing Tool libarchfpga Library for handling FPGA Architecture descriptions lang-cpp C/C++ code libvtrutil labels Apr 29, 2024
Copy link
Contributor

@vaughnbetz vaughnbetz left a comment

Choose a reason for hiding this comment

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

Some requested changes, mostly (all?) commenting and naming.

@soheilshahrouz
Copy link
Contributor Author

@vaughnbetz
I added more comments and a few subroutines based on your review.

@vaughnbetz vaughnbetz merged commit 28e7960 into master May 23, 2024
100 checks passed
@vaughnbetz vaughnbetz deleted the noc_pack_part branch May 23, 2024 19:17
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
lang-cpp C/C++ code libarchfpga Library for handling FPGA Architecture descriptions libvtrutil VPR VPR FPGA Placement & Routing Tool
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants