cudd/ssta compile errors

This commit is contained in:
James Cherry 2020-12-20 08:31:33 -07:00
parent 75fff21076
commit 14bacb30cf
11 changed files with 41 additions and 36 deletions

View File

@ -24,7 +24,7 @@ if(CMAKE_VERSION VERSION_GREATER_EQUAL 3.14)
cmake_policy(SET CMP0086 NEW)
endif()
project(STA VERSION 2.2.0
project(STA VERSION 2.3.0
LANGUAGES CXX
)

View File

@ -200,10 +200,9 @@ delayAsFloat(const Delay &delay,
else if (early_late == EarlyLate::late())
return delay.mean() + delay.sigma() * sta->sigmaFactor();
else
internalError("unknown early/late value.");
sta->report()->critical(594, "unknown early/late value.");
}
else
return delay.mean();
return delay.mean();
}
float

View File

@ -375,10 +375,9 @@ delayAsFloat(const Delay &delay,
else if (early_late == EarlyLate::late())
return delay.mean() + delay.sigma(early_late) * sta->sigmaFactor();
else
internalError("unknown early/late value.");
sta->report()->critical(595, "unknown early/late value.");
}
else
return delay.mean();
return delay.mean();
}
float

View File

@ -23,6 +23,7 @@
#include "RiseFallValues.hh"
#include "MinMaxValues.hh"
#include "Transition.hh"
#include "Delay.hh"
#include "LibertyClass.hh"
namespace sta {
@ -43,6 +44,7 @@ class OcvDerate;
class TimingArcAttrs;
class InternalPowerAttrs;
class LibertyPgPort;
class StaState;
typedef Set<Library*> LibrarySet;
typedef Map<const char*, TableTemplate*, CharPtrLess> TableTemplateMap;
@ -169,9 +171,9 @@ public:
void setDefaultBidirectPinCap(float cap);
void defaultIntrinsic(const RiseFall *rf,
// Return values.
float &intrisic,
bool &exists) const;
// Return values.
float &intrisic,
bool &exists) const;
void setDefaultIntrinsic(const RiseFall *rf,
float value);
// Uses defaultOutputPinRes or defaultBidirectPinRes based on dir.
@ -662,9 +664,10 @@ public:
float driveResistance(const RiseFall *rf,
const MinMax *min_max) const;
// Zero load delay.
float intrinsicDelay() const;
float intrinsicDelay(const RiseFall *rf,
const MinMax *min_max) const;
ArcDelay intrinsicDelay(const StaState *sta) const;
ArcDelay intrinsicDelay(const RiseFall *rf,
const MinMax *min_max,
const StaState *sta) const;
FuncExpr *function() const { return function_; }
void setFunction(FuncExpr *func);
FuncExpr *&functionRef() { return function_; }

View File

