Skip to content

Commit 038440e

Browse files
committed
unite generate_setup_timing_report and generate_hold_timing_report into single function generate_timing_report to minimize code dublication
1 parent c4e7357 commit 038440e

File tree

2 files changed

+22
-40
lines changed

2 files changed

+22
-40
lines changed

vpr/src/server/pathhelper.cpp

Lines changed: 21 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@
1515
#include "vpr_types.h"
1616

1717
#include <sstream>
18-
#include <cassert>
1918

2019
namespace server {
2120

@@ -37,12 +36,13 @@ static void collect_crit_path_metadata(std::stringstream& ss, const std::vector<
3736
}
3837

3938
/**
40-
* @brief helper function to calculate the setup critical path with specified parameters.
39+
* @brief helper function to generate critical path timing report with specified parameters.
4140
*/
42-
static CritPathsResult generate_setup_timing_report(const SetupTimingInfo& timing_info,
43-
const AnalysisDelayCalculator& delay_calc,
44-
const t_analysis_opts& analysis_opts,
45-
bool is_flat) {
41+
static CritPathsResult generate_timing_report(const SetupHoldTimingInfo& timing_info,
42+
const AnalysisDelayCalculator& delay_calc,
43+
const t_analysis_opts& analysis_opts,
44+
const std::string& report_type,
45+
bool is_flat) {
4646
auto& timing_ctx = g_vpr_ctx.timing();
4747
auto& atom_ctx = g_vpr_ctx.atom();
4848

@@ -53,37 +53,24 @@ static CritPathsResult generate_setup_timing_report(const SetupTimingInfo& timin
5353

5454
std::vector<tatum::TimingPath> paths;
5555
std::stringstream ss;
56-
timing_reporter.report_timing_setup(paths, ss, *timing_info.setup_analyzer(), analysis_opts.timing_report_npaths);
57-
collect_crit_path_metadata(ss, paths);
58-
return CritPathsResult{paths, ss.str()};
59-
}
60-
61-
/**
62-
* @brief helper function to calculate the hold critical path with specified parameters.
63-
*/
64-
static CritPathsResult generate_hold_timing_report(const HoldTimingInfo& timing_info,
65-
const AnalysisDelayCalculator& delay_calc,
66-
const t_analysis_opts& analysis_opts,
67-
bool is_flat) {
68-
auto& timing_ctx = g_vpr_ctx.timing();
69-
auto& atom_ctx = g_vpr_ctx.atom();
70-
71-
VprTimingGraphResolver resolver(atom_ctx.nlist, atom_ctx.lookup, *timing_ctx.graph, delay_calc, is_flat);
72-
resolver.set_detail_level(analysis_opts.timing_report_detail);
73-
74-
tatum::TimingReporter timing_reporter(resolver, *timing_ctx.graph, *timing_ctx.constraints);
56+
if (report_type == comm::KEY_SETUP_PATH_LIST) {
57+
timing_reporter.report_timing_setup(paths, ss, *timing_info.setup_analyzer(), analysis_opts.timing_report_npaths);
58+
} else if (report_type == comm::KEY_HOLD_PATH_LIST) {
59+
timing_reporter.report_timing_hold(paths, ss, *timing_info.hold_analyzer(), analysis_opts.timing_report_npaths);
60+
}
7561

76-
std::vector<tatum::TimingPath> paths;
77-
std::stringstream ss;
78-
timing_reporter.report_timing_hold(paths, ss, *timing_info.hold_analyzer(), analysis_opts.timing_report_npaths);
79-
collect_crit_path_metadata(ss, paths);
80-
return CritPathsResult{paths, ss.str()};
62+
if (!paths.empty()) {
63+
collect_crit_path_metadata(ss, paths);
64+
return CritPathsResult{paths, ss.str()};
65+
} else {
66+
return CritPathsResult{std::vector<tatum::TimingPath>(), ""};
67+
}
8168
}
8269

8370
/**
84-
* @brief Unified helper function to calculate the critical path with specified parameters.
71+
* @brief Helper function to calculate critical path timing report with specified parameters.
8572
*/
86-
CritPathsResult calcCriticalPath(const std::string& type, int critPathNum, e_timing_report_detail detailsLevel, bool is_flat_routing)
73+
CritPathsResult calcCriticalPath(const std::string& report_type, int critPathNum, e_timing_report_detail detailsLevel, bool is_flat_routing)
8774
{
8875
// shortcuts
8976
auto& atom_ctx = g_vpr_ctx.atom();
@@ -99,19 +86,14 @@ CritPathsResult calcCriticalPath(const std::string& type, int critPathNum, e_tim
9986
auto analysis_delay_calc = std::make_shared<AnalysisDelayCalculator>(atom_ctx.nlist, atom_ctx.lookup, net_delay, is_flat_routing);
10087

10188
e_timing_update_type timing_update_type = e_timing_update_type::AUTO; // FULL, INCREMENTAL, AUTO
102-
auto timing_info = make_setup_hold_timing_info(analysis_delay_calc, timing_update_type);
89+
std::unique_ptr<SetupHoldTimingInfo> timing_info = make_setup_hold_timing_info(analysis_delay_calc, timing_update_type);
10390
timing_info->update();
10491

10592
t_analysis_opts analysis_opt;
10693
analysis_opt.timing_report_detail = detailsLevel;
10794
analysis_opt.timing_report_npaths = critPathNum;
10895

109-
if (type == comm::KEY_SETUP_PATH_LIST) {
110-
return generate_setup_timing_report(*timing_info, *analysis_delay_calc, analysis_opt, is_flat_routing);
111-
} else if (type == comm::KEY_HOLD_PATH_LIST) {
112-
return generate_hold_timing_report(*timing_info, *analysis_delay_calc, analysis_opt, is_flat_routing);
113-
}
114-
return CritPathsResult{std::vector<tatum::TimingPath>(), ""};
96+
return generate_timing_report(*timing_info, *analysis_delay_calc, analysis_opt, report_type, is_flat_routing);
11597
}
11698

11799
} // namespace server

vpr/src/server/pathhelper.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ struct CritPathsResult {
2222
};
2323

2424
/**
25-
* @brief Unified helper function to calculate the critical path with specified parameters.
25+
* @brief Helper function to calculate critical path timing report with specified parameters.
2626
*/
2727
CritPathsResult calcCriticalPath(const std::string& type, int critPathNum, e_timing_report_detail detailsLevel, bool is_flat_routing);
2828

0 commit comments

Comments
 (0)