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) cmake_policy(SET CMP0086 NEW)
endif() endif()
project(STA VERSION 2.2.0 project(STA VERSION 2.3.0
LANGUAGES CXX LANGUAGES CXX
) )

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -714,23 +714,27 @@ getProperty(const LibertyPort *port,
} }
else if (stringEqual(property, "intrinsic_delay")) { else if (stringEqual(property, "intrinsic_delay")) {
float drive = port->intrinsicDelay(); float drive = delayAsFloat(port->intrinsicDelay(sta));
return PropertyValue(sta->units()->timeUnit()->asString(drive, 6)); return PropertyValue(sta->units()->timeUnit()->asString(drive, 6));
} }
else if (stringEqual(property, "intrinsic_delay_rise_min")) { 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)); return PropertyValue(sta->units()->timeUnit()->asString(drive, 6));
} }
else if (stringEqual(property, "intrinsic_delay_rise_max")) { 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)); return PropertyValue(sta->units()->timeUnit()->asString(drive, 6));
} }
else if (stringEqual(property, "intrinsic_delay_fall_min")) { 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)); return PropertyValue(sta->units()->timeUnit()->asString(drive, 6));
} }
else if (stringEqual(property, "intrinsic_delay_fall_max")) { 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)); return PropertyValue(sta->units()->timeUnit()->asString(drive, 6));
} }
else else

View File

@ -58,8 +58,6 @@ Sim::Sim(StaState *sta) :
Sim::~Sim() Sim::~Sim()
{ {
delete observer_; delete observer_;
if (Cudd_CheckZeroRef(cudd_manager_) > 0)
internalErrorNoThrow("non-zero cudd reference counts");
Cudd_Quit(cudd_manager_); Cudd_Quit(cudd_manager_);
} }
@ -198,7 +196,7 @@ Sim::funcBdd(const FuncExpr *expr,
result = Cudd_ReadLogicZero(cudd_manager_); result = Cudd_ReadLogicZero(cudd_manager_);
break; break;
default: default:
internalError("unknown function operator"); report_->critical(596, "unknown function operator");
} }
if (result) if (result)
Cudd_Ref(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 } { proc get_clock_arg { arg_name arg error_proc } {
set clk "NULL" set clk "NULL"
if {[llength $arg] > 1} { 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] } { } elseif { [is_object $arg] } {
set object_type [object_type $arg] set object_type [object_type $arg]
if { $object_type == "Clock" } { if { $object_type == "Clock" } {
set clk $arg set clk $arg
} else { } 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 != {} } { } elseif { $arg != {} } {
set clk [find_clock $arg] set clk [find_clock $arg]
if { $clk == "NULL" } { if { $clk == "NULL" } {
$error_proc "$arg_name arg '$arg' clock not found." $error_proc 599 "$arg_name arg '$arg' clock not found."
} }
} }
return $clk return $clk

View File

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