@ -20,6 +20,7 @@
#include "DisallowCopyAssign.hh"
#include "Vector.hh"
#include "Transition.hh"
#include "Delay.hh"
#include "LibertyClass.hh"
namespace sta {
@ -259,7 +260,7 @@ public:
void setCornerArc(TimingArc *corner_arc,
int ap_index);
float driveResistance() const;
float intrinsicDelay() const;
ArcDelay intrinsicDelay() const;
static bool equiv(const TimingArc *arc1,
const TimingArc *arc2);

View File

@ -2027,17 +2027,18 @@ LibertyPort::driveResistance(const RiseFall *rf,
return 0.0;
}
float
LibertyPort::intrinsicDelay() const
ArcDelay
LibertyPort::intrinsicDelay(const StaState *sta) const
{
return intrinsicDelay(nullptr, MinMax::max());
return intrinsicDelay(nullptr, MinMax::max(), sta);
}
float
ArcDelay
LibertyPort::intrinsicDelay(const RiseFall *rf,
const MinMax *min_max) const
const MinMax *min_max,
const StaState *sta) const
{
float max_delay = min_max->initValue();
ArcDelay max_delay = min_max->initValue();
bool found_delay = false;
LibertyCellTimingArcSetIterator set_iter(liberty_cell_, nullptr, this);
while (set_iter.hasNext()) {
@ -2048,9 +2049,9 @@ LibertyPort::intrinsicDelay(const RiseFall *rf,
TimingArc *arc = arc_iter.next();
if (rf == nullptr
|| arc->toTrans()->asRiseFall() == rf) {
float delay = arc->intrinsicDelay();
if (delay > 0.0) {
if (min_max->compare(delay, max_delay))
ArcDelay delay = arc->intrinsicDelay();
if (delayGreater(delay, 0.0, sta)) {
if (delayGreater(delay, max_delay, min_max, sta))
max_delay = delay;
found_delay = true;
}

View File

@ -146,7 +146,7 @@ TimingArc::driveResistance() const
return 0.0;
}
float
ArcDelay
TimingArc::intrinsicDelay() const
{
GateTimingModel *model = dynamic_cast<GateTimingModel*>(model_);

View File

@ -714,23 +714,27 @@ getProperty(const LibertyPort *port,
}
else if (stringEqual(property, "intrinsic_delay")) {
float drive = port->intrinsicDelay();
float drive = delayAsFloat(port->intrinsicDelay(sta));
return PropertyValue(sta->units()->timeUnit()->asString(drive, 6));
}
else if (stringEqual(property, "intrinsic_delay_rise_min")) {
float drive = port->intrinsicDelay(RiseFall::rise(), MinMax::min());
float drive = delayAsFloat(port->intrinsicDelay(RiseFall::rise(),
MinMax::min(), sta));
return PropertyValue(sta->units()->timeUnit()->asString(drive, 6));
}
else if (stringEqual(property, "intrinsic_delay_rise_max")) {
float drive = port->intrinsicDelay(RiseFall::rise(), MinMax::max());
float drive = delayAsFloat(port->intrinsicDelay(RiseFall::rise(),
MinMax::max(), sta));
return PropertyValue(sta->units()->timeUnit()->asString(drive, 6));
}
else if (stringEqual(property, "intrinsic_delay_fall_min")) {
float drive = port->intrinsicDelay(RiseFall::fall(), MinMax::min());
float drive = delayAsFloat(port->intrinsicDelay(RiseFall::fall(),
MinMax::min(), sta));
return PropertyValue(sta->units()->timeUnit()->asString(drive, 6));
}
else if (stringEqual(property, "intrinsic_delay_fall_max")) {
float drive = port->intrinsicDelay(RiseFall::fall(), MinMax::max());
float drive = delayAsFloat(port->intrinsicDelay(RiseFall::fall(),
MinMax::max(), sta));
return PropertyValue(sta->units()->timeUnit()->asString(drive, 6));
}
else

View File

@ -58,8 +58,6 @@ Sim::Sim(StaState *sta) :
Sim::~Sim()
{
delete observer_;
if (Cudd_CheckZeroRef(cudd_manager_) > 0)
internalErrorNoThrow("non-zero cudd reference counts");
Cudd_Quit(cudd_manager_);
}
@ -198,7 +196,7 @@ Sim::funcBdd(const FuncExpr *expr,
result = Cudd_ReadLogicZero(cudd_manager_);
break;
default:
internalError("unknown function operator");
report_->critical(596, "unknown function operator");
}
if (result)
Cudd_Ref(result);

View File

@ -1674,18 +1674,18 @@ proc get_clock_error { arg_name arg } {
proc get_clock_arg { arg_name arg error_proc } {
set clk "NULL"
if {[llength $arg] > 1} {
$error_proc "$arg_name arg must be a single clock, not a list."
$error_proc 597 "$arg_name arg must be a single clock, not a list."
} elseif { [is_object $arg] } {
set object_type [object_type $arg]
if { $object_type == "Clock" } {
set clk $arg
} else {
$error_proc "$arg_name arg value is a $object_type, not a clock."
$error_proc 598 "$arg_name arg value is a $object_type, not a clock."
}
} elseif { $arg != {} } {
set clk [find_clock $arg]
if { $clk == "NULL" } {
$error_proc "$arg_name arg '$arg' clock not found."
$error_proc 599 "$arg_name arg '$arg' clock not found."
}
}
return $clk

View File

@ -5978,7 +5978,7 @@ requireds_clk_delays(const RiseFall *rf,
return requireds;
}
float
Slack
slack(MinMax *min_max)
{
Sta *sta = Sta::sta();