A versatile data path synthesis approach based on heuristic search