liberty test_cell port signal_type
Signed-off-by: James Cherry <cherry@parallaxsw.com>
This commit is contained in:
parent
0bf98832ed
commit
0d13839330
|
|
@ -1147,5 +1147,7 @@ private:
|
|||
|
||||
string
|
||||
portLibertyToSta(const char *port_name);
|
||||
const char *
|
||||
scanSignalTypeName(ScanSignalType scan_type);
|
||||
|
||||
} // namespace
|
||||
|
|
|
|||
|
|
@ -2139,6 +2139,25 @@ LibertyPort::setScanSignalType(ScanSignalType type)
|
|||
scan_signal_type_ = type;
|
||||
}
|
||||
|
||||
static EnumNameMap<ScanSignalType> scan_signal_type_map =
|
||||
{{ScanSignalType::enable, "enable"},
|
||||
{ScanSignalType::enable_inverted, "enable_inverted"},
|
||||
{ScanSignalType::clock, "clock"},
|
||||
{ScanSignalType::clock_a, "clock_a"},
|
||||
{ScanSignalType::clock_b, "clock_b"},
|
||||
{ScanSignalType::input, "input"},
|
||||
{ScanSignalType::input_inverted, "input_inverted"},
|
||||
{ScanSignalType::output, "output"},
|
||||
{ScanSignalType::output_inverted, "output_inverted"},
|
||||
{ScanSignalType::none, "none"}};
|
||||
|
||||
|
||||
const char *
|
||||
scanSignalTypeName(ScanSignalType scan_type)
|
||||
{
|
||||
return scan_signal_type_map.find(scan_type);
|
||||
}
|
||||
|
||||
LibertyPort *
|
||||
LibertyPort::findLibertyMember(int index) const
|
||||
{
|
||||
|
|
|
|||
|
|
@ -339,6 +339,12 @@ set_direction(const char *dir)
|
|||
self->setDirection(PortDirection::find(dir));
|
||||
}
|
||||
|
||||
const char *
|
||||
scan_signal_type()
|
||||
{
|
||||
return scanSignalTypeName(self->scanSignalType());
|
||||
}
|
||||
|
||||
} // LibertyPort methods
|
||||
|
||||
%extend TimingArcSet {
|
||||
|
|
|
|||
|
|
@ -96,7 +96,6 @@ LibertyReader::init(const char *filename,
|
|||
ocv_derate_name_ = nullptr;
|
||||
op_cond_ = nullptr;
|
||||
ports_ = nullptr;
|
||||
port_ = nullptr;
|
||||
port_group_ = nullptr;
|
||||
saved_ports_ = nullptr;
|
||||
saved_port_group_ = nullptr;
|
||||
|
|
@ -3171,11 +3170,6 @@ LibertyReader::beginPin(LibertyGroup *group)
|
|||
port_group_ = new PortGroup(ports_, group->line());
|
||||
cell_port_groups_.push_back(port_group_);
|
||||
}
|
||||
if (test_cell_) {
|
||||
const char *pin_name = group->firstName();
|
||||
if (pin_name)
|
||||
port_ = findPort(save_cell_, pin_name);
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
|
|
@ -3188,7 +3182,6 @@ LibertyReader::endPin(LibertyGroup *)
|
|||
port_group_ = saved_port_group_;
|
||||
}
|
||||
}
|
||||
port_ = nullptr;
|
||||
}
|
||||
|
||||
void
|
||||
|
|
@ -3786,7 +3779,7 @@ LibertyReader::visitIsPllFeedbackPin(LibertyAttr *attr)
|
|||
void
|
||||
LibertyReader::visitSignalType(LibertyAttr *attr)
|
||||
{
|
||||
if (test_cell_ && port_) {
|
||||
if (test_cell_ && ports_) {
|
||||
const char *type = getAttrString(attr);
|
||||
if (type) {
|
||||
ScanSignalType signal_type = ScanSignalType::none;
|
||||
|
|
@ -3812,8 +3805,8 @@ LibertyReader::visitSignalType(LibertyAttr *attr)
|
|||
libWarn(1299, attr, "unknown signal_type %s.", type);
|
||||
return;
|
||||
}
|
||||
if (port_)
|
||||
port_->setScanSignalType(signal_type);
|
||||
for (LibertyPort *port : *ports_)
|
||||
port->setScanSignalType(signal_type);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -618,7 +618,6 @@ protected:
|
|||
PortGroupSeq cell_port_groups_;
|
||||
OperatingConditions *op_cond_;
|
||||
LibertyPortSeq *ports_;
|
||||
LibertyPort *port_; // Used by test_cell.
|
||||
PortGroup *port_group_;
|
||||
LibertyPortSeq *saved_ports_;
|
||||
PortGroup *saved_port_group_;
|
||||
|
|
|
|||
Loading…
Reference in New Issue