[core] fixed a bug
This commit is contained in:
parent
a4f53c64c6
commit
76f446caec
|
@ -108,7 +108,7 @@ bool TileAnnotation::is_tile_port_to_merge(const std::string& tile_name,
|
||||||
if (result == tile_ports_to_merge_.end()) {
|
if (result == tile_ports_to_merge_.end()) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
return result->second.end() ==
|
return result->second.end() !=
|
||||||
std::find(result->second.begin(), result->second.end(), port_name);
|
std::find(result->second.begin(), result->second.end(), port_name);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -99,13 +99,6 @@ void add_grid_module_duplicated_pb_type_ports(
|
||||||
grid_type_descriptor, ipin);
|
grid_type_descriptor, ipin);
|
||||||
VTR_ASSERT(OPEN != subtile_index &&
|
VTR_ASSERT(OPEN != subtile_index &&
|
||||||
subtile_index < grid_type_descriptor->capacity);
|
subtile_index < grid_type_descriptor->capacity);
|
||||||
/* If the port is required to be merged, we deposit zero as subtile
|
|
||||||
* index */
|
|
||||||
if (tile_annotation.is_tile_port_to_merge(
|
|
||||||
std::string(grid_type_descriptor->name), pin_info.get_name()) &&
|
|
||||||
subtile_index != 0) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
/* Generate the pin name
|
/* Generate the pin name
|
||||||
* For each RECEIVER PIN or DRIVER PIN for direct connection,
|
* For each RECEIVER PIN or DRIVER PIN for direct connection,
|
||||||
* we do not duplicate in these cases */
|
* we do not duplicate in these cases */
|
||||||
|
@ -117,6 +110,17 @@ void add_grid_module_duplicated_pb_type_ports(
|
||||||
(0. == find_physical_tile_pin_Fc(grid_type_descriptor, ipin)))) {
|
(0. == find_physical_tile_pin_Fc(grid_type_descriptor, ipin)))) {
|
||||||
std::string port_name = generate_grid_port_name(
|
std::string port_name = generate_grid_port_name(
|
||||||
iwidth, iheight, subtile_index, side, pin_info);
|
iwidth, iheight, subtile_index, side, pin_info);
|
||||||
|
/* If the port is required to be merged, we deposit zero as subtile
|
||||||
|
* index */
|
||||||
|
if (tile_annotation.is_tile_port_to_merge(
|
||||||
|
std::string(grid_type_descriptor->name), pin_info.get_name())) {
|
||||||
|
if (subtile_index == 0) {
|
||||||
|
port_name = generate_grid_port_name(
|
||||||
|
0, 0, 0, TOP, pin_info);
|
||||||
|
} else {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
BasicPort grid_port(port_name, 0, 0);
|
BasicPort grid_port(port_name, 0, 0);
|
||||||
/* Add the port to the module */
|
/* Add the port to the module */
|
||||||
module_manager.add_port(grid_module, grid_port,
|
module_manager.add_port(grid_module, grid_port,
|
||||||
|
|
|
@ -90,14 +90,17 @@ void add_grid_module_net_connect_pb_graph_pin(
|
||||||
grid_type_descriptor, grid_pin_index);
|
grid_type_descriptor, grid_pin_index);
|
||||||
VTR_ASSERT(OPEN != subtile_index &&
|
VTR_ASSERT(OPEN != subtile_index &&
|
||||||
subtile_index < grid_type_descriptor->capacity);
|
subtile_index < grid_type_descriptor->capacity);
|
||||||
|
std::string grid_port_name = generate_grid_port_name(
|
||||||
|
pin_width, pin_height, subtile_index, side, pin_info);
|
||||||
/* If the port is required to be merged, we only consider the source port to
|
/* If the port is required to be merged, we only consider the source port to
|
||||||
* be the subtile index of 0 */
|
* be the subtile index of 0 */
|
||||||
if (tile_annotation.is_tile_port_to_merge(
|
if (tile_annotation.is_tile_port_to_merge(
|
||||||
std::string(grid_type_descriptor->name), pin_info.get_name())) {
|
std::string(grid_type_descriptor->name), pin_info.get_name())) {
|
||||||
subtile_index = 0;
|
/* Exception: use top side for these merged ports */
|
||||||
|
grid_port_name = generate_grid_port_name(
|
||||||
|
0, 0, 0, TOP, pin_info);
|
||||||
|
VTR_LOG("Use source pin '%s'\n", grid_port_name.c_str());
|
||||||
}
|
}
|
||||||
std::string grid_port_name = generate_grid_port_name(
|
|
||||||
pin_width, pin_height, subtile_index, side, pin_info);
|
|
||||||
ModulePortId grid_module_port_id =
|
ModulePortId grid_module_port_id =
|
||||||
module_manager.find_module_port(grid_module, grid_port_name);
|
module_manager.find_module_port(grid_module, grid_port_name);
|
||||||
VTR_ASSERT(true == module_manager.valid_module_port_id(
|
VTR_ASSERT(true == module_manager.valid_module_port_id(
|
||||||
|
|
|
@ -87,17 +87,20 @@ static void add_grid_module_pb_type_ports(
|
||||||
int subtile_index =
|
int subtile_index =
|
||||||
vpr_device_annotation.physical_tile_pin_subtile_index(
|
vpr_device_annotation.physical_tile_pin_subtile_index(
|
||||||
grid_type_descriptor, ipin);
|
grid_type_descriptor, ipin);
|
||||||
/* If the port is required to be merged, we deposit zero as subtile
|
|
||||||
* index */
|
|
||||||
if (tile_annotation.is_tile_port_to_merge(
|
|
||||||
std::string(grid_type_descriptor->name), pin_info.get_name()) &&
|
|
||||||
subtile_index != 0) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
VTR_ASSERT(OPEN != subtile_index &&
|
VTR_ASSERT(OPEN != subtile_index &&
|
||||||
subtile_index < grid_type_descriptor->capacity);
|
subtile_index < grid_type_descriptor->capacity);
|
||||||
std::string port_name = generate_grid_port_name(
|
std::string port_name = generate_grid_port_name(
|
||||||
iwidth, iheight, subtile_index, side, pin_info);
|
iwidth, iheight, subtile_index, side, pin_info);
|
||||||
|
/* If the port is required to be merged, we use a special index
|
||||||
|
* index */
|
||||||
|
if (tile_annotation.is_tile_port_to_merge(
|
||||||
|
std::string(grid_type_descriptor->name), pin_info.get_name())) {
|
||||||
|
if (subtile_index == 0) {
|
||||||
|
port_name = generate_grid_port_name(0, 0, 0, TOP, pin_info);
|
||||||
|
} else {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
BasicPort grid_port(port_name, 0, 0);
|
BasicPort grid_port(port_name, 0, 0);
|
||||||
/* Add the port to the module */
|
/* Add the port to the module */
|
||||||
module_manager.add_port(grid_module, grid_port,
|
module_manager.add_port(grid_module, grid_port,
|
||||||
|
|
|
@ -1398,17 +1398,20 @@ static int build_top_module_global_net_for_given_tile_module(
|
||||||
vpr_device_annotation.physical_tile_pin_port_info(physical_tile,
|
vpr_device_annotation.physical_tile_pin_port_info(physical_tile,
|
||||||
grid_pin_index);
|
grid_pin_index);
|
||||||
VTR_ASSERT(true == grid_pin_info.is_valid());
|
VTR_ASSERT(true == grid_pin_info.is_valid());
|
||||||
if (tile_annotation.is_tile_port_to_merge(
|
|
||||||
std::string(physical_tile->name), grid_pin_info.get_name()) &&
|
|
||||||
subtile_index != 0) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Build nets */
|
/* Build nets */
|
||||||
for (const e_side& pin_side : pin_sides) {
|
for (const e_side& pin_side : pin_sides) {
|
||||||
std::string grid_port_name =
|
std::string grid_port_name =
|
||||||
generate_grid_port_name(grid_pin_width, grid_pin_height,
|
generate_grid_port_name(grid_pin_width, grid_pin_height,
|
||||||
subtile_index, pin_side, grid_pin_info);
|
subtile_index, pin_side, grid_pin_info);
|
||||||
|
if (tile_annotation.is_tile_port_to_merge(
|
||||||
|
std::string(physical_tile->name), grid_pin_info.get_name())) {
|
||||||
|
if (subtile_index != 0) {
|
||||||
|
grid_port_name = generate_grid_port_name(0, 0, 0, TOP, grid_pin_info);
|
||||||
|
} else {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
std::string tile_grid_port_name =
|
std::string tile_grid_port_name =
|
||||||
generate_tile_module_port_name(grid_instance_name, grid_port_name);
|
generate_tile_module_port_name(grid_instance_name, grid_port_name);
|
||||||
ModulePortId tile_grid_port_id =
|
ModulePortId tile_grid_port_id =
|
||||||
|
|
|
@ -944,17 +944,21 @@ static int build_top_module_global_net_for_given_grid_module(
|
||||||
vpr_device_annotation.physical_tile_pin_port_info(physical_tile,
|
vpr_device_annotation.physical_tile_pin_port_info(physical_tile,
|
||||||
grid_pin_index);
|
grid_pin_index);
|
||||||
VTR_ASSERT(true == grid_pin_info.is_valid());
|
VTR_ASSERT(true == grid_pin_info.is_valid());
|
||||||
if (tile_annotation.is_tile_port_to_merge(
|
|
||||||
std::string(physical_tile->name), grid_pin_info.get_name()) &&
|
|
||||||
subtile_index != 0) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Build nets */
|
/* Build nets */
|
||||||
for (const e_side& pin_side : pin_sides) {
|
for (const e_side& pin_side : pin_sides) {
|
||||||
std::string grid_port_name =
|
std::string grid_port_name =
|
||||||
generate_grid_port_name(grid_pin_width, grid_pin_height,
|
generate_grid_port_name(grid_pin_width, grid_pin_height,
|
||||||
subtile_index, pin_side, grid_pin_info);
|
subtile_index, pin_side, grid_pin_info);
|
||||||
|
if (tile_annotation.is_tile_port_to_merge(
|
||||||
|
std::string(physical_tile->name), grid_pin_info.get_name())) {
|
||||||
|
if (subtile_index != 0) {
|
||||||
|
grid_port_name = generate_grid_port_name(0, 0, 0, TOP, grid_pin_info);
|
||||||
|
} else {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
ModulePortId grid_port_id =
|
ModulePortId grid_port_id =
|
||||||
module_manager.find_module_port(grid_module, grid_port_name);
|
module_manager.find_module_port(grid_module, grid_port_name);
|
||||||
VTR_ASSERT(true == module_manager.valid_module_port_id(grid_module,
|
VTR_ASSERT(true == module_manager.valid_module_port_id(grid_module,
|
||||||
|
|
Loading…
Reference in New Issue