You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
For context. I have been creating an independent placement verifier which will ensure that all placement data strcutures are valid before going through the rest of the VPR flow (i.e. routing). The idea is that, if you pass this verification, then your placement can be used for the rest of the VPR flow without issue (regardless of how you created it). This checks invariants that the placement must pass (used as assumptions later in the flow). See PR #2769
There is a method that is called after placement which synchronizes the grid to the block placement:
All of the checks found in this method are already done in the independent verifier; however this synchronization is doing something different than what the verifier expects.
The verifier is made to match what the placer generates. The placer will only place blocks at the root tile locations (width_offset = 0; height_offset = 0). For large blocks, the other locations in the tiles are left empty. The verifier ensure that this is what happens. The issue is that the synchronization method above does not follow this. Instead it places the block at all tile locations in the large tile (not just the root). I tried to remove this functionality, but some code (specifically in the flat router) is relying on this for some reason. This causes the vtr_reg_strong/strong_flat_router regression test to fail.
I think that it is wasteful and redundant to duplicate the placed block in all tile locations in the large tile. I think that just placing the cluster block in the root tile is sufficient. The sync_grid_to_blocks method should be modified to follow this, and the code in the flat router should be fixed to reflect this change (it should always look at the root tile location for the placed block). This method is also only needed when loading the placement, the placement flow should already maintain this.
Eventually it would be a good idea to fix the grid_blocks data structure so that it is impossible to place blocks at non-root tile locations.
The text was updated successfully, but these errors were encountered:
For context. I have been creating an independent placement verifier which will ensure that all placement data strcutures are valid before going through the rest of the VPR flow (i.e. routing). The idea is that, if you pass this verification, then your placement can be used for the rest of the VPR flow without issue (regardless of how you created it). This checks invariants that the placement must pass (used as assumptions later in the flow). See PR #2769
There is a method that is called after placement which synchronizes the grid to the block placement:
vtr-verilog-to-routing/vpr/src/base/vpr_api.cpp
Lines 785 to 797 in eb8c186
vtr-verilog-to-routing/vpr/src/util/vpr_utils.cpp
Lines 91 to 165 in eb8c186
All of the checks found in this method are already done in the independent verifier; however this synchronization is doing something different than what the verifier expects.
The verifier is made to match what the placer generates. The placer will only place blocks at the root tile locations (width_offset = 0; height_offset = 0). For large blocks, the other locations in the tiles are left empty. The verifier ensure that this is what happens. The issue is that the synchronization method above does not follow this. Instead it places the block at all tile locations in the large tile (not just the root). I tried to remove this functionality, but some code (specifically in the flat router) is relying on this for some reason. This causes the
vtr_reg_strong/strong_flat_router
regression test to fail.I think that it is wasteful and redundant to duplicate the placed block in all tile locations in the large tile. I think that just placing the cluster block in the root tile is sufficient. The
sync_grid_to_blocks
method should be modified to follow this, and the code in the flat router should be fixed to reflect this change (it should always look at the root tile location for the placed block). This method is also only needed when loading the placement, the placement flow should already maintain this.Eventually it would be a good idea to fix the grid_blocks data structure so that it is impossible to place blocks at non-root tile locations.
The text was updated successfully, but these errors were encountered: