Repository navigation
Conversation
There was a problem hiding this comment.
Code Review
This pull request updates the behavior of SKIP_REPORT_METRICS so that it only skips metrics requiring heavy analysis (such as timing, power, and clock skew) while still reporting basic metrics like design area, instance counts, and utilization. To support this, report_design_area_metrics is now called before checking the SKIP_REPORT_METRICS flag, and various reporting commands in report_metrics.tcl have been wrapped with log_cmd. Documentation and variable definitions have been updated accordingly. The reviewer pointed out that the path reports/<stage>_*.rpt in the description contains <stage>, which resembles an HTML tag and could cause rendering issues in Markdown; they suggested wrapping it in backticks.
With SKIP_REPORT_METRICS=1, report_metrics reported nothing at all, so a
flow that skips it for speed also lost design area, instance counts and
utilization, though those are a walk over the instances that needs no
timer.
Report them unconditionally, before the skip. SKIP_REPORT_METRICS now
skips only what costs time: the timing update behind setup and hold WS
and TNS, fmax, the max slew/cap/fanout checks and clock skew; the power
analysis; and the reports/<stage>_*.rpt text reports.
The calls that take measurable time even on asap7/gcd, 5 to 200 ms each
on a few hundred cells, run under log_cmd, so on a large design the log
names any that takes five seconds or more. The four register path
searches go through `log_cmd eval { ... }`, so the log prints the
command rather than the expanded register list.
On asap7/gcd, metrics on (DETAILED_METRICS=1) and off give
byte-identical .odb files at every stage; with SKIP_REPORT_METRICS=1
every stage's metrics .json has the design area and no timing.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Øyvind Harboe <oyvind.harboe@zylin.com>
bc6e396 to
f1a5274
Compare
🔍 QoR checkMetrics reflect the PR merge build — i.e. what will land on the target branch. Commit 62 design(s) checked — 1 with regression(s), 1 without a comparable baseline. ❌ asap7/aes-block base — 2 failing metric(s)
|
|
@maliberty I want as much free(fast) information as possible with the fewest ORFS variables Hence I changed SKIP_REPORT_METRICS to report what it can for free and only disable reporting that takes time. |
Report what is free unconditionally. With
SKIP_REPORT_METRICS=1,report_metricswrote no metrics at all, so a flow skipping it for speed also lost design area, instance counts and utilization. Those are a walk over the instances and need no timer. They are now written before the skip;SKIP_REPORT_METRICSskips only what costs time.What
SKIP_REPORT_METRICS=1skips, measured on asap7/gcd (ms, summed over the stage'sreport_metricscalls,DETAILED_METRICS=1):log_cmdreport_powerreport_tns(the timing update)find_timing_paths×2eval)report_checks×2eval)report_erc_metricsreport_check_typesreport_clock_min_periodreport_clock_skew,report_wns,report_worst_slack, unfilteredreport_checks, other*_metricreport_design_area_metrics, now unconditional: 0.07 ms. The tools' own counters (gpl, dpl, grt, drt, repair buffer counts, warnings) never went throughreport_metricsand are written either way.The calls that cost time even on gcd run under
log_cmd, so on a large design the log names any that takes five seconds or more. The register path searches go throughlog_cmd eval { ... }so the log prints the command, not the expanded register list.Tests, asap7/gcd:
SKIP_REPORT_METRICS=1: byte-identical.odbat every stage and identical6_final.v;SKIP_REPORT_METRICS=1, every stage's metrics.jsonhasdesign__instance__areaand notiming__setup__ws;tclfmt/tclint0.7.0,generate-variables-docs.py,yaml_to_json.pyand yamlfix leave the tree unchanged.Integration test: The-OpenROAD-Project/bazel-orfs#1433.