Skip to content

Commit c4ad279

Browse files
committed
vpr: interchange: rr graph: use only routing segments
Signed-off-by: Alessandro Comodi <[email protected]>
1 parent 573f55e commit c4ad279

File tree

2 files changed

+29
-7
lines changed

2 files changed

+29
-7
lines changed

libs/libarchfpga/src/read_fpga_interchange_arch.cpp

Lines changed: 22 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -174,8 +174,8 @@ void add_segment_with_default_values(t_segment_inf& seg, std::string name) {
174174
seg.name = name;
175175
seg.length = 1;
176176
seg.frequency = 1;
177-
seg.Rmetal = 1e-12;
178-
seg.Cmetal = 1e-12;
177+
seg.Rmetal = 1e2;
178+
seg.Cmetal = 1e-15;
179179
seg.parallel_axis = BOTH_AXIS;
180180

181181
// TODO: Only bi-directional segments are created, but it the interchange format
@@ -2250,12 +2250,29 @@ struct ArchReader {
22502250
void process_segments() {
22512251
// Segment names will be taken from wires connected to pips
22522252
// They are good representation for nodes
2253+
2254+
auto wires = ar_.getWires();
2255+
auto wire_types = ar_.getWireTypes();
2256+
2257+
std::unordered_map<size_t, Device::WireCategory> wire_map;
2258+
for (auto wire : wires) {
2259+
auto type = wire_types[wire.getType()];
2260+
wire_map.emplace(wire.getWire(), type.getCategory());
2261+
}
2262+
22532263
std::set<uint32_t> wire_names;
22542264
for (auto tile_type : ar_.getTileTypeList()) {
2255-
auto wires = tile_type.getWires();
2265+
auto tile_wires = tile_type.getWires();
2266+
22562267
for (auto pip : tile_type.getPips()) {
2257-
wire_names.insert(wires[pip.getWire0()]);
2258-
wire_names.insert(wires[pip.getWire1()]);
2268+
auto wire0 = tile_wires[pip.getWire0()];
2269+
auto wire1 = tile_wires[pip.getWire1()];
2270+
2271+
if (wire_map[wire0] == Device::WireCategory::GENERAL)
2272+
wire_names.insert(wire0);
2273+
2274+
if (wire_map[wire1] == Device::WireCategory::GENERAL)
2275+
wire_names.insert(wire1);
22592276
}
22602277
}
22612278

vpr/src/route/rr_graph_fpga_interchange.cpp

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -99,9 +99,14 @@ struct RR_Graph_Builder {
9999
tile_type_to_pb_type_[std::string(type.name)] = &type;
100100
}
101101

102-
for (size_t i = 0; i < segment_inf.size(); ++i) {
102+
auto wire_types = ar_.getWireTypes();
103+
for (auto wire : ar_.getWires())
104+
if (wire_types[wire.getType()].getCategory() != Device::WireCategory::GENERAL)
105+
wire_name_to_seg_idx_[str(wire.getWire())] = 0;
106+
107+
// segment at index 0 is the generic one
108+
for (size_t i = 1; i < segment_inf.size(); ++i)
103109
wire_name_to_seg_idx_[segment_inf_[RRSegmentId(i)].name] = i;
104-
}
105110

106111
std::unordered_map<uint32_t, std::set<t_bel_cell_mapping>> temp_;
107112
auto func = std::bind(&RR_Graph_Builder::str, this, std::placeholders::_1);

0 commit comments

Comments
 (0)