From bf9f62f0f7e8e5f21643b6dbc2bbfec73c5bde36 Mon Sep 17 00:00:00 2001 From: tangxifan Date: Thu, 28 May 2020 13:09:01 -0600 Subject: [PATCH] keep bug fixing for frame-based configuration protocol. --- openfpga/src/fabric/build_grid_modules.cpp | 2 +- openfpga/src/utils/circuit_library_utils.cpp | 25 +++++++++++++++++++- openfpga/src/utils/circuit_library_utils.h | 3 ++- 3 files changed, 27 insertions(+), 3 deletions(-) diff --git a/openfpga/src/fabric/build_grid_modules.cpp b/openfpga/src/fabric/build_grid_modules.cpp index 7a9e3b2b4..ff2fe5d14 100644 --- a/openfpga/src/fabric/build_grid_modules.cpp +++ b/openfpga/src/fabric/build_grid_modules.cpp @@ -270,7 +270,7 @@ void build_primitive_block_module(ModuleManager& module_manager, } /* Regular (independent) SRAM ports */ - size_t num_config_bits = find_circuit_num_config_bits(circuit_lib, primitive_model); + size_t num_config_bits = find_circuit_num_config_bits(sram_orgz_type, circuit_lib, primitive_model); if (0 < num_config_bits) { add_sram_ports_to_module_manager(module_manager, primitive_module, circuit_lib, sram_model, sram_orgz_type, diff --git a/openfpga/src/utils/circuit_library_utils.cpp b/openfpga/src/utils/circuit_library_utils.cpp index 74d0c1e50..07ef140a3 100644 --- a/openfpga/src/utils/circuit_library_utils.cpp +++ b/openfpga/src/utils/circuit_library_utils.cpp @@ -12,6 +12,7 @@ #include "vtr_log.h" #include "check_circuit_library.h" +#include "decoder_library_utils.h" #include "circuit_library_utils.h" /* begin namespace openfpga */ @@ -161,7 +162,8 @@ size_t find_circuit_num_shared_config_bits(const CircuitLibrary& circuit_lib, * for a multiplexer, because the multiplexer size is determined during * the FPGA architecture generation (NOT during the XML parsing). *******************************************************************/ -size_t find_circuit_num_config_bits(const CircuitLibrary& circuit_lib, +size_t find_circuit_num_config_bits(const e_config_protocol_type& config_protocol_type, + const CircuitLibrary& circuit_lib, const CircuitModelId& circuit_model) { size_t num_config_bits = 0; @@ -170,6 +172,27 @@ size_t find_circuit_num_config_bits(const CircuitLibrary& circuit_lib, num_config_bits += circuit_lib.port_size(sram_port); } + switch (config_protocol_type) { + case CONFIG_MEM_STANDALONE: + case CONFIG_MEM_SCAN_CHAIN: + case CONFIG_MEM_MEMORY_BANK: { + break; + } + case CONFIG_MEM_FRAME_BASED: { + /* For frame-based configuration protocol + * The number of configuration bits is the address size + */ + if (0 < num_config_bits) { + num_config_bits = find_mux_local_decoder_addr_size(num_config_bits); + } + break; + } + default: + VTR_LOGF_ERROR(__FILE__, __LINE__, + "Invalid type of SRAM organization !\n"); + exit(1); + } + return num_config_bits; } diff --git a/openfpga/src/utils/circuit_library_utils.h b/openfpga/src/utils/circuit_library_utils.h index b03c03156..255da4f4f 100644 --- a/openfpga/src/utils/circuit_library_utils.h +++ b/openfpga/src/utils/circuit_library_utils.h @@ -31,7 +31,8 @@ size_t find_circuit_num_shared_config_bits(const CircuitLibrary& circuit_lib, const CircuitModelId& circuit_model, const e_config_protocol_type& sram_orgz_type); -size_t find_circuit_num_config_bits(const CircuitLibrary& circuit_lib, +size_t find_circuit_num_config_bits(const e_config_protocol_type& config_protocol_type, + const CircuitLibrary& circuit_lib, const CircuitModelId& circuit_model); std::vector find_circuit_library_global_ports(const CircuitLibrary& circuit_lib);