Skip to content

Commit 489698f

Browse files
committed
added the selection from available subtiles to hoisted selection
1 parent 8cc499e commit 489698f

File tree

1 file changed

+17
-1
lines changed

1 file changed

+17
-1
lines changed

vpr/src/place/initial_placement.cpp

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -497,7 +497,23 @@ static std::vector<ClusterBlockId> find_centroid_loc(const t_pl_macro& pl_macro,
497497
const auto& compressed_block_grid = g_vpr_ctx.placement().compressed_block_grids[block_type->index];
498498
const auto& type = device_ctx.grid.get_physical_type({centroid.x, centroid.y, centroid.layer});
499499
const auto& compatible_sub_tiles = compressed_block_grid.compatible_sub_tile_num(type->index);
500-
centroid.sub_tile = compatible_sub_tiles[rng.irand((int)compatible_sub_tiles.size() - 1)]; // for testing previous functionality.
500+
//centroid.sub_tile = compatible_sub_tiles[rng.irand((int)compatible_sub_tiles.size() - 1)]; // for testing previous functionality.
501+
//filter out occupied subtiles to prevent falling to try_place_macro_randomly while we have available subtiles already.
502+
const GridBlock& grid_blocks = blk_loc_registry.grid_blocks();
503+
std::vector<int> available_sub_tiles;
504+
for (int sub_tile : compatible_sub_tiles) {
505+
t_pl_loc pos = {centroid.x, centroid.y, sub_tile, centroid.layer};
506+
if (!grid_blocks.block_at_location(pos)) {
507+
available_sub_tiles.push_back(sub_tile);
508+
}
509+
}
510+
511+
//if no available subtile is found, we don't need to try_place_macro.
512+
if (available_sub_tiles.empty()) {
513+
centroid.sub_tile = -1; //set to default
514+
} else {
515+
centroid.sub_tile = available_sub_tiles[rng.irand((int)available_sub_tiles.size() - 1)];
516+
}
501517
}
502518
}
503519

0 commit comments

Comments
 (0)