write_sdf -include_typ
Signed-off-by: James Cherry <cherry@parallaxsw.com>
This commit is contained in:
parent
4235b43d42
commit
a23d5e5390
BIN
doc/OpenSTA.odt
BIN
doc/OpenSTA.odt
Binary file not shown.
BIN
doc/OpenSTA.pdf
BIN
doc/OpenSTA.pdf
Binary file not shown.
|
|
@ -753,7 +753,8 @@ public:
|
|||
float slew);
|
||||
void writeSdf(const char *filename,
|
||||
Corner *corner,
|
||||
char sdf_divider,
|
||||
char divider,
|
||||
bool include_typ,
|
||||
int digits,
|
||||
bool gzip,
|
||||
bool no_timestamp,
|
||||
|
|
|
|||
|
|
@ -110,15 +110,16 @@ report_annotated_check_cmd(bool report_setup,
|
|||
void
|
||||
write_sdf_cmd(char *filename,
|
||||
Corner *corner,
|
||||
char sdf_divider,
|
||||
int digits,
|
||||
char divider,
|
||||
bool include_typ,
|
||||
int digits,
|
||||
bool gzip,
|
||||
bool no_timestamp,
|
||||
bool no_version)
|
||||
{
|
||||
cmdLinkedNetwork();
|
||||
Sta *sta = Sta::sta();
|
||||
sta->writeSdf(filename, corner, sdf_divider, digits, gzip,
|
||||
sta->writeSdf(filename, corner, divider, include_typ, digits, gzip,
|
||||
no_timestamp, no_version);
|
||||
}
|
||||
|
||||
|
|
|
|||
14
sdf/Sdf.tcl
14
sdf/Sdf.tcl
|
|
@ -140,13 +140,13 @@ proc_redirect report_annotated_check {
|
|||
}
|
||||
|
||||
define_cmd_args "write_sdf" \
|
||||
{[-corner corner_name] [-divider /|.] [-digits digits]\
|
||||
[-gzip] [-no_timestamp] [-no_version] filename}
|
||||
{[-corner corner_name] [-divider /|.] [-include_typ]\
|
||||
[-digits digits] [-gzip] [-no_timestamp] [-no_version] filename}
|
||||
|
||||
proc_redirect write_sdf {
|
||||
parse_key_args "write_sdf" args \
|
||||
keys {-corner -divider -digits -significant_digits} \
|
||||
flags {-gzip -no_timestamp -no_version}
|
||||
flags {-include_typ -gzip -no_timestamp -no_version}
|
||||
check_argc_eq1 "write_sdf" $args
|
||||
set corner [parse_corner keys]
|
||||
set filename [file nativename [lindex $args 0]]
|
||||
|
|
@ -160,16 +160,14 @@ proc_redirect write_sdf {
|
|||
set digits 3
|
||||
if [info exists keys(-digits)] {
|
||||
set digits $keys(-digits)
|
||||
check_positive_integer "-digits" $digits
|
||||
}
|
||||
if [info exists keys(-significant_digits)] {
|
||||
set digits $keys(-significant_digits)
|
||||
}
|
||||
check_positive_integer "-digits" $digits
|
||||
|
||||
set include_typ [info exists flags(-include_typ)]
|
||||
set no_timestamp [info exists flags(-no_timestamp)]
|
||||
set no_version [info exists flags(-no_version)]
|
||||
set gzip [info exists flags(-gzip)]
|
||||
write_sdf_cmd $filename $corner $divider $digits $gzip \
|
||||
write_sdf_cmd $filename $corner $divider $include_typ $digits $gzip \
|
||||
$no_timestamp $no_version
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -47,7 +47,8 @@ public:
|
|||
void write(const char *filename,
|
||||
Corner *corner,
|
||||
char sdf_divider,
|
||||
int digits,
|
||||
bool include_typ,
|
||||
int digits,
|
||||
bool gzip,
|
||||
bool no_timestamp,
|
||||
bool no_version);
|
||||
|
|
@ -94,10 +95,10 @@ protected:
|
|||
float min_period);
|
||||
const char *sdfEdge(const Transition *tr);
|
||||
void writeArcDelays(Edge *edge);
|
||||
void writeSdfTuple(RiseFallMinMax &delays,
|
||||
RiseFall *rf);
|
||||
void writeSdfTuple(float min_delay,
|
||||
float max_delay);
|
||||
void writeSdfTriple(RiseFallMinMax &delays,
|
||||
RiseFall *rf);
|
||||
void writeSdfTriple(float min,
|
||||
float max);
|
||||
void writeSdfDelay(double delay);
|
||||
char *sdfPortName(const Pin *pin);
|
||||
char *sdfPathName(const Pin *pin);
|
||||
|
|
@ -108,6 +109,7 @@ private:
|
|||
DISALLOW_COPY_AND_ASSIGN(SdfWriter);
|
||||
|
||||
char sdf_divider_;
|
||||
bool include_typ_;
|
||||
float timescale_;
|
||||
|
||||
char sdf_escape_;
|
||||
|
|
@ -124,6 +126,7 @@ void
|
|||
writeSdf(const char *filename,
|
||||
Corner *corner,
|
||||
char sdf_divider,
|
||||
bool include_typ,
|
||||
int digits,
|
||||
bool gzip,
|
||||
bool no_timestamp,
|
||||
|
|
@ -131,7 +134,7 @@ writeSdf(const char *filename,
|
|||
StaState *sta)
|
||||
{
|
||||
SdfWriter writer(sta);
|
||||
writer.write(filename, corner, sdf_divider, digits, gzip,
|
||||
writer.write(filename, corner, sdf_divider, include_typ, digits, gzip,
|
||||
no_timestamp, no_version);
|
||||
}
|
||||
|
||||
|
|
@ -152,12 +155,14 @@ void
|
|||
SdfWriter::write(const char *filename,
|
||||
Corner *corner,
|
||||
char sdf_divider,
|
||||
bool include_typ,
|
||||
int digits,
|
||||
bool gzip,
|
||||
bool no_timestamp,
|
||||
bool no_version)
|
||||
{
|
||||
sdf_divider_ = sdf_divider;
|
||||
include_typ_ = include_typ;
|
||||
if (delay_format_ == nullptr)
|
||||
delay_format_ = new char[10];
|
||||
sprintf(delay_format_, "%%.%df", digits);
|
||||
|
|
@ -428,45 +433,49 @@ SdfWriter::writeArcDelays(Edge *edge)
|
|||
if (delays.hasValue(RiseFall::rise(), MinMax::min())
|
||||
&& delays.hasValue(RiseFall::fall(), MinMax::min())) {
|
||||
// Rise and fall.
|
||||
writeSdfTuple(delays, RiseFall::rise());
|
||||
writeSdfTriple(delays, RiseFall::rise());
|
||||
// Merge rise/fall values if they are the same.
|
||||
if (!(fuzzyEqual(delays.value(RiseFall::rise(), MinMax::min()),
|
||||
delays.value(RiseFall::fall(), MinMax::min()))
|
||||
&& fuzzyEqual(delays.value(RiseFall::rise(), MinMax::max()),
|
||||
delays.value(RiseFall::fall(),MinMax::max())))) {
|
||||
gzprintf(stream_, " ");
|
||||
writeSdfTuple(delays, RiseFall::fall());
|
||||
writeSdfTriple(delays, RiseFall::fall());
|
||||
}
|
||||
}
|
||||
else if (delays.hasValue(RiseFall::rise(), MinMax::min()))
|
||||
// Rise only.
|
||||
writeSdfTuple(delays, RiseFall::rise());
|
||||
writeSdfTriple(delays, RiseFall::rise());
|
||||
else if (delays.hasValue(RiseFall::fall(), MinMax::min())) {
|
||||
// Fall only.
|
||||
gzprintf(stream_, "() ");
|
||||
writeSdfTuple(delays, RiseFall::fall());
|
||||
writeSdfTriple(delays, RiseFall::fall());
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
SdfWriter::writeSdfTuple(RiseFallMinMax &delays,
|
||||
RiseFall *rf)
|
||||
SdfWriter::writeSdfTriple(RiseFallMinMax &delays,
|
||||
RiseFall *rf)
|
||||
{
|
||||
gzprintf(stream_, "(");
|
||||
writeSdfDelay(delays.value(rf, MinMax::min()));
|
||||
gzprintf(stream_, "::");
|
||||
writeSdfDelay(delays.value(rf, MinMax::max()));
|
||||
gzprintf(stream_, ")");
|
||||
float min = delays.value(rf, MinMax::min());
|
||||
float max = delays.value(rf, MinMax::max());
|
||||
writeSdfTriple(min, max);
|
||||
}
|
||||
|
||||
void
|
||||
SdfWriter::writeSdfTuple(float min_delay,
|
||||
float max_delay)
|
||||
SdfWriter::writeSdfTriple(float min,
|
||||
float max)
|
||||
{
|
||||
gzprintf(stream_, "(");
|
||||
writeSdfDelay(min_delay);
|
||||
gzprintf(stream_, "::");
|
||||
writeSdfDelay(max_delay);
|
||||
writeSdfDelay(min);
|
||||
if (include_typ_) {
|
||||
gzprintf(stream_, ":");
|
||||
writeSdfDelay((min + max) / 2.0);
|
||||
gzprintf(stream_, ":");
|
||||
}
|
||||
else
|
||||
gzprintf(stream_, "::");
|
||||
writeSdfDelay(max);
|
||||
gzprintf(stream_, ")");
|
||||
}
|
||||
|
||||
|
|
@ -677,7 +686,7 @@ SdfWriter::writeCheck(Edge *edge,
|
|||
|
||||
ArcDelay min_delay = graph_->arcDelay(edge, arc, arc_delay_min_index_);
|
||||
ArcDelay max_delay = graph_->arcDelay(edge, arc, arc_delay_max_index_);
|
||||
writeSdfTuple(delayAsFloat(min_delay), delayAsFloat(max_delay));
|
||||
writeSdfTriple(delayAsFloat(min_delay), delayAsFloat(max_delay));
|
||||
|
||||
gzprintf(stream_, ")\n");
|
||||
}
|
||||
|
|
@ -691,7 +700,7 @@ SdfWriter::writeWidthCheck(const Pin *pin,
|
|||
gzprintf(stream_, " (WIDTH (%s %s) ",
|
||||
sdfEdge(hi_low->asTransition()),
|
||||
sdfPortName(pin));
|
||||
writeSdfTuple(min_width, max_width);
|
||||
writeSdfTriple(min_width, max_width);
|
||||
gzprintf(stream_, ")\n");
|
||||
}
|
||||
|
||||
|
|
@ -701,7 +710,7 @@ SdfWriter::writePeriodCheck(const Pin *pin,
|
|||
{
|
||||
gzprintf(stream_, " (PERIOD %s ",
|
||||
sdfPortName(pin));
|
||||
writeSdfTuple(min_period, min_period);
|
||||
writeSdfTriple(min_period, min_period);
|
||||
gzprintf(stream_, ")\n");
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -24,7 +24,8 @@ class Corner;
|
|||
void
|
||||
writeSdf(const char *filename,
|
||||
Corner *corner,
|
||||
char sdf_divider,
|
||||
char divider,
|
||||
bool include_typ,
|
||||
int digits,
|
||||
bool gzip,
|
||||
bool no_timestamp,
|
||||
|
|
|
|||
|
|
@ -3524,15 +3524,16 @@ Sta::setAnnotatedSlew(Vertex *vertex,
|
|||
void
|
||||
Sta::writeSdf(const char *filename,
|
||||
Corner *corner,
|
||||
char sdf_divider,
|
||||
int digits,
|
||||
char divider,
|
||||
bool include_typ,
|
||||
int digits,
|
||||
bool gzip,
|
||||
bool no_timestamp,
|
||||
bool no_version)
|
||||
{
|
||||
findDelays();
|
||||
sta::writeSdf(filename, corner, sdf_divider, digits, gzip, no_timestamp,
|
||||
no_version, this);
|
||||
sta::writeSdf(filename, corner, divider, include_typ, digits, gzip,
|
||||
no_timestamp, no_version, this);
|
||||
}
|
||||
|
||||
void
|
||||
|
|
|
|||
Loading…
Reference in New Issue