Class timingEvaluator

Class Documentation

class timingEvaluator

时序评估器核心类。为时序驱动的超图分割提供基础计算支持。

在划分流程(如 InitialRefine 阶段)中频繁查询此类以:

  1. 评估节点移动对时序代价的影响(通过指数放大最差路径惩罚)。

  2. 统计 Slack 并触发传播更新(如果配置了 HSFullTiming 等高阶接口)。

Public Functions

timingEvaluator(float net_timing_factor_coarse, float net_timing_factor_refine, float path_timing_factor, float path_snaking_factor, float timing_exp_factor, bool guardband_flag, int has_timing_propogate, int propogate_effort_value, flat_hash_map<pair<int, int>, pinSlack> pin_minslack, flat_hash_map<pair<int, int>, vector<int>> pin_paths, vector<TimingPath> original_timing_paths, int path_slack_update_mode, shared_ptr<curPartStatus> mulClock_status, graph originHgraph, shared_ptr<mulClockAttr> clockAttr, int enable_partition_HSFulltiming, int skip_path_timing)

完整参数构造函数,初始化所有时序计算所需的环境变量和查找表。

Parameters:
  • net_timing_factor_coarse[in] 粗化阶段基础时序因子。

  • net_timing_factor_refine[in] 细化阶段基础时序因子。

  • path_timing_factor[in] 路径时序加权因子。

  • path_snaking_factor[in] 反蛇形路径惩罚因子。

  • timing_exp_factor[in] Slack 指数放大因子。

  • guardband_flag[in] 是否启用保护带。

  • has_timing_propogate[in] 是否启用时序传播。

  • propogate_effort_value[in] 时序传播力度。

  • pin_minslack[in] 引脚最小 slack 表。

  • pin_paths[in] 引脚路径表。

  • original_timing_paths[in] 初始时序路径集合。

  • path_slack_update_mode[in] slack 更新模式。

  • mulClock_status[in] 多时钟状态句柄。

  • originHgraph[in] 原始超图。

  • clockAttr[in] 时钟属性句柄。

  • enable_partition_HSFulltiming[in] 是否启用外部 HSFullTiming。

  • skip_path_timing[in] 是否跳过路径时序。

timingEvaluator()

无时序模式的默认构造方法(用于纯图切割场景)。

timingEvaluator(const timingEvaluator&) = delete
timingEvaluator(timingEvaluator&) = delete
virtual ~timingEvaluator() = default
inline float getNetTimingFactorCoarse() const

获取面向粗划阶的基础线切割权重成本乘数。

inline float getNetTimingFactorRefine() const

获取面向细解提升阶的基础线切割权重成本乘数。

inline float getPathtimingfactor() const

获知长路径综合算分的基线倾斜系数。

inline float getPathSnakingFactor() const

获取路径蛇行(折返绕路)惩罚系数。

inline float getTimingExpFactor() const

获取 Slack 指数放大因子,直接决定修复最差路径的力度。

inline bool getGuardbandFlag() const

查询是否启用了保护带(防止时序估计过于激进)。

inline int getTimingPropogateFlag() const

查询是否启用了时序传播更新功能。

inline int getPropogaEffortValue() const

获取时序传播的计算力度。

inline int getPathSlackUpdateMode() const

查询 Slack 重算时走的是快读快写近似模型还是精确长周期模型策略标记。

inline int getEnablePartitionHSFulltiming() const

查看此架构是否桥接连接了 HSFullTiming 超高性能硬核静态评估库。

inline int getSkipPathTiming() const

检测当前状态是无视串联路径,只关注局部端点(如全散落评估模式)。

inline shared_ptr<curPartStatus> getMulClockStatus() const

获取多时钟属性的当前分区状态。

inline flat_hash_map<pair<int, int>, pinSlack> getPinSlacks() const

获取各引脚的最小 Slack 缓存。

inline flat_hash_map<pair<int, int>, vector<int>> getInsPinPaths() const

获取引脚到关联时序路径 ID 的映射。

