power directory
Signed-off-by: James Cherry <cherry@parallaxsw.com>
This commit is contained in:
parent
d1c899a5c3
commit
8ea2580566
|
|
@ -173,9 +173,7 @@ set(STA_SOURCE
|
||||||
search/PathRef.cc
|
search/PathRef.cc
|
||||||
search/PathVertex.cc
|
search/PathVertex.cc
|
||||||
search/PathVertexRep.cc
|
search/PathVertexRep.cc
|
||||||
search/Power.cc
|
|
||||||
search/Property.cc
|
search/Property.cc
|
||||||
search/ReadVcdActivities.cc
|
|
||||||
search/ReportPath.cc
|
search/ReportPath.cc
|
||||||
search/Search.cc
|
search/Search.cc
|
||||||
search/SearchPred.cc
|
search/SearchPred.cc
|
||||||
|
|
@ -184,14 +182,17 @@ set(STA_SOURCE
|
||||||
search/StaState.cc
|
search/StaState.cc
|
||||||
search/Tag.cc
|
search/Tag.cc
|
||||||
search/TagGroup.cc
|
search/TagGroup.cc
|
||||||
search/Vcd.cc
|
|
||||||
search/VcdReader.cc
|
|
||||||
search/VertexVisitor.cc
|
search/VertexVisitor.cc
|
||||||
search/VisitPathEnds.cc
|
search/VisitPathEnds.cc
|
||||||
search/VisitPathGroupVertices.cc
|
search/VisitPathGroupVertices.cc
|
||||||
search/WorstSlack.cc
|
search/WorstSlack.cc
|
||||||
search/WritePathSpice.cc
|
search/WritePathSpice.cc
|
||||||
|
|
||||||
|
power/Power.cc
|
||||||
|
power/ReadVcdActivities.cc
|
||||||
|
power/Vcd.cc
|
||||||
|
power/VcdReader.cc
|
||||||
|
|
||||||
util/Debug.cc
|
util/Debug.cc
|
||||||
util/DispatchQueue.cc
|
util/DispatchQueue.cc
|
||||||
util/Error.cc
|
util/Error.cc
|
||||||
|
|
@ -229,10 +230,10 @@ set(STA_TCL_FILES
|
||||||
tcl/Cmds.tcl
|
tcl/Cmds.tcl
|
||||||
tcl/Variables.tcl
|
tcl/Variables.tcl
|
||||||
tcl/Sta.tcl
|
tcl/Sta.tcl
|
||||||
tcl/Power.tcl
|
|
||||||
tcl/Splash.tcl
|
tcl/Splash.tcl
|
||||||
dcalc/DelayCalc.tcl
|
dcalc/DelayCalc.tcl
|
||||||
parasitics/Parasitics.tcl
|
parasitics/Parasitics.tcl
|
||||||
|
power/Power.tcl
|
||||||
sdf/Sdf.tcl
|
sdf/Sdf.tcl
|
||||||
verilog/Verilog.tcl
|
verilog/Verilog.tcl
|
||||||
)
|
)
|
||||||
|
|
@ -315,18 +316,20 @@ set_property(SOURCE ${STA_SWIG_FILE}
|
||||||
-I${STA_HOME}/sdf
|
-I${STA_HOME}/sdf
|
||||||
-I${STA_HOME}/dcalc
|
-I${STA_HOME}/dcalc
|
||||||
-I${STA_HOME}/parasitics
|
-I${STA_HOME}/parasitics
|
||||||
|
-I${STA_HOME}/power
|
||||||
-I${STA_HOME}/verilog
|
-I${STA_HOME}/verilog
|
||||||
)
|
)
|
||||||
|
|
||||||
set_property(SOURCE ${STA_SWIG_FILE}
|
set_property(SOURCE ${STA_SWIG_FILE}
|
||||||
PROPERTY DEPENDS
|
PROPERTY DEPENDS
|
||||||
|
${STA_HOME}/dcalc/DelayCalc.i
|
||||||
|
${STA_HOME}/parasitics/Parasitics.i
|
||||||
|
${STA_HOME}/power/Power.i
|
||||||
|
${STA_HOME}/sdf/Sdf.i
|
||||||
${STA_HOME}/tcl/Exception.i
|
${STA_HOME}/tcl/Exception.i
|
||||||
${STA_HOME}/tcl/StaTcl.i
|
${STA_HOME}/tcl/StaTcl.i
|
||||||
${STA_HOME}/verilog/Verilog.i
|
|
||||||
${STA_HOME}/tcl/NetworkEdit.i
|
${STA_HOME}/tcl/NetworkEdit.i
|
||||||
${STA_HOME}/sdf/Sdf.i
|
${STA_HOME}/verilog/Verilog.i
|
||||||
${STA_HOME}/parasitics/Parasitics.i
|
|
||||||
${STA_HOME}/dcalc/DelayCalc.i
|
|
||||||
)
|
)
|
||||||
|
|
||||||
swig_add_library(sta_swig
|
swig_add_library(sta_swig
|
||||||
|
|
|
||||||
|
|
@ -23,3 +23,4 @@
|
||||||
%include "Sdf.i"
|
%include "Sdf.i"
|
||||||
%include "DelayCalc.i"
|
%include "DelayCalc.i"
|
||||||
%include "Parasitics.i"
|
%include "Parasitics.i"
|
||||||
|
%include "Power.i"
|
||||||
|
|
|
||||||
|
|
@ -41,8 +41,8 @@
|
||||||
#include "GraphDelayCalc.hh"
|
#include "GraphDelayCalc.hh"
|
||||||
#include "Corner.hh"
|
#include "Corner.hh"
|
||||||
#include "PathVertex.hh"
|
#include "PathVertex.hh"
|
||||||
#include "Levelize.hh"
|
#include "search/Levelize.hh"
|
||||||
#include "Sim.hh"
|
#include "search/Sim.hh"
|
||||||
#include "Search.hh"
|
#include "Search.hh"
|
||||||
#include "Bfs.hh"
|
#include "Bfs.hh"
|
||||||
#include "ClkNetwork.hh"
|
#include "ClkNetwork.hh"
|
||||||
|
|
@ -0,0 +1,124 @@
|
||||||
|
%module power
|
||||||
|
|
||||||
|
%{
|
||||||
|
|
||||||
|
// OpenSTA, Static Timing Analyzer
|
||||||
|
// Copyright (c) 2022, Parallax Software, Inc.
|
||||||
|
//
|
||||||
|
// This program is free software: you can redistribute it and/or modify
|
||||||
|
// it under the terms of the GNU General Public License as published by
|
||||||
|
// the Free Software Foundation, either version 3 of the License, or
|
||||||
|
// (at your option) any later version.
|
||||||
|
//
|
||||||
|
// This program is distributed in the hope that it will be useful,
|
||||||
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
// GNU General Public License for more details.
|
||||||
|
//
|
||||||
|
// You should have received a copy of the GNU General Public License
|
||||||
|
// along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
#include "Sta.hh"
|
||||||
|
#include "power/Power.hh"
|
||||||
|
#include "power/VcdReader.hh"
|
||||||
|
#include "power/ReadVcdActivities.hh"
|
||||||
|
|
||||||
|
namespace sta {
|
||||||
|
|
||||||
|
typedef FloatSeq TmpFloatSeq;
|
||||||
|
|
||||||
|
} // namespace
|
||||||
|
|
||||||
|
using namespace sta;
|
||||||
|
|
||||||
|
%}
|
||||||
|
|
||||||
|
%typemap(out) TmpFloatSeq* {
|
||||||
|
FloatSeq *floats = $1;
|
||||||
|
Tcl_Obj *list = Tcl_NewListObj(0, nullptr);
|
||||||
|
if (floats) {
|
||||||
|
for (unsigned i = 0; i < floats->size(); i++) {
|
||||||
|
Tcl_Obj *obj = Tcl_NewDoubleObj((*floats)[i]);
|
||||||
|
Tcl_ListObjAppendElement(interp, list, obj);
|
||||||
|
}
|
||||||
|
delete floats;
|
||||||
|
}
|
||||||
|
Tcl_SetObjResult(interp, list);
|
||||||
|
}
|
||||||
|
|
||||||
|
%inline %{
|
||||||
|
|
||||||
|
TmpFloatSeq *
|
||||||
|
design_power(const Corner *corner)
|
||||||
|
{
|
||||||
|
cmdLinkedNetwork();
|
||||||
|
PowerResult total, sequential, combinational, macro, pad;
|
||||||
|
Sta::sta()->power(corner, total, sequential, combinational, macro, pad);
|
||||||
|
FloatSeq *floats = new FloatSeq;
|
||||||
|
pushPowerResultFloats(total, floats);
|
||||||
|
pushPowerResultFloats(sequential, floats);
|
||||||
|
pushPowerResultFloats(combinational, floats);
|
||||||
|
pushPowerResultFloats(macro, floats);
|
||||||
|
pushPowerResultFloats(pad, floats);
|
||||||
|
return floats;
|
||||||
|
}
|
||||||
|
|
||||||
|
TmpFloatSeq *
|
||||||
|
instance_power(Instance *inst,
|
||||||
|
const Corner *corner)
|
||||||
|
{
|
||||||
|
cmdLinkedNetwork();
|
||||||
|
PowerResult power;
|
||||||
|
Sta::sta()->power(inst, corner, power);
|
||||||
|
FloatSeq *floats = new FloatSeq;
|
||||||
|
floats->push_back(power.internal());
|
||||||
|
floats->push_back(power.switching());
|
||||||
|
floats->push_back(power.leakage());
|
||||||
|
floats->push_back(power.total());
|
||||||
|
return floats;
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
set_power_global_activity(float activity,
|
||||||
|
float duty)
|
||||||
|
{
|
||||||
|
Sta::sta()->power()->setGlobalActivity(activity, duty);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
set_power_input_activity(float activity,
|
||||||
|
float duty)
|
||||||
|
{
|
||||||
|
return Sta::sta()->power()->setInputActivity(activity, duty);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
set_power_input_port_activity(const Port *input_port,
|
||||||
|
float activity,
|
||||||
|
float duty)
|
||||||
|
{
|
||||||
|
return Sta::sta()->power()->setInputPortActivity(input_port, activity, duty);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
set_power_pin_activity(const Pin *pin,
|
||||||
|
float activity,
|
||||||
|
float duty)
|
||||||
|
{
|
||||||
|
return Sta::sta()->power()->setUserActivity(pin, activity, duty,
|
||||||
|
PwrActivityOrigin::user);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
read_vcd_activities(const char *filename)
|
||||||
|
{
|
||||||
|
readVcdActivities(filename, Sta::sta());
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
report_vcd_waveforms(const char *filename)
|
||||||
|
{
|
||||||
|
reportVcdWaveforms(filename, Sta::sta());
|
||||||
|
}
|
||||||
|
|
||||||
|
%} // inline
|
||||||
|
|
@ -30,7 +30,7 @@
|
||||||
#include "PathEnd.hh"
|
#include "PathEnd.hh"
|
||||||
#include "PathExpanded.hh"
|
#include "PathExpanded.hh"
|
||||||
#include "PathRef.hh"
|
#include "PathRef.hh"
|
||||||
#include "Power.hh"
|
#include "power/Power.hh"
|
||||||
#include "Sta.hh"
|
#include "Sta.hh"
|
||||||
|
|
||||||
namespace sta {
|
namespace sta {
|
||||||
|
|
|
||||||
|
|
@ -68,7 +68,7 @@
|
||||||
#include "VisitPathGroupVertices.hh"
|
#include "VisitPathGroupVertices.hh"
|
||||||
#include "Genclks.hh"
|
#include "Genclks.hh"
|
||||||
#include "ClkNetwork.hh"
|
#include "ClkNetwork.hh"
|
||||||
#include "Power.hh"
|
#include "power/Power.hh"
|
||||||
#include "VisitPathEnds.hh"
|
#include "VisitPathEnds.hh"
|
||||||
#include "PathExpanded.hh"
|
#include "PathExpanded.hh"
|
||||||
#include "MakeTimingModel.hh"
|
#include "MakeTimingModel.hh"
|
||||||
|
|
|
||||||
78
tcl/StaTcl.i
78
tcl/StaTcl.i
|
|
@ -79,9 +79,6 @@
|
||||||
#include "search/CheckMinPulseWidths.hh"
|
#include "search/CheckMinPulseWidths.hh"
|
||||||
#include "search/Levelize.hh"
|
#include "search/Levelize.hh"
|
||||||
#include "search/ReportPath.hh"
|
#include "search/ReportPath.hh"
|
||||||
#include "search/Power.hh"
|
|
||||||
#include "search/VcdReader.hh"
|
|
||||||
#include "search/ReadVcdActivities.hh"
|
|
||||||
|
|
||||||
namespace sta {
|
namespace sta {
|
||||||
|
|
||||||
|
|
@ -4948,75 +4945,6 @@ report_capacitance_limit_verbose(Pin *pin,
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
TmpFloatSeq *
|
|
||||||
design_power(const Corner *corner)
|
|
||||||
{
|
|
||||||
cmdLinkedNetwork();
|
|
||||||
PowerResult total, sequential, combinational, macro, pad;
|
|
||||||
Sta::sta()->power(corner, total, sequential, combinational, macro, pad);
|
|
||||||
FloatSeq *floats = new FloatSeq;
|
|
||||||
pushPowerResultFloats(total, floats);
|
|
||||||
pushPowerResultFloats(sequential, floats);
|
|
||||||
pushPowerResultFloats(combinational, floats);
|
|
||||||
pushPowerResultFloats(macro, floats);
|
|
||||||
pushPowerResultFloats(pad, floats);
|
|
||||||
return floats;
|
|
||||||
}
|
|
||||||
|
|
||||||
TmpFloatSeq *
|
|
||||||
instance_power(Instance *inst,
|
|
||||||
const Corner *corner)
|
|
||||||
{
|
|
||||||
cmdLinkedNetwork();
|
|
||||||
PowerResult power;
|
|
||||||
Sta::sta()->power(inst, corner, power);
|
|
||||||
FloatSeq *floats = new FloatSeq;
|
|
||||||
floats->push_back(power.internal());
|
|
||||||
floats->push_back(power.switching());
|
|
||||||
floats->push_back(power.leakage());
|
|
||||||
floats->push_back(power.total());
|
|
||||||
return floats;
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
set_power_global_activity(float activity,
|
|
||||||
float duty)
|
|
||||||
{
|
|
||||||
Sta::sta()->power()->setGlobalActivity(activity, duty);
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
set_power_input_activity(float activity,
|
|
||||||
float duty)
|
|
||||||
{
|
|
||||||
return Sta::sta()->power()->setInputActivity(activity, duty);
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
set_power_input_port_activity(const Port *input_port,
|
|
||||||
float activity,
|
|
||||||
float duty)
|
|
||||||
{
|
|
||||||
return Sta::sta()->power()->setInputPortActivity(input_port, activity, duty);
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
set_power_pin_activity(const Pin *pin,
|
|
||||||
float activity,
|
|
||||||
float duty)
|
|
||||||
{
|
|
||||||
return Sta::sta()->power()->setUserActivity(pin, activity, duty,
|
|
||||||
PwrActivityOrigin::user);
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
read_vcd_activities(const char *filename)
|
|
||||||
{
|
|
||||||
readVcdActivities(filename, Sta::sta());
|
|
||||||
}
|
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////
|
|
||||||
|
|
||||||
EdgeSeq *
|
EdgeSeq *
|
||||||
disabled_edges_sorted()
|
disabled_edges_sorted()
|
||||||
{
|
{
|
||||||
|
|
@ -5578,12 +5506,6 @@ endpoint_count()
|
||||||
return Sta::sta()->endpointCount();
|
return Sta::sta()->endpointCount();
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
|
||||||
report_vcd_waveforms(const char *filename)
|
|
||||||
{
|
|
||||||
reportVcdWaveforms(filename, Sta::sta());
|
|
||||||
}
|
|
||||||
|
|
||||||
%} // inline
|
%} // inline
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue