write_sdf use corner library pvt

Signed-off-by: James Cherry <cherry@parallaxsw.com>
This commit is contained in:
James Cherry 2023-09-18 16:02:30 -07:00
parent 2d8247a1f1
commit 2054d01d6c
3 changed files with 21 additions and 18 deletions

View File

@ -108,7 +108,7 @@ public:
PathAnalysisPt *findPathAnalysisPt(const MinMax *min_max) const;
void addLiberty(LibertyLibrary *lib,
const MinMax *min_max);
LibertySeq *libertyLibraries(const MinMax *min_max);
const LibertySeq &libertyLibraries(const MinMax *min_max) const;
int libertyIndex(const MinMax *min_max) const;
protected:

View File

@ -215,24 +215,27 @@ SdfWriter::writeHeader(LibertyLibrary *default_lib,
gzprintf(stream_, " (VERSION \"%s\")\n", STA_VERSION);
gzprintf(stream_, " (DIVIDER %c)\n", sdf_divider_);
OperatingConditions *cond_min =
sdc_->operatingConditions(MinMax::min());
if (cond_min == nullptr)
cond_min = default_lib->defaultOperatingConditions();
OperatingConditions *cond_max =
sdc_->operatingConditions(MinMax::max());
if (cond_max == nullptr)
cond_max = default_lib->defaultOperatingConditions();
LibertyLibrary *lib_min = default_lib;
const LibertySeq &libs_min = corner_->libertyLibraries(MinMax::min());
if (!libs_min.empty())
lib_min = libs_min[0];
LibertyLibrary *lib_max = default_lib;
const LibertySeq &libs_max = corner_->libertyLibraries(MinMax::max());
if (!libs_max.empty())
lib_max = libs_max[0];
OperatingConditions *cond_min = lib_min->defaultOperatingConditions();
OperatingConditions *cond_max = lib_max->defaultOperatingConditions();
if (cond_min && cond_max) {
gzprintf(stream_, " (VOLTAGE %.3f::%.3f)\n",
cond_min->voltage(),
cond_max->voltage());
cond_min->voltage(),
cond_max->voltage());
gzprintf(stream_, " (PROCESS \"%.3f::%.3f\")\n",
cond_min->process(),
cond_max->process());
cond_min->process(),
cond_max->process());
gzprintf(stream_, " (TEMPERATURE %.3f::%.3f)\n",
cond_min->temperature(),
cond_max->temperature());
cond_min->temperature(),
cond_max->temperature());
}
const char *sdf_timescale = nullptr;

View File

@ -467,10 +467,10 @@ Corner::addLiberty(LibertyLibrary *lib,
liberty_[min_max->index()].push_back(lib);
}
LibertySeq *
Corner::libertyLibraries(const MinMax *min_max)
const LibertySeq &
Corner::libertyLibraries(const MinMax *min_max) const
{
return &liberty_[min_max->index()];
return liberty_[min_max->index()];
}
int