inline vector<TimingPath> getTimingPaths() const

获取分区前的原始时序路径列表,用于与更新后的路径结果对比。

inline graph getOriginHgraph() const

获取原始超图。

inline shared_ptr<mulClockAttr> getClockAttr() const

获取多周期时序约束。

timing init(timing timingInfo) const

为超边执行初始代价计算并建立基准模型,将结果写入 timing 数据区。

Parameters:

timingInfo[in] 时序分析基础数据对象。

Returns:

填充了计算结果的 timing 结构体。

Public Static Functions

static int getCutOnPath(const vector<int> &path, const vector<int> &parts)

计算一条路径跨越 FPGA 分区边界的次数。

Parameters:
  • path[in] 按顺序排列的路径节点。

  • parts[in] 节点到 FPGA 的分区映射。

Returns:

路径上的切割次数。

static PathStats getTimingCutsOld(const graph &hgraph, const vector<int> &parts, const float &extra_delay_cut)

使用旧版简化统计规则计算时序路径指标。

Parameters:
  • hgraph[in] 输入超图。

  • parts[in] 节点到 FPGA 的分区映射。

  • extra_delay_cut[in] 简化模式下每次跨分区切割增加的固定延迟。

Returns:

旧版统计得到的路径指标。

static void PrintPathStatsOld(const PathStats &path_stats)

打印旧版路径统计结果。

static PathStats getTimingCuts2(graph &hgraph, const vector<int> &parts, const vector<vector<int>> &dist, const int &guardband_flag, const float &extra_delay_cut, float &maximum_clock_period, shared_ptr<timingEvaluator> &evaluator, const int &fpga_num, const flat_hash_map<int, float> &original_pin_minslack, const flat_hash_map<pair<int, int>, vector<int>> &pin_paths, const vector<TimingPath> &original_timing_paths, const int &has_timing_base)

使用精细估算法统计全路径时序,并处理跨 FPGA 与多时钟域保护带。

Parameters:
  • hgraph[in] 输入超图。

  • parts[in] 节点到 FPGA 的分区映射。

  • dist[in] 提供 FPGA 间逻辑或物理跳数距离矩阵。

  • guardband_flag[in] 是否启用保护带。

  • extra_delay_cut[in] 常规跨分区连线产生的固定额外延迟。

  • maximum_clock_period[in] 输入或更新当前最严格的最大时钟周期。

  • evaluator[in] 时序评估器。

  • fpga_num[in] FPGA 数量。

  • original_pin_minslack[in] 建图阶段记录的原始引脚最小 Slack。

  • pin_paths[in] 引脚到相关时序路径的映射。

  • original_timing_paths[in] 分区前的基准时序路径列表,用于前后结果对比。

  • has_timing_base[in] 是否启用基础时序评分。

Returns:

详细统计后的 PathStats。

static void PrintSlackStats(const PathStats &path_stats, const bool &has_die, const bool &consider_tdm, const shared_ptr<mulClockAttr> &mul_clock_attr, const vector<TimingPath> &timing_paths)

向外部打印本轮切割行为导致在时序裕度(Slack)层面的退化报告小结和最差跌落路况。

static void PrintPathStats(PathStats &path_stats, vector<TimingPath> &timing_paths, const bool &has_die, const bool &consider_tdm, const shared_ptr<mulClockAttr> &mul_clock_attr)

印写包含Hop跳步,越级割裂严重等在内的路径总体形变破坏长表汇总输出日志。

static float getWorstSlackAfterCutsForOldSlack(graph &hgraph, const vector<int> &parts, const vector<vector<int>> &dist, const int &guardband_flag, const shared_ptr<curPartStatus> &mulClock_status)

[计算工具] 使用简化旧法则在指定分割后计算并返回最差的 Slack 负裕量 slack并回传。

static float getWorstSlackAfterCutsForOldSlackConsideringTDM(graph &hgraph, const vector<int> &parts, const fpga &fpgas, const int &guardband_flag, const shared_ptr<curPartStatus> &mulClock_status)

