Skip to content

Commit 7129eda

Browse files
committed
[lib][rr_graph] pass vector of ptc nums to set_node_ptc_nums and add parse_ptc_numbers to rr graph util
1 parent cf49863 commit 7129eda

File tree

7 files changed

+38
-20
lines changed

7 files changed

+38
-20
lines changed

libs/librrgraph/src/base/rr_graph_builder.cpp

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -225,8 +225,8 @@ std::vector<RREdgeId> RRGraphBuilder::node_in_edges(RRNodeId node) const {
225225
return node_in_edges_[node];
226226
}
227227

228-
void RRGraphBuilder::set_node_ptc_nums(RRNodeId node, const std::string& ptc_str) {
229-
node_storage_.set_node_ptc_nums(node, ptc_str);
228+
void RRGraphBuilder::set_node_ptc_nums(RRNodeId node, const std::vector<int>& ptc_numbers) {
229+
node_storage_.set_node_ptc_nums(node, ptc_numbers);
230230
}
231231

232232
std::string RRGraphBuilder::node_ptc_nums_to_string(RRNodeId node) const {
@@ -266,8 +266,12 @@ void RRGraphBuilder::add_track_node_to_lookup(RRNodeId node) {
266266
// Find the track ids using the x/y offset
267267
if (e_rr_type::CHANX == node_type || e_rr_type::CHANY == node_type) {
268268
const std::vector<short>& track_nums = node_storage_.node_tilable_track_nums(node);
269-
ptc = (node_type == e_rr_type::CHANX) ? track_nums[x - node_storage_.node_xlow(node)] :
270-
track_nums[y - node_storage_.node_ylow(node)];
269+
if (node_type == e_rr_type::CHANX) {
270+
ptc = track_nums[x - node_storage_.node_xlow(node)];
271+
} else {
272+
VTR_ASSERT_DEBUG(node_type == e_rr_type::CHANY);
273+
ptc = track_nums[y - node_storage_.node_ylow(node)];
274+
}
271275
node_lookup_.add_node(node, node_storage_.node_layer_low(node), x, y, node_type, ptc);
272276
}
273277
}

libs/librrgraph/src/base/rr_graph_builder.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -276,8 +276,8 @@ class RRGraphBuilder {
276276
node_storage_.set_node_mux_num(id, new_mux_num);
277277
}
278278

279-
/** @brief Add a list of ptc number in string (split by comma) to a given node. This function is used by rr graph reader only. */
280-
void set_node_ptc_nums(RRNodeId node, const std::string& ptc_str);
279+
/** @brief Add a list of ptc numbers to a given node. This function is used by rr graph reader only. */
280+
void set_node_ptc_nums(RRNodeId node, const std::vector<int>& ptc_numbers);
281281

282282
/** @brief With a given node, output ptc numbers into a string (use comma as delima). This function is used by rr graph writer only. */
283283
std::string node_ptc_nums_to_string(RRNodeId node) const;

libs/librrgraph/src/base/rr_graph_storage.cpp

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -629,16 +629,15 @@ void t_rr_graph_storage::set_node_direction(RRNodeId id, Direction new_direction
629629
node_storage_[id].dir_side_.direction = new_direction;
630630
}
631631

632-
void t_rr_graph_storage::set_node_ptc_nums(RRNodeId node, const std::string& ptc_str) {
632+
void t_rr_graph_storage::set_node_ptc_nums(RRNodeId node, const std::vector<int>& ptc_numbers) {
633633
VTR_ASSERT(size_t(node) < node_storage_.size());
634-
std::vector<std::string> ptc_tokens = vtr::StringToken(ptc_str).split(",");
635-
VTR_ASSERT(ptc_tokens.size() >= 1);
636-
set_node_ptc_num(node, std::stoi(ptc_tokens[0]));
637-
if (ptc_tokens.size() > 1) {
634+
VTR_ASSERT(ptc_numbers.size() >= 1);
635+
set_node_ptc_num(node, ptc_numbers[0]);
636+
if (ptc_numbers.size() > 1) {
638637
VTR_ASSERT(size_t(node) < node_tilable_track_nums_.size());
639-
node_tilable_track_nums_[node].resize(ptc_tokens.size());
640-
for (size_t iptc = 0; iptc < ptc_tokens.size(); iptc++) {
641-
node_tilable_track_nums_[node][iptc] = std::stoi(ptc_tokens[iptc]);
638+
node_tilable_track_nums_[node].resize(ptc_numbers.size());
639+
for (size_t iptc = 0; iptc < ptc_numbers.size(); iptc++) {
640+
node_tilable_track_nums_[node][iptc] = ptc_numbers[iptc];
642641
}
643642
}
644643
}

libs/librrgraph/src/base/rr_graph_storage.h

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -708,11 +708,9 @@ class t_rr_graph_storage {
708708
/**
709709
* @brief Set the ptc numbers for a node.
710710
* @param node The node id
711-
* @param ptc_str The ptc numbers string. Note that if tileable RR Graph is used,
712-
* multiple ptc numbers can be assigned to node of the type of CHANX or CHANY. If that's the case,
713-
* the ptc numbers are separated by commas.
711+
* @param ptc_numbers The ptc numbers vector to be set for the node.
714712
*/
715-
void set_node_ptc_nums(RRNodeId node, const std::string& ptc_str);
713+
void set_node_ptc_nums(RRNodeId node, const std::vector<int>& ptc_numbers);
716714

717715
/**
718716
* @brief Add a track number to a node.

libs/librrgraph/src/base/rr_graph_utils.cpp

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -390,4 +390,13 @@ bool chan_same_type_are_adjacent(const RRGraphView& rr_graph, RRNodeId node1, RR
390390
}
391391

392392
return false; // unreachable
393-
}
393+
}
394+
395+
std::vector<int> parse_ptc_numbers(const std::string& ptc_str) {
396+
std::vector<int> ptc_numbers;
397+
std::vector<std::string> ptc_tokens = vtr::StringToken(ptc_str).split(",");
398+
for (const std::string& ptc_token : ptc_tokens) {
399+
ptc_numbers.push_back(std::stoi(ptc_token));
400+
}
401+
return ptc_numbers;
402+
}

libs/librrgraph/src/base/rr_graph_utils.h

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -125,3 +125,10 @@ bool chanxy_chanz_adjacent(const RRGraphView& rr_graph, RRNodeId node1, RRNodeId
125125

126126
bool chan_same_type_are_adjacent(const RRGraphView& rr_graph, RRNodeId node1, RRNodeId node2);
127127

128+
/**
129+
* @brief Parse the ptc numbers string into a vector of integers.
130+
* @param ptc_str The ptc numbers string in the format of "ptc1,ptc2,ptc3,...ptcn".
131+
* @return A vector of integers representing the ptc numbers.
132+
*/
133+
std::vector<int> parse_ptc_numbers(const std::string& ptc_str);
134+

libs/librrgraph/src/io/rr_graph_uxsdcxx_serializer.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -713,7 +713,8 @@ class RrGraphSerializer final : public uxsd::RrGraphBase<RrGraphContextTypes> {
713713
inline void set_node_loc_ptc(const char* ptc, int& inode) final {
714714
t_rr_node node = (*rr_nodes_)[inode];
715715
RRNodeId node_id = node.id();
716-
return rr_graph_builder_->set_node_ptc_nums(node_id, std::string(ptc));
716+
std::vector<int> ptc_numbers = parse_ptc_numbers(ptc);
717+
return rr_graph_builder_->set_node_ptc_nums(node_id, ptc_numbers);
717718
}
718719

719720
inline const char* get_node_loc_ptc(const t_rr_node& node) final {

0 commit comments

Comments
 (0)