[engine] fixing the bugs on subtiles
This commit is contained in:
parent
c17e5d46ab
commit
ba0ddd01d3
|
@ -38,6 +38,10 @@ void build_physical_tile_pin2port_info(const DeviceContext& vpr_device_ctx,
|
|||
vpr_device_annotation.add_physical_tile_pin_subtile_index(&physical_tile,
|
||||
absolute_pin_index,
|
||||
subtile_index);
|
||||
vpr_device_annotation.add_physical_tile_z_to_subtile_index(&physical_tile,
|
||||
subtile_index,
|
||||
&sub_tile - &(physical_tile.sub_tiles[0])
|
||||
);
|
||||
}
|
||||
}
|
||||
/* Count the number of pins for each sub tile */
|
||||
|
|
|
@ -348,6 +348,26 @@ int VprDeviceAnnotation::physical_tile_pin_subtile_index(t_physical_tile_type_pt
|
|||
return pin_search_result->second;
|
||||
}
|
||||
|
||||
int VprDeviceAnnotation::physical_tile_z_to_subtile_index(t_physical_tile_type_ptr physical_tile,
|
||||
const int& sub_tile_z) const {
|
||||
/* Try to find the physical tile in the fast look-up */
|
||||
auto physical_tile_search_result = physical_tile_z_to_subtile_indices_.find(physical_tile);
|
||||
if (physical_tile_search_result == physical_tile_z_to_subtile_indices_.end()) {
|
||||
/* Not found. Return an invalid index */
|
||||
return -1;
|
||||
}
|
||||
|
||||
/* Try to find the physical tile port info with pin index */
|
||||
auto pin_search_result = physical_tile_search_result->second.find(sub_tile_z);
|
||||
if (pin_search_result == physical_tile_search_result->second.end()) {
|
||||
/* Not found. Return an invalid index */
|
||||
return -1;
|
||||
}
|
||||
|
||||
/* Reach here, we should find a port. Return the port information */
|
||||
return pin_search_result->second;
|
||||
}
|
||||
|
||||
/************************************************************************
|
||||
* Public mutators
|
||||
***********************************************************************/
|
||||
|
@ -637,4 +657,10 @@ void VprDeviceAnnotation::add_physical_tile_pin_subtile_index(t_physical_tile_ty
|
|||
physical_tile_pin_subtile_indices_[physical_tile][pin_index] = subtile_index;
|
||||
}
|
||||
|
||||
void VprDeviceAnnotation::add_physical_tile_z_to_subtile_index(t_physical_tile_type_ptr physical_tile,
|
||||
const int& subtile_z,
|
||||
const int& subtile_index) {
|
||||
physical_tile_z_to_subtile_indices_[physical_tile][subtile_z] = subtile_index;
|
||||
}
|
||||
|
||||
} /* End namespace openfpga*/
|
||||
|
|
|
@ -90,6 +90,8 @@ class VprDeviceAnnotation {
|
|||
const int& pin_index) const;
|
||||
int physical_tile_pin_subtile_index(t_physical_tile_type_ptr physical_tile,
|
||||
const int& pin_index) const;
|
||||
int physical_tile_z_to_subtile_index(t_physical_tile_type_ptr physical_tile,
|
||||
const int& subtile_z) const;
|
||||
public: /* Public mutators */
|
||||
void add_pb_type_physical_mode(t_pb_type* pb_type, t_mode* physical_mode);
|
||||
void add_physical_pb_type(t_pb_type* operating_pb_type, t_pb_type* physical_pb_type);
|
||||
|
@ -130,6 +132,9 @@ class VprDeviceAnnotation {
|
|||
void add_physical_tile_pin_subtile_index(t_physical_tile_type_ptr physical_tile,
|
||||
const int& pin_index,
|
||||
const int& subtile_index);
|
||||
void add_physical_tile_z_to_subtile_index(t_physical_tile_type_ptr physical_tile,
|
||||
const int& subtile_z,
|
||||
const int& subtile_index);
|
||||
private: /* Internal data */
|
||||
/* Pair a regular pb_type to its physical pb_type */
|
||||
std::map<t_pb_type*, t_pb_type*> physical_pb_types_;
|
||||
|
@ -225,6 +230,8 @@ class VprDeviceAnnotation {
|
|||
std::map<t_physical_tile_type_ptr, std::map<int, BasicPort>> physical_tile_pin2port_info_map_;
|
||||
/* A fast look-up from pin index in physical tile to sub tile index */
|
||||
std::map<t_physical_tile_type_ptr, std::map<int, int>> physical_tile_pin_subtile_indices_;
|
||||
/* A fast look-up from z (absolute coordinate) in physical tile to the index in sub tile array */
|
||||
std::map<t_physical_tile_type_ptr, std::map<int, int>> physical_tile_z_to_subtile_indices_;
|
||||
};
|
||||
|
||||
} /* End namespace openfpga*/
|
||||
|
|
Loading…
Reference in New Issue