OpenFPGA/vpr/src/place/move_generator.h

32 lines
1.0 KiB
C++

#ifndef VPR_MOVE_GENERATOR_H
#define VPR_MOVE_GENERATOR_H
#include "vpr_types.h"
#include "move_utils.h"
#include <limits>
struct MoveOutcomeStats {
float delta_cost_norm = std::numeric_limits<float>::quiet_NaN();
float delta_bb_cost_norm = std::numeric_limits<float>::quiet_NaN();
float delta_timing_cost_norm = std::numeric_limits<float>::quiet_NaN();
float delta_bb_cost_abs = std::numeric_limits<float>::quiet_NaN();
float delta_timing_cost_abs = std::numeric_limits<float>::quiet_NaN();
e_move_result outcome = ABORTED;
float elapsed_time = std::numeric_limits<float>::quiet_NaN();
};
class MoveGenerator {
public:
virtual ~MoveGenerator() {}
//Updates affected_blocks with the proposed move, while respecting the current rlim
virtual e_create_move propose_move(t_pl_blocks_to_be_moved& affected_blocks, float rlim) = 0;
//Recieves feedback about the outcome of the previously proposed move
virtual void process_outcome(const MoveOutcomeStats& /*move_outcome*/) {}
};
#endif