[core] supporting tile annotation (for global port) in tile modules
This commit is contained in:
parent
399259ea1d
commit
1ee7448070
|
@ -1187,19 +1187,29 @@ static int build_top_module_global_net_for_given_tile_module(
|
||||||
const TileGlobalPortId& tile_global_port,
|
const TileGlobalPortId& tile_global_port,
|
||||||
const BasicPort& tile_port_to_connect,
|
const BasicPort& tile_port_to_connect,
|
||||||
const VprDeviceAnnotation& vpr_device_annotation, const DeviceGrid& grids,
|
const VprDeviceAnnotation& vpr_device_annotation, const DeviceGrid& grids,
|
||||||
const vtr::Point<size_t>& grid_coordinate, const e_side& border_side,
|
const vtr::Point<size_t>& grid_coordinate,
|
||||||
const vtr::Matrix<size_t>& grid_instance_ids) {
|
const vtr::Matrix<size_t>& tile_instance_ids,
|
||||||
|
const FabricTile& fabric_tile) {
|
||||||
|
/* Get the tile module and instance */
|
||||||
|
FabricTileId curr_fabric_tile_id = fabric_tile.find_tile_by_pb_coordinate(grid_coordinate);
|
||||||
|
vtr::Point<size_t> curr_fabric_tile_coord = fabric_tile.tile_coordinate(curr_fabric_tile_id);
|
||||||
|
FabricTileId unique_fabric_tile_id = fabric_tile.unique_tile(curr_fabric_tile_coord);
|
||||||
|
vtr::Point<size_t> unique_fabric_tile_coord = fabric_tile.tile_coordinate(unique_fabric_tile_id);
|
||||||
|
std::string tile_module_name = generate_tile_module_name(unique_fabric_tile_coord);
|
||||||
|
ModuleId tile_module = module_manager.find_module(tile_module_name);
|
||||||
|
VTR_ASSERT(true == module_manager.valid_module_id(tile_module));
|
||||||
|
size_t tile_instance = tile_instance_ids[curr_fabric_tile_coord.x()][curr_fabric_tile_coord.y()];
|
||||||
|
|
||||||
|
/* Get the grid coordinate in the context of the tile */
|
||||||
|
size_t pb_idx_in_curr_fabric_tile = fabric_tile.find_pb_index_in_tile(curr_fabric_tile_id, grid_coordinate);
|
||||||
|
vtr::Point<size_t> pb_coord_in_unique_fabric_tile = fabric_tile.pb_coordinates(unique_fabric_tile_id)[pb_idx_in_curr_fabric_tile];
|
||||||
|
|
||||||
t_physical_tile_type_ptr physical_tile =
|
t_physical_tile_type_ptr physical_tile =
|
||||||
grids.get_physical_type(grid_coordinate.x(), grid_coordinate.y());
|
grids.get_physical_type(grid_coordinate.x(), grid_coordinate.y());
|
||||||
/* Find the module name for this type of grid */
|
/* Find the module name for this type of grid */
|
||||||
std::string grid_module_name_prefix(GRID_MODULE_NAME_PREFIX);
|
std::string grid_module_name_prefix(GRID_MODULE_NAME_PREFIX);
|
||||||
std::string grid_module_name = generate_grid_block_module_name(
|
std::string grid_instance_name = generate_grid_block_module_name_in_top_module(
|
||||||
grid_module_name_prefix, std::string(physical_tile->name),
|
grid_module_name_prefix, grids, pb_coord_in_unique_fabric_tile);
|
||||||
is_io_type(physical_tile), border_side);
|
|
||||||
ModuleId grid_module = module_manager.find_module(grid_module_name);
|
|
||||||
VTR_ASSERT(true == module_manager.valid_module_id(grid_module));
|
|
||||||
size_t grid_instance =
|
|
||||||
grid_instance_ids[grid_coordinate.x()][grid_coordinate.y()];
|
|
||||||
/* Find the source port at the top-level module */
|
/* Find the source port at the top-level module */
|
||||||
BasicPort src_port = module_manager.module_port(top_module, top_module_port);
|
BasicPort src_port = module_manager.module_port(top_module, top_module_port);
|
||||||
|
|
||||||
|
@ -1277,14 +1287,15 @@ static int build_top_module_global_net_for_given_tile_module(
|
||||||
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);
|
||||||
ModulePortId grid_port_id =
|
std::string tile_grid_port_name = generate_tile_module_port_name(grid_instance_name, grid_port_name);
|
||||||
module_manager.find_module_port(grid_module, grid_port_name);
|
ModulePortId tile_grid_port_id =
|
||||||
VTR_ASSERT(true == module_manager.valid_module_port_id(grid_module,
|
module_manager.find_module_port(grid_module, tile_grid_port_name);
|
||||||
grid_port_id));
|
VTR_ASSERT(true == module_manager.valid_module_port_id(tile_module,
|
||||||
|
tile_port_id));
|
||||||
|
|
||||||
VTR_ASSERT(
|
VTR_ASSERT(
|
||||||
1 ==
|
1 ==
|
||||||
module_manager.module_port(grid_module, grid_port_id).get_width());
|
module_manager.module_port(tile_module, tile_grid_port_id).get_width());
|
||||||
|
|
||||||
ModuleNetId net = create_module_source_pin_net(
|
ModuleNetId net = create_module_source_pin_net(
|
||||||
module_manager, top_module, top_module, 0, top_module_port,
|
module_manager, top_module, top_module, 0, top_module_port,
|
||||||
|
@ -1293,9 +1304,9 @@ static int build_top_module_global_net_for_given_tile_module(
|
||||||
|
|
||||||
/* Configure the net sink */
|
/* Configure the net sink */
|
||||||
BasicPort sink_port =
|
BasicPort sink_port =
|
||||||
module_manager.module_port(grid_module, grid_port_id);
|
module_manager.module_port(tile_module, tile_port_id);
|
||||||
module_manager.add_module_net_sink(top_module, net, grid_module,
|
module_manager.add_module_net_sink(top_module, net, tile_module,
|
||||||
grid_instance, grid_port_id,
|
tile_instance, tile_grid_port_id,
|
||||||
sink_port.pins()[0]);
|
sink_port.pins()[0]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue