Initial Placement

OpenFPGA Floorplaner

This is dedicated OpenFPGA floorplaner which shape tiles in traditional structure as shown below. This placement class is not dependent iupon the architecture and always applied to homogeneous structure.

There are total two ways

Paramater Based (Preferred):

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

              |<---------  GRID_X  --------->|
              |                              |
    ┌───────────┐┌─────────────┐┌──────────────┐┌─────────────┐┌───────────┐  ∧
    │           ││   CBX_TOP   ││              ││             ││           │  |
    │           ││   _WIDTH    ││              ││             ││           │  | CBX_TOP_HEIGHT
    │        ┌──┘└─────────────┘└──┐        ┌──┘└─────────────┘└──┐        │  ⩒
    │        │┌───────────────────┐│        │┌───────────────────┐│        │
    └────────┘│   GRID_CLB_RATIO  │└────────┘│                   │└────────┘
    ┌────────┐│       W/H         │┌────────┐│                   │┌────────┐
    │        ││                   ││        ││                   ││        │
    │  CBY_  ││                   ││   CB_  ││                   ││  CBY_  │
    │  LEFT_ ││                   ││ HEIGHT ││                   ││ RIGHT_ │
    │ HEIGHT ││                   ││ _RATIO ││                   ││ HEIGHT │
    │        ││                   ││        ││                   ││        │
    └────────┘│                   │└────────┘│                   │└────────┘
    ┌────────┐│                   │┌────────┐│                   │┌────────┐
↑   │        │└───────────────────┘│        │└───────────────────┘│        │
|   │        └──┐┌─────────────┐┌──┘        └──┐┌─────────────┐┌──┘        │
|   │           ││  CB_WIDTH_  ││              ││             ││           │  FPGA_SIZE[0],y
|   │           ││    RATIO    ││              ││             ││           │
G   │        ┌──┘└─────────────┘└──┐        ┌──┘└─────────────┘└──┐        │
R   │        │┌───────────────────┐│        │┌───────────────────┐│        │
I   └────────┘│                   │└────────┘│                   │└────────┘
D   ┌────────┐│                   │┌────────┐│                   │┌────────┐
_   │        ││                   ││        ││                   ││        │
Y   │        ││                   ││        ││                   ││        │
|   │        ││                   ││        ││                   ││        │
|   │        ││                   ││        ││                   ││        │
|   │        ││                   ││        ││                   ││        │
|   └────────┘│                   │└────────┘│                   │└────────┘
|   ┌────────┐│                   │┌────────┐│                   │┌────────┐
↓   │        │└───────────────────┘│        │└───────────────────┘│        │
    │        └──┐┌─────────────┐┌──┘        └──┐┌─────────────┐┌──┘        │  ∧
    │           ││ CBX_BOTTOM_ ││              ││             ││           │  |
    │           ││   _WIDTH    ││              ││             ││           │  | CBX_BOTTOM_HEIGHT
    └───────────┘└─────────────┘└──────────────┘└─────────────┘└───────────┘  ⩒
    <----------->                                               <--------->
    CBY_LEFT_WIDTH                                           CBY_RIGHT_WIDTH

Area Based:

  • OVERALL_UTILIZATION

  • GRID_CLB_UTILIZATION

  • SB_UTILIZATION

Common Parameters (All of them are absolute numbers in multiple of SC_HEIGHT or CPP)

  • GRID_CLB_CHAN_X and GRID_CLB_CHAN_Y: Grid CLB margins

  • CBx_CHAN_X and CBx_CHAN_Y : Connection box X margins

  • CBy_CHAN_X and CBy_CHAN_Y : Connection box Y margins

  • GPIO_CHAN_X and GPIO_CHAN_Y: GPIO cell margins

Absolute Numbers (In multiple of SC_HEIGHT or CPP)

  • GRID_X

  • GRID_Y

  • CLB_W

  • CLB_H

  • CBX_WIDTH

  • CBY_HEIGHT

  • LEFT_CBY_WIDTH

  • LEFT_CBY_HEIGHT

  • RIGHT_CBY_WIDTH

  • RIGHT_CBY_HEIGHT

  • TOP_CBX_WIDTH

  • TOP_CBX_HEIGHT

  • BOTTOM_CBX_WIDTH

  • BOTTOM_CBX_HEIGHT

Utilization Based

Ideas:

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

class util.initial_placement.initial_placement(grid, netlist, fpga_grid: spydrnet_physical.util.FPGAGridGen.FPGAGridGen, debug=False, areaFile=None, padFile=None, gridIO=False, 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).

PlacementDB

Stores list of modules i uppose

PlacementDBKey

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

Methods:

__init__

create_placement

Overrides the base method to create placement information

update_configuration

Overwrite default configuration variables

get_default_configuration

get_variables

figSize

snapDims

ComputeGrid

CreateDatabase

add_clb

add_cbx

add_cby

get_stype

unique

add_sb

Adds switch-blocks in the placement database

add_gridIOH

add_gridIOV

add_pad

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

PlacementDB = []

Stores list of modules i uppose

Type

list

PlacementDBKey = {}

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

Type

dict

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

Overrides the base method to create placement information

update_configuration(shapingConf)[source]

Overwrite default configuration variables

add_sb(xi, yi)[source]

Adds switch-blocks in the placement database

::

d

c | |

b | | e

+—-+ +—-+

a | | Cross Shape
| -lengths {a b c d e f}
+—-+ +—-+
| f