[core] now clock network keep port info in a native data structure
This commit is contained in:
parent
18e2b994ac
commit
7c487eadc9
|
@ -372,7 +372,7 @@ std::vector<ClockTapId> ClockNetwork::tree_taps(
|
||||||
return tree_taps_[tree_id];
|
return tree_taps_[tree_id];
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string ClockNetwork::tap_from_port(const ClockTapId& tap_id) const {
|
BasicPort ClockNetwork::tap_from_port(const ClockTapId& tap_id) const {
|
||||||
VTR_ASSERT(valid_tap_id(tap_id));
|
VTR_ASSERT(valid_tap_id(tap_id));
|
||||||
return tap_from_ports_[tap_id];
|
return tap_from_ports_[tap_id];
|
||||||
}
|
}
|
||||||
|
@ -470,17 +470,15 @@ std::vector<std::string> ClockNetwork::tree_flatten_tap_to_ports(
|
||||||
for (ClockTapId tap_id : tree_taps_[tree_id]) {
|
for (ClockTapId tap_id : tree_taps_[tree_id]) {
|
||||||
VTR_ASSERT(valid_tap_id(tap_id));
|
VTR_ASSERT(valid_tap_id(tap_id));
|
||||||
/* Filter out unmatched from ports. Expect [clk_pin_id:clk_pin_id] */
|
/* Filter out unmatched from ports. Expect [clk_pin_id:clk_pin_id] */
|
||||||
std::string tap_from_port_name = tap_from_ports_[tap_id];
|
BasicPort from_port = tap_from_ports_[tap_id];
|
||||||
PortParser from_port_parser(tap_from_port_name);
|
|
||||||
BasicPort from_port = from_port_parser.port();
|
|
||||||
if (!from_port.is_valid()) {
|
if (!from_port.is_valid()) {
|
||||||
VTR_LOG_ERROR("Invalid from port name '%s' whose index is not valid\n",
|
VTR_LOG_ERROR("Invalid from port name '%s' whose index is not valid\n",
|
||||||
tap_from_port_name.c_str());
|
from_port.to_verilog_string().c_str());
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
if (from_port.get_width() != 1) {
|
if (from_port.get_width() != 1) {
|
||||||
VTR_LOG_ERROR("Invalid from port name '%s' whose width is not 1\n",
|
VTR_LOG_ERROR("Invalid from port name '%s' whose width is not 1\n",
|
||||||
tap_from_port_name.c_str());
|
from_port.to_verilog_string().c_str());
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
if (from_port.get_lsb() != size_t(clk_pin_id)) {
|
if (from_port.get_lsb() != size_t(clk_pin_id)) {
|
||||||
|
@ -792,7 +790,7 @@ ClockInternalDriverId ClockNetwork::add_spine_switch_point_internal_driver(
|
||||||
}
|
}
|
||||||
|
|
||||||
ClockTapId ClockNetwork::add_tree_tap(const ClockTreeId& tree_id,
|
ClockTapId ClockNetwork::add_tree_tap(const ClockTreeId& tree_id,
|
||||||
const std::string& from_port,
|
const BasicPort& from_port,
|
||||||
const std::string& to_port) {
|
const std::string& to_port) {
|
||||||
VTR_ASSERT(valid_tree_id(tree_id));
|
VTR_ASSERT(valid_tree_id(tree_id));
|
||||||
/* TODO: Consider find existing tap template and avoid duplication in storage
|
/* TODO: Consider find existing tap template and avoid duplication in storage
|
||||||
|
|
|
@ -144,7 +144,7 @@ class ClockNetwork {
|
||||||
*/
|
*/
|
||||||
std::vector<ClockTapId> tree_taps(const ClockTreeId& tree_id) const;
|
std::vector<ClockTapId> tree_taps(const ClockTreeId& tree_id) const;
|
||||||
/* Return the source ports for a given tap */
|
/* Return the source ports for a given tap */
|
||||||
std::string tap_from_port(const ClockTapId& tap_id) const;
|
BasicPort tap_from_port(const ClockTapId& tap_id) const;
|
||||||
/* Return the destination ports for a given tap */
|
/* Return the destination ports for a given tap */
|
||||||
std::string tap_to_port(const ClockTapId& tap_id) const;
|
std::string tap_to_port(const ClockTapId& tap_id) const;
|
||||||
/* Find the type of tap point:
|
/* Find the type of tap point:
|
||||||
|
@ -224,7 +224,7 @@ class ClockNetwork {
|
||||||
const ClockSpineId& spine_id, const ClockSwitchPointId& switch_point_id,
|
const ClockSpineId& spine_id, const ClockSwitchPointId& switch_point_id,
|
||||||
const std::string& internal_driver_port);
|
const std::string& internal_driver_port);
|
||||||
ClockTapId add_tree_tap(const ClockTreeId& tree_id,
|
ClockTapId add_tree_tap(const ClockTreeId& tree_id,
|
||||||
const std::string& from_port,
|
const BasicPort& from_port,
|
||||||
const std::string& to_port);
|
const std::string& to_port);
|
||||||
bool set_tap_bounding_box(const ClockTapId& tap_id,
|
bool set_tap_bounding_box(const ClockTapId& tap_id,
|
||||||
const vtr::Rect<size_t>& bb);
|
const vtr::Rect<size_t>& bb);
|
||||||
|
@ -319,7 +319,7 @@ class ClockNetwork {
|
||||||
vtr::vector<ClockInternalDriverId, std::string> internal_driver_ports_;
|
vtr::vector<ClockInternalDriverId, std::string> internal_driver_ports_;
|
||||||
/* Basic information about tap */
|
/* Basic information about tap */
|
||||||
vtr::vector<ClockTapId, ClockTapId> tap_ids_;
|
vtr::vector<ClockTapId, ClockTapId> tap_ids_;
|
||||||
vtr::vector<ClockTapId, std::string> tap_from_ports_;
|
vtr::vector<ClockTapId, BasicPort> tap_from_ports_;
|
||||||
vtr::vector<ClockTapId, std::string> tap_to_ports_;
|
vtr::vector<ClockTapId, std::string> tap_to_ports_;
|
||||||
vtr::vector<ClockTapId, vtr::Rect<size_t>>
|
vtr::vector<ClockTapId, vtr::Rect<size_t>>
|
||||||
tap_bbs_; /* Bounding box for tap points, (xlow, ylow) -> (xhigh, yhigh) */
|
tap_bbs_; /* Bounding box for tap points, (xlow, ylow) -> (xhigh, yhigh) */
|
||||||
|
|
|
@ -42,7 +42,8 @@ static void read_xml_clock_tree_tap_type_all(pugi::xml_node& xml_tap,
|
||||||
std::string to_pin_name =
|
std::string to_pin_name =
|
||||||
get_attribute(xml_tap, XML_CLOCK_TREE_TAP_ATTRIBUTE_TO_PIN, loc_data)
|
get_attribute(xml_tap, XML_CLOCK_TREE_TAP_ATTRIBUTE_TO_PIN, loc_data)
|
||||||
.as_string();
|
.as_string();
|
||||||
clk_ntwk.add_tree_tap(tree_id, from_pin_name, to_pin_name);
|
PortParser from_port_parser(from_pin_name);
|
||||||
|
clk_ntwk.add_tree_tap(tree_id, from_port_parser.port(), to_pin_name);
|
||||||
}
|
}
|
||||||
|
|
||||||
/********************************************************************
|
/********************************************************************
|
||||||
|
@ -62,8 +63,9 @@ static void read_xml_clock_tree_tap_type_single(
|
||||||
std::string to_pin_name =
|
std::string to_pin_name =
|
||||||
get_attribute(xml_tap, XML_CLOCK_TREE_TAP_ATTRIBUTE_TO_PIN, loc_data)
|
get_attribute(xml_tap, XML_CLOCK_TREE_TAP_ATTRIBUTE_TO_PIN, loc_data)
|
||||||
.as_string();
|
.as_string();
|
||||||
|
PortParser from_port_parser(from_pin_name);
|
||||||
ClockTapId tap_id =
|
ClockTapId tap_id =
|
||||||
clk_ntwk.add_tree_tap(tree_id, from_pin_name, to_pin_name);
|
clk_ntwk.add_tree_tap(tree_id, from_port_parser.port(), to_pin_name);
|
||||||
|
|
||||||
/* Single tap only require a coordinate */
|
/* Single tap only require a coordinate */
|
||||||
size_t tap_x = get_attribute(xml_tap, XML_CLOCK_TREE_TAP_ATTRIBUTE_X,
|
size_t tap_x = get_attribute(xml_tap, XML_CLOCK_TREE_TAP_ATTRIBUTE_X,
|
||||||
|
@ -93,8 +95,9 @@ static void read_xml_clock_tree_tap_type_region(
|
||||||
std::string to_pin_name =
|
std::string to_pin_name =
|
||||||
get_attribute(xml_tap, XML_CLOCK_TREE_TAP_ATTRIBUTE_TO_PIN, loc_data)
|
get_attribute(xml_tap, XML_CLOCK_TREE_TAP_ATTRIBUTE_TO_PIN, loc_data)
|
||||||
.as_string();
|
.as_string();
|
||||||
|
PortParser from_port_parser(from_pin_name);
|
||||||
ClockTapId tap_id =
|
ClockTapId tap_id =
|
||||||
clk_ntwk.add_tree_tap(tree_id, from_pin_name, to_pin_name);
|
clk_ntwk.add_tree_tap(tree_id, from_port_parser.port(), to_pin_name);
|
||||||
|
|
||||||
/* Region require a bounding box */
|
/* Region require a bounding box */
|
||||||
size_t tap_start_x =
|
size_t tap_start_x =
|
||||||
|
|
|
@ -35,7 +35,7 @@ static int write_xml_clock_tree_taps(std::fstream& fp,
|
||||||
openfpga::write_tab_to_file(fp, 4);
|
openfpga::write_tab_to_file(fp, 4);
|
||||||
fp << "<" << XML_CLOCK_TREE_TAP_ALL_NODE_NAME << "";
|
fp << "<" << XML_CLOCK_TREE_TAP_ALL_NODE_NAME << "";
|
||||||
write_xml_attribute(fp, XML_CLOCK_TREE_TAP_ATTRIBUTE_FROM_PIN,
|
write_xml_attribute(fp, XML_CLOCK_TREE_TAP_ATTRIBUTE_FROM_PIN,
|
||||||
clk_ntwk.tap_from_port(tap_id).c_str());
|
clk_ntwk.tap_from_port(tap_id).to_verilog_string().c_str());
|
||||||
write_xml_attribute(fp, XML_CLOCK_TREE_TAP_ATTRIBUTE_TO_PIN,
|
write_xml_attribute(fp, XML_CLOCK_TREE_TAP_ATTRIBUTE_TO_PIN,
|
||||||
clk_ntwk.tap_to_port(tap_id).c_str());
|
clk_ntwk.tap_to_port(tap_id).c_str());
|
||||||
fp << "/>"
|
fp << "/>"
|
||||||
|
@ -46,7 +46,7 @@ static int write_xml_clock_tree_taps(std::fstream& fp,
|
||||||
openfpga::write_tab_to_file(fp, 4);
|
openfpga::write_tab_to_file(fp, 4);
|
||||||
fp << "<" << XML_CLOCK_TREE_TAP_SINGLE_NODE_NAME << "";
|
fp << "<" << XML_CLOCK_TREE_TAP_SINGLE_NODE_NAME << "";
|
||||||
write_xml_attribute(fp, XML_CLOCK_TREE_TAP_ATTRIBUTE_FROM_PIN,
|
write_xml_attribute(fp, XML_CLOCK_TREE_TAP_ATTRIBUTE_FROM_PIN,
|
||||||
clk_ntwk.tap_from_port(tap_id).c_str());
|
clk_ntwk.tap_from_port(tap_id).to_verilog_string().c_str());
|
||||||
write_xml_attribute(fp, XML_CLOCK_TREE_TAP_ATTRIBUTE_TO_PIN,
|
write_xml_attribute(fp, XML_CLOCK_TREE_TAP_ATTRIBUTE_TO_PIN,
|
||||||
clk_ntwk.tap_to_port(tap_id).c_str());
|
clk_ntwk.tap_to_port(tap_id).c_str());
|
||||||
write_xml_attribute(fp, XML_CLOCK_TREE_TAP_ATTRIBUTE_X,
|
write_xml_attribute(fp, XML_CLOCK_TREE_TAP_ATTRIBUTE_X,
|
||||||
|
@ -61,7 +61,7 @@ static int write_xml_clock_tree_taps(std::fstream& fp,
|
||||||
openfpga::write_tab_to_file(fp, 4);
|
openfpga::write_tab_to_file(fp, 4);
|
||||||
fp << "<" << XML_CLOCK_TREE_TAP_SINGLE_NODE_NAME << "";
|
fp << "<" << XML_CLOCK_TREE_TAP_SINGLE_NODE_NAME << "";
|
||||||
write_xml_attribute(fp, XML_CLOCK_TREE_TAP_ATTRIBUTE_FROM_PIN,
|
write_xml_attribute(fp, XML_CLOCK_TREE_TAP_ATTRIBUTE_FROM_PIN,
|
||||||
clk_ntwk.tap_from_port(tap_id).c_str());
|
clk_ntwk.tap_from_port(tap_id).to_verilog_string().c_str());
|
||||||
write_xml_attribute(fp, XML_CLOCK_TREE_TAP_ATTRIBUTE_TO_PIN,
|
write_xml_attribute(fp, XML_CLOCK_TREE_TAP_ATTRIBUTE_TO_PIN,
|
||||||
clk_ntwk.tap_to_port(tap_id).c_str());
|
clk_ntwk.tap_to_port(tap_id).c_str());
|
||||||
write_xml_attribute(fp, XML_CLOCK_TREE_TAP_ATTRIBUTE_STARTX,
|
write_xml_attribute(fp, XML_CLOCK_TREE_TAP_ATTRIBUTE_STARTX,
|
||||||
|
|
Loading…
Reference in New Issue