Skip to content

Commit 8aebd6a

Browse files
committed
[vpr][analysis] add comments
1 parent 333de67 commit 8aebd6a

File tree

3 files changed

+67
-5
lines changed

3 files changed

+67
-5
lines changed

vpr/src/analysis/timing_reports.cpp

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
1+
#include <fstream>
2+
#include <sstream>
3+
14
#include "timing_reports.h"
25

36
#include "tatum/TimingReporter.hpp"
@@ -61,3 +64,58 @@ void generate_hold_timing_stats(const std::string& prefix,
6164

6265
timing_reporter.report_unconstrained_hold(prefix + "report_unconstrained_timing.hold.rpt", *timing_info.hold_analyzer());
6366
}
67+
68+
void generate_net_timing_report(const std::string& prefix,
69+
const SetupHoldTimingInfo& timing_info,
70+
const AnalysisDelayCalculator& delay_calc) {
71+
/* Create a report file for net timing information */
72+
std::ofstream os(prefix + "report_net_timing.rpt");
73+
const auto& atom_netlist = g_vpr_ctx.atom().netlist();
74+
const auto& atom_lookup = g_vpr_ctx.atom().lookup();
75+
76+
const auto& timing_ctx = g_vpr_ctx.timing();
77+
const auto& timing_graph = timing_ctx.graph;
78+
79+
for (const auto& net : atom_netlist.nets()) {
80+
/* Skip constant nets */
81+
if (atom_netlist.net_is_constant(net)) {
82+
continue;
83+
}
84+
85+
const auto& net_name = atom_netlist.net_name(net);
86+
87+
/* Get source pin and its timing information */
88+
const auto& source_pin = *atom_netlist.net_pins(net).begin();
89+
auto source_pin_slack = timing_info.setup_pin_slack(source_pin);
90+
/* Timing graph node id corresponding to the net's source pin */
91+
auto tg_source_node = atom_lookup.atom_pin_tnode(source_pin);
92+
VTR_ASSERT(tg_source_node.is_valid());
93+
94+
const size_t fanout = atom_netlist.net_sinks(net).size();
95+
os << net_name << " : " << fanout << " : " << atom_netlist.pin_name(source_pin).c_str() << " " << source_pin_slack << " : ";
96+
97+
/* Iterate over all fanout pins and print their timing information */
98+
for (size_t net_pin_index = 1; net_pin_index <= fanout; ++net_pin_index) {
99+
const auto& pin = *(atom_netlist.net_pins(net).begin() + net_pin_index);
100+
101+
/* Get timing graph node id corresponding to the fanout pin */
102+
const auto& tg_sink_node = atom_lookup.atom_pin_tnode(pin);
103+
VTR_ASSERT(tg_sink_node.is_valid());
104+
105+
/* Get timing graph edge id between atom pins */
106+
const auto& tg_edge_id = timing_graph->find_edge(tg_source_node, tg_sink_node);
107+
VTR_ASSERT(tg_edge_id.is_valid());
108+
109+
/* Get timing information for the fanout pin */
110+
const auto& pin_setup_slack = timing_info.setup_pin_slack(pin);
111+
const auto& pin_delay = delay_calc.max_edge_delay(*timing_graph, tg_edge_id);
112+
113+
const auto& pin_name = atom_netlist.pin_name(pin);
114+
os << pin_name << " " << std::scientific << pin_setup_slack << " " << pin_delay;
115+
if (net_pin_index < fanout) {
116+
os << " : ";
117+
}
118+
}
119+
os << "," << std::endl;
120+
}
121+
}

vpr/src/analysis/timing_reports.h

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,10 +21,15 @@ void generate_hold_timing_stats(const std::string& prefix,
2121
bool is_flat,
2222
const BlkLocRegistry& blk_loc_registry);
2323

24+
/**
25+
* @brief Generates timing information for each net in atom netlist
26+
*
27+
* @param prefix The prefix for the report file to be added to filename: report_net_timing.rpt
28+
* @param timing_info Updated timing information
29+
* @param delay_calc Delay calculator
30+
*/
2431
void generate_net_timing_report(const std::string& prefix,
2532
const SetupHoldTimingInfo& timing_info,
26-
const AnalysisDelayCalculator& delay_calc,
27-
const t_analysis_opts& analysis_opts,
28-
const BlkLocRegistry& blk_loc_registry);
33+
const AnalysisDelayCalculator& delay_calc);
2934

3035
#endif

vpr/src/base/vpr_api.cpp

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1477,8 +1477,7 @@ void vpr_analysis(const Netlist<>& net_list,
14771477
}
14781478

14791479
if (vpr_setup.AnalysisOpts.generate_net_timing_report) {
1480-
generate_net_timing_report(/*prefix=*/"", *timing_info, *analysis_delay_calc,
1481-
vpr_setup.AnalysisOpts, blk_loc_registry);
1480+
generate_net_timing_report(/*prefix=*/"", *timing_info, *analysis_delay_calc);
14821481
}
14831482

14841483
//Do power analysis

0 commit comments

Comments
 (0)