Changes to estimatePosition API
Signed-off-by: Clifford Wolf <clifford@clifford.at>
This commit is contained in:
parent
c3837027b2
commit
cb9c6c6ef2
@ -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);
|
||||||
|
@ -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; }
|
||||||
|
@ -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; }
|
||||||
|
@ -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
|
||||||
|
@ -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; }
|
||||||
|
Loading…
Reference in New Issue
Block a user