|
9 | 9 |
|
10 | 10 | void CheckSetup(const t_packer_opts& PackerOpts, |
11 | 11 | const t_placer_opts& PlacerOpts, |
| 12 | + const t_ap_opts& APOpts, |
12 | 13 | const t_router_opts& RouterOpts, |
13 | 14 | const t_server_opts& ServerOpts, |
14 | 15 | const t_det_routing_arch& RoutingArch, |
@@ -72,6 +73,28 @@ void CheckSetup(const t_packer_opts& PackerOpts, |
72 | 73 | NUM_PL_MOVE_TYPES); |
73 | 74 | } |
74 | 75 |
|
| 76 | + // Rules for doing Analytical Placement |
| 77 | + if (APOpts.doAP) { |
| 78 | + // Make sure that the --place option was not set. |
| 79 | + if (PlacerOpts.doPlacement) { |
| 80 | + VPR_FATAL_ERROR(VPR_ERROR_OTHER, |
| 81 | + "Cannot perform both analytical and non-analytical placement.\n"); |
| 82 | + } |
| 83 | + // Make sure that the --pack option was not set. |
| 84 | + if (PackerOpts.doPacking) { |
| 85 | + VPR_FATAL_ERROR(VPR_ERROR_OTHER, |
| 86 | + "Analytical placement should skip packing.\n"); |
| 87 | + } |
| 88 | + |
| 89 | + // TODO: Should check that read_vpr_constraint_file is non-empty or |
| 90 | + // check within analytical placement that the floorplanning has |
| 91 | + // some fixed blocks somewhere. Maybe we can live without fixed |
| 92 | + // blocks. |
| 93 | + |
| 94 | + // TODO: Should we enforce that the size of the device is fixed. This |
| 95 | + // goes with ensuring that some blocks are fixed. |
| 96 | + } |
| 97 | + |
75 | 98 | if (RouterOpts.doRouting) { |
76 | 99 | if (!Timing.timing_analysis_enabled |
77 | 100 | && (DEMAND_ONLY != RouterOpts.base_cost_type && DEMAND_ONLY_NORMALIZED_LENGTH != RouterOpts.base_cost_type)) { |
|
0 commit comments