.. _program_listing_file_src_sta_HSTimingDelta.h: Program Listing for File HSTimingDelta.h ======================================== |exhale_lsh| :ref:`Return to documentation for file ` (``src/sta/HSTimingDelta.h``) .. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS .. code-block:: cpp #pragma once #include #include #include #include #include #include #include "../partition/parallel_hashmap/phmap.h" #include "HSTimingEdge.h" #include "HSTimingLocalData.h" #include "HSTimingSlackRange.h" using phmap::flat_hash_map; using std::map; using std::pair; using std::set; using std::unordered_map; using std::vector; namespace HSFullTiming { class HSTimingDelta { public: HSTimingDelta(const HSPartitionFlow *parent, const HSTimingLocalData *oneLocal); ~HSTimingDelta(); int updateTimingEdge(const vector &disableEdgeList, const vector &enableEdgeList, const vector &delayChangedEdgeList = {}); int updateTimingEdge(vector> newParts); flat_hash_map &getPartDelta() { return partDelta; } flat_hash_map &getEnableDelta() { return enableDelta; } flat_hash_map &getSlackDelta() { return slackDelta; } map &getHop2DataCnt() { return m_hop2DataCnt; } const flat_hash_map> &getEdgeSlackBucketCntDelta() const { return m_edgeSlackBucketCntDelta; } const flat_hash_map>> & getNetPair2EdgeMinSlackBucketCntByNetDelta() const { return m_netPair2EdgeMinSlackBucketCntByNetDelta; } const flat_hash_map> & getNetPair2MinSlackBucketByNetDelta() const { return m_netPair2MinSlackBucketByNetDelta; } const map &getNetCutSlack2Cnt() const { return m_netCutSlack2Cnt; } int getMaxHop() const; int getMaxHopDataCnt(); double estimateTopkMinSlackSum(double topkMinSlackRatio = -1.0) const; int getWorstIndex(double topkMinSlackRatio = -1.0); int getCriticalCut(double topkMinSlackRatio = -1.0); void removeDataCnt(int edgeId, slackData *sData); void addDataCnt(int edgeId, slackData *sData); float getCutDelay(int edgeId); float getOldCutDelay(int edgeId); int getFPGADistance(int edgeId) const; int getOldFPGADistance(int edgeId) const; struct traceInfo { short hop = 0; float slack = FLT_MAX; int preEdgeId = -1; int edgeId = -1; }; private: int getPart(int nodeId) const; bool getEnable(int edgeId) const; uint64_t makeKey(int edgeId, int clkId) { return (uint64_t(uint32_t(edgeId)) << 32) | uint32_t(clkId); } slackData &getSlackData(int edgeId, int clkId); const slackData &getSlackData_ReadOnly(int edgeId, int clkId); pair getSlackDataRW(int edgeId, int clkId); slackData *getSlackDataByPtr(int edgeId, slackData *src); const map &getEdgeSlackBucketCnt_ReadOnly(int edgeId) const; map &getEdgeSlackBucketCntRW(int edgeId); const map> & getNetPair2EdgeMinSlackBucketCntByNet_ReadOnly(int netId) const; map> &getNetPair2EdgeMinSlackBucketCntByNetRW(int netId); const map &getNetPair2MinSlackBucketByNet_ReadOnly(int netId) const; map &getNetPair2MinSlackBucketByNetRW(int netId); int updateTimingEdge(map>> &clk2TraceList, bool bPostTrace); bool setWorseSlack(int clkId, traceInfo &trace, bool bPostValue); int getSlackIndex(float slack) { return HSFullTiming::slackToBucketIndex(slack); } int getFPGADistanceByPart(int partFrom, int partTo) const; int getTimingCutPairKey(int edgeId, bool useOldPart) const; int getNetCutMinSlackBucket(int netId, int pairKey) const; int getEdgeMinSlackBucket(int edgeId) const; int getMinSlackBucket(const map &bucket2Cnt) const; void updateNetCutSlackOnEdgeMinChange( int netId, int pairKey, int oldEdgeMinSlackBucket, int newEdgeMinSlackBucket); void updateNetCutSlackStatsForEdges(const set &edgeIds); const HSPartitionFlow *m_parent = nullptr; const HSTimingLocalData *m_localData = nullptr; const vector &m_outerEdgeAll; const vector &m_timingEdgeAll; const vector &m_partInfo; const vector> &m_cutDelays; const vector> &m_fpgaDistances; const vector> &m_edgeSlackBucketCntBase; const vector>> &m_netPair2EdgeMinSlackBucketCntByNetBase; const vector> &m_netPair2MinSlackBucketByNetBase; flat_hash_map partDelta; flat_hash_map enableDelta; flat_hash_map slackDelta; map m_hop2DataCnt; flat_hash_map> m_edgeSlackBucketCntDelta; flat_hash_map>> m_netPair2EdgeMinSlackBucketCntByNetDelta; flat_hash_map> m_netPair2MinSlackBucketByNetDelta; map m_netCutSlack2Cnt; static constexpr int kInvalidTimingCutPairKey = -1; static constexpr int kTimingCutPairKeyBase = 1024; static constexpr int kInvalidSlackBucket = std::numeric_limits::max(); }; } // namespace HSFullTiming