mirror of
https://github.com/The-OpenROAD-Project/OpenSTA.git
synced 2026-05-30 00:24:12 +08:00
commit 5eb41d9304fe43d22dcf32b5346a6c9705c0d0b3 Author: James Cherry <cherry@parallaxsw.com> Date: Thu Feb 8 11:49:16 2024 -0700 tcl endpoint_count Signed-off-by: James Cherry <cherry@parallaxsw.com> commit ffb0e0a083edbbdc3753b829641ba26730d3d882 Author: James Cherry <cherry@parallaxsw.com> Date: Thu Feb 8 10:51:36 2024 -0700 ArcDelayCalc::reduceParasitic Signed-off-by: James Cherry <cherry@parallaxsw.com> commit ed167b218ed026b0b7427301ace67c3d22cc969a Author: James Cherry <cherry@parallaxsw.com> Date: Wed Feb 7 22:46:40 2024 -0700 parasitics makeResistor/capacitor rm network arg Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 41244abfcfdee20ddc9aa8ac80cac2e3e7f68146 Author: James Cherry <cherry@parallaxsw.com> Date: Wed Feb 7 17:08:04 2024 -0700 arnoldi coupling caps Signed-off-by: James Cherry <cherry@parallaxsw.com> commit a14d6880be0dc22bf008cae63ec93880c8347ccf Author: James Cherry <cherry@parallaxsw.com> Date: Wed Feb 7 07:28:31 2024 -0700 parasiticLoad Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 1cacbd7da71c7f8c5ac311caabd03bb74b66e675 Author: James Cherry <cherry@parallaxsw.com> Date: Wed Feb 7 07:21:49 2024 -0700 parasitic resistor/capacitor index -> id Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 6c749158cc94e5a91376721a8ccb71a8a4d020d5 Author: James Cherry <cherry@parallaxsw.com> Date: Tue Feb 6 21:42:03 2024 -0700 arnoldi Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 4ffa6002224d76321287f64448929e5ef0ec6edd Author: James Cherry <cherry@parallaxsw.com> Date: Tue Feb 6 18:27:33 2024 -0700 arnoldi parasitic leak Signed-off-by: James Cherry <cherry@parallaxsw.com> commit a9666dd7c44126b262c7bd1170db69fafa5ef327 Author: James Cherry <cherry@parallaxsw.com> Date: Tue Feb 6 17:05:24 2024 -0700 arnoldi parasitic leak Signed-off-by: James Cherry <cherry@parallaxsw.com> commit eca0e8b5ea3b4dbb22a1a2ed11018e6e40229b3f Author: James Cherry <cherry@parallaxsw.com> Date: Tue Feb 6 14:40:38 2024 -0700 comment Signed-Off-by: James Cherry <cherry@parallaxsw.com> commit 0263245b5e2412ebefbedc67babf23e1ac047c7b Author: James Cherry <cherry@parallaxsw.com> Date: Tue Feb 6 14:24:51 2024 -0700 CouplingCap -> Capacitor Signed-off-by: James Cherry <cherry@parallaxsw.com> commit f9da059814fb09c44cc3529a9a787c3c2192a4e9 Author: James Cherry <cherry@parallaxsw.com> Date: Tue Feb 6 09:31:00 2024 -0700 rm parasitic network array if empty Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 28c2728e5f2859839818ef228aac51fd0100ae65 Author: James Cherry <cherry@parallaxsw.com> Date: Tue Feb 6 08:13:03 2024 -0700 parasitic resistor name -> id Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 045fd7efa3ae8b1cf07c5aa421f3119022e3895a Author: James Cherry <cherry@parallaxsw.com> Date: Mon Feb 5 21:09:39 2024 -0700 Map -> map Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 8f7d18eed14a8173d91fd98a4e345a16d168b0ee Author: James Cherry <cherry@parallaxsw.com> Date: Mon Feb 5 21:04:35 2024 -0700 ParasiticResistor, ParasiticCapacitor Signed-off-by: James Cherry <cherry@parallaxsw.com> commit e2df87a10febc573c77b51a22e82d2d1f6f52af9 Author: James Cherry <cherry@parallaxsw.com> Date: Mon Feb 5 17:06:34 2024 -0700 rm ParasticNode::devices Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 07133b72b73d204d16f964472c38907c18f9758d Author: James Cherry <cherry@parallaxsw.com> Date: Mon Feb 5 16:52:43 2024 -0700 Parsitic network nodes instead of nodeIterator Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 48c08673b11d0c328ed7d70606b6c7a979d9d0b8 Author: James Cherry <cherry@parallaxsw.com> Date: Mon Feb 5 16:34:31 2024 -0700 mv otherNode to Parasitics Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 99fccc76937c25c68454d8db667306bff2a142ae Author: James Cherry <cherry@parallaxsw.com> Date: Mon Feb 5 16:29:23 2024 -0700 ParasiticNetwork resistor/capacitor array Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 9de49992ad403d7bc3468c53201d50825d7b961c Author: James Cherry <cherry@parallaxsw.com> Date: Mon Feb 5 09:42:01 2024 -0700 SpefNameMap Signed-off-by: James Cherry <cherry@parallaxsw.com> commit f296850201debeb2cfe1fd0b9c61c3c196f00d65 Author: James Cherry <cherry@parallaxsw.com> Date: Mon Feb 5 09:11:17 2024 -0700 comments Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 86ca29b9bdeb732c1a596c196e0c4bf91de3ee37 Author: James Cherry <cherry@parallaxsw.com> Date: Mon Feb 5 08:29:53 2024 -0700 rm Parasitics::reduceTo Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 880bf458d473004ee5d3dc33baa62c9e643ddaec Author: James Cherry <cherry@parallaxsw.com> Date: Sun Feb 4 20:15:05 2024 -0700 loadCap Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 67322e686f4703a2a5d9cdd1dd66534814662fe4 Author: James Cherry <cherry@parallaxsw.com> Date: Sun Feb 4 09:39:21 2024 -0700 report_parasitic_annotation Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 8ef4e9841bca62a5879e74da83cacee70fa50b2f Author: James Cherry <cherry@parallaxsw.com> Date: Sat Feb 3 19:13:27 2024 -0700 ParasiticAnalysisPt use string Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 109a85ab37b5a869a72738ac6a6cd84e4a1d1ac4 Author: James Cherry <cherry@parallaxsw.com> Date: Sat Feb 3 18:59:02 2024 -0700 rm ParasiticAnalysisPt::min_max_ Signed-off-by: James Cherry <cherry@parallaxsw.com> commit bb7874537d20a1fe905779fe46d783dba14e2db6 Author: James Cherry <cherry@parallaxsw.com> Date: Sat Feb 3 12:21:28 2024 -0700 parasitics rm pole_residue pointer Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 9e1e2c484e5cd088a08afc278f25b9fcf2cc5dd9 Author: James Cherry <cherry@parallaxsw.com> Date: Sat Feb 3 11:54:22 2024 -0700 parasitics rm loads pointer Signed-off-by: James Cherry <cherry@parallaxsw.com> commit cb4a7f870b2371a2ac6b3ce1d340bb5d3c24791a Author: James Cherry <cherry@parallaxsw.com> Date: Sat Feb 3 08:05:55 2024 -0700 parasitics use override Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 8e0f84c4fec0411ad3626c836710545531ef219d Author: James Cherry <cherry@parallaxsw.com> Date: Sat Feb 3 07:53:59 2024 -0700 Parasitics::unannotatedLoads Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 6b45e369e7be158616219258e6e9a675e87fd8ca Author: James Cherry <cherry@parallaxsw.com> Date: Fri Feb 2 12:27:23 2024 -0700 format Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 27e820b36caf7867d20307c7045e86486819db6b Author: James Cherry <cherry@parallaxsw.com> Date: Thu Feb 1 18:01:51 2024 -0700 rm op_cond args Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 351ed53925c7cc9815f75c34a0320b0dc50445d4 Author: James Cherry <cherry@parallaxsw.com> Date: Wed Jan 31 17:35:15 2024 -0700 rm GraphDelayCalc::loadPins() Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 3341c7caff595dab0b7519ab5103958aadfe1510 Author: James Cherry <cherry@parallaxsw.com> Date: Wed Jan 31 17:31:56 2024 -0700 read_spef arg check Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 7d0c1e78b42e33d5298efefa87a982f28f51bc57 Author: James Cherry <cherry@parallaxsw.com> Date: Wed Jan 31 10:53:35 2024 -0700 arnoldi use parasitics api Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 86b39ac10e5c6556a9b0b5b7bce016884cd935ee Author: James Cherry <cherry@parallaxsw.com> Date: Wed Jan 31 10:30:47 2024 -0700 range iter Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 469fad36af69cc8b76e4dfc88a085962795d7c46 Author: James Cherry <cherry@parallaxsw.com> Date: Tue Jan 30 16:43:46 2024 -0700 read_spef -reduce Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 2b88aa471f083ae895f6277c2c844e308451fff9 Author: James Cherry <cherry@parallaxsw.com> Date: Mon Jan 29 20:31:47 2024 -0700 Paraasitics::connectionPin() -> pin() Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 7b9ff7e228b215b3121b7e7189d9c0c18ced3ef3 Author: James Cherry <cherry@parallaxsw.com> Date: Mon Jan 29 17:12:32 2024 -0700 ParasiticNode::isExternal() Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 889c27af846ed1cdf76295da5262836378ab9162 Author: James Cherry <cherry@parallaxsw.com> Date: Mon Jan 29 11:17:59 2024 -0700 rm redundant op_cond arg Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 7d7ce5e7809bc80f36dd81cb05615a87433ed315 Author: James Cherry <cherry@parallaxsw.com> Date: Mon Jan 29 11:03:42 2024 -0700 mv estimatePiElmore to Parasitics Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 04e1757b3c8b4e9f5cffbe3b03214fc065fb1c2c Author: James Cherry <cherry@parallaxsw.com> Date: Mon Jan 29 09:09:28 2024 -0700 ParasiticNode un-virtual Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 016ce50f82cbb68f9536d3ed5fd511b2f82f4439 Author: James Cherry <cherry@parallaxsw.com> Date: Sun Jan 28 17:26:04 2024 -0700 parasitics coupling cap api Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 1748629fb462b24b43002ecd3fe1679d367752f4 Author: James Cherry <cherry@parallaxsw.com> Date: Sun Jan 28 11:12:46 2024 -0700 Parasitics::value rm ap arg Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 1272cb86bcae5960c9af7d589f99f1488aa0b322 Author: James Cherry <cherry@parallaxsw.com> Date: Sun Jan 28 11:10:57 2024 -0700 read_spef rm -quiet arg Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 3d86a9d86115dde5f20eb4bb8ca15f0c85de5810 Author: James Cherry <cherry@parallaxsw.com> Date: Sun Jan 28 11:01:24 2024 -0700 reduce min_max arg Signed-off-by: James Cherry <cherry@parallaxsw.com> commit f7abfd5e72e0f74b9ffabf6306bbf809b62d4e98 Author: James Cherry <cherry@parallaxsw.com> Date: Sun Jan 28 10:59:29 2024 -0700 rm spef_reader Signed-off-by: James Cherry <cherry@parallaxsw.com> commit e3550523b1964b2137419240f748a0b44c3322b6 Author: James Cherry <cherry@parallaxsw.com> Date: Sun Jan 28 10:58:24 2024 -0700 reducers rm op_cond arg Signed-off-by: James Cherry <cherry@parallaxsw.com> commit cec793accb3db5c41cdb51f85c8530ffc1e085db Author: James Cherry <cherry@parallaxsw.com> Date: Sun Jan 28 10:08:45 2024 -0700 rm NullParastics Signed-off-by: James Cherry <cherry@parallaxsw.com> commit 6596d35f6da51cbacb2c21588715773d3b5edb64 Author: James Cherry <cherry@parallaxsw.com> Date: Sun Jan 28 10:03:29 2024 -0700 ArcDelayCalc::reduceParasitic Signed-off-by: James Cherry <cherry@parallaxsw.com> Signed-off-by: James Cherry <cherry@parallaxsw.com>
492 lines
15 KiB
C++
492 lines
15 KiB
C++
// OpenSTA, Static Timing Analyzer
|
|
// Copyright (c) 2024, Parallax Software, Inc.
|
|
//
|
|
// This program is free software: you can redistribute it and/or modify
|
|
// it under the terms of the GNU General Public License as published by
|
|
// the Free Software Foundation, either version 3 of the License, or
|
|
// (at your option) any later version.
|
|
//
|
|
// This program is distributed in the hope that it will be useful,
|
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
// GNU General Public License for more details.
|
|
//
|
|
// You should have received a copy of the GNU General Public License
|
|
// along with this program. If not, see <https://www.gnu.org/licenses/>.
|
|
|
|
#pragma once
|
|
|
|
#include <string>
|
|
|
|
#include "StringSeq.hh"
|
|
#include "SearchClass.hh"
|
|
#include "PathEnd.hh"
|
|
|
|
namespace sta {
|
|
|
|
class Corner;
|
|
class DcalcAnalysisPt;
|
|
class PathExpanded;
|
|
class ReportField;
|
|
|
|
using std::string;
|
|
|
|
typedef Vector<ReportField*> ReportFieldSeq;
|
|
|
|
class ReportPath : public StaState
|
|
{
|
|
public:
|
|
explicit ReportPath(StaState *sta);
|
|
virtual ~ReportPath();
|
|
void setPathFormat(ReportPathFormat format);
|
|
void setReportFieldOrder(StringSeq *field_names);
|
|
void setReportFields(bool report_input_pin,
|
|
bool report_net,
|
|
bool report_cap,
|
|
bool report_slew,
|
|
bool report_fanout);
|
|
int digits() const { return digits_; }
|
|
void setDigits(int digits);
|
|
void setNoSplit(bool no_split);
|
|
bool reportSigmas() const { return report_sigmas_; }
|
|
void setReportSigmas(bool report);
|
|
ReportField *findField(const char *name);
|
|
|
|
// Header above reportPathEnd results.
|
|
void reportPathEndHeader();
|
|
// Footer below reportPathEnd results.
|
|
void reportPathEndFooter();
|
|
void reportPathEnd(PathEnd *end);
|
|
// Format report_path_endpoint only:
|
|
// Previous path end is used to detect path group changes
|
|
// so headers are reported by group.
|
|
void reportPathEnd(PathEnd *end,
|
|
PathEnd *prev_end);
|
|
void reportPathEnds(PathEndSeq *ends);
|
|
void reportPath(const Path *path);
|
|
|
|
void reportShort(const PathEndUnconstrained *end);
|
|
void reportShort(const PathEndCheck *end);
|
|
void reportShort(const PathEndLatchCheck *end);
|
|
void reportShort(const PathEndPathDelay *end);
|
|
void reportShort(const PathEndOutputDelay *end);
|
|
void reportShort(const PathEndGatedClock *end);
|
|
void reportShort(const PathEndDataCheck *end);
|
|
|
|
void reportFull(const PathEndUnconstrained *end);
|
|
void reportFull(const PathEndCheck *end);
|
|
void reportFull(const PathEndLatchCheck *end);
|
|
void reportFull(const PathEndPathDelay *end);
|
|
void reportFull(const PathEndOutputDelay *end);
|
|
void reportFull(const PathEndGatedClock *end);
|
|
void reportFull(const PathEndDataCheck *end);
|
|
|
|
void reportEndHeader();
|
|
void reportEndLine(PathEnd *end);
|
|
|
|
void reportSummaryHeader();
|
|
void reportSummaryLine(PathEnd *end);
|
|
|
|
void reportSlackOnlyHeader();
|
|
void reportSlackOnly(PathEnd *end);
|
|
|
|
void reportMpwCheck(MinPulseWidthCheck *check,
|
|
bool verbose);
|
|
void reportMpwChecks(MinPulseWidthCheckSeq *checks,
|
|
bool verbose);
|
|
void reportMpwHeaderShort();
|
|
void reportShort(MinPulseWidthCheck *check);
|
|
void reportVerbose(MinPulseWidthCheck *check);
|
|
|
|
void reportCheck(MinPeriodCheck *check,
|
|
bool verbose);
|
|
void reportChecks(MinPeriodCheckSeq *checks,
|
|
bool verbose);
|
|
void reportPeriodHeaderShort();
|
|
void reportShort(MinPeriodCheck *check);
|
|
void reportVerbose(MinPeriodCheck *check);
|
|
|
|
void reportCheck(MaxSkewCheck *check,
|
|
bool verbose);
|
|
void reportChecks(MaxSkewCheckSeq *checks,
|
|
bool verbose);
|
|
void reportMaxSkewHeaderShort();
|
|
void reportShort(MaxSkewCheck *check);
|
|
void reportVerbose(MaxSkewCheck *check);
|
|
|
|
void reportLimitShortHeader(const ReportField *field);
|
|
void reportLimitShort(const ReportField *field,
|
|
Pin *pin,
|
|
float value,
|
|
float limit,
|
|
float slack);
|
|
void reportLimitVerbose(const ReportField *field,
|
|
Pin *pin,
|
|
const RiseFall *rf,
|
|
float value,
|
|
float limit,
|
|
float slack,
|
|
const Corner *corner,
|
|
const MinMax *min_max);
|
|
ReportField *fieldSlew() const { return field_slew_; }
|
|
ReportField *fieldFanout() const { return field_fanout_; }
|
|
ReportField *fieldCapacitance() const { return field_capacitance_; }
|
|
|
|
protected:
|
|
void makeFields();
|
|
ReportField *makeField(const char *name,
|
|
const char *title,
|
|
int width,
|
|
bool left_justify,
|
|
Unit *unit,
|
|
bool enabled);
|
|
void reportEndpointHeader(PathEnd *end,
|
|
PathEnd *prev_end);
|
|
void reportShort(const PathEndUnconstrained *end,
|
|
PathExpanded &expanded);
|
|
void reportShort(const PathEndCheck *end,
|
|
PathExpanded &expanded);
|
|
void reportShort(const PathEndLatchCheck *end,
|
|
PathExpanded &expanded);
|
|
void reportShort(const PathEndPathDelay *end,
|
|
PathExpanded &expanded);
|
|
void reportShort(const PathEndOutputDelay *end,
|
|
PathExpanded &expanded);
|
|
void reportShort(const PathEndGatedClock *end,
|
|
PathExpanded &expanded);
|
|
void reportShort(const PathEndDataCheck *end,
|
|
PathExpanded &expanded);
|
|
void reportEndpoint(const PathEndOutputDelay *end);
|
|
void reportEndpointOutputDelay(const PathEndClkConstrained *end);
|
|
void reportEndpoint(const PathEndPathDelay *end);
|
|
void reportEndpoint(const PathEndGatedClock *end);
|
|
string pathEndpoint(PathEnd *end);
|
|
string pathStartpoint(PathEnd *end,
|
|
PathExpanded &expanded);
|
|
void reportBorrowing(const PathEndLatchCheck *end,
|
|
Arrival &borrow,
|
|
Arrival &time_given_to_startpoint);
|
|
void reportEndpoint(const PathEndDataCheck *end);
|
|
const char *clkNetworkDelayIdealProp(bool is_ideal);
|
|
|
|
string checkRoleReason(const PathEnd *end);
|
|
string checkRoleString(const PathEnd *end);
|
|
virtual void reportGroup(const PathEnd *end);
|
|
void reportStartpoint(const PathEnd *end,
|
|
PathExpanded &expanded);
|
|
void reportUnclockedEndpoint(const PathEnd *end,
|
|
const char *default_reason);
|
|
void reportEndpoint(const PathEndCheck *end);
|
|
void reportEndpoint(const PathEndLatchCheck *end);
|
|
const char *latchDesc(const PathEndLatchCheck *end);
|
|
void reportStartpoint(const char *start,
|
|
string reason);
|
|
void reportEndpoint(const char *end,
|
|
string reason);
|
|
void reportStartEndPoint(const char *pt,
|
|
string reason,
|
|
const char *key);
|
|
string tgtClkName(const PathEnd *end);
|
|
const char *clkRegLatchDesc(const PathEnd *end);
|
|
void reportSrcPath(const PathEnd *end,
|
|
PathExpanded &expanded);
|
|
void reportTgtClk(const PathEnd *end);
|
|
void reportTgtClk(const PathEnd *end,
|
|
float prev_time);
|
|
void reportTgtClk(const PathEnd *end,
|
|
float prev_time,
|
|
bool is_prop);
|
|
bool pathFromGenPropClk(const Path *clk_path,
|
|
const EarlyLate *early_late);
|
|
bool isGenPropClk(const Clock *clk,
|
|
const RiseFall *clk_rf,
|
|
const MinMax *min_max,
|
|
const EarlyLate *early_late);
|
|
void reportSrcClkAndPath(const Path *path,
|
|
PathExpanded &expanded,
|
|
float time_offset,
|
|
Arrival clk_insertion,
|
|
Arrival clk_latency,
|
|
bool is_path_delay);
|
|
bool reportGenClkSrcPath(const Path *clk_path,
|
|
const Clock *clk,
|
|
const RiseFall *clk_rf,
|
|
const MinMax *min_max,
|
|
const EarlyLate *early_late);
|
|
void reportGenClkSrcAndPath(const Path *path,
|
|
const Clock *clk,
|
|
const RiseFall *clk_rf,
|
|
const EarlyLate *early_late,
|
|
const PathAnalysisPt *path_ap,
|
|
float time_offset,
|
|
float path_time_offset,
|
|
bool clk_used_as_data);
|
|
bool reportGenClkSrcPath1(const Clock *clk,
|
|
const Pin *clk_pin,
|
|
const RiseFall *clk_rf,
|
|
const EarlyLate *early_late,
|
|
const PathAnalysisPt *path_ap,
|
|
float gclk_time,
|
|
float time_offset,
|
|
bool clk_used_as_data);
|
|
void reportClkSrcLatency(Arrival insertion,
|
|
float clk_time,
|
|
const EarlyLate *early_late);
|
|
void reportPathLine(const Path *path,
|
|
Delay incr,
|
|
Arrival time,
|
|
const char *line_case);
|
|
void reportCommonClkPessimism(const PathEnd *end,
|
|
Arrival &clk_arrival);
|
|
void reportClkUncertainty(const PathEnd *end,
|
|
Arrival &clk_arrival);
|
|
void reportClkLine(const Clock *clk,
|
|
const char *clk_name,
|
|
const RiseFall *clk_rf,
|
|
Arrival clk_time,
|
|
const MinMax *min_max);
|
|
void reportClkLine(const Clock *clk,
|
|
const char *clk_name,
|
|
const RiseFall *clk_rf,
|
|
Arrival prev_time,
|
|
Arrival clk_time,
|
|
const MinMax *min_max);
|
|
void reportRequired(const PathEnd *end,
|
|
string margin_msg);
|
|
void reportSlack(const PathEnd *end);
|
|
void reportSlack(Slack slack);
|
|
void reportSpaceSlack(PathEnd *end,
|
|
string &line);
|
|
void reportSpaceSlack(Slack slack,
|
|
string &line);
|
|
void reportSrcPathArrival(const PathEnd *end,
|
|
PathExpanded &expanded);
|
|
void reportPath(const PathEnd *end,
|
|
PathExpanded &expanded);
|
|
void reportPathFull(const Path *path);
|
|
void reportPathJson(const Path *path);
|
|
void reportPathHeader();
|
|
void reportPath1(const Path *path,
|
|
PathExpanded &expanded,
|
|
bool clk_used_as_data,
|
|
float time_offset);
|
|
void reportPath2(const Path *path,
|
|
PathExpanded &expanded,
|
|
bool clk_used_as_data,
|
|
float time_offset);
|
|
void reportPath3(const Path *path,
|
|
PathExpanded &expanded,
|
|
bool clk_used_as_data,
|
|
bool report_clk_path,
|
|
Arrival prev_time,
|
|
float time_offset);
|
|
void reportPath4(const Path *path,
|
|
PathExpanded &expanded,
|
|
bool clk_used_as_data,
|
|
bool skip_first_path,
|
|
bool skip_last_path,
|
|
float time_offset);
|
|
void reportPath5(const Path *path,
|
|
PathExpanded &expanded,
|
|
size_t path_first_index,
|
|
size_t path_last_index,
|
|
bool propagated_clk,
|
|
bool report_clk_path,
|
|
Arrival prev_time,
|
|
float time_offset);
|
|
void reportInputExternalDelay(const Path *path,
|
|
float time_offset);
|
|
void reportLine(const char *what,
|
|
Delay total,
|
|
const EarlyLate *early_late);
|
|
void reportLineNegative(const char *what,
|
|
Delay total,
|
|
const EarlyLate *early_late);
|
|
void reportLine(const char *what,
|
|
Delay total,
|
|
const EarlyLate *early_late,
|
|
const RiseFall *rf);
|
|
void reportLine(const char *what,
|
|
Delay incr,
|
|
Delay total,
|
|
const EarlyLate *early_late);
|
|
void reportLine(const char *what,
|
|
Delay incr,
|
|
Delay total,
|
|
const EarlyLate *early_late,
|
|
const RiseFall *rf);
|
|
void reportLine(const char *what,
|
|
Slew slew,
|
|
Delay incr,
|
|
Delay total,
|
|
const EarlyLate *early_late);
|
|
void reportLine(const char *what,
|
|
float cap,
|
|
Slew slew,
|
|
float fanout,
|
|
Delay incr,
|
|
Delay total,
|
|
bool total_with_minus,
|
|
const EarlyLate *early_late,
|
|
const RiseFall *rf,
|
|
const char *line_case);
|
|
void reportLineTotal(const char *what,
|
|
Delay incr,
|
|
const EarlyLate *early_late);
|
|
void reportLineTotalMinus(const char *what,
|
|
Delay decr,
|
|
const EarlyLate *early_late);
|
|
void reportLineTotal1(const char *what,
|
|
Delay incr,
|
|
bool incr_with_minus,
|
|
const EarlyLate *early_late);
|
|
void reportDashLineTotal();
|
|
void reportDescription(const char *what,
|
|
string &result);
|
|
void reportDescription(const char *what,
|
|
bool first_field,
|
|
bool last_field,
|
|
string &result);
|
|
void reportFieldTime(float value,
|
|
ReportField *field,
|
|
string &result);
|
|
void reportSpaceFieldTime(float value,
|
|
string &result);
|
|
void reportSpaceFieldDelay(Delay value,
|
|
const EarlyLate *early_late,
|
|
string &result);
|
|
void reportFieldDelayMinus(Delay value,
|
|
const EarlyLate *early_late,
|
|
ReportField *field,
|
|
string &result);
|
|
void reportTotalDelay(Delay value,
|
|
const EarlyLate *early_late,
|
|
string &result);
|
|
void reportFieldDelay(Delay value,
|
|
const EarlyLate *early_late,
|
|
ReportField *field,
|
|
string &result);
|
|
void reportField(float value,
|
|
const ReportField *field,
|
|
string &result);
|
|
void reportField(const char *value,
|
|
const ReportField *field,
|
|
string &result);
|
|
void reportFieldBlank(const ReportField *field,
|
|
string &result);
|
|
void reportDashLine();
|
|
void reportDashLine(int line_width);
|
|
void reportBlankLine();
|
|
string descriptionField(Vertex *vertex);
|
|
bool reportClkPath() const;
|
|
string clkName(const Clock *clk,
|
|
bool inverted);
|
|
bool hasExtInputDriver(const Pin *pin,
|
|
const RiseFall *rf,
|
|
const MinMax *min_max);
|
|
float drvrFanout(Vertex *drvr,
|
|
const Corner *corner,
|
|
const MinMax *min_max);
|
|
const char *mpwCheckHiLow(MinPulseWidthCheck *check);
|
|
void reportSkewClkPath(const char *arrival_msg,
|
|
const PathVertex *clk_path);
|
|
const char *edgeRegLatchDesc(Edge *edge,
|
|
TimingArc *arc);
|
|
const char *checkRegLatchDesc(const TimingRole *role,
|
|
const RiseFall *clk_rf) const;
|
|
const char *regDesc(const RiseFall *clk_rf) const;
|
|
const char *latchDesc(const RiseFall *clk_rf) const;
|
|
void pathClkPath(const Path *path,
|
|
PathRef &clk_path) const;
|
|
bool isPropagated(const Path *clk_path);
|
|
bool isPropagated(const Path *clk_path,
|
|
const Clock *clk);
|
|
bool pathFromClkPin(PathExpanded &expanded);
|
|
bool pathFromClkPin(const Path *path,
|
|
const Pin *start_pin);
|
|
void latchPaths(const Path *path,
|
|
// Return values.
|
|
PathRef &d_path,
|
|
PathRef &q_path,
|
|
Edge *&d_q_edge) const;
|
|
bool nextArcAnnotated(const PathRef *next_path,
|
|
size_t next_index,
|
|
PathExpanded &expanded,
|
|
DcalcAPIndex ap_index);
|
|
float tgtClkInsertionOffet(const Path *clk_path,
|
|
const EarlyLate *early_late,
|
|
PathAnalysisPt *path_ap);
|
|
// InputDelay used to seed path root.
|
|
InputDelay *pathInputDelay(const Path *path) const;
|
|
void pathInputDelayRefPath(const Path *path,
|
|
InputDelay *input_delay,
|
|
// Return value.
|
|
PathRef &ref_path);
|
|
const char *asRisingFalling(const RiseFall *rf);
|
|
const char *asRiseFall(const RiseFall *rf);
|
|
Delay delayIncr(Delay time,
|
|
Delay prev,
|
|
const MinMax *min_max);
|
|
|
|
// Path options.
|
|
ReportPathFormat format_;
|
|
ReportFieldSeq fields_;
|
|
bool report_input_pin_;
|
|
bool report_net_;
|
|
bool no_split_;
|
|
int digits_;
|
|
bool report_sigmas_;
|
|
|
|
int start_end_pt_width_;
|
|
|
|
ReportField *field_description_;
|
|
ReportField *field_total_;
|
|
ReportField *field_incr_;
|
|
ReportField *field_capacitance_;
|
|
ReportField *field_slew_;
|
|
ReportField *field_fanout_;
|
|
ReportField *field_edge_;
|
|
ReportField *field_case_;
|
|
|
|
const char *plus_zero_;
|
|
const char *minus_zero_;
|
|
|
|
static const float field_blank_;
|
|
static const float field_skip_;
|
|
};
|
|
|
|
class ReportField
|
|
{
|
|
public:
|
|
ReportField(const char *name,
|
|
const char *title,
|
|
int width,
|
|
bool left_justify,
|
|
Unit *unit,
|
|
bool enabled);
|
|
~ReportField();
|
|
void setProperties(const char *title,
|
|
int width,
|
|
bool left_justify);
|
|
const char *name() const { return name_; }
|
|
const char *title() const { return title_; }
|
|
int width() const { return width_; }
|
|
void setWidth(int width);
|
|
bool leftJustify() const { return left_justify_; }
|
|
Unit *unit() const { return unit_; }
|
|
const char *blank() const { return blank_; }
|
|
void setEnabled(bool enabled);
|
|
bool enabled() const { return enabled_; }
|
|
|
|
protected:
|
|
const char *name_;
|
|
const char *title_;
|
|
int width_;
|
|
bool left_justify_;
|
|
Unit *unit_;
|
|
bool enabled_;
|
|
char *blank_;
|
|
};
|
|
|
|
} // namespace
|