OpenFPGA/libs/EXTERNAL/libtatum/tatum_test/util.cpp

42 lines
1.2 KiB
C++

#include <cmath>
#include "util.hpp"
using tatum::EdgeId;
using tatum::Time;
float relative_error(float A, float B) {
if (A == B) {
return 0.;
}
if (fabs(B) > fabs(A)) {
return fabs((A - B) / B);
} else {
return fabs((A - B) / A);
}
}
void remap_delay_calculator(const tatum::TimingGraph& tg, tatum::FixedDelayCalculator& dc, const tatum::util::linear_map<EdgeId,EdgeId>& edge_id_map) {
tatum::util::linear_map<EdgeId,Time> max_edge_delays(edge_id_map.size());
tatum::util::linear_map<EdgeId,Time> setup_times(edge_id_map.size());
tatum::util::linear_map<EdgeId,Time> min_edge_delays(edge_id_map.size());
tatum::util::linear_map<EdgeId,Time> hold_times(edge_id_map.size());
//Re-map
for(size_t iedge = 0; iedge < edge_id_map.size(); ++iedge) {
EdgeId old_edge(iedge);
EdgeId new_edge = edge_id_map[old_edge];
max_edge_delays[new_edge] = dc.max_edge_delay(tg, old_edge);
setup_times[new_edge] = dc.setup_time(tg, old_edge);
min_edge_delays[new_edge] = dc.min_edge_delay(tg, old_edge);
hold_times[new_edge] = dc.hold_time(tg, old_edge);
}
//Update
dc = tatum::FixedDelayCalculator(max_edge_delays, setup_times, min_edge_delays, hold_times);
}