[lib] developing linker
This commit is contained in:
parent
ce20a16aad
commit
bf2876c60e
|
@ -199,6 +199,27 @@ void ClockNetwork::add_spine_switch_point(const ClockSpineId& spine_id, const Cl
|
||||||
spine_parent_[drive_spine_id] = spine_id;
|
spine_parent_[drive_spine_id] = spine_id;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool ClockNetwork::link() {
|
||||||
|
for (ClockTreeId& tree_id : trees()) {
|
||||||
|
if (!link_tree(tree_id)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool ClockNetwork::link_tree(const ClockTreeId& tree_id) {
|
||||||
|
tree_top_spines_[tree_id].clear();
|
||||||
|
/* Sort the spines under a tree; assign levels and identify top-level spines */
|
||||||
|
for (ClockSpineId spine_id : spines(tree_id)) {
|
||||||
|
/* Spines that have no parent are the top-level spines*/
|
||||||
|
if (!spine_parent_[spine_id]) {
|
||||||
|
tree_top_spines_[tree_id].push_back(spine_id);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
/************************************************************************
|
/************************************************************************
|
||||||
* Internal invalidators/validators
|
* Internal invalidators/validators
|
||||||
***********************************************************************/
|
***********************************************************************/
|
||||||
|
|
|
@ -81,6 +81,8 @@ class ClockNetwork {
|
||||||
void set_spine_start_point(const ClockSpineId& spine_id, const vtr::Point<int>& coord);
|
void set_spine_start_point(const ClockSpineId& spine_id, const vtr::Point<int>& coord);
|
||||||
void set_spine_end_point(const ClockSpineId& spine_id, const vtr::Point<int>& coord);
|
void set_spine_end_point(const ClockSpineId& spine_id, const vtr::Point<int>& coord);
|
||||||
void add_spine_switch_point(const ClockSpineId& spine_id, const ClockSpineId& drive_spine_id, const vtr::Point<int>& coord);
|
void add_spine_switch_point(const ClockSpineId& spine_id, const ClockSpineId& drive_spine_id, const vtr::Point<int>& coord);
|
||||||
|
/* Build internal links between clock tree, spines etc. This is also an validator to verify the correctness of the clock network. Must run before using the data! */
|
||||||
|
bool link();
|
||||||
|
|
||||||
public: /* Public invalidators/validators */
|
public: /* Public invalidators/validators */
|
||||||
/* Show if the tree id is a valid for data queries */
|
/* Show if the tree id is a valid for data queries */
|
||||||
|
@ -89,6 +91,10 @@ class ClockNetwork {
|
||||||
bool valid_spine_id(const ClockSpineId& spine_id) const;
|
bool valid_spine_id(const ClockSpineId& spine_id) const;
|
||||||
bool valid_spine_switch_point_id(const ClockSpineId& spine_id, const ClockSwitchPointId& switch_point_id) const;
|
bool valid_spine_switch_point_id(const ClockSpineId& spine_id, const ClockSwitchPointId& switch_point_id) const;
|
||||||
|
|
||||||
|
private: /* Private mutators */
|
||||||
|
/* Build internal links between spines under a given tree */
|
||||||
|
bool link_tree(const ClockTreeId& tree_id);
|
||||||
|
|
||||||
private: /* Internal data */
|
private: /* Internal data */
|
||||||
/* Basic information of each tree */
|
/* Basic information of each tree */
|
||||||
vtr::vector<ClockTreeId, ClockTreeId> tree_ids_;
|
vtr::vector<ClockTreeId, ClockTreeId> tree_ids_;
|
||||||
|
|
Loading…
Reference in New Issue