-
Notifications
You must be signed in to change notification settings - Fork 414
[Place] Independent Placement Verification #2769
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
[Place] Independent Placement Verification #2769
Conversation
e91a7ed
to
176844b
Compare
@vaughnbetz This is the I do have a FIXME in this code which I am not sure about. Are the macros required for the rest of the VPR flow? My intention for this code is that this MUST pass in order for the rest of the VPR flow to be used without issue; but I do not see uses of the pl_macros anywhere outside of placement (and drawing). If they are not used then I think this check should happen somewhere else. What do you think? |
If the macros aren't respected generally routing will fail, as the main reason macros are created is for fixed routing patterns (no programmability). So I'd check them. |
A few checks are done in |
This looks good to me. @AlexandreSinger feel free to merge when you are ready. I tend to agree with @soheilshahrouz that a few blank lines to break up concepts are helpful to readability, but will leave it to you to decide if /where to add any blank lines. |
As we discussed the sync_grid_to_blocks() function call could/should be moved inside load_placement, which will make the overall control a bit cleaner. You could also move the post_place_sync () function call into both the end of placement and the end of load_placement if you like, as that would again simplify the overall control. Merge whenever you see fit ... |
176844b
to
c18e984
Compare
@soheilshahrouz @vaughnbetz I looked into the I found that some strong tests (specifically the flat router) rely on this placement style. This inconsistency makes it impossible to make a full verifier. You would need to call the verifier, then call I will raise a separate PR to fix this issue, but we should come to a consensus on which of these two is correct. Do we only want to place the clusters at the root tile locations? Or do we want to place the clusters at all tile locations of the large tile? @vaughnbetz Are you ok with me merging this PR? |
We should only place blocks at the root position in the grid; that's faster, so it's what we want to do during placement. Not sure why sync_blocks_to_grid isn't doing that, but I think we should change it and see if anything breaks (it shouldn't). I'm OK with merging. |
If you want to mark each and every grid covered by a tile, fill in non-root grids with a pointer to the associated root grid. These extra pointers never need to change. |
That's what happens now; the grid has non-root node locations point back to the root node. |
Created a method that would independently verify the placement in the VPR flow. If a placement passes this verification, it is assumed that it can be used in routing without issue. By design, this method does not use any global variables (everything needs to be passed in) and recomputes everything that it does not assume. This allows it to be independent of the placement flow being used, so this method can be used in the AP flow as well.
c18e984
to
c096e2f
Compare
Created a method that would independently verify the placement in the VPR flow. If a placement passes this verification, it is assumed that it can be used in routing without issue.
By design, this method does not use any global variables (everything needs to be passed in) and recomputes everything that it does not assume. This allows it to be independent of the placement flow being used, so this method can be used in the AP flow as well.