From 4d8fae94a431a774255eebb3a4d83b5805774d7f Mon Sep 17 00:00:00 2001 From: Lin Date: Wed, 9 Oct 2024 14:32:58 +0800 Subject: [PATCH] seperate xml parser and bin parser --- .../src/annotation/read_unique_blocks_bin.cpp | 104 +++++++++++++++ .../src/annotation/read_unique_blocks_bin.h | 36 ++++++ ..._blocks.cpp => read_unique_blocks_xml.cpp} | 71 +--------- ...ique_blocks.h => read_unique_blocks_xml.h} | 13 +- .../annotation/write_unique_blocks_bin.cpp | 121 ++++++++++++++++++ .../src/annotation/write_unique_blocks_bin.h | 34 +++++ ...blocks.cpp => write_unique_blocks_xml.cpp} | 91 +------------ ...que_blocks.h => write_unique_blocks_xml.h} | 10 +- .../src/base/openfpga_build_fabric_template.h | 6 +- 9 files changed, 305 insertions(+), 181 deletions(-) create mode 100644 openfpga/src/annotation/read_unique_blocks_bin.cpp create mode 100644 openfpga/src/annotation/read_unique_blocks_bin.h rename openfpga/src/annotation/{read_unique_blocks.cpp => read_unique_blocks_xml.cpp} (69%) rename openfpga/src/annotation/{read_unique_blocks.h => read_unique_blocks_xml.h} (73%) create mode 100644 openfpga/src/annotation/write_unique_blocks_bin.cpp create mode 100644 openfpga/src/annotation/write_unique_blocks_bin.h rename openfpga/src/annotation/{write_unique_blocks.cpp => write_unique_blocks_xml.cpp} (62%) rename openfpga/src/annotation/{write_unique_blocks.h => write_unique_blocks_xml.h} (71%) diff --git a/openfpga/src/annotation/read_unique_blocks_bin.cpp b/openfpga/src/annotation/read_unique_blocks_bin.cpp new file mode 100644 index 000000000..b11087420 --- /dev/null +++ b/openfpga/src/annotation/read_unique_blocks_bin.cpp @@ -0,0 +1,104 @@ +#include +#include +#include + +#include +/* Headers from pugi XML library */ +#include "pugixml.hpp" +#include "pugixml_util.hpp" + +/* Headers from vtr util library */ +#include "vtr_assert.h" +#include "vtr_log.h" +#include "vtr_time.h" + +/* Headers from libarchfpga */ +#include "arch_error.h" +#include "command_exit_codes.h" +#include "device_rr_gsb_utils.h" +#include "mmap_file.h" +#include "openfpga_digest.h" +#include "read_unique_blocks_bin.h" +#include "read_unique_blocks_xml.h" +#include "read_xml_util.h" +#include "rr_gsb.h" +#include "unique_blocks_uxsdcxx.capnp.h" +#include "write_xml_utils.h" + +/******************************************************************** + * This file includes the top-level functions of this library + * which includes: + * -- reads a bin file of unique blocks to the associated + * data structures: device_rr_gsb + *******************************************************************/ +namespace openfpga { + +/*read the instances' coordinate of a unique block from a bin file*/ +std::vector> read_bin_unique_instance_coords( + const ucap::Uniqueblockpacked::Reader& unique_block) { + std::vector> instance_coords; + if (unique_block.hasInstances()) { + auto instance_list = unique_block.getInstances(); + for (auto instance : instance_list) { + int instance_x = instance.getX(); + int instance_y = instance.getY(); + vtr::Point instance_coordinate(instance_x, instance_y); + instance_coords.push_back(instance_coordinate); + } + } + return instance_coords; +} + +/*read the unique block coordinate from a bin file */ +vtr::Point read_bin_unique_block_coord( + const ucap::Uniqueblockpacked::Reader& unique_block, ucap::Blocktype& type) { + auto block_info = unique_block.getBlockinfo(); + int block_x = block_info.getX(); + int block_y = block_info.getY(); + type = block_info.getType(); + vtr::Point block_coordinate(block_x, block_y); + return block_coordinate; +} + +/*top-level function to read unique blocks from bin file*/ +int read_bin_unique_blocks(DeviceRRGSB& device_rr_gsb, const char* file_name, + bool verbose_output) { + /* clear unique modules & reserve memory to relavant vectors */ + device_rr_gsb.clear_unique_modules(); + device_rr_gsb.reserve_unique_modules(); + MmapFile f(file_name); + ::capnp::FlatArrayMessageReader reader(f.getData()); + auto root = reader.getRoot(); + if (root.hasAtominfos()) { + auto block_list = root.getAtominfos(); + for (auto unique_block : block_list) { + ucap::Blocktype type; + vtr::Point block_coordinate = read_bin_unique_block_coord( + unique_block, type); /*get block coordinate and type*/ + std::vector> instance_coords = + read_bin_unique_instance_coords( + unique_block); /* get a list of instance coordinates*/ + /* get block coordinate and instance coordinate, try to setup + * device_rr_gsb */ + if (type == ucap::Blocktype::SB) { + device_rr_gsb.preload_unique_sb_module(block_coordinate, + instance_coords); + } else if (type == ucap::Blocktype::CBY) { + device_rr_gsb.preload_unique_cby_module(block_coordinate, + instance_coords); + } else if (type == ucap::Blocktype::CBX) { + device_rr_gsb.preload_unique_cbx_module(block_coordinate, + instance_coords); + } else if (type == ucap::Blocktype::UXSD_INVALID) { + VTR_LOG_ERROR("Invalid block type!"); + return CMD_EXEC_FATAL_ERROR; + } + } + } + device_rr_gsb.build_gsb_unique_module(); + if (verbose_output) { + report_unique_module_status_read(device_rr_gsb, true); + } + return CMD_EXEC_SUCCESS; +} +} // namespace openfpga diff --git a/openfpga/src/annotation/read_unique_blocks_bin.h b/openfpga/src/annotation/read_unique_blocks_bin.h new file mode 100644 index 000000000..2e7281b69 --- /dev/null +++ b/openfpga/src/annotation/read_unique_blocks_bin.h @@ -0,0 +1,36 @@ +#ifndef READ_XML_UNIQUE_BLOCKS_BIN_H +#define READ_XML_UNIQUE_BLOCKS_BIN_H + +#include + +/* Headers from pugi XML library */ +#include "pugixml.hpp" +#include "pugixml_util.hpp" + +/* Headers from vtr util library */ +#include "vtr_assert.h" +#include "vtr_log.h" +#include "vtr_time.h" + +/* Headers from libarchfpga */ +#include "arch_error.h" +#include "device_rr_gsb_utils.h" +#include "unique_blocks_uxsdcxx.capnp.h" +/******************************************************************** + * This file includes the top-level functions of this library + * which includes: + * -- reads a bin file of unique blocks to the associated + * data structures: device_rr_gsb + *******************************************************************/ +namespace openfpga { +std::vector> read_bin_unique_instance_coords( + const ucap::Uniqueblockpacked::Reader& unique_block); + +vtr::Point read_bin_unique_block_coord( + const ucap::Uniqueblockpacked::Reader& unique_block, ucap::Blocktype& type); + +int read_bin_unique_blocks(DeviceRRGSB& device_rr_gsb, const char* file_name, + bool verbose_output); +} // namespace openfpga + +#endif diff --git a/openfpga/src/annotation/read_unique_blocks.cpp b/openfpga/src/annotation/read_unique_blocks_xml.cpp similarity index 69% rename from openfpga/src/annotation/read_unique_blocks.cpp rename to openfpga/src/annotation/read_unique_blocks_xml.cpp index b8a0bef09..bd462b147 100644 --- a/openfpga/src/annotation/read_unique_blocks.cpp +++ b/openfpga/src/annotation/read_unique_blocks_xml.cpp @@ -18,7 +18,7 @@ #include "device_rr_gsb_utils.h" #include "mmap_file.h" #include "openfpga_digest.h" -#include "read_unique_blocks.h" +#include "read_unique_blocks_xml.h" #include "read_xml_util.h" #include "rr_gsb.h" #include "unique_blocks_uxsdcxx.capnp.h" @@ -159,73 +159,4 @@ int read_xml_unique_blocks(DeviceRRGSB& device_rr_gsb, const char* file_name, archfpga_throw(file_name, e.line(), "%s", e.what()); } } - -/*read the instances' coordinate of a unique block from a bin file*/ -std::vector> read_bin_unique_instance_coords( - const ucap::Uniqueblockpacked::Reader& unique_block) { - std::vector> instance_coords; - if (unique_block.hasInstances()) { - auto instance_list = unique_block.getInstances(); - for (auto instance : instance_list) { - int instance_x = instance.getX(); - int instance_y = instance.getY(); - vtr::Point instance_coordinate(instance_x, instance_y); - instance_coords.push_back(instance_coordinate); - } - } - return instance_coords; -} - -/*read the unique block coordinate from a bin file */ -vtr::Point read_bin_unique_block_coord( - const ucap::Uniqueblockpacked::Reader& unique_block, ucap::Blocktype& type) { - auto block_info = unique_block.getBlockinfo(); - int block_x = block_info.getX(); - int block_y = block_info.getY(); - type = block_info.getType(); - vtr::Point block_coordinate(block_x, block_y); - return block_coordinate; -} - -/*top-level function to read unique blocks from bin file*/ -int read_bin_unique_blocks(DeviceRRGSB& device_rr_gsb, const char* file_name, - bool verbose_output) { - /* clear unique modules & reserve memory to relavant vectors */ - device_rr_gsb.clear_unique_modules(); - device_rr_gsb.reserve_unique_modules(); - MmapFile f(file_name); - ::capnp::FlatArrayMessageReader reader(f.getData()); - auto root = reader.getRoot(); - if (root.hasAtominfos()) { - auto block_list = root.getAtominfos(); - for (auto unique_block : block_list) { - ucap::Blocktype type; - vtr::Point block_coordinate = read_bin_unique_block_coord( - unique_block, type); /*get block coordinate and type*/ - std::vector> instance_coords = - read_bin_unique_instance_coords( - unique_block); /* get a list of instance coordinates*/ - /* get block coordinate and instance coordinate, try to setup - * device_rr_gsb */ - if (type == ucap::Blocktype::SB) { - device_rr_gsb.preload_unique_sb_module(block_coordinate, - instance_coords); - } else if (type == ucap::Blocktype::CBY) { - device_rr_gsb.preload_unique_cby_module(block_coordinate, - instance_coords); - } else if (type == ucap::Blocktype::CBX) { - device_rr_gsb.preload_unique_cbx_module(block_coordinate, - instance_coords); - } else if (type == ucap::Blocktype::UXSD_INVALID) { - VTR_LOG_ERROR("Invalid block type!"); - return CMD_EXEC_FATAL_ERROR; - } - } - } - device_rr_gsb.build_gsb_unique_module(); - if (verbose_output) { - report_unique_module_status_read(device_rr_gsb, true); - } - return CMD_EXEC_SUCCESS; -} } // namespace openfpga diff --git a/openfpga/src/annotation/read_unique_blocks.h b/openfpga/src/annotation/read_unique_blocks_xml.h similarity index 73% rename from openfpga/src/annotation/read_unique_blocks.h rename to openfpga/src/annotation/read_unique_blocks_xml.h index a65c54ac3..241bc07e2 100644 --- a/openfpga/src/annotation/read_unique_blocks.h +++ b/openfpga/src/annotation/read_unique_blocks_xml.h @@ -1,5 +1,5 @@ -#ifndef READ_XML_UNIQUE_BLOCKS_H -#define READ_XML_UNIQUE_BLOCKS_H +#ifndef READ_XML_UNIQUE_BLOCKS_XML_H +#define READ_XML_UNIQUE_BLOCKS_XML_H #include @@ -35,15 +35,6 @@ void report_unique_module_status_read(const DeviceRRGSB& device_rr_gsb, int read_xml_unique_blocks(DeviceRRGSB& device_rr_gsb, const char* file_name, bool verbose_output); - -std::vector> read_bin_unique_instance_coords( - const ucap::Uniqueblockpacked::Reader& unique_block); - -vtr::Point read_bin_unique_block_coord( - const ucap::Uniqueblockpacked::Reader& unique_block, ucap::Blocktype& type); - -int read_bin_unique_blocks(DeviceRRGSB& device_rr_gsb, const char* file_name, - bool verbose_output); } // namespace openfpga #endif diff --git a/openfpga/src/annotation/write_unique_blocks_bin.cpp b/openfpga/src/annotation/write_unique_blocks_bin.cpp new file mode 100644 index 000000000..0b53e530b --- /dev/null +++ b/openfpga/src/annotation/write_unique_blocks_bin.cpp @@ -0,0 +1,121 @@ + +#include + +#include +/* Headers from pugi XML library */ +#include "pugixml.hpp" +#include "pugixml_util.hpp" +#include "serdes_utils.h" +/* Headers from vtr util library */ +#include "vtr_assert.h" +#include "vtr_log.h" +#include "vtr_time.h" + +/* Headers from libarchfpga */ +#include "arch_error.h" +#include "command_exit_codes.h" +#include "device_rr_gsb_utils.h" +#include "openfpga_digest.h" +#include "read_xml_util.h" +#include "rr_gsb.h" +#include "unique_blocks_uxsdcxx.capnp.h" +#include "write_unique_blocks_bin.h" +#include "write_unique_blocks_xml.h" +#include "write_xml_utils.h" + +/******************************************************************** + * This file includes the top-level functions of this library + * which includes: + * -- write the unique blocks' information in the associated data structures: + *device_rr_gsb to a bin file + *******************************************************************/ +namespace openfpga { +/* write each unique block (including a single unique block info and its mirror + * instances' info)into capnp builder */ +int write_bin_atom_block(const std::vector>& instance_map, + const vtr::Point& unique_block_coord, + const ucap::Blocktype type, + ucap::Uniqueblockpacked::Builder& root) { + auto block_info = root.initBlockinfo(); + block_info.setX(unique_block_coord.x()); + block_info.setY(unique_block_coord.y()); + block_info.setType(type); + if (instance_map.size() > 0) { + auto instance_list = root.initInstances(instance_map.size()); + for (size_t instance_id = 0; instance_id < instance_map.size(); + instance_id++) { + auto instance = instance_list[instance_id]; + instance.setX(instance_map[instance_id].x()); + instance.setY(instance_map[instance_id].y()); + } + } + return openfpga::CMD_EXEC_SUCCESS; +} + +/* Top-level function to write bin file of unique blocks */ +int write_bin_unique_blocks(const DeviceRRGSB& device_rr_gsb, const char* fname, + bool verbose_output) { + ::capnp::MallocMessageBuilder builder; + auto unique_blocks = builder.initRoot(); + int num_unique_blocks = device_rr_gsb.get_num_sb_unique_module() + + device_rr_gsb.get_num_cb_unique_module(CHANX) + + device_rr_gsb.get_num_cb_unique_module(CHANY); + auto block_list = unique_blocks.initAtominfos(num_unique_blocks); + + /*write switch blocks into bin file */ + for (size_t id = 0; id < device_rr_gsb.get_num_sb_unique_module(); ++id) { + const auto unique_block_coord = device_rr_gsb.get_sb_unique_block_coord(id); + const std::vector> instance_map = + device_rr_gsb.get_sb_unique_block_instance_coord(unique_block_coord); + auto unique_block = block_list[id]; + int status_code = write_bin_atom_block(instance_map, unique_block_coord, + ucap::Blocktype::SB, unique_block); + if (status_code != 0) { + VTR_LOG_ERROR("write sb unique blocks into bin file failed!"); + return CMD_EXEC_FATAL_ERROR; + } + } + + /*write cbx blocks into bin file */ + for (size_t id = 0; id < device_rr_gsb.get_num_cb_unique_module(CHANX); + ++id) { + const auto unique_block_coord = + device_rr_gsb.get_cbx_unique_block_coord(id); + const std::vector> instance_map = + device_rr_gsb.get_cbx_unique_block_instance_coord(unique_block_coord); + int block_id = id + device_rr_gsb.get_num_sb_unique_module(); + auto unique_block = block_list[block_id]; + int status_code = write_bin_atom_block(instance_map, unique_block_coord, + ucap::Blocktype::CBX, unique_block); + if (status_code != 0) { + VTR_LOG_ERROR("write cbx unique blocks into bin file failed!"); + return CMD_EXEC_FATAL_ERROR; + } + } + + /*write cby blocks into bin file */ + for (size_t id = 0; id < device_rr_gsb.get_num_cb_unique_module(CHANY); + ++id) { + const auto unique_block_coord = + device_rr_gsb.get_cby_unique_block_coord(id); + const std::vector> instance_map = + device_rr_gsb.get_cby_unique_block_instance_coord(unique_block_coord); + int block_id = id + device_rr_gsb.get_num_sb_unique_module() + + device_rr_gsb.get_num_cb_unique_module(CHANX); + auto unique_block = block_list[block_id]; + int status_code = write_bin_atom_block(instance_map, unique_block_coord, + ucap::Blocktype::CBY, unique_block); + if (status_code != 0) { + VTR_LOG_ERROR("write cby unique blocks into bin file failed!"); + return CMD_EXEC_FATAL_ERROR; + } + } + + writeMessageToFile(fname, &builder); + if (verbose_output) { + report_unique_module_status_write(device_rr_gsb, true); + } + return openfpga::CMD_EXEC_SUCCESS; +} + +} // namespace openfpga diff --git a/openfpga/src/annotation/write_unique_blocks_bin.h b/openfpga/src/annotation/write_unique_blocks_bin.h new file mode 100644 index 000000000..da4b39944 --- /dev/null +++ b/openfpga/src/annotation/write_unique_blocks_bin.h @@ -0,0 +1,34 @@ +#ifndef WRITE_XML_UNIQUE_BLOCKS_BIN_H +#define WRITE_XML_UNIQUE_BLOCKS_BIN_H + +#include + +/* Headers from pugi XML library */ +#include "pugixml.hpp" +#include "pugixml_util.hpp" + +/* Headers from vtr util library */ +#include "vtr_assert.h" +#include "vtr_log.h" +#include "vtr_time.h" + +/* Headers from libarchfpga */ +#include "arch_error.h" +#include "device_rr_gsb_utils.h" + +/******************************************************************** + * This file includes the top-level functions of this library + * which includes: + * -- write the unique blocks' information in the associated data structures: + *device_rr_gsb to a bin file + *******************************************************************/ + +namespace openfpga { +int write_bin_unique_blocks(const DeviceRRGSB& device_rr_gsb, const char* fname, + bool verbose_output); +int write_bin_atom_block(const std::vector>& instance_map, + const vtr::Point& unique_block_coord, + const ucap::Blocktype type, + ucap::Uniqueblockpacked::Builder& root); +} // namespace openfpga +#endif diff --git a/openfpga/src/annotation/write_unique_blocks.cpp b/openfpga/src/annotation/write_unique_blocks_xml.cpp similarity index 62% rename from openfpga/src/annotation/write_unique_blocks.cpp rename to openfpga/src/annotation/write_unique_blocks_xml.cpp index d4e9e1555..e9950f015 100644 --- a/openfpga/src/annotation/write_unique_blocks.cpp +++ b/openfpga/src/annotation/write_unique_blocks_xml.cpp @@ -19,7 +19,7 @@ #include "read_xml_util.h" #include "rr_gsb.h" #include "unique_blocks_uxsdcxx.capnp.h" -#include "write_unique_blocks.h" +#include "write_unique_blocks_xml.h" #include "write_xml_utils.h" /******************************************************************** @@ -184,93 +184,4 @@ int write_xml_unique_blocks(const DeviceRRGSB& device_rr_gsb, const char* fname, return CMD_EXEC_SUCCESS; } - -/* write each unique block (including a single unique block info and its mirror - * instances' info)into capnp builder */ -int write_bin_atom_block(const std::vector>& instance_map, - const vtr::Point& unique_block_coord, - const ucap::Blocktype type, - ucap::Uniqueblockpacked::Builder& root) { - auto block_info = root.initBlockinfo(); - block_info.setX(unique_block_coord.x()); - block_info.setY(unique_block_coord.y()); - block_info.setType(type); - if (instance_map.size() > 0) { - auto instance_list = root.initInstances(instance_map.size()); - for (size_t instance_id = 0; instance_id < instance_map.size(); - instance_id++) { - auto instance = instance_list[instance_id]; - instance.setX(instance_map[instance_id].x()); - instance.setY(instance_map[instance_id].y()); - } - } - return openfpga::CMD_EXEC_SUCCESS; -} - -/* Top-level function to write bin file of unique blocks */ -int write_bin_unique_blocks(const DeviceRRGSB& device_rr_gsb, const char* fname, - bool verbose_output) { - ::capnp::MallocMessageBuilder builder; - auto unique_blocks = builder.initRoot(); - int num_unique_blocks = device_rr_gsb.get_num_sb_unique_module() + - device_rr_gsb.get_num_cb_unique_module(CHANX) + - device_rr_gsb.get_num_cb_unique_module(CHANY); - auto block_list = unique_blocks.initAtominfos(num_unique_blocks); - - /*write switch blocks into bin file */ - for (size_t id = 0; id < device_rr_gsb.get_num_sb_unique_module(); ++id) { - const auto unique_block_coord = device_rr_gsb.get_sb_unique_block_coord(id); - const std::vector> instance_map = - device_rr_gsb.get_sb_unique_block_instance_coord(unique_block_coord); - auto unique_block = block_list[id]; - int status_code = write_bin_atom_block(instance_map, unique_block_coord, - ucap::Blocktype::SB, unique_block); - if (status_code != 0) { - VTR_LOG_ERROR("write sb unique blocks into bin file failed!"); - return CMD_EXEC_FATAL_ERROR; - } - } - - /*write cbx blocks into bin file */ - for (size_t id = 0; id < device_rr_gsb.get_num_cb_unique_module(CHANX); - ++id) { - const auto unique_block_coord = - device_rr_gsb.get_cbx_unique_block_coord(id); - const std::vector> instance_map = - device_rr_gsb.get_cbx_unique_block_instance_coord(unique_block_coord); - int block_id = id + device_rr_gsb.get_num_sb_unique_module(); - auto unique_block = block_list[block_id]; - int status_code = write_bin_atom_block(instance_map, unique_block_coord, - ucap::Blocktype::CBX, unique_block); - if (status_code != 0) { - VTR_LOG_ERROR("write cbx unique blocks into bin file failed!"); - return CMD_EXEC_FATAL_ERROR; - } - } - - /*write cby blocks into bin file */ - for (size_t id = 0; id < device_rr_gsb.get_num_cb_unique_module(CHANY); - ++id) { - const auto unique_block_coord = - device_rr_gsb.get_cby_unique_block_coord(id); - const std::vector> instance_map = - device_rr_gsb.get_cby_unique_block_instance_coord(unique_block_coord); - int block_id = id + device_rr_gsb.get_num_sb_unique_module() + - device_rr_gsb.get_num_cb_unique_module(CHANX); - auto unique_block = block_list[block_id]; - int status_code = write_bin_atom_block(instance_map, unique_block_coord, - ucap::Blocktype::CBY, unique_block); - if (status_code != 0) { - VTR_LOG_ERROR("write cby unique blocks into bin file failed!"); - return CMD_EXEC_FATAL_ERROR; - } - } - - writeMessageToFile(fname, &builder); - if (verbose_output) { - report_unique_module_status_write(device_rr_gsb, true); - } - return openfpga::CMD_EXEC_SUCCESS; -} - } // namespace openfpga diff --git a/openfpga/src/annotation/write_unique_blocks.h b/openfpga/src/annotation/write_unique_blocks_xml.h similarity index 71% rename from openfpga/src/annotation/write_unique_blocks.h rename to openfpga/src/annotation/write_unique_blocks_xml.h index d6f69e021..0dafa5f47 100644 --- a/openfpga/src/annotation/write_unique_blocks.h +++ b/openfpga/src/annotation/write_unique_blocks_xml.h @@ -1,5 +1,5 @@ -#ifndef WRITE_XML_UNIQUE_BLOCKS_H -#define WRITE_XML_UNIQUE_BLOCKS_H +#ifndef WRITE_XML_UNIQUE_BLOCKS_XML_H +#define WRITE_XML_UNIQUE_BLOCKS_XML_H #include @@ -33,11 +33,5 @@ void report_unique_module_status_write( bool verbose_output); /*report status of written info*/ int write_xml_unique_blocks(const DeviceRRGSB& device_rr_gsb, const char* fname, bool verbose_output); -int write_bin_unique_blocks(const DeviceRRGSB& device_rr_gsb, const char* fname, - bool verbose_output); -int write_bin_atom_block(const std::vector>& instance_map, - const vtr::Point& unique_block_coord, - const ucap::Blocktype type, - ucap::Uniqueblockpacked::Builder& root); } // namespace openfpga #endif diff --git a/openfpga/src/base/openfpga_build_fabric_template.h b/openfpga/src/base/openfpga_build_fabric_template.h index 985bec349..1c1d23172 100644 --- a/openfpga/src/base/openfpga_build_fabric_template.h +++ b/openfpga/src/base/openfpga_build_fabric_template.h @@ -16,7 +16,8 @@ #include "fabric_key_writer.h" #include "globals.h" #include "openfpga_naming.h" -#include "read_unique_blocks.h" +#include "read_unique_blocks_bin.h" +#include "read_unique_blocks_xml.h" #include "read_xml_fabric_key.h" #include "read_xml_io_name_map.h" #include "read_xml_module_name_map.h" @@ -25,7 +26,8 @@ #include "report_reference.h" #include "vtr_log.h" #include "vtr_time.h" -#include "write_unique_blocks.h" +#include "write_unique_blocks_bin.h" +#include "write_unique_blocks_xml.h" #include "write_xml_fabric_pin_physical_location.h" #include "write_xml_module_name_map.h"