network/sta replaceCell Cell support
This commit is contained in:
parent
f6d397ce72
commit
9659c43590
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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_;
|
||||
|
|
|
|||
|
|
@ -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.
|
||||
|
|
|
|||
|
|
@ -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 *
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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_;
|
||||
|
|
|
|||
Loading…
Reference in New Issue