Skip to content

Commit b57b08f

Browse files
Fix bug with checking if device has interposer cuts
1 parent 561b5fb commit b57b08f

File tree

3 files changed

+22
-1
lines changed

3 files changed

+22
-1
lines changed

libs/libarchfpga/src/device_grid.cpp

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,3 +89,19 @@ void DeviceGrid::count_instances() {
8989
}
9090
}
9191
}
92+
93+
bool DeviceGrid::has_interposer_cuts() const {
94+
for (const std::vector<int>& layer_h_cuts : horizontal_interposer_cuts_) {
95+
if (!layer_h_cuts.empty()) {
96+
return true;
97+
}
98+
}
99+
100+
for (const std::vector<int>& layer_v_cuts : vertical_interposer_cuts_) {
101+
if (!layer_v_cuts.empty()) {
102+
return true;
103+
}
104+
}
105+
106+
return false;
107+
}

libs/libarchfpga/src/device_grid.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -211,6 +211,11 @@ class DeviceGrid {
211211
return vertical_interposer_cuts_;
212212
}
213213

214+
/// Returns if the grid has any interposer cuts. You should use this function instead of
215+
/// checking if get_horizontal/vertical_interposer_cuts is empty, since the return value
216+
/// of those functions might look something like this: {{}} which is technically not empty.
217+
bool has_interposer_cuts() const;
218+
214219
private:
215220
/// @brief Counts the number of each tile type on each layer and store it in instance_counts_.
216221
/// It is called in the constructor.

vpr/src/route/rr_graph_generation/rr_graph.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1670,7 +1670,7 @@ static std::function<void(t_chan_width*)> alloc_and_load_rr_graph(RRGraphBuilder
16701670
}
16711671

16721672
// If there are any interposer cuts, remove the edges and shorten the wires that cross interposer cut lines.
1673-
if (!grid.get_horizontal_interposer_cuts().empty() || !grid.get_vertical_interposer_cuts().empty()) {
1673+
if (grid.has_interposer_cuts()) {
16741674
std::vector<RREdgeId> interposer_edges = mark_interposer_cut_edges_for_removal(rr_graph, grid);
16751675
rr_graph_builder.remove_edges(interposer_edges);
16761676

0 commit comments

Comments
 (0)