unset_power_activity resolves #253
Signed-off-by: James Cherry <cherry@parallaxsw.com>
This commit is contained in:
parent
6a28a3dd52
commit
a6ec2b5871
BIN
doc/OpenSTA.odt
BIN
doc/OpenSTA.odt
Binary file not shown.
BIN
doc/OpenSTA.pdf
BIN
doc/OpenSTA.pdf
Binary file not shown.
|
|
@ -49,6 +49,7 @@ public:
|
|||
PwrActivity(float density,
|
||||
float duty,
|
||||
PwrActivityOrigin origin);
|
||||
void init();
|
||||
float density() const { return density_; }
|
||||
void setDensity(float density);
|
||||
float duty() const { return duty_; }
|
||||
|
|
|
|||
|
|
@ -112,6 +112,13 @@ Power::setGlobalActivity(float density,
|
|||
activities_valid_ = false;
|
||||
}
|
||||
|
||||
void
|
||||
Power::unsetGlobalActivity()
|
||||
{
|
||||
global_activity_.init();
|
||||
activities_valid_ = false;
|
||||
}
|
||||
|
||||
void
|
||||
Power::setInputActivity(float density,
|
||||
float duty)
|
||||
|
|
@ -120,6 +127,13 @@ Power::setInputActivity(float density,
|
|||
activities_valid_ = false;
|
||||
}
|
||||
|
||||
void
|
||||
Power::unsetInputActivity()
|
||||
{
|
||||
input_activity_.init();
|
||||
activities_valid_ = false;
|
||||
}
|
||||
|
||||
void
|
||||
Power::setInputPortActivity(const Port *input_port,
|
||||
float density,
|
||||
|
|
@ -133,6 +147,17 @@ Power::setInputPortActivity(const Port *input_port,
|
|||
}
|
||||
}
|
||||
|
||||
void
|
||||
Power::unsetInputPortActivity(const Port *input_port)
|
||||
{
|
||||
Instance *top_inst = network_->topInstance();
|
||||
const Pin *pin = network_->findPin(top_inst, input_port);
|
||||
if (pin) {
|
||||
user_activity_map_.erase(pin);
|
||||
activities_valid_ = false;
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
Power::setUserActivity(const Pin *pin,
|
||||
float density,
|
||||
|
|
@ -143,6 +168,13 @@ Power::setUserActivity(const Pin *pin,
|
|||
activities_valid_ = false;
|
||||
}
|
||||
|
||||
void
|
||||
Power::unsetUserActivity(const Pin *pin)
|
||||
{
|
||||
user_activity_map_.erase(pin);
|
||||
activities_valid_ = false;
|
||||
}
|
||||
|
||||
PwrActivity &
|
||||
Power::userActivity(const Pin *pin)
|
||||
{
|
||||
|
|
@ -664,7 +696,7 @@ Power::ensureActivities()
|
|||
|
||||
// Initialize default input activity (after sdc is defined)
|
||||
// unless it has been set by command.
|
||||
if (input_activity_.density() == 0.0) {
|
||||
if (input_activity_.origin() == PwrActivityOrigin::unknown) {
|
||||
float min_period = clockMinPeriod();
|
||||
float density = 0.1 / (min_period != 0.0
|
||||
? min_period
|
||||
|
|
@ -1535,6 +1567,7 @@ PwrActivity::PwrActivity(float density,
|
|||
duty_(duty),
|
||||
origin_(origin)
|
||||
{
|
||||
check();
|
||||
}
|
||||
|
||||
PwrActivity::PwrActivity() :
|
||||
|
|
@ -1542,7 +1575,6 @@ PwrActivity::PwrActivity() :
|
|||
duty_(0.0),
|
||||
origin_(PwrActivityOrigin::unknown)
|
||||
{
|
||||
check();
|
||||
}
|
||||
|
||||
void
|
||||
|
|
@ -1563,6 +1595,14 @@ PwrActivity::setOrigin(PwrActivityOrigin origin)
|
|||
origin_ = origin;
|
||||
}
|
||||
|
||||
void
|
||||
PwrActivity::init()
|
||||
{
|
||||
density_ = 0.0;
|
||||
duty_ = 0.0;
|
||||
origin_ = PwrActivityOrigin::unknown;
|
||||
}
|
||||
|
||||
void
|
||||
PwrActivity::set(float density,
|
||||
float duty,
|
||||
|
|
|
|||
|
|
@ -87,16 +87,20 @@ public:
|
|||
const Corner *corner);
|
||||
void setGlobalActivity(float activity,
|
||||
float duty);
|
||||
void unsetGlobalActivity();
|
||||
void setInputActivity(float activity,
|
||||
float duty);
|
||||
void unsetInputActivity();
|
||||
void setInputPortActivity(const Port *input_port,
|
||||
float activity,
|
||||
float duty);
|
||||
void unsetInputPortActivity(const Port *input_port);
|
||||
PwrActivity pinActivity(const Pin *pin);
|
||||
void setUserActivity(const Pin *pin,
|
||||
float activity,
|
||||
float duty,
|
||||
PwrActivityOrigin origin);
|
||||
void unsetUserActivity(const Pin *pin);
|
||||
void reportActivityAnnotation(bool report_unannotated,
|
||||
bool report_annotated);
|
||||
float clockMinPeriod();
|
||||
|
|
|
|||
|
|
@ -84,6 +84,13 @@ set_power_global_activity(float activity,
|
|||
power->setGlobalActivity(activity, duty);
|
||||
}
|
||||
|
||||
void
|
||||
unset_power_global_activity()
|
||||
{
|
||||
Power *power = Sta::sta()->power();
|
||||
power->unsetGlobalActivity();
|
||||
}
|
||||
|
||||
void
|
||||
set_power_input_activity(float activity,
|
||||
float duty)
|
||||
|
|
@ -92,6 +99,13 @@ set_power_input_activity(float activity,
|
|||
return power->setInputActivity(activity, duty);
|
||||
}
|
||||
|
||||
void
|
||||
unset_power_input_activity()
|
||||
{
|
||||
Power *power = Sta::sta()->power();
|
||||
return power->unsetInputActivity();
|
||||
}
|
||||
|
||||
void
|
||||
set_power_input_port_activity(const Port *input_port,
|
||||
float activity,
|
||||
|
|
@ -101,6 +115,13 @@ set_power_input_port_activity(const Port *input_port,
|
|||
return power->setInputPortActivity(input_port, activity, duty);
|
||||
}
|
||||
|
||||
void
|
||||
unset_power_input_port_activity(const Port *input_port)
|
||||
{
|
||||
Power *power = Sta::sta()->power();
|
||||
return power->unsetInputPortActivity(input_port);
|
||||
}
|
||||
|
||||
void
|
||||
set_power_pin_activity(const Pin *pin,
|
||||
float activity,
|
||||
|
|
@ -110,6 +131,13 @@ set_power_pin_activity(const Pin *pin,
|
|||
return power->setUserActivity(pin, activity, duty, PwrActivityOrigin::user);
|
||||
}
|
||||
|
||||
void
|
||||
unset_power_pin_activity(const Pin *pin)
|
||||
{
|
||||
Power *power = Sta::sta()->power();
|
||||
return power->unsetUserActivity(pin);
|
||||
}
|
||||
|
||||
float
|
||||
clock_min_period()
|
||||
{
|
||||
|
|
|
|||
|
|
@ -289,7 +289,7 @@ proc set_power_activity { args } {
|
|||
foreach port $ports {
|
||||
if { [get_property $port "direction"] == "input" } {
|
||||
if { [is_clock_src [sta::get_port_pin $port]] } {
|
||||
sta_warn 303 "activity cannot be set on clock ports."
|
||||
sta_warn 310 "activity cannot be set on clock ports."
|
||||
} else {
|
||||
set_power_input_port_activity $port $density $duty
|
||||
}
|
||||
|
|
@ -306,6 +306,47 @@ proc set_power_activity { args } {
|
|||
|
||||
################################################################
|
||||
|
||||
define_cmd_args "unset_power_activity" { [-global]\
|
||||
[-input]\
|
||||
[-input_ports ports]\
|
||||
[-pins pins]\
|
||||
[-clock clock]}
|
||||
|
||||
proc unset_power_activity { args } {
|
||||
parse_key_args "unset_power_activity" args \
|
||||
keys {-input_ports -pins -clock} \
|
||||
flags {-global -input}
|
||||
|
||||
check_argc_eq0 "unset_power_activity" $args
|
||||
|
||||
if { [info exists flags(-global)] } {
|
||||
unset_power_global_activity
|
||||
}
|
||||
if { [info exists flags(-input)] } {
|
||||
unset_power_input_activity
|
||||
}
|
||||
if { [info exists keys(-input_ports)] } {
|
||||
set ports [get_ports_error "input_ports" $keys(-input_ports)]
|
||||
foreach port $ports {
|
||||
if { [get_property $port "direction"] == "input" } {
|
||||
if { [is_clock_src [sta::get_port_pin $port]] } {
|
||||
sta_warn 303 "activity cannot be set on clock ports."
|
||||
} else {
|
||||
unset_power_input_port_activity $port
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if { [info exists keys(-pins)] } {
|
||||
set pins [get_pins $keys(-pins)]
|
||||
foreach pin $pins {
|
||||
unset_power_pin_activity $pin
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
################################################################
|
||||
|
||||
# Deprecated 9/2024
|
||||
define_cmd_args "read_power_activities" { [-scope scope] -vcd filename }
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue