This commit is contained in:
James Cherry 2019-06-01 08:07:38 -07:00
parent 736a977a6d
commit 064bb4cac4
13 changed files with 52 additions and 34 deletions

View File

@ -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]);

View File

@ -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

Binary file not shown.

View File

@ -127,7 +127,7 @@ delayAsString(const Delay &delay,
float
delayAsFloat(const Delay &delay,
const EarlyLate *,
float )
const StaState *)
{
return delay;
}

View File

@ -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);

View File

@ -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);
}

View File

@ -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);

View File

@ -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);
}

View File

@ -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);

View File

@ -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;
}

View File

@ -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);

View File

@ -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.

View File

@ -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 {}