Initial Heterogeneous Placement

FPGA heterogeneous Floorplanner

This is dedicated OpenFPGA floorplan shapes each block in the FPGA in a classic tiling structure. This floorplanning can is applied to homogeneous architecture out of the box, but external information may be required for heterogeneous architecture.

This floor planner is sequential. It honors utilization constraints and parameter constraints in the given order.

Paramater Based (Preferred):

Following figure details the various paramteres referred in this type of floorplanning

          |<---------  GRID_X  --------->|
          |                              |
┌───────────┐┌─────────────┐┌──────────────┐┌─────────────┐┌───────────┐
│           ││  top_cbx_w  ││              ││           ↑ ││           │
│           ││<----------->││              ││  top_cbx_h↓ ││           │
│        ┌──┘└─────────────┘└──┐        ┌──┘└─────────────┘└──┐        │
│        │┌───────────────────┐│        │┌───────────────────┐│        │
└────────┘│                   │└────────┘│                   │└────────┘
┌────────┐│                   │┌────────┐│                   │┌────────┐
│      ↑ ││                   ││       ↑││                   ││      ↑ │
│      | ││                   ││       |││                   ││      | │
│      | ││                   ││       |││                   ││      | │
│left_ | ││                   ││cby11_h|││                   ││right | │
|cby_h ↓ ││                   ││       ↓││                   ││cby_h ↓ │
└────────┘│                   │└────────┘│                   │└────────┘
┌────────┐│                   │┌────────┐│                   │┌────────┐
│        │└───────────────────┘│        │└───────────────────┘│        │
│        └──┐┌─────────────┐┌──┘        └──┐┌─────────────┐┌──┘        │
│           ││   cbx11_w   ││              ││           ↑ ││           │
│           ││<----------->││              ││   cbx11_h ↓ ││           │
│        ┌──┘└─────────────┘└──┐        ┌──┘└─────────────┘└──┐        │
│        │┌───────────────────┐│        │┌───────────────────┐│        │
└────────┘│                ↑  │└────────┘│                   │└────────┘
┌────────┐│                |  │┌────────┐│                   │┌────────┐
│        ││                |  ││        ││                   ││        │
│        ││                |  ││        ││                   ││        │
│left_   ││          clb_h |  ││        ││                   ││right   │
│cby_w   ││                |  ││cby11_w ││                   ││cby_W   │
│<------>││                |  ││<------>││                   ││<------>│
└────────┘│<----------------->│└────────┘│                   │└────────┘
┌────────┐│      clb_w     ↓  │┌────────┐│                   │┌────────┐
│        │└───────────────────┘│        │└───────────────────┘│        │
│        └──┐┌─────────────┐┌──┘        └──┐┌─────────────┐┌──┘        │
│           ││bottom_cbx_w ││              ││            ↑││           │
│           ││<----------->││              ││bottom_cbx_h↓││           │
└───────────┘└─────────────┘└──────────────┘└─────────────┘└───────────┘

Utilization Based

Ideas:

  • Optionally provide a method to apply shaping and placement to the netlist elements

This function creates a parameterized dictionary detailig SHAPE, POINTS and PLACEMENT information

self.module_shape = {
    "SHAPE" : 'rect' and 'cross',
    "POINTS" : (w, h) or (a, b, c, d, e, f),
    "PLACEMENT" : (x_off, v_off),
}
class util.initial_hetero_placement.initial_hetero_placement(grid, netlist, fpga_grid: spydrnet_physical.util.FPGAGridGen.FPGAGridGen, debug=False, areaFile=None, shapingConf=None)[source]

Attributes:

CPP

Contated-poly-pitch (`default`=2)

SC_HEIGHT

Standard cell height (`default`=10)

SCALE

Module level variable documented inline. (`default`=100).

margins

Stores module database without any margin

module_shapes_final

Stores module database without any margin

module_final

Stores module database with margin

s_param

All the shaping paramteres

Methods:

__init__

add_module_colors

update_placement

This will be extendned in the class

create_placement

Overrides the base method to create placement information

update_placement_grid

Update two dimensional placement grid

update_shapes

This method updates the shape of all the modules based on the s_params variable

update_shaping_param

Overwrite default configuration variables

base2

Snaps the point in multiple for 2

base4

Snaps the point in multiple for 4

get_area

Return the area of the given module after considering the utilisation

calculate_shapes

This function compute different base variable for shaping FPGA fabric

derive_sb_paramters

This method calculated switch block dimensions from grid_clb and cb

create_shapes

CPP = 2

Contated-poly-pitch (`default`=2)

Type

int

SC_HEIGHT = 10

Standard cell height (`default`=10)

Type

int

SCALE = 100

Module level variable documented inline. (`default`=100)

Type

int

margins = {}

Stores module database without any margin

Type

dict

module_shapes_final = {}

Stores module database without any margin

Type

dict

module_final = {}

Stores module database with margin

Type

dict

s_param = {'OFFSET_X': 20, 'OFFSET_Y': 2, 'TILE_ASPECT_RATIO': 1}

All the shaping paramteres

Type

dict

__init__(grid, netlist, fpga_grid: spydrnet_physical.util.FPGAGridGen.FPGAGridGen, debug=False, areaFile=None, shapingConf=None)[source]
update_placement()[source]

This will be extendned in the class

create_placement()[source]

Overrides the base method to create placement information

update_placement_grid()[source]

Update two dimensional placement grid

update_shapes()[source]

This method updates the shape of all the modules based on the s_params variable

update_shaping_param(update_module_shapes)[source]

Overwrite default configuration variables

static base2(number, multiple=2)[source]

Snaps the point in multiple for 2

static base4(number, multiple=4)[source]

Snaps the point in multiple for 4

get_area(module)[source]

Return the area of the given module after considering the utilisation

calculate_shapes()[source]

This function compute different base variable for shaping FPGA fabric

derive_sb_paramters()[source]

This method calculated switch block dimensions from grid_clb and cb