make_net/make_port bus bit without bus dcl pr441
Signed-off-by: James Cherry <cherry@CerezoBook.local>
This commit is contained in:
parent
4239842d34
commit
13cd475ffa
|
|
@ -502,6 +502,8 @@ class NetworkEdit : public Network
|
|||
public:
|
||||
NetworkEdit() = default;
|
||||
bool isEditable() const override { return true; }
|
||||
virtual Port *makePort(Cell *cell,
|
||||
std::string_view name) = 0;
|
||||
virtual Instance *makeInstance(LibertyCell *cell,
|
||||
std::string_view name,
|
||||
Instance *parent) = 0;
|
||||
|
|
@ -556,8 +558,6 @@ public:
|
|||
virtual void setAttribute(Instance *instance,
|
||||
std::string_view key,
|
||||
std::string_view value) = 0;
|
||||
virtual Port *makePort(Cell *cell,
|
||||
std::string_view name) = 0;
|
||||
virtual Port *makeBusPort(Cell *cell,
|
||||
std::string_view name,
|
||||
int from_index,
|
||||
|
|
|
|||
|
|
@ -94,11 +94,12 @@ parseBusName(std::string_view name,
|
|||
int &to,
|
||||
bool &subscript_wild);
|
||||
|
||||
// Insert escapes before ch1 and ch2 in token.
|
||||
// Insert escapes before ch1, ch2 or ch3 in token.
|
||||
std::string
|
||||
escapeChars(std::string_view token,
|
||||
char ch1,
|
||||
char ch2,
|
||||
char ch3,
|
||||
char escape);
|
||||
|
||||
} // namespace sta
|
||||
|
|
|
|||
|
|
@ -92,6 +92,8 @@ public:
|
|||
int index) const override;
|
||||
PortMemberIterator *memberIterator(const Port *port) const override;
|
||||
bool hasMembers(const Port *port) const override;
|
||||
Port *makePort(Cell *cell,
|
||||
std::string_view name) override;
|
||||
|
||||
ObjectId id(const Instance *instance) const override;
|
||||
std::string getAttribute(const Instance *inst,
|
||||
|
|
@ -146,6 +148,7 @@ public:
|
|||
char pathEscape() const override;
|
||||
void setPathEscape(char escape) override;
|
||||
|
||||
// NetworkEdit
|
||||
bool isEditable() const override;
|
||||
LibertyLibrary *makeLibertyLibrary(std::string_view name,
|
||||
std::string_view filename) override;
|
||||
|
|
@ -202,6 +205,8 @@ public:
|
|||
const PatternMatch *pattern) const override;
|
||||
std::string name(const Port *port) const override;
|
||||
std::string busName(const Port *port) const override;
|
||||
Port *makePort(Cell *cell,
|
||||
std::string_view name) override;
|
||||
|
||||
std::string name(const Instance *instance) const override;
|
||||
std::string pathName(const Instance *instance) const override;
|
||||
|
|
@ -289,5 +294,8 @@ escapeDividers(std::string_view name,
|
|||
std::string
|
||||
escapeBrackets(std::string_view name,
|
||||
const Network *network);
|
||||
std::string
|
||||
escapeDividerBrackets(std::string_view name,
|
||||
const Network *network);
|
||||
|
||||
} // namespace sta
|
||||
|
|
|
|||
|
|
@ -3081,7 +3081,8 @@ libertyReaderFindPort(const LibertyCell *cell,
|
|||
char brkt_right = library->busBrktRight();
|
||||
const char escape = '\\';
|
||||
// Pins at top level with bus names have escaped brackets.
|
||||
std::string escaped_port_name = escapeChars(port_name, brkt_left, brkt_right, escape);
|
||||
std::string escaped_port_name = escapeChars(port_name, brkt_left, brkt_right,
|
||||
'\0', escape);
|
||||
port = cell->findLibertyPort(escaped_port_name);
|
||||
}
|
||||
return port;
|
||||
|
|
|
|||
|
|
@ -163,9 +163,10 @@ parseBusName(std::string_view name,
|
|||
|
||||
std::string
|
||||
escapeChars(std::string_view token,
|
||||
const char ch1,
|
||||
const char ch2,
|
||||
const char escape)
|
||||
char ch1,
|
||||
char ch2,
|
||||
char ch3,
|
||||
char escape)
|
||||
{
|
||||
std::string escaped;
|
||||
escaped.reserve(token.size());
|
||||
|
|
@ -180,7 +181,7 @@ escapeChars(std::string_view token,
|
|||
else
|
||||
escaped += ch;
|
||||
}
|
||||
else if (ch == ch1 || ch == ch2) {
|
||||
else if (ch == ch1 || ch == ch2 || ch == ch3) {
|
||||
escaped += escape;
|
||||
escaped += ch;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -330,6 +330,13 @@ NetworkNameAdapter::memberIterator(const Port *port) const
|
|||
return network_->memberIterator(port);
|
||||
}
|
||||
|
||||
Port *
|
||||
NetworkNameAdapter::makePort(Cell *cell,
|
||||
std::string_view name)
|
||||
{
|
||||
return network_edit_->makePort(cell, name);
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////
|
||||
|
||||
ObjectId
|
||||
|
|
@ -736,6 +743,14 @@ SdcNetwork::busName(const Port *port) const
|
|||
return staToSdc(network_->busName(port));
|
||||
}
|
||||
|
||||
Port *
|
||||
SdcNetwork::makePort(Cell *cell,
|
||||
std::string_view name)
|
||||
{
|
||||
std::string escaped_name = escapeDividerBrackets(name, network_edit_);
|
||||
return network_edit_->makePort(cell, escaped_name);
|
||||
}
|
||||
|
||||
std::string
|
||||
SdcNetwork::name(const Instance *instance) const
|
||||
{
|
||||
|
|
@ -1073,7 +1088,7 @@ SdcNetwork::makeInstance(LibertyCell *cell,
|
|||
std::string_view name,
|
||||
Instance *parent)
|
||||
{
|
||||
std::string escaped_name = escapeDividers(std::string(name), this);
|
||||
std::string escaped_name = escapeDividerBrackets(name, this);
|
||||
return network_edit_->makeInstance(cell, escaped_name, parent);
|
||||
}
|
||||
|
||||
|
|
@ -1081,7 +1096,7 @@ Net *
|
|||
SdcNetwork::makeNet(std::string_view name,
|
||||
Instance *parent)
|
||||
{
|
||||
std::string escaped_name = escapeDividers(std::string(name), this);
|
||||
std::string escaped_name = escapeDividerBrackets(name, this);
|
||||
return network_edit_->makeNet(escaped_name, parent);
|
||||
}
|
||||
|
||||
|
|
@ -1254,11 +1269,19 @@ SdcNetwork::visitMatches(const Instance *parent,
|
|||
|
||||
////////////////////////////////////////////////////////////////
|
||||
|
||||
std::string
|
||||
escapeDividerBrackets(std::string_view name,
|
||||
const Network *network)
|
||||
{
|
||||
return escapeChars(name, network->pathDivider(), '[', ']',
|
||||
network->pathEscape());
|
||||
}
|
||||
|
||||
std::string
|
||||
escapeDividers(std::string_view name,
|
||||
const Network *network)
|
||||
{
|
||||
return escapeChars(name, network->pathDivider(), '\0',
|
||||
return escapeChars(name, network->pathDivider(), '\0', '\0',
|
||||
network->pathEscape());
|
||||
}
|
||||
|
||||
|
|
@ -1266,7 +1289,7 @@ std::string
|
|||
escapeBrackets(std::string_view name,
|
||||
const Network *network)
|
||||
{
|
||||
return escapeChars(name, '[', ']', network->pathEscape());
|
||||
return escapeChars(name, '[', ']', '\0', network->pathEscape());
|
||||
}
|
||||
|
||||
} // namespace sta
|
||||
|
|
|
|||
|
|
@ -4412,7 +4412,8 @@ Sta::makeNet(const char *name,
|
|||
Instance *parent)
|
||||
{
|
||||
NetworkEdit *network = networkCmdEdit();
|
||||
Net *net = network->makeNet(name, parent);
|
||||
std::string escaped = escapeBrackets(name, network);
|
||||
Net *net = network->makeNet(escaped, parent);
|
||||
// Sta notification unnecessary.
|
||||
return net;
|
||||
}
|
||||
|
|
@ -4460,8 +4461,9 @@ Sta::makePortPin(const char *port_name,
|
|||
ensureLinked();
|
||||
NetworkReader *network = dynamic_cast<NetworkReader *>(network_);
|
||||
Instance *top_inst = network->topInstance();
|
||||
std::string escaped = escapeBrackets(port_name, network);
|
||||
Cell *top_cell = network->cell(top_inst);
|
||||
Port *port = network->makePort(top_cell, port_name);
|
||||
Port *port = network->makePort(top_cell, escaped);
|
||||
network->setDirection(port, dir);
|
||||
Pin *pin = network->makePin(top_inst, port, nullptr);
|
||||
makePortPinAfter(pin);
|
||||
|
|
|
|||
Loading…
Reference in New Issue