18 if ((
GLOBAL == RouterOpts.route_type)
21 vpr_printf(TIO_MESSAGE_ERROR,
"The global router does not support timing-drvien routing.\n");
25 if ((
GLOBAL == RouterOpts.route_type)
30 vpr_printf(TIO_MESSAGE_WARNING,
"Using global routing with timing-driven placement. "
31 "This is allowed, but strange, and circuit speed will suffer.\n");
34 if ((
FALSE == Timing.timing_analysis_enabled)
39 vpr_printf(TIO_MESSAGE_ERROR,
"Timing analysis must be enabled for timing-driven placement.\n");
43 if (!PlacerOpts.doPlacement && (
USER == PlacerOpts.pad_loc_type)) {
44 vpr_printf(TIO_MESSAGE_ERROR,
"A pad location file requires that placement is enabled.\n");
48 if (RouterOpts.doRouting) {
50 && (
FALSE == Timing.timing_analysis_enabled)) {
51 vpr_printf(TIO_MESSAGE_ERROR,
"Cannot perform timing-driven routing when timing analysis is disabled.\n");
55 if ((
FALSE == Timing.timing_analysis_enabled)
57 vpr_printf(TIO_MESSAGE_ERROR,
"base_cost_type must be demand_only when timing analysis is disabled.\n");
63 && (
FALSE == Timing.timing_analysis_enabled)) {
64 vpr_printf(TIO_MESSAGE_ERROR,
"-timing_analyze_only_with_net_delay option requires that timing analysis not be disabled.\n");
68 if (
DETAILED == RouterOpts.route_type) {
69 if ((Chans.chan_x_dist.type !=
UNIFORM)
70 || (Chans.chan_y_dist.type !=
UNIFORM)
71 || (Chans.chan_x_dist.peak != Chans.chan_y_dist.peak)
72 || (Chans.chan_x_dist.peak != Chans.chan_width_io)) {
73 vpr_printf(TIO_MESSAGE_ERROR,
"Detailed routing currently only supported on FPGAs with all channels of equal width.\n");
78 for (i = 0; i < RoutingArch.num_segment; ++i) {
79 Tmp = Segments[i].opin_switch;
81 vpr_printf(TIO_MESSAGE_ERROR,
"opin_switch (#%d) of segment type #%d is not buffered.\n", Tmp, i);
88 && (RouterOpts.fixed_channel_width % 2 > 0)) {
89 vpr_printf(TIO_MESSAGE_ERROR,
"Routing channel width must be even for unidirectional.\n");
93 && (PlacerOpts.place_chan_width % 2 > 0)) {
94 vpr_printf(TIO_MESSAGE_ERROR,
"Place channel width must be even for unidirectional.\n");
struct s_switch_inf * switch_inf
void CheckSetup(INP enum e_operation Operation, INP struct s_placer_opts PlacerOpts, INP struct s_annealing_sched AnnealSched, INP struct s_router_opts RouterOpts, INP struct s_det_routing_arch RoutingArch, INP t_segment_inf *Segments, INP t_timing_inf Timing, INP t_chan_width_dist Chans)
#define NO_FIXED_CHANNEL_WIDTH