[计算工具] 考虑 TDM 延迟影响后的最差 Slack 计算方法。

static float getWorstSlackAfterCuts(graph &hgraph, const vector<int> &parts, const float &extra_delay_cut, const int &guardband_flag, const float &clock_period)

[计算工具] 直接把切割边附加阻延并入周期硬卡之后求出来的当代最紧巴宽裕度数。

static float calCutNetgCost(const graph &g, const vector<int> &parts, int fpga_num)

在解题移动时即刻算出若这根超边被跨越了会根据惩罚因子扣出多大成本亏损来。

static float calCutPathCost(int path_id, const timing &timingInfo, const vector<int> &parts, const vector<vector<int>> &dist, const float &path_timing_factor, const float &path_snaking_factor, const int &v, const int &to)

精确追踪针对单一某条时序全路径在节点 v 被计划试探挪腾到另一个区 to 时,算出的差额分账单。

Parameters:
  • path_id[in] 引发的哪一条特定目标时路路编号。

  • timingInfo[in] 各线束与节点成本与余量的速查底案结构。

  • parts[in] 各节点分配状态表。

  • dist[in] FPGA片块间物理距表。

  • path_timing_factor[in] 时路全局处罚指数。

  • path_snaking_factor[in] 针对非规则的蛇形连线单独翻倍严惩指标。

  • v[in] 将被提拉移动的核心对象节点。

  • to[in] 新拟被转移安排的落点硬件阵列编号。

Returns:

移动所造成的综合连带路网受灾估值折算(值越高表明此移动在路上时序惩罚越大)。

static vector<float> getCutPathsCost(const timing &timingInfo, const vector<int> &parts, const vector<vector<int>> &dist, const float &path_timing_factor, const float &path_snaking_factor)

汇总拉取获取在现有布局下每一条监控管辖内路径个体的路径切割代价统计表。

static vector<int> getCutHyperedges(const graph &g, const vector<int> &parts, const vector<pair<int, int>> &die_parts)

搜检当前给定的分割归属盘里到底有哪些内部互联连线的超边(Hyperedges)实体被跨器件切断或分割了。

static timing updateTiming(const int &has_timing_propogate, shared_ptr<timingEvaluator> evaluator, const vector<int> &parts, const fpga &fpgas, const bool &has_timing_tdm, const int &path_slack_update_mode, const graph &finest, const bool &isUpdateCost, HSFullTiming::HSPartitionFlow &pFlow, const shared_ptr<mulClockAttr> &clockAttr, const int &enable_HSFulltiming, timing &updatedTimingInfo, float &worst_slack)

全局时速信息触发级重同洗脑更新入口。通过联动高级流场传波全面核实各个点的延时改变幅并将之反馈出网。

Returns:

返回彻底更新清洗过各项属性及处罚余差状态后得到的新时延状况架构总表 timing 对象。

static void preprocessPpath(const vector<TimingPath> &original_timing_paths, vector<flat_hash_map<pair<int, int>, int>> &ppathValue_to_index, const int &psize)

构造加速提速正反向查表索引(空间换速度),使在热循环中依据点管脚查找映射目标时路实现秒批复。

static void getCutEdgeIds(const vector<int> &cut_hyperedges, const graph &g, const vector<int> &parts, const flat_hash_map<int, set<pair<int, int>>> &net_insPin_set, const flat_hash_map<pair<int, int>, int> &pin2Edge, vector<int> &edgeIds, const int &l)

结合被切割到的超边结合物理网络引脚将这部分网线解出具体的时序边ID编号表供后续降级惩戒扣准定位。

static int convertPathToSimpleTiming(HSFullTiming::HSPartitionFlow &pFlow, vector<HSFullTiming::HSStaBase::timingpath> &path, vector<SimpleTiming> &simpleTimingsCut)

架设一座结构精简的转接梯,把HSFullTiming引擎深厚复杂的硬级底层报告提炼成内部使用的简单轻量 SimpleTiming 类型列表便在内存游走查收。

