[core] using config child type in bitstream generation
This commit is contained in:
parent
2facde2097
commit
3331540ed6
|
@ -381,7 +381,7 @@ int add_fpga_core_to_device_module_graph(ModuleManager& module_manager,
|
|||
|
||||
/* Now fpga_core should be the only configurable child under the top-level
|
||||
* module */
|
||||
module_manager.add_configurable_child(new_top_module, top_module, 0, false);
|
||||
module_manager.add_configurable_child(new_top_module, top_module, 0, ModuleManager::e_config_child_type::UNIFIED);
|
||||
|
||||
return status;
|
||||
}
|
||||
|
|
|
@ -1392,6 +1392,10 @@ int add_physical_memory_module(ModuleManager& module_manager,
|
|||
size_t module_num_config_bits =
|
||||
find_module_num_config_bits_from_child_modules(
|
||||
module_manager, curr_module, circuit_lib, sram_model, CONFIG_MEM_FEEDTHROUGH);
|
||||
/* No need to build a memory when there are no configuration bits required */
|
||||
if (module_num_config_bits == 0) {
|
||||
return CMD_EXEC_SUCCESS;
|
||||
}
|
||||
std::string phy_mem_module_name = generate_physical_memory_module_name(module_manager.module_name(curr_module), module_num_config_bits);
|
||||
ModuleId phy_mem_module = module_manager.find_module(phy_mem_module_name);
|
||||
if (!module_manager.valid_module_id(phy_mem_module)) {
|
||||
|
|
|
@ -35,15 +35,15 @@ static size_t rec_estimate_device_bitstream_num_blocks(
|
|||
* actually configurable memory elements
|
||||
* We skip them in couting
|
||||
*/
|
||||
if (0 == module_manager.logical_configurable_children(top_module).size()) {
|
||||
if (0 == module_manager.num_configurable_children(top_module, ModuleManager::e_config_child_type::PHYSICAL)) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
size_t num_configurable_children =
|
||||
module_manager.logical_configurable_children(top_module).size();
|
||||
module_manager.configurable_children(top_module, ModuleManager::e_config_child_type::PHYSICAL).size();
|
||||
for (size_t ichild = 0; ichild < num_configurable_children; ++ichild) {
|
||||
ModuleId child_module =
|
||||
module_manager.logical_configurable_children(top_module)[ichild];
|
||||
module_manager.configurable_children(top_module, ModuleManager::e_config_child_type::PHYSICAL)[ichild];
|
||||
num_blocks +=
|
||||
rec_estimate_device_bitstream_num_blocks(module_manager, child_module);
|
||||
}
|
||||
|
@ -68,7 +68,7 @@ static size_t rec_estimate_device_bitstream_num_bits(
|
|||
/* If a child module has no configurable children, this is a leaf node
|
||||
* We can count it in. Otherwise, we should go recursively.
|
||||
*/
|
||||
if (0 == module_manager.logical_configurable_children(parent_module).size()) {
|
||||
if (0 == module_manager.num_configurable_children(parent_module, ModuleManager::e_config_child_type::PHYSICAL)) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
@ -105,7 +105,7 @@ static size_t rec_estimate_device_bitstream_num_bits(
|
|||
VTR_ASSERT_SAFE(parent_module != top_module);
|
||||
|
||||
size_t num_configurable_children =
|
||||
module_manager.logical_configurable_children(parent_module).size();
|
||||
module_manager.configurable_children(parent_module, ModuleManager::e_config_child_type::PHYSICAL).size();
|
||||
|
||||
/* Frame-based configuration protocol will have 1 decoder
|
||||
* if there are more than 1 configurable children
|
||||
|
@ -117,7 +117,7 @@ static size_t rec_estimate_device_bitstream_num_bits(
|
|||
|
||||
for (size_t ichild = 0; ichild < num_configurable_children; ++ichild) {
|
||||
ModuleId child_module =
|
||||
module_manager.logical_configurable_children(parent_module)[ichild];
|
||||
module_manager.configurable_children(parent_module, ModuleManager::e_config_child_type::PHYSICAL)[ichild];
|
||||
num_bits += rec_estimate_device_bitstream_num_bits(
|
||||
module_manager, top_module, child_module, config_protocol);
|
||||
}
|
||||
|
@ -193,7 +193,7 @@ BitstreamManager build_device_bitstream(const VprContext& vpr_ctx,
|
|||
/* Reserve child blocks for the top level block */
|
||||
bitstream_manager.reserve_child_blocks(
|
||||
top_block, count_module_manager_module_configurable_children(
|
||||
openfpga_ctx.module_graph(), top_module));
|
||||
openfpga_ctx.module_graph(), top_module), ModuleManager::e_config_child_type::PHYSICAL);
|
||||
|
||||
/* Create bitstream from grids */
|
||||
VTR_LOGV(verbose, "Building grid bitstream...\n");
|
||||
|
|
|
@ -636,7 +636,7 @@ static void rec_build_physical_block_bitstream(
|
|||
VTR_ASSERT(true == module_manager.valid_module_id(pb_module));
|
||||
|
||||
/* Skip module with no configurable children */
|
||||
if (0 == module_manager.logical_configurable_children(pb_module).size()) {
|
||||
if (0 == module_manager.num_configurable_children(pb_module, ModuleManager::e_config_child_type::LOGICAL)) {
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -653,7 +653,7 @@ static void rec_build_physical_block_bitstream(
|
|||
bitstream_manager.reserve_child_blocks(
|
||||
parent_configurable_block,
|
||||
count_module_manager_module_configurable_children(module_manager,
|
||||
pb_module));
|
||||
pb_module, ModuleManager::e_config_child_type::PHYSICAL));
|
||||
|
||||
/* Recursively finish all the child pb_types*/
|
||||
if (false == is_primitive_pb_type(physical_pb_type)) {
|
||||
|
@ -748,7 +748,7 @@ static void build_physical_block_bitstream(
|
|||
VTR_ASSERT(true == module_manager.valid_module_id(grid_module));
|
||||
|
||||
/* Skip module with no configurable children */
|
||||
if (0 == module_manager.configurable_children(grid_module).size()) {
|
||||
if (0 == module_manager.num_configurable_children(grid_module, ModuleManager::e_config_child_type::LOGICAL)) {
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -770,7 +770,7 @@ static void build_physical_block_bitstream(
|
|||
/* Reserve child blocks for new created block */
|
||||
bitstream_manager.reserve_child_blocks(
|
||||
grid_configurable_block, count_module_manager_module_configurable_children(
|
||||
module_manager, grid_module));
|
||||
module_manager, grid_module, ModuleManager::e_config_child_type::PHYSICAL));
|
||||
|
||||
/* Iterate over the capacity of the grid
|
||||
* Now each physical tile may have a number of logical blocks
|
||||
|
|
|
@ -86,11 +86,11 @@ void reserve_module_manager_module_nets(ModuleManager& module_manager,
|
|||
*children as well
|
||||
******************************************************************************/
|
||||
size_t count_module_manager_module_configurable_children(
|
||||
const ModuleManager& module_manager, const ModuleId& module) {
|
||||
const ModuleManager& module_manager, const ModuleId& module, const ModuleManager::e_config_child_type& config_child_type) {
|
||||
size_t num_config_children = 0;
|
||||
|
||||
for (const ModuleId& child : module_manager.logical_configurable_children(module)) {
|
||||
if (0 != module_manager.logical_configurable_children(child).size()) {
|
||||
for (const ModuleId& child : module_manager.configurable_children(module, config_child_type)) {
|
||||
if (0 != module_manager.configurable_children(child, config_child_type).size()) {
|
||||
num_config_children++;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -42,7 +42,7 @@ void reserve_module_manager_module_nets(ModuleManager& module_manager,
|
|||
const ModuleId& module);
|
||||
|
||||
size_t count_module_manager_module_configurable_children(
|
||||
const ModuleManager& module_manager, const ModuleId& module);
|
||||
const ModuleManager& module_manager, const ModuleId& module, const ModuleManager::e_config_child_type& config_child_type);
|
||||
|
||||
std::pair<ModuleId, size_t> find_module_manager_instance_module_info(
|
||||
const ModuleManager& module_manager, const ModuleId& parent,
|
||||
|
|
Loading…
Reference in New Issue