Changes to estimatePosition API

Signed-off-by: Clifford Wolf <clifford@clifford.at>
This commit is contained in:
Clifford Wolf 2018-06-20 12:57:38 +02:00
parent c3837027b2
commit cb9c6c6ef2
5 changed files with 18 additions and 18 deletions

View File

@ -51,7 +51,8 @@ class SAPlacer
int num_bel_types = 0; int num_bel_types = 0;
for (auto bel : ctx->getBels()) { for (auto bel : ctx->getBels()) {
int x, y; int x, y;
ctx->estimatePosition(bel, x, y); bool gb;
ctx->estimatePosition(bel, x, y, gb);
BelType type = ctx->getBelType(bel); BelType type = ctx->getBelType(bel);
int type_idx; int type_idx;
if (bel_types.find(type) == bel_types.end()) { if (bel_types.find(type) == bel_types.end()) {
@ -288,18 +289,17 @@ class SAPlacer
float get_wirelength(NetInfo *net) float get_wirelength(NetInfo *net)
{ {
float wirelength = 0; float wirelength = 0;
int driver_x = 0, driver_y = 0; int driver_x, driver_y;
bool consider_driver = false; bool driver_gb;
CellInfo *driver_cell = net->driver.cell; CellInfo *driver_cell = net->driver.cell;
if (!driver_cell) if (!driver_cell)
return 0; return 0;
if (driver_cell->bel == BelId()) if (driver_cell->bel == BelId())
return 0; return 0;
consider_driver = ctx->estimatePosition(driver_cell->bel, driver_x, driver_y, driver_gb);
ctx->estimatePosition(driver_cell->bel, driver_x, driver_y);
WireId drv_wire = ctx->getWireBelPin( WireId drv_wire = ctx->getWireBelPin(
driver_cell->bel, ctx->portPinFromId(net->driver.port)); driver_cell->bel, ctx->portPinFromId(net->driver.port));
if (!consider_driver) if (driver_gb)
return 0; return 0;
for (auto load : net->users) { for (auto load : net->users) {
if (load.cell == nullptr) if (load.cell == nullptr)
@ -307,7 +307,7 @@ class SAPlacer
CellInfo *load_cell = load.cell; CellInfo *load_cell = load.cell;
if (load_cell->bel == BelId()) if (load_cell->bel == BelId())
continue; continue;
// ctx->estimatePosition(load_cell->bel, load_x, load_y); // ctx->estimatePosition(load_cell->bel, load_x, load_y, load_gb);
WireId user_wire = ctx->getWireBelPin( WireId user_wire = ctx->getWireBelPin(
load_cell->bel, ctx->portPinFromId(load.port)); load_cell->bel, ctx->portPinFromId(load.port));
// wirelength += std::abs(load_x - driver_x) + std::abs(load_y - // wirelength += std::abs(load_x - driver_x) + std::abs(load_y -
@ -405,8 +405,9 @@ class SAPlacer
BelId random_bel_for_cell(CellInfo *cell) BelId random_bel_for_cell(CellInfo *cell)
{ {
BelType targetType = ctx->belTypeFromId(cell->type); BelType targetType = ctx->belTypeFromId(cell->type);
int x = 0, y = 0; int x, y;
ctx->estimatePosition(cell->bel, x, y); bool gb;
ctx->estimatePosition(cell->bel, x, y, gb);
while (true) { while (true) {
int nx = ctx->rng(2 * diameter + 1) + std::max(x - diameter, 0); int nx = ctx->rng(2 * diameter + 1) + std::max(x - diameter, 0);
int ny = ctx->rng(2 * diameter + 1) + std::max(y - diameter, 0); int ny = ctx->rng(2 * diameter + 1) + std::max(y - diameter, 0);

View File

@ -141,11 +141,11 @@ const std::vector<PipId> &Arch::getWireAliases(WireId wire) const
// --------------------------------------------------------------- // ---------------------------------------------------------------
bool Arch::estimatePosition(BelId bel, int &x, int &y) const void Arch::estimatePosition(BelId bel, int &x, int &y, bool &gb) const
{ {
x = 0.0; x = 0;
y = 0.0; y = 0;
return false; gb = false;
} }
delay_t Arch::estimateDelay(WireId src, WireId dst) const { return 0.0; } delay_t Arch::estimateDelay(WireId src, WireId dst) const { return 0.0; }

View File

@ -118,7 +118,7 @@ struct Arch : BaseCtx
const std::vector<PipId> &getPipsUphill(WireId wire) const; const std::vector<PipId> &getPipsUphill(WireId wire) const;
const std::vector<PipId> &getWireAliases(WireId wire) const; const std::vector<PipId> &getWireAliases(WireId wire) const;
bool estimatePosition(BelId bel, int &x, int &y) const; void estimatePosition(BelId bel, int &x, int &y, bool &gb) const;
delay_t estimateDelay(WireId src, WireId dst) const; delay_t estimateDelay(WireId src, WireId dst) const;
delay_t getDelayEpsilon() const { return 0.01; } delay_t getDelayEpsilon() const { return 0.01; }
float getDelayNS(delay_t v) const { return v; } float getDelayNS(delay_t v) const { return v; }

View File

@ -295,13 +295,12 @@ std::string Arch::getBelPackagePin(BelId bel) const
} }
// ----------------------------------------------------------------------- // -----------------------------------------------------------------------
bool Arch::estimatePosition(BelId bel, int &x, int &y) const void Arch::estimatePosition(BelId bel, int &x, int &y, bool &gb) const
{ {
assert(bel != BelId()); assert(bel != BelId());
x = chip_info->bel_data[bel.index].x; x = chip_info->bel_data[bel.index].x;
y = chip_info->bel_data[bel.index].y; y = chip_info->bel_data[bel.index].y;
gb = chip_info->bel_data[bel.index].type == TYPE_SB_GB;
return chip_info->bel_data[bel.index].type != TYPE_SB_GB;
} }
delay_t Arch::estimateDelay(WireId src, WireId dst) const delay_t Arch::estimateDelay(WireId src, WireId dst) const

View File

@ -753,7 +753,7 @@ struct Arch : BaseCtx
// ------------------------------------------------- // -------------------------------------------------
bool estimatePosition(BelId bel, int &x, int &y) const; void estimatePosition(BelId bel, int &x, int &y, bool &gb) const;
delay_t estimateDelay(WireId src, WireId dst) const; delay_t estimateDelay(WireId src, WireId dst) const;
delay_t getDelayEpsilon() const { return 10; } delay_t getDelayEpsilon() const { return 10; }
float getDelayNS(delay_t v) const { return v * 0.001; } float getDelayNS(delay_t v) const { return v * 0.001; }