Merge remote-tracking branch 'parallax/master'

Signed-off-by: Matt Liberty <mliberty@precisioninno.com>
This commit is contained in:
Matt Liberty 2025-02-05 23:09:17 +00:00
commit 08f362fc6d
10 changed files with 66 additions and 8 deletions

View File

@ -11,7 +11,7 @@ RUN sed -i s/mirror.centos.org/vault.centos.org/g /etc/yum.repos.d/*.repo \
RUN sed -i s/mirror.centos.org/vault.centos.org/g /etc/yum.repos.d/*.repo \
&& sed -i s/^#.*baseurl=http/baseurl=http/g /etc/yum.repos.d/*.repo \
&& sed -i s/^mirrorlist=http/#mirrorlist=http/g /etc/yum.repos.d/*.repo \
&& yum install -y devtoolset-11 wget cmake3 make eigen3-devel tcl-devel swig3 flex zlib-devel valgrind \
&& yum install -y devtoolset-11 wget cmake3 make eigen3-devel tcl swig3 flex zlib-devel valgrind \
&& yum clean -y all
# Download Bison
@ -39,6 +39,18 @@ RUN source /opt/rh/devtoolset-11/enable && \
make -j`nproc` && \
make install
# Download TCL
RUN wget http://prdownloads.sourceforge.net/tcl/tcl8.6.16-src.tar.gz && \
tar -xvf tcl8.6.16-src.tar.gz && \
rm tcl8.6.16-src.tar.gz
# Build TCL
RUN source /opt/rh/devtoolset-11/enable && \
cd tcl8.6.16 && \
./unix/configure && \
make -j`nproc` && \
make install
FROM base-dependencies AS builder
COPY . /OpenSTA
@ -52,4 +64,4 @@ RUN source /opt/rh/devtoolset-11/enable && \
make -j`nproc`
# Run sta on entry
ENTRYPOINT ["OpenSTA/app/sta"]
ENTRYPOINT ["/OpenSTA/app/sta"]

Binary file not shown.

Binary file not shown.

View File

@ -147,7 +147,8 @@ public:
int to_index);
VerilogModule *module(Cell *cell);
Instance *linkNetwork(const char *top_cell_name,
bool make_black_boxes);
bool make_black_boxes,
bool delete_modules);
const char *filename() const { return filename_.c_str(); }
void incrLine();
Report *report() const { return report_; }

View File

@ -321,6 +321,32 @@ Power::powerInside(const Instance *hinst,
delete child_iter;
}
typedef std::pair<Instance*, float> InstPower;
InstanceSeq
Power::highestPowerInstances(size_t count,
const Corner *corner)
{
vector<InstPower> inst_pwrs;
LeafInstanceIterator *inst_iter = network_->leafInstanceIterator();
while (inst_iter->hasNext()) {
Instance *inst = inst_iter->next();
PowerResult pwr = power(inst, corner);
inst_pwrs.push_back({inst, pwr.total()});
}
delete inst_iter;
sort(inst_pwrs.begin(), inst_pwrs.end(), [](InstPower &inst_pwr1,
InstPower &inst_pwr2) {
return inst_pwr1.second > inst_pwr2.second;
});
InstanceSeq insts;
for (size_t i = 0; i < count; i++)
insts.push_back(inst_pwrs[i].first);
return insts;
}
////////////////////////////////////////////////////////////////
class ActivitySrchPred : public SearchPredNonLatch2

View File

@ -100,6 +100,8 @@ public:
void reportActivityAnnotation(bool report_unannotated,
bool report_annotated);
float clockMinPeriod();
InstanceSeq highestPowerInstances(size_t count,
const Corner *corner);
protected:
PwrActivity &activity(const Pin *pin);

View File

@ -117,6 +117,14 @@ clock_min_period()
return power->clockMinPeriod();
}
InstanceSeq
highest_power_instances(size_t count,
const Corner *corner)
{
Power *power = Sta::sta()->power();
return power->highestPowerInstances(count, corner);
}
////////////////////////////////////////////////////////////////
void

View File

@ -32,6 +32,7 @@ namespace eval sta {
define_cmd_args "report_power" \
{ [-instances instances]\
[-highest_power_instances count]\
[-corner corner]\
[-digits digits]\
[> filename] [>> filename] }
@ -40,7 +41,7 @@ proc_redirect report_power {
global sta_report_default_digits
parse_key_args "report_power" args \
keys {-instances -corner -digits} flags {}
keys {-instances -highest_power_instances -corner -digits} flags {}
check_argc_eq0 "report_power" $args
@ -58,6 +59,11 @@ proc_redirect report_power {
if { [info exists keys(-instances)] } {
set insts [get_instances_error "-instances" $keys(-instances)]
report_power_insts $insts $corner $digits
} elseif { [info exists keys(-highest_power_instances)] } {
set count $keys(-highest_power_instances)
check_positive_integer "-highest_power_instances" $count
set insts [highest_power_instances $count $corner]
report_power_insts $insts $corner $digits
} else {
report_power_design $corner $digits
}

View File

@ -146,7 +146,7 @@ VerilogReader::VerilogReader(NetworkReader *network) :
{
network->setLinkFunc([=] (const char *top_cell_name,
bool make_black_boxes) -> Instance* {
return linkNetwork(top_cell_name, make_black_boxes);
return linkNetwork(top_cell_name, make_black_boxes, true);
});
constant10_max_ = stdstrPrint("%llu", std::numeric_limits<VerilogConstant10>::max());
}
@ -1701,7 +1701,8 @@ private:
Instance *
VerilogReader::linkNetwork(const char *top_cell_name,
bool make_black_boxes)
bool make_black_boxes,
bool delete_modules)
{
if (library_) {
Cell *top_cell = network_->findCell(library_, top_cell_name);
@ -1729,7 +1730,8 @@ VerilogReader::linkNetwork(const char *top_cell_name,
}
makeModuleInstBody(module, top_instance, &bindings, make_black_boxes);
bool errors = reportLinkErrors();
deleteModules();
if (delete_modules)
deleteModules();
if (errors) {
network_->deleteInstance(top_instance);
return nullptr;

View File

@ -147,7 +147,8 @@ public:
int to_index);
VerilogModule *module(Cell *cell);
Instance *linkNetwork(const char *top_cell_name,
bool make_black_boxes);
bool make_black_boxes,
bool delete_modules);
const char *filename() const { return filename_.c_str(); }
void incrLine();
Report *report() const { return report_; }