Verilog to Routing - VPR
device_grid.h
Go to the documentation of this file.
1 #ifndef DEVICE_GRID
2 #define DEVICE_GRID
3 
4 #include <string>
5 #include <vector>
6 #include "vtr_ndmatrix.h"
7 #include "physical_types.h"
8 
10 struct t_grid_tile {
11  t_physical_tile_type_ptr type = nullptr;
12  int width_offset = 0;
13  int height_offset = 0;
14  const t_metadata_dict* meta = nullptr;
15 };
16 
17 class DeviceGrid {
18  public:
19  DeviceGrid() = default;
20  DeviceGrid(std::string grid_name, vtr::Matrix<t_grid_tile> grid);
21  DeviceGrid(std::string grid_name, vtr::Matrix<t_grid_tile> grid, std::vector<t_logical_block_type_ptr> limiting_res);
22 
23  const std::string& name() const { return name_; }
24 
25  size_t width() const { return grid_.dim_size(0); }
26  size_t height() const { return grid_.dim_size(1); }
27 
28  //Note: supports 2-d indexing [0..width()-1][0..height()-1] yielding a t_grid_tile
29  auto operator[](size_t index) const { return grid_[index]; }
30  auto operator[](size_t index) { return grid_[index]; }
31 
32  const vtr::Matrix<t_grid_tile>& matrix() const {
33  return grid_;
34  }
35 
36  void clear();
37 
38  size_t num_instances(t_physical_tile_type_ptr type) const;
39 
44  std::vector<t_logical_block_type_ptr> limiting_resources() const { return limiting_resources_; }
45 
46  private:
47  void count_instances();
48 
49  std::string name_;
50 
51  //Note that vtr::Matrix operator[] returns and intermediate type
52  //which can be used or indexing in the second dimension, allowing
53  //traditional 2-d indexing to be used
54  vtr::Matrix<t_grid_tile> grid_;
55 
56  std::map<t_physical_tile_type_ptr, size_t> instance_counts_;
57 
58  std::vector<t_logical_block_type_ptr> limiting_resources_;
59 };
60 
61 #endif
s_grid_tile is the minimum tile of the fpga
Definition: device_grid.h:10
std::string name_
Definition: device_grid.h:49
const t_metadata_dict * meta
Definition: device_grid.h:14
std::vector< t_logical_block_type_ptr > limiting_resources() const
Returns the block types which limits the device size (may be empty if resource limits were not consid...
Definition: device_grid.h:44
Definition: device_grid.h:17
int height_offset
Definition: device_grid.h:13
std::map< t_physical_tile_type_ptr, size_t > instance_counts_
Definition: device_grid.h:56
size_t height() const
Definition: device_grid.h:26
std::vector< t_logical_block_type_ptr > limiting_resources_
Definition: device_grid.h:58
const std::string & name() const
Definition: device_grid.h:23
auto operator[](size_t index)
Definition: device_grid.h:30
auto operator[](size_t index) const
Definition: device_grid.h:29
size_t width() const
Definition: device_grid.h:25
int width_offset
Definition: device_grid.h:12
const vtr::Matrix< t_grid_tile > & matrix() const
Definition: device_grid.h:32
t_physical_tile_type_ptr type
Definition: device_grid.h:11
vtr::Matrix< t_grid_tile > grid_
Definition: device_grid.h:54