Class timingEvaluator¶
Defined in File evaluator.h
Class Documentation¶
-
class timingEvaluator¶
时序评估器核心类。为时序驱动的超图分割提供基础计算支持。
在划分流程(如 Initial 与 Refine 阶段)中频繁查询此类以:
评估节点移动对时序代价的影响(通过指数放大最差路径惩罚)。
统计 Slack 并触发传播更新(如果配置了 HSFullTiming 等高阶接口)。
Public Functions
完整参数构造函数,初始化所有时序计算所需的环境变量和查找表。
- 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>, vector<int>> getInsPinPaths() const¶
获取引脚到关联时序路径 ID 的映射。
-
inline vector<TimingPath> getTimingPaths() const¶
获取分区前的原始时序路径列表,用于与更新后的路径结果对比。
-
inline shared_ptr<mulClockAttr> getClockAttr() const¶
获取多周期时序约束。
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:
旧版统计得到的路径指标。
使用精细估算法统计全路径时序,并处理跨 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。
向外部打印本轮切割行为导致在时序裕度(Slack)层面的退化报告小结和最差跌落路况。
印写包含Hop跳步,越级割裂严重等在内的路径总体形变破坏长表汇总输出日志。
[计算工具] 使用简化旧法则在指定分割后计算并返回最差的 Slack 负裕量 slack并回传。
[计算工具] 考虑 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)实体被跨器件切断或分割了。
全局时速信息触发级重同洗脑更新入口。通过联动高级流场传波全面核实各个点的延时改变幅并将之反馈出网。
- 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)。
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>, vector<int>> pin_paths¶
反查表:由引脚追踪其所属的时序路径编号。
-
vector<TimingPath> original_timing_paths¶
pcyTodo: remove 存储最原生态始发时的静态路径状态参照。
-
shared_ptr<curPartStatus> mulClock_status¶
pcyTodo: remove 在带有多时钟驱动的电路下挂载相应的驱动管理态。
-
shared_ptr<mulClockAttr> clockAttr¶
记录全局多个时钟域网络周期以及相互隔离和干扰等属性。