Skip to content

Commit 1be2032

Browse files
committed
equivalent: fixing auto-sizing of FPGA device with equivalent tiles
Signed-off-by: Alessandro Comodi <[email protected]>
1 parent eeecb5b commit 1be2032

File tree

1 file changed

+22
-4
lines changed

1 file changed

+22
-4
lines changed

vpr/src/base/SetupGrid.cpp

Lines changed: 22 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -221,15 +221,33 @@ static DeviceGrid auto_size_device_grid(const std::vector<t_grid_def>& grid_layo
221221
}
222222

223223
static std::vector<t_physical_tile_type_ptr> grid_overused_resources(const DeviceGrid& grid, std::map<t_logical_block_type_ptr, size_t> instance_counts) {
224+
auto& device_ctx = g_vpr_ctx.device();
225+
224226
std::vector<t_physical_tile_type_ptr> overused_resources;
225227

228+
std::unordered_map<t_physical_tile_type_ptr, size_t> min_count_map;
229+
// Initialize min_count_map
230+
for (const auto& physical_tile : device_ctx.physical_tile_types) {
231+
min_count_map.insert(std::make_pair(&physical_tile, size_t(0)));
232+
}
233+
226234
//Are the resources satisified?
227235
for (auto kv : instance_counts) {
228-
t_physical_tile_type_ptr type;
229-
size_t min_count;
230-
std::tie(type, min_count) = std::make_pair(kv.first->equivalent_tiles[0], kv.second);
236+
t_physical_tile_type_ptr type = nullptr;
237+
238+
size_t inst_cnt = 0;
239+
for (auto& physical_tile : kv.first->equivalent_tiles) {
240+
size_t tmp_inst_cnt = grid.num_instances(physical_tile);
241+
242+
if (inst_cnt <= tmp_inst_cnt) {
243+
type = physical_tile;
244+
inst_cnt = tmp_inst_cnt;
245+
}
246+
}
231247

232-
size_t inst_cnt = grid.num_instances(type);
248+
VTR_ASSERT(type);
249+
size_t min_count = min_count_map.at(type) + kv.second;
250+
min_count_map.at(type) = min_count;
233251

234252
if (inst_cnt < min_count) {
235253
overused_resources.push_back(type);

0 commit comments

Comments
 (0)