static void getCutEdgePath(const vector<int> &cut_hyperedges, const graph &g, const vector<int> &parts, const flat_hash_map<int, set<pair<int, int>>> &net_insPin_set, HSFullTiming::HSPartitionFlow &pFlow, vector<SimpleTiming> &simpleTimingsCut, const bool &entireFlag, const int &l)

透达查询到究竟有哪些细粒度通路实际上搭载依附在那被划破的一众受灾网络边上用于实施延时回写补点推算。

static void contractionPath(const vector<int> &nodemap, const vector<TimingPath> &timing_paths, const vector<int> &hyperedge_cluster_id_vec, vector<TimingPath> &timing_paths_c, vector<set<int>> &ins_paths_c, const bool &insPathFlag)

基于节点映射收缩路径。

static void getPathContraction(const vector<vector<int>> &maps, const vector<vector<int>> &hyperedge_cluster_id_vec_maps, const vector<graph> &graphs, const int &l, const vector<TimingPath> &cut_timing_paths, vector<TimingPath> &graphsl_timing_paths, vector<set<int>> &graphsl_ins_paths)

在多层图上生成收缩后的路径集合。

static void newInfoMerge(vector<TimingPath> &timing_paths, vector<set<int>> &ins_paths, const vector<TimingPath> &timing_paths_newadd, const bool &insPathFlag)

合并新增路径信息。

static void propogateOld1(flat_hash_map<pair<int, int>, pinSlack> &pin_minslack, const vector<TimingPath> &finest_timing_paths, const flat_hash_map<pair<int, int>, vector<int>> &pin_paths, const pair<int, int> &pinid)

旧版传播方法 1。

static void propogateOld2(flat_hash_map<pair<int, int>, pinSlack> &pin_minslack, HSFullTiming::HSPartitionFlow &pFlow, const pair<int, int> &pinid)

旧版传播方法 2(基于 pFlow)。

static void propogateNew(flat_hash_map<pair<int, int>, pinSlack> &pin_minslack, const pair<int, int> &pinid)

新版传播方法。

Public Static Attributes

static ofstream fout

控制将上文时序估测信息报表写入独立留存盘流向句点。

Private Members

float net_timing_factor_coarse

粗化环节专属 Net(网路)本身线权放大基础倍系数。

float net_timing_factor_refine

细化解缠环节时Net切断基础赔率倍数因子。

float path_timing_factor

路径全局成本打分基础系数。

float path_snaking_factor

路径出现贪吃蛇反向绕环跳步的惩罚打分放大系数。

float timing_exp_factor

Slack 的指数放大因子,Slack 越差 惩罚指数增长越快,驱动优先改善最差路径。

bool guardband_flag

布线警戒保护带(防止过于乐观)补偿总闸。

int has_timing_propogate

是否启用时序传播更新功能(计算代价较高)。

int propogate_effort_value

传播的计算力度/穿透深度(限制推演规模防止死循环)。

int path_slack_update_mode

切换不同的快速 Slack 重算降级模拟模式机制标识。

int enable_partition_HSFulltiming

是否启用外部 HSFullTiming 高精度时序评估库。

int skip_path_timing

忽略 Path 取向时序转为只看单网线取向成本逻辑。

flat_hash_map<pair<int, int>, pinSlack> pin_minslack

引脚到其最小 Slack 的快速查找表。

flat_hash_map<pair<int, int>, vector<int>> pin_paths

反查表:由引脚追踪其所属的时序路径编号。

vector<TimingPath> original_timing_paths

pcyTodo: remove 存储最原生态始发时的静态路径状态参照。

shared_ptr<curPartStatus> mulClock_status

pcyTodo: remove 在带有多时钟驱动的电路下挂载相应的驱动管理态。

graph originHgraph

pcyTodo: remove 保留原始网表连线结构的缩影避免迭代破坏掉原始连线证据。

shared_ptr<mulClockAttr> clockAttr

记录全局多个时钟域网络周期以及相互隔离和干扰等属性。