sync
This commit is contained in:
parent
736a977a6d
commit
064bb4cac4
|
|
@ -36,7 +36,8 @@ extern const char *tcl_inits[];
|
|||
}
|
||||
|
||||
int
|
||||
main(int argc, char **argv)
|
||||
main(int argc,
|
||||
char **argv)
|
||||
{
|
||||
if (argc == 2 && stringEq(argv[1], "-help")) {
|
||||
showUseage(argv[0]);
|
||||
|
|
|
|||
|
|
@ -216,6 +216,7 @@ showUseage(char *prog)
|
|||
printf(" -x cmd evaluate cmd\n");
|
||||
printf(" -f cmd_file source cmd_file\n");
|
||||
printf(" -threads count|max use count threads\n");
|
||||
printf(" -no_splash do not show the license splash at startup\n");
|
||||
}
|
||||
|
||||
} // namespace
|
||||
|
|
|
|||
BIN
doc/OpenSTA.odt
BIN
doc/OpenSTA.odt
Binary file not shown.
|
|
@ -127,7 +127,7 @@ delayAsString(const Delay &delay,
|
|||
float
|
||||
delayAsFloat(const Delay &delay,
|
||||
const EarlyLate *,
|
||||
float )
|
||||
const StaState *)
|
||||
{
|
||||
return delay;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -59,7 +59,7 @@ delayAsFloat(const Delay &delay)
|
|||
float
|
||||
delayAsFloat(const Delay &delay,
|
||||
const EarlyLate *early_late,
|
||||
float sigma_factor);
|
||||
const StaState *sta);
|
||||
float
|
||||
delaySigma2(const Delay &delay,
|
||||
const EarlyLate *early_late);
|
||||
|
|
|
|||
|
|
@ -364,14 +364,18 @@ delayRatio(const Delay &delay1,
|
|||
float
|
||||
delayAsFloat(const Delay &delay,
|
||||
const EarlyLate *early_late,
|
||||
float sigma_factor)
|
||||
const StaState *sta)
|
||||
{
|
||||
if (early_late == EarlyLate::early())
|
||||
return delay.mean() - delay.sigma() * sigma_factor;
|
||||
else if (early_late == EarlyLate::late())
|
||||
return delay.mean() + delay.sigma() * sigma_factor;
|
||||
if (sta->pocvEnabled()) {
|
||||
if (early_late == EarlyLate::early())
|
||||
return delay.mean() - delay.sigma() * sta->sigmaFactor();
|
||||
else if (early_late == EarlyLate::late())
|
||||
return delay.mean() + delay.sigma() * sta->sigmaFactor();
|
||||
else
|
||||
internalError("unknown early/late value.");
|
||||
}
|
||||
else
|
||||
internalError("unknown early/late value.");
|
||||
return delay.mean();
|
||||
}
|
||||
|
||||
float
|
||||
|
|
@ -410,7 +414,7 @@ delayAsString(const Delay &delay,
|
|||
const StaState *sta,
|
||||
int digits)
|
||||
{
|
||||
float mean_sigma = delayAsFloat(delay, early_late, sta->sigmaFactor());
|
||||
float mean_sigma = delayAsFloat(delay, early_late, sta);
|
||||
return sta->units()->timeUnit()->asString(mean_sigma, digits);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -95,7 +95,7 @@ Delay operator*(const Delay &delay1,
|
|||
float
|
||||
delayAsFloat(const Delay &delay,
|
||||
const EarlyLate *early_late,
|
||||
float sigma_factor);
|
||||
const StaState *sta);
|
||||
float
|
||||
delaySigma2(const Delay &delay,
|
||||
const EarlyLate *early_late);
|
||||
|
|
|
|||
|
|
@ -377,7 +377,7 @@ operator*(const Delay &delay1,
|
|||
float delay2)
|
||||
{
|
||||
return Delay(delay1.mean() * delay2,
|
||||
delay1.sigma2()Early * delay2,
|
||||
delay1.sigma2Early() * delay2,
|
||||
delay1.sigma2Late() * delay2);
|
||||
}
|
||||
|
||||
|
|
@ -391,14 +391,18 @@ delayRatio(const Delay &delay1,
|
|||
float
|
||||
delayAsFloat(const Delay &delay,
|
||||
const EarlyLate *early_late,
|
||||
float sigma_factor)
|
||||
const StaState *sta)
|
||||
{
|
||||
if (early_late == EarlyLate::early())
|
||||
return delay.mean() - delay.sigma(early_late) * sigma_factor;
|
||||
else if (early_late == EarlyLate::late())
|
||||
return delay.mean() + delay.sigma(early_late) * sigma_factor;
|
||||
if (sta->pocvEnabled()) {
|
||||
if (early_late == EarlyLate::early())
|
||||
return delay.mean() - delay.sigma(early_late) * sta->sigmaFactor();
|
||||
else if (early_late == EarlyLate::late())
|
||||
return delay.mean() + delay.sigma(early_late) * sta->sigmaFactor();
|
||||
else
|
||||
internalError("unknown early/late value.");
|
||||
}
|
||||
else
|
||||
internalError("unknown early/late value.");
|
||||
return delay.mean();
|
||||
}
|
||||
|
||||
float
|
||||
|
|
@ -444,7 +448,7 @@ delayAsString(const Delay &delay,
|
|||
const StaState *sta,
|
||||
int digits)
|
||||
{
|
||||
float mean_sigma = delayAsFloat(delay, early_late, sta->sigmaFactor());
|
||||
float mean_sigma = delayAsFloat(delay, early_late, sta);
|
||||
return sta->units()->timeUnit()->asString(mean_sigma, digits);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -102,7 +102,7 @@ Delay operator*(const Delay &delay1,
|
|||
float
|
||||
delayAsFloat(const Delay &delay,
|
||||
const EarlyLate *early_late,
|
||||
float sigma_factor);
|
||||
const StaState *sta);
|
||||
float
|
||||
delaySigma2(const Delay &delay,
|
||||
const EarlyLate *early_late);
|
||||
|
|
|
|||
|
|
@ -91,9 +91,9 @@ CheckCrpr::maxCrpr(ClkInfo *clk_info)
|
|||
Arrival other_arrival = otherMinMaxArrival(&crpr_clk_vpath);
|
||||
float crpr_diff = abs(delayAsFloat(crpr_clk_vpath.arrival(this),
|
||||
EarlyLate::late(),
|
||||
sigma_factor_)
|
||||
this)
|
||||
- delayAsFloat(other_arrival, EarlyLate::early(),
|
||||
sigma_factor_));
|
||||
this));
|
||||
return crpr_diff;
|
||||
}
|
||||
}
|
||||
|
|
@ -388,10 +388,10 @@ float
|
|||
CheckCrpr::crprArrivalDiff(const PathVertex *path)
|
||||
{
|
||||
Arrival other_arrival = otherMinMaxArrival(path);
|
||||
float crpr_diff = abs(delayAsFloat(path->arrival(this), EarlyLate::late(),
|
||||
sigma_factor_)
|
||||
- delayAsFloat(other_arrival, EarlyLate::early(),
|
||||
sigma_factor_));
|
||||
float crpr_diff = abs(delayAsFloat(path->arrival(this),
|
||||
EarlyLate::late(), this)
|
||||
- delayAsFloat(other_arrival,
|
||||
EarlyLate::early(), this));
|
||||
return crpr_diff;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -755,7 +755,9 @@ getProperty(const Net *net,
|
|||
Sta *sta)
|
||||
{
|
||||
auto network = sta->cmdNetwork();
|
||||
if (stringEqual(property, "full_name"))
|
||||
if (stringEqual(property, "name"))
|
||||
return PropertyValue(network->name(net));
|
||||
else if (stringEqual(property, "full_name"))
|
||||
return PropertyValue(network->pathName(net));
|
||||
else
|
||||
throw PropertyUnknown("net", property);
|
||||
|
|
|
|||
|
|
@ -2619,8 +2619,8 @@ ReportPath::reportPath5(const Path *path,
|
|||
// from the input to the loads. Report the wire delay on the
|
||||
// input pin instead.
|
||||
Arrival next_time = next_path->arrival(this) + time_offset;
|
||||
incr = delayAsFloat(next_time, min_max, sigma_factor_)
|
||||
- delayAsFloat(time, min_max, sigma_factor_);
|
||||
incr = delayAsFloat(next_time, min_max, this)
|
||||
- delayAsFloat(time, min_max, this);
|
||||
time = next_time;
|
||||
line_case = "input_drive";
|
||||
}
|
||||
|
|
@ -2667,13 +2667,13 @@ ReportPath::reportPath5(const Path *path,
|
|||
line_case = "clk_ideal";
|
||||
}
|
||||
else if (is_clk && !is_clk_start) {
|
||||
incr = delayAsFloat(time, min_max, sigma_factor_)
|
||||
- delayAsFloat(prev_time, min_max, sigma_factor_);
|
||||
incr = delayAsFloat(time, min_max, this)
|
||||
- delayAsFloat(prev_time, min_max, this);
|
||||
line_case = "clk_prop";
|
||||
}
|
||||
else {
|
||||
incr = delayAsFloat(time, min_max, sigma_factor_)
|
||||
- delayAsFloat(prev_time, min_max, sigma_factor_);
|
||||
incr = delayAsFloat(time, min_max, this)
|
||||
- delayAsFloat(prev_time, min_max, this);
|
||||
line_case = "normal";
|
||||
}
|
||||
if (report_input_pin_
|
||||
|
|
@ -3161,7 +3161,7 @@ ReportPath::reportFieldDelayMinus(Delay value,
|
|||
if (delayAsFloat(value) == field_blank_)
|
||||
reportFieldBlank(field, result);
|
||||
else {
|
||||
float mean_sigma = delayAsFloat(value, early_late, sigma_factor_);
|
||||
float mean_sigma = delayAsFloat(value, early_late, this);
|
||||
const char *str = units_->timeUnit()->asString(-mean_sigma, digits_);
|
||||
if (stringEq(str, plus_zero_))
|
||||
// Force leading minus sign.
|
||||
|
|
|
|||
|
|
@ -245,6 +245,12 @@ proc insert_buffer { buffer_name buffer_cell net load_pins buffer_out_net_name }
|
|||
set buffer_cell [sta::get_lib_cell_warn "buffer_cell" $buffer_cell]
|
||||
set net [sta::get_net_warn "net" $net]
|
||||
|
||||
if { [get_cells -quiet $buffer_name] != "" } {
|
||||
sta_error "instance $buffer_name already exists."
|
||||
}
|
||||
if { [get_nets -quiet $buffer_out_net_name] != "" } {
|
||||
sta_error "net $buffer_out_net_name already exists."
|
||||
}
|
||||
# Copy backslashes that will be removed by foreach.
|
||||
set load_pins1 [string map {\\ \\\\} $load_pins]
|
||||
set load_pins {}
|
||||
|
|
|
|||
Loading…
Reference in New Issue