| #include "device_grid.h" |
| #include "vpr_utils.h" |
| |
| DeviceGrid::DeviceGrid(std::string grid_name, vtr::Matrix<t_grid_tile> grid) |
| : name_(grid_name) |
| , grid_(grid) { |
| count_instances(); |
| } |
| |
| DeviceGrid::DeviceGrid(std::string grid_name, vtr::Matrix<t_grid_tile> grid, std::vector<t_physical_tile_type_ptr> limiting_res) |
| : DeviceGrid(grid_name, grid) { |
| limiting_resources_ = limiting_res; |
| } |
| |
| size_t DeviceGrid::num_instances(t_physical_tile_type_ptr type) const { |
| auto iter = instance_counts_.find(logical_block_type(type)); |
| if (iter != instance_counts_.end()) { |
| //Return count |
| return iter->second; |
| } |
| return 0; //None found |
| } |
| |
| void DeviceGrid::clear() { |
| grid_.clear(); |
| instance_counts_.clear(); |
| } |
| |
| void DeviceGrid::count_instances() { |
| instance_counts_.clear(); |
| |
| //Count the number of blocks in the grid |
| for (size_t x = 0; x < width(); ++x) { |
| for (size_t y = 0; y < height(); ++y) { |
| auto type = grid_[x][y].type; |
| |
| if (grid_[x][y].width_offset == 0 && grid_[x][y].height_offset == 0) { |
| //Add capacity only if this is the root location |
| instance_counts_[logical_block_type(type)] += type->capacity; |
| } |
| } |
| } |
| } |