diff --git a/tools/gen_part_base_yaml.cc b/tools/gen_part_base_yaml.cc index 2e1ec762..41cfef07 100644 --- a/tools/gen_part_base_yaml.cc +++ b/tools/gen_part_base_yaml.cc @@ -1,25 +1,19 @@ #include -#include #include -#include +#include #include #include #include #include #include +#include +#include #include namespace xc7series = prjxray::xilinx::xc7series; -template -std::string HexString(T value) { - std::ostringstream out; - out << "0x" << std::hex << value; - return out.str(); -} - int main(int argc, char *argv[]) { if (argc < 2) { std::cerr << "ERROR: no input specified" << std::endl; @@ -83,15 +77,11 @@ int main(int argc, char *argv[]) { return 1; } - YAML::Node config_yaml; - config_yaml.SetTag("xilinx/xc7series/part"); - config_yaml["idcode"] = HexString(*idcode); - // So far, the addresses appear to be written in increasing order but // there is no guarantee. Sort them just in case. std::sort(frame_addresses.begin(), frame_addresses.end()); - YAML::Node regions = config_yaml["configuration_regions"]; + std::vector ranges; for (auto start_of_range = frame_addresses.begin(); start_of_range != frame_addresses.end(); ) { @@ -101,17 +91,14 @@ int main(int argc, char *argv[]) { ++end_of_range; } - YAML::Node region; - region["start"] = - xc7series::ConfigurationFrameAddress(*start_of_range); - region["end"] = - xc7series::ConfigurationFrameAddress(*end_of_range); - regions.push_back(region); + ranges.push_back( + xc7series::ConfigurationFrameRange(*start_of_range, + *end_of_range+1)); start_of_range = ++end_of_range; } - std::cout << config_yaml << std::endl; + std::cout << YAML::Node(xc7series::Part(*idcode, ranges)) << std::endl; return 0; }