Skip to content

Commit 744ef2d

Browse files
authored
Merge pull request verilog-to-routing#2564 from verilog-to-routing/add_or_tools
NoC SAT Routing
2 parents 62fa97e + 2ed4497 commit 744ef2d

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

50 files changed

+1480
-283
lines changed

CMakeLists.txt

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ option(VPR_USE_SERVER "Specify whether vpr enables the server mode" ON)
4646
#VPR option --enable_analytic_placer is also required for Analytic Placement
4747
option(VPR_ANALYTIC_PLACE "Enable analytic placement in VPR." ON)
4848
option(VPR_ENABLE_INTERCHANGE "Enable FPGA interchange." ON)
49+
option(VPR_ENABLE_NOC_SAT_ROUTING "Enable NoC SAT routing." OFF)
4950

5051
option(WITH_BLIFEXPLORER "Enable build with blifexplorer" OFF)
5152

@@ -220,12 +221,12 @@ endforeach()
220221
set(FLEX_BISON_WARN_SUPPRESS_FLAGS "")
221222
set(FLEX_BISON_WARN_SUPPRESS_FLAGS_TO_CHECK
222223
"-Wno-redundant-decls" #Flex/bison generate code with redundant declarations
223-
"-Wno-switch-default" #Flex/bison generate switch statments w/o default cases
224+
"-Wno-switch-default" #Flex/bison generate switch statements w/o default cases
224225
"-Wno-unused-parameter" #Flex produces functions with unused params in re-entrant mode
225226
"-Wno-missing-declarations" #Flex misses some declarations in re-entrant mode
226227
"-Wimplicit-fallthrough=0" #Bison produces some cases with explicit
227228
"-Wno-sign-compare" #Flex generates code which performs some signed/unsigned comparison
228-
"-Wno-null-dereference" #Bison produces some cases with potenetial null derefs
229+
"-Wno-null-dereference" #Bison produces some cases with potential null derefs
229230
)
230231
foreach(flag ${FLEX_BISON_WARN_SUPPRESS_FLAGS_TO_CHECK})
231232
CHECK_CXX_COMPILER_FLAG(${flag} CXX_COMPILER_SUPPORTS_${flag})

libs/EXTERNAL/libargparse/src/argparse.hpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -173,7 +173,7 @@ namespace argparse {
173173
//Sets the hlep text
174174
Argument& help(std::string help_str);
175175

176-
//Sets the defuault value
176+
//Sets the default value
177177
Argument& default_value(const std::string& default_val);
178178
Argument& default_value(const std::vector<std::string>& default_val);
179179
Argument& default_value(const std::initializer_list<std::string>& default_val);

libs/libvtrutil/src/vtr_time.cpp

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33
#include "vtr_log.h"
44
#include "vtr_rusage.h"
55

6+
#include <utility>
7+
68
namespace vtr {
79

810
int f_timer_depth = 0;
@@ -30,7 +32,7 @@ float Timer::delta_max_rss_mib() const {
3032

3133
///@brief Constructor
3234
ScopedActionTimer::ScopedActionTimer(std::string action_str)
33-
: action_(action_str)
35+
: action_(std::move(action_str))
3436
, depth_(f_timer_depth++) {
3537
}
3638

@@ -69,7 +71,7 @@ int ScopedActionTimer::depth() const {
6971

7072
///@brief Constructor
7173
ScopedFinishTimer::ScopedFinishTimer(std::string action_str)
72-
: ScopedActionTimer(action_str) {
74+
: ScopedActionTimer(std::move(action_str)) {
7375
}
7476

7577
///@brief Destructor
@@ -83,7 +85,7 @@ ScopedFinishTimer::~ScopedFinishTimer() {
8385

8486
///@brief Constructor
8587
ScopedStartFinishTimer::ScopedStartFinishTimer(std::string action_str)
86-
: ScopedActionTimer(action_str) {
88+
: ScopedActionTimer(std::move(action_str)) {
8789
vtr::printf_info("%s%s\n", pad().c_str(), action().c_str());
8890
}
8991

libs/libvtrutil/src/vtr_time.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ class Timer {
3939
///@brief Scoped time class which prints the time elapsed for the specifid action
4040
class ScopedActionTimer : public Timer {
4141
public:
42-
ScopedActionTimer(const std::string action);
42+
ScopedActionTimer(std::string action);
4343
~ScopedActionTimer();
4444

4545
void quiet(bool value);
@@ -71,7 +71,7 @@ class ScopedActionTimer : public Timer {
7171
*/
7272
class ScopedFinishTimer : public ScopedActionTimer {
7373
public:
74-
ScopedFinishTimer(const std::string action);
74+
ScopedFinishTimer(std::string action);
7575
~ScopedFinishTimer();
7676
};
7777

@@ -91,7 +91,7 @@ class ScopedFinishTimer : public ScopedActionTimer {
9191
*/
9292
class ScopedStartFinishTimer : public ScopedActionTimer {
9393
public:
94-
ScopedStartFinishTimer(const std::string action);
94+
ScopedStartFinishTimer(std::string action);
9595
~ScopedStartFinishTimer();
9696
};
9797
} // namespace vtr

vpr/CMakeLists.txt

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,20 @@ if(${VPR_ANALYTIC_PLACE})
9292
endif(TARGET Eigen3::Eigen)
9393
endif()
9494

95+
if (${VPR_ENABLE_NOC_SAT_ROUTING})
96+
message(STATUS "VPR NoC SAT Routing: Requested")
97+
find_package(ortools CONFIG REQUIRED)
98+
if (TARGET ortools::ortools)
99+
message(STATUS "VPR NoC SAT Routing dependency (or-tools): Found")
100+
message(STATUS "VPR NoC SAT Routing: Enabled")
101+
target_link_libraries(libvpr ortools::ortools)
102+
target_compile_definitions(libvpr PUBLIC -DENABLE_NOC_SAT_ROUTING)
103+
else ()
104+
message(STATUS "VPR NoC SAT Routing dependency (or-tools): Not Found (You may need to set CMAKE_PREFIX_PATH in order for CMake to find your OR-Tools installation)")
105+
message(STATUS "VPR NoC SAT Routing: Disabled")
106+
endif (TARGET ortools::ortools)
107+
endif ()
108+
95109
set_target_properties(libvpr PROPERTIES PREFIX "") #Avoid extra 'lib' prefix
96110

97111
#Specify link-time dependencies
@@ -161,7 +175,7 @@ add_executable(vpr ${EXEC_SOURCES})
161175
target_link_libraries(vpr libvpr)
162176

163177

164-
#Supress IPO link warnings if IPO is enabled
178+
#Suppress IPO link warnings if IPO is enabled
165179
get_target_property(VPR_USES_IPO vpr INTERPROCEDURAL_OPTIMIZATION)
166180
if (VPR_USES_IPO)
167181
set_property(TARGET vpr APPEND PROPERTY LINK_FLAGS ${IPO_LINK_WARN_SUPRESS_FLAGS})
@@ -292,7 +306,7 @@ target_link_libraries(test_vpr
292306
Catch2::Catch2WithMain
293307
libvpr)
294308

295-
#Supress IPO link warnings if IPO is enabled
309+
#Suppress IPO link warnings if IPO is enabled
296310
get_target_property(TEST_VPR_USES_IPO vpr INTERPROCEDURAL_OPTIMIZATION)
297311
if (TEST_VPR_USES_IPO)
298312
set_property(TARGET test_vpr APPEND PROPERTY LINK_FLAGS ${IPO_LINK_WARN_SUPRESS_FLAGS})

vpr/src/base/SetupVPR.cpp

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -744,9 +744,20 @@ static void SetupNocOpts(const t_options& Options, t_noc_opts* NocOpts) {
744744
NocOpts->noc_latency_constraints_weighting = Options.noc_latency_constraints_weighting;
745745
NocOpts->noc_latency_weighting = Options.noc_latency_weighting;
746746
NocOpts->noc_congestion_weighting = Options.noc_congestion_weighting;
747-
NocOpts->noc_swap_percentage = Options.noc_swap_percentage;
748747
NocOpts->noc_centroid_weight = Options.noc_centroid_weight;
748+
NocOpts->noc_swap_percentage = Options.noc_swap_percentage;
749+
NocOpts->noc_sat_routing_bandwidth_resolution = Options.noc_sat_routing_bandwidth_resolution;
750+
NocOpts->noc_sat_routing_latency_overrun_weighting = Options.noc_sat_routing_latency_overrun_weighting_factor;
751+
NocOpts->noc_sat_routing_congestion_weighting = Options.noc_sat_routing_congestion_weighting_factor;
752+
if (Options.noc_sat_routing_num_workers.provenance() == argparse::Provenance::SPECIFIED) {
753+
NocOpts->noc_sat_routing_num_workers = Options.noc_sat_routing_num_workers;
754+
} else {
755+
NocOpts->noc_sat_routing_num_workers = (int)Options.num_workers;
756+
}
757+
NocOpts->noc_sat_routing_log_search_progress = Options.noc_sat_routing_log_search_progress;
749758
NocOpts->noc_placement_file_name = Options.noc_placement_file_name;
759+
760+
750761
}
751762

752763
static void SetupServerOpts(const t_options& Options, t_server_opts* ServerOpts) {

vpr/src/base/ShowSetup.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -802,6 +802,10 @@ static void ShowNocOpts(const t_noc_opts& NocOpts) {
802802
VTR_LOG("NocOpts.noc_latency_weighting: %f\n", NocOpts.noc_latency_weighting);
803803
VTR_LOG("NocOpts.noc_congestion_weighting: %f\n", NocOpts.noc_congestion_weighting);
804804
VTR_LOG("NocOpts.noc_swap_percentage: %d%%\n", NocOpts.noc_swap_percentage);
805+
VTR_LOG("NocOpts.noc_sat_routing_bandwidth_resolution: %d\n", NocOpts.noc_sat_routing_bandwidth_resolution);
806+
VTR_LOG("NocOpts.noc_sat_routing_latency_overrun_weighting: %d\n", NocOpts.noc_sat_routing_latency_overrun_weighting);
807+
VTR_LOG("NocOpts.noc_sat_routing_congestion_weighting: %d\n", NocOpts.noc_sat_routing_congestion_weighting);
808+
VTR_LOG("NocOpts.noc_sat_routing_num_workers: %d\n", NocOpts.noc_sat_routing_num_workers);
805809
VTR_LOG("NocOpts.noc_routing_algorithm: %s\n", NocOpts.noc_placement_file_name.c_str());
806810
VTR_LOG("\n");
807811
}

vpr/src/base/echo_files.cpp

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -32,8 +32,7 @@ void setEchoEnabled(bool echo_enabled) {
3232
}
3333

3434
void setAllEchoFileEnabled(bool value) {
35-
int i;
36-
for (i = 0; i < (int)E_ECHO_END_TOKEN; i++) {
35+
for (int i = 0; i < (int)E_ECHO_END_TOKEN; i++) {
3736
echoFileEnabled[i] = value;
3837
}
3938
}
@@ -67,7 +66,7 @@ void alloc_and_load_echo_file_info() {
6766
echoFileNames = new char*[(int)E_ECHO_END_TOKEN];
6867
for (auto i = 0; i < (int)E_ECHO_END_TOKEN; i++) {
6968
echoFileEnabled[i] = false;
70-
echoFileNames[i] = NULL;
69+
echoFileNames[i] = nullptr;
7170
}
7271

7372
setAllEchoFileEnabled(getEchoEnabled());
@@ -136,9 +135,8 @@ void alloc_and_load_echo_file_info() {
136135
}
137136

138137
void free_echo_file_info() {
139-
int i;
140138
if (echoFileEnabled != nullptr) {
141-
for (i = 0; i < (int)E_ECHO_END_TOKEN; i++) {
139+
for (int i = 0; i < (int)E_ECHO_END_TOKEN; i++) {
142140
if (echoFileNames[i] != nullptr) {
143141
delete[] echoFileNames[i];
144142
}
@@ -165,7 +163,7 @@ char* getOutputFileName(enum e_output_files ename) {
165163
return outputFileNames[(int)ename];
166164
}
167165

168-
void alloc_and_load_output_file_names(const std::string default_name) {
166+
void alloc_and_load_output_file_names(const std::string& default_name) {
169167
std::string name;
170168

171169
if (outputFileNames == nullptr) {
@@ -185,9 +183,8 @@ void alloc_and_load_output_file_names(const std::string default_name) {
185183
}
186184

187185
void free_output_file_names() {
188-
int i;
189186
if (outputFileNames != nullptr) {
190-
for (i = 0; i < (int)E_FILE_END_TOKEN; i++) {
187+
for (int i = 0; i < (int)E_FILE_END_TOKEN; i++) {
191188
if (outputFileNames[i] != nullptr) {
192189
delete[] outputFileNames[i];
193190
outputFileNames[i] = nullptr;

vpr/src/base/echo_files.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,7 @@ void free_echo_file_info();
9292

9393
void setOutputFileName(enum e_output_files ename, const char* name, const char* default_name);
9494
char* getOutputFileName(enum e_output_files ename);
95-
void alloc_and_load_output_file_names(const std::string default_name);
95+
void alloc_and_load_output_file_names(const std::string& default_name);
9696
void free_output_file_names();
9797

9898
#endif

vpr/src/base/place_and_route.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -65,8 +65,8 @@ int binary_search_place_and_route(const Netlist<>& placement_net_list,
6565
t_det_routing_arch* det_routing_arch,
6666
std::vector<t_segment_inf>& segment_inf,
6767
NetPinsMatrix<float>& net_delay,
68-
std::shared_ptr<SetupHoldTimingInfo> timing_info,
69-
std::shared_ptr<RoutingDelayCalculator> delay_calc,
68+
const std::shared_ptr<SetupHoldTimingInfo>& timing_info,
69+
const std::shared_ptr<RoutingDelayCalculator>& delay_calc,
7070
bool is_flat) {
7171
vtr::vector<ParentNetId, vtr::optional<RouteTree>> best_routing; /* Saves the best routing found so far. */
7272
int current, low, high, final;
@@ -101,7 +101,7 @@ int binary_search_place_and_route(const Netlist<>& placement_net_list,
101101
graph_directionality = (det_routing_arch->directionality == BI_DIRECTIONAL ? GRAPH_BIDIR : GRAPH_UNIDIR);
102102
}
103103

104-
VTR_ASSERT(net_delay.size());
104+
VTR_ASSERT(!net_delay.empty());
105105

106106
if (det_routing_arch->directionality == BI_DIRECTIONAL)
107107
udsd_multiplier = 1;
@@ -298,7 +298,7 @@ int binary_search_place_and_route(const Netlist<>& placement_net_list,
298298
current = current + current % udsd_multiplier;
299299
}
300300

301-
/* The binary search above occassionally does not find the minimum *
301+
/* The binary search above occasionally does not find the minimum *
302302
* routeable channel width. Sometimes a circuit that will not route *
303303
* in 19 channels will route in 18, due to router flukiness. If *
304304
* verify_binary_search is set, the code below will ensure that FPGAs *

vpr/src/base/place_and_route.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,8 +36,8 @@ int binary_search_place_and_route(const Netlist<>& placement_net_list,
3636
t_det_routing_arch* det_routing_arch,
3737
std::vector<t_segment_inf>& segment_inf,
3838
NetPinsMatrix<float>& net_delay,
39-
std::shared_ptr<SetupHoldTimingInfo> timing_info,
40-
std::shared_ptr<RoutingDelayCalculator> delay_calc,
39+
const std::shared_ptr<SetupHoldTimingInfo>& timing_info,
40+
const std::shared_ptr<RoutingDelayCalculator>& delay_calc,
4141
bool is_flat);
4242

4343
t_chan_width init_chan(int cfactor,

0 commit comments

Comments
 (0)