network/sta replaceCell Cell support

This commit is contained in:
James Cherry 2019-06-14 12:05:34 -07:00
parent f6d397ce72
commit 9659c43590
7 changed files with 52 additions and 23 deletions

View File

@ -553,6 +553,12 @@ ConcreteNetwork::libertyCell(Cell *cell) const
return dynamic_cast<LibertyCell*>(ccell);
}
Cell *
ConcreteNetwork::cell(LibertyCell *cell) const
{
return reinterpret_cast<Cell*>(cell);
}
const char *
ConcreteNetwork::filename(const Cell *cell)
{
@ -1140,21 +1146,15 @@ ConcreteNetwork::makePins(Instance *inst)
void
ConcreteNetwork::replaceCell(Instance *inst,
LibertyCell *cell)
{
replaceCellIntenal(inst, cell);
}
void
ConcreteNetwork::replaceCellIntenal(Instance *inst,
ConcreteCell *cell)
Cell *cell)
{
ConcreteCell *ccell = reinterpret_cast<ConcreteCell*>(cell);
InstancePinIterator *pin_iter = pinIterator(inst);
while (pin_iter->hasNext()) {
Pin *pin = pin_iter->next();
ConcretePin *cpin = reinterpret_cast<ConcretePin*>(pin);
ConcretePort *pin_cport = reinterpret_cast<ConcretePort*>(cpin->port());
ConcretePort *cport = cell->findPort(pin_cport->name());
ConcretePort *cport = ccell->findPort(pin_cport->name());
if (cport)
cpin->port_ = cport;
else
@ -1163,7 +1163,7 @@ ConcreteNetwork::replaceCellIntenal(Instance *inst,
delete pin_iter;
ConcreteInstance *cinst = reinterpret_cast<ConcreteInstance*>(inst);
cinst->setCell(cell);
cinst->setCell(ccell);
}
void

View File

@ -76,6 +76,7 @@ public:
virtual const char *name(const Cell *cell) const;
virtual Library *library(const Cell *cell) const;
virtual LibertyCell *libertyCell(Cell *cell) const;
virtual Cell *cell(LibertyCell *cell) const;
virtual const char *filename(const Cell *cell);
virtual Port *findPort(const Cell *cell,
const char *name) const;
@ -192,7 +193,7 @@ public:
const char *name,
Instance *parent);
virtual void replaceCell(Instance *inst,
LibertyCell *cell);
Cell *cell);
virtual void deleteInstance(Instance *inst);
virtual Pin *connect(Instance *inst,
Port *port,
@ -247,8 +248,6 @@ protected:
ConcretePin *cpin);
void connectNetPin(ConcreteNet *cnet,
ConcretePin *cpin);
void replaceCellIntenal(Instance *inst,
ConcreteCell *cell);
// Cell lookup search order sequence.
ConcreteLibrarySeq library_seq_;

View File

@ -136,6 +136,7 @@ public:
__attribute__ ((deprecated));
// Find the corresponding liberty cell.
virtual LibertyCell *libertyCell(Cell *cell) const = 0;
virtual Cell *cell(LibertyCell *cell) const = 0;
// Filename may return null.
virtual const char *filename(const Cell *cell) = 0;
// Name can be a simple, bundle, bus, or bus bit name.
@ -484,7 +485,7 @@ public:
Instance *parent) = 0;
virtual void makePins(Instance *inst) = 0;
virtual void replaceCell(Instance *inst,
LibertyCell *cell) = 0;
Cell *cell) = 0;
// Deleting instance also deletes instance pins.
virtual void deleteInstance(Instance *inst) = 0;
// Connect the port on an instance to a net.

View File

@ -592,6 +592,12 @@ NetworkNameAdapter::libertyCell(Cell *cell) const
return network_->libertyCell(cell);
}
Cell *
NetworkNameAdapter::cell(LibertyCell *cell) const
{
return network_->cell(cell);
}
Port *
NetworkNameAdapter::findPort(const Cell *cell,
const char *name) const
@ -930,9 +936,9 @@ NetworkNameAdapter::makeNet(const char *name,
void
NetworkNameAdapter::replaceCell(Instance *inst,
LibertyCell *cell)
Cell *to_cell)
{
network_edit_->replaceCell(inst, cell);
network_edit_->replaceCell(inst, to_cell);
}
Pin *

View File

@ -47,6 +47,7 @@ public:
virtual const char *name(const Cell *cell) const;
virtual Library *library(const Cell *cell) const;
virtual LibertyCell *libertyCell(Cell *cell) const;
virtual Cell *cell(LibertyCell *cell) const;
virtual const char *filename(const Cell *cell);
virtual Port *findPort(const Cell *cell,
const char *name) const;
@ -124,7 +125,7 @@ public:
Instance *parent);
virtual void makePins(Instance *inst);
virtual void replaceCell(Instance *inst,
LibertyCell *cell);
Cell *to_cell);
virtual Net *makeNet(const char *name,
Instance *parent);
virtual Pin *connect(Instance *inst,

View File

@ -3629,17 +3629,34 @@ Sta::deleteInstance(Instance *inst)
void
Sta::replaceCell(Instance *inst,
LibertyCell *to_cell)
LibertyCell *to_lib_cell)
{
Cell *to_cell = network_->cell(to_lib_cell);
replaceCell(inst, to_cell, to_lib_cell);
}
void
Sta::replaceCell(Instance *inst,
Cell *to_cell)
{
LibertyCell *to_lib_cell = network_->libertyCell(to_cell);
replaceCell(inst, to_cell, to_lib_cell);
}
void
Sta::replaceCell(Instance *inst,
Cell *to_cell,
LibertyCell *to_lib_cell)
{
NetworkEdit *network = networkCmdEdit();
LibertyCell *from_cell = network->libertyCell(inst);
if (equivCells(from_cell, to_cell)) {
replaceEquivCellBefore(inst, to_cell);
LibertyCell *from_lib_cell = network->libertyCell(inst);
if (equivCells(from_lib_cell, to_lib_cell)) {
replaceEquivCellBefore(inst, to_lib_cell);
network->replaceCell(inst, to_cell);
replaceEquivCellAfter(inst);
}
else {
replaceCellBefore(inst, to_cell);
replaceCellBefore(inst, to_lib_cell);
network->replaceCell(inst, to_cell);
replaceCellAfter(inst);
}

View File

@ -1087,7 +1087,9 @@ public:
virtual void deleteInstance(Instance *inst);
// replace_cell
virtual void replaceCell(Instance *inst,
LibertyCell *to_cell);
Cell *to_cell);
virtual void replaceCell(Instance *inst,
LibertyCell *to_lib_cell);
virtual Net *makeNet(const char *name,
Instance *parent);
virtual void deleteNet(Net *net);
@ -1305,6 +1307,9 @@ protected:
int &fanou);
LibertyPort *findCellPort(LibertyCell *cell,
PortDirection *dir);
void replaceCell(Instance *inst,
Cell *to_cell,
LibertyCell *to_lib_cell);
CmdNamespace cmd_namespace_;
Instance *current_instance_;