From 35af0dd676c478b97b106f376a9379552744b7fa Mon Sep 17 00:00:00 2001 From: tangxifan Date: Mon, 27 Jul 2020 16:34:43 -0600 Subject: [PATCH] streamline fabric bitstream file format --- .../src/bitstream_manager_utils.cpp | 17 +++++++++++ .../src/bitstream_manager_utils.h | 3 ++ .../write_xml_fabric_bitstream.cpp | 28 ++++++++----------- 3 files changed, 32 insertions(+), 16 deletions(-) diff --git a/libopenfpga/libfpgabitstream/src/bitstream_manager_utils.cpp b/libopenfpga/libfpgabitstream/src/bitstream_manager_utils.cpp index 1225602ef..8968b8d1c 100644 --- a/libopenfpga/libfpgabitstream/src/bitstream_manager_utils.cpp +++ b/libopenfpga/libfpgabitstream/src/bitstream_manager_utils.cpp @@ -55,4 +55,21 @@ std::vector find_bitstream_manager_top_blocks(const BitstreamMana return top_blocks; } +/******************************************************************** + * Find the index of a configuration bit in the children bits of its parent block + *******************************************************************/ +size_t find_bitstream_manager_config_bit_index_in_parent_block(const BitstreamManager& bitstream_manager, + const ConfigBitId& bit_id) { + size_t curr_index = 0; + for (const ConfigBitId& cand_bit : bitstream_manager.block_bits(bitstream_manager.bit_parent_block(bit_id))) { + if (cand_bit == bit_id) { + break; + } + curr_index++; + } + + return curr_index; +} + + } /* end namespace openfpga */ diff --git a/libopenfpga/libfpgabitstream/src/bitstream_manager_utils.h b/libopenfpga/libfpgabitstream/src/bitstream_manager_utils.h index 4c8b26ad2..328394b01 100644 --- a/libopenfpga/libfpgabitstream/src/bitstream_manager_utils.h +++ b/libopenfpga/libfpgabitstream/src/bitstream_manager_utils.h @@ -19,6 +19,9 @@ std::vector find_bitstream_manager_block_hierarchy(const Bitstrea std::vector find_bitstream_manager_top_blocks(const BitstreamManager& bitstream_manager); +size_t find_bitstream_manager_config_bit_index_in_parent_block(const BitstreamManager& bitstream_manager, + const ConfigBitId& bit_id); + } /* end namespace openfpga */ #endif diff --git a/openfpga/src/fpga_bitstream/write_xml_fabric_bitstream.cpp b/openfpga/src/fpga_bitstream/write_xml_fabric_bitstream.cpp index b1d5aeebe..b4d9cbebd 100644 --- a/openfpga/src/fpga_bitstream/write_xml_fabric_bitstream.cpp +++ b/openfpga/src/fpga_bitstream/write_xml_fabric_bitstream.cpp @@ -77,30 +77,26 @@ int write_fabric_config_bit_to_xml_file(std::fstream& fp, } write_tab_to_file(fp, 1); - fp << "\n"; + fp << "\""; /* Output hierarchy of this parent*/ const ConfigBitId& config_bit = fabric_bitstream.config_bit(fabric_bit); const ConfigBlockId& config_block = bitstream_manager.bit_parent_block(config_bit); std::vector block_hierarchy = find_bitstream_manager_block_hierarchy(bitstream_manager, config_block); - write_tab_to_file(fp, 2); - fp << "\n"; - size_t hierarchy_counter = 0; + std::string hie_path; for (const ConfigBlockId& temp_block : block_hierarchy) { - write_tab_to_file(fp, 3); - fp << "\n"; - hierarchy_counter++; + hie_path += bitstream_manager.block_name(temp_block); + hie_path += std::string("."); } - write_tab_to_file(fp, 2); - fp << "\n"; + hie_path += generate_configurable_memory_data_out_name(); + hie_path += std::string("["); + hie_path += std::to_string(find_bitstream_manager_config_bit_index_in_parent_block(bitstream_manager, config_bit)); + hie_path += std::string("]"); + + fp << " path=\"" << hie_path << "\"/>\n"; switch (config_type) { case CONFIG_MEM_STANDALONE: