[core] fixed a bug on bitstream generator on supporting group_config_block

This commit is contained in:
tangxifan 2023-08-05 21:58:03 -07:00
parent 68f07d6fc9
commit a1f8b3c441
2 changed files with 23 additions and 12 deletions

View File

@ -1343,7 +1343,12 @@ int build_memory_group_module(
unique_child_instance_names.reserve(child_instance_names.size());
std::map<std::string, size_t> unique_child_instance_name_count;
for (std::string curr_inst_name : child_instance_names) {
unique_child_instance_name_count[curr_inst_name]++;
auto result = unique_child_instance_name_count.find(curr_inst_name);
if (result == unique_child_instance_name_count.end()) {
unique_child_instance_name_count[curr_inst_name] = 1;
} else {
unique_child_instance_name_count[curr_inst_name]++;
}
}
std::map<std::string, size_t> unique_child_instance_name_scoreboard;
for (std::string curr_inst_name : child_instance_names) {
@ -1354,9 +1359,12 @@ int build_memory_group_module(
}
auto result = unique_child_instance_name_scoreboard.find(curr_inst_name);
if (result == unique_child_instance_name_scoreboard.end()) {
unique_child_instance_names.push_back(
generate_instance_name(curr_inst_name, result->second));
unique_child_instance_name_scoreboard[curr_inst_name] = 0;
unique_child_instance_names.push_back(curr_inst_name);
} else {
unique_child_instance_name_scoreboard[curr_inst_name]++;
unique_child_instance_names.push_back(generate_instance_name(
curr_inst_name, unique_child_instance_name_scoreboard[curr_inst_name]));
}
}
VTR_ASSERT(unique_child_instance_names.size() == child_instance_names.size());

View File

@ -143,10 +143,11 @@ static void build_primitive_bitstream(
auto result = grouped_mem_inst_scoreboard.find(mem_block_name);
if (result == grouped_mem_inst_scoreboard.end()) {
/* Update scoreboard */
grouped_mem_inst_scoreboard[mem_block_name] = 1;
grouped_mem_inst_scoreboard[mem_block_name] = 0;
} else {
mem_block_name = generate_instance_name(mem_block_name, result->second);
grouped_mem_inst_scoreboard[mem_block_name]++;
mem_block_name = generate_instance_name(
mem_block_name, grouped_mem_inst_scoreboard[mem_block_name]);
}
}
@ -298,19 +299,20 @@ static void build_physical_block_pin_interc_bitstream(
.get_width());
/* If there is a feedthrough module, we should consider the scoreboard */
std::string feedthru_mem_block_name = generate_pb_memory_instance_name(
GRID_MEM_INSTANCE_PREFIX, des_pb_graph_pin, std::string(""), true);
std::string feedthru_mem_block_name = generate_mux_subckt_name(
circuit_lib, mux_model, datapath_mux_size,
std::string(MEMORY_FEEDTHROUGH_MODULE_POSTFIX));
ModuleId feedthru_mem_module =
module_manager.find_module(feedthru_mem_block_name);
if (module_manager.valid_module_id(feedthru_mem_module)) {
auto result = grouped_mem_inst_scoreboard.find(mem_block_name);
if (result == grouped_mem_inst_scoreboard.end()) {
/* Update scoreboard */
grouped_mem_inst_scoreboard[mem_block_name] = 1;
grouped_mem_inst_scoreboard[mem_block_name] = 0;
} else {
mem_block_name =
generate_instance_name(mem_block_name, result->second);
grouped_mem_inst_scoreboard[mem_block_name]++;
mem_block_name = generate_instance_name(
mem_block_name, grouped_mem_inst_scoreboard[mem_block_name]);
}
}
ConfigBlockId mux_mem_block = bitstream_manager.add_block(mem_block_name);
@ -659,10 +661,11 @@ static void build_lut_bitstream(
auto result = grouped_mem_inst_scoreboard.find(mem_block_name);
if (result == grouped_mem_inst_scoreboard.end()) {
/* Update scoreboard */
grouped_mem_inst_scoreboard[mem_block_name] = 1;
grouped_mem_inst_scoreboard[mem_block_name] = 0;
} else {
mem_block_name = generate_instance_name(mem_block_name, result->second);
grouped_mem_inst_scoreboard[mem_block_name]++;
mem_block_name = generate_instance_name(
mem_block_name, grouped_mem_inst_scoreboard[mem_block_name]);
}
}