VPR-7.0
 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Macros
ShowSetup.c
Go to the documentation of this file.
1 #include <assert.h>
2 #include "util.h"
3 #include "vpr_types.h"
4 #include "globals.h"
5 #include "OptionTokens.h"
6 #include "ReadOptions.h"
7 #include "read_xml_arch_file.h"
8 #include "SetupVPR.h"
9 
10 /******** Function Prototypes ********/
11 static void ShowPackerOpts(INP struct s_packer_opts PackerOpts);
12 static void ShowPlacerOpts(INP t_options Options,
13  INP struct s_placer_opts PlacerOpts,
14  INP struct s_annealing_sched AnnealSched);
15 static void ShowOperation(INP enum e_operation Operation);
16 static void ShowRouterOpts(INP struct s_router_opts RouterOpts);
17 static void ShowAnnealSched(INP struct s_annealing_sched AnnealSched);
18 static void ShowRoutingArch(INP struct s_det_routing_arch RoutingArch);
19 
20 /******** Function Implementations ********/
21 
22 void ShowSetup(INP t_options options, INP t_vpr_setup vpr_setup) {
23  vpr_printf(TIO_MESSAGE_INFO, "Timing analysis: %s\n", (vpr_setup.TimingEnabled? "ON" : "OFF"));
24 
25  vpr_printf(TIO_MESSAGE_INFO, "Circuit netlist file: %s\n", vpr_setup.FileNameOpts.NetFile);
26  vpr_printf(TIO_MESSAGE_INFO, "Circuit placement file: %s\n", vpr_setup.FileNameOpts.PlaceFile);
27  vpr_printf(TIO_MESSAGE_INFO, "Circuit routing file: %s\n", vpr_setup.FileNameOpts.RouteFile);
28  vpr_printf(TIO_MESSAGE_INFO, "Circuit SDC file: %s\n", vpr_setup.Timing.SDCFile);
29 
30  ShowOperation(vpr_setup.Operation);
31  vpr_printf(TIO_MESSAGE_INFO, "Packer: %s\n", (vpr_setup.PackerOpts.doPacking ? "ENABLED" : "DISABLED"));
32  vpr_printf(TIO_MESSAGE_INFO, "Placer: %s\n", (vpr_setup.PlacerOpts.doPlacement ? "ENABLED" : "DISABLED"));
33  vpr_printf(TIO_MESSAGE_INFO, "Router: %s\n", (vpr_setup.RouterOpts.doRouting ? "ENABLED" : "DISABLED"));
34 
35  if (vpr_setup.PackerOpts.doPacking) {
36  ShowPackerOpts(vpr_setup.PackerOpts);
37  }
38  if (vpr_setup.PlacerOpts.doPlacement) {
39  ShowPlacerOpts(options, vpr_setup.PlacerOpts, vpr_setup.AnnealSched);
40  }
41  if (vpr_setup.RouterOpts.doRouting) {
42  ShowRouterOpts(vpr_setup.RouterOpts);
43  }
44 
45  if (DETAILED == vpr_setup.RouterOpts.route_type)
46  ShowRoutingArch(vpr_setup.RoutingArch);
47 
48 }
49 
51  int i, j, L_num_p_inputs, L_num_p_outputs;
52  int *num_blocks_type;
53  num_blocks_type = (int*) my_calloc(num_types, sizeof(int));
54 
55  vpr_printf(TIO_MESSAGE_INFO, "\n");
56  vpr_printf(TIO_MESSAGE_INFO, "Netlist num_nets: %d\n", num_nets);
57  vpr_printf(TIO_MESSAGE_INFO, "Netlist num_blocks: %d\n", num_blocks);
58 
59  for (i = 0; i < num_types; i++) {
60  num_blocks_type[i] = 0;
61  }
62  /* Count I/O input and output pads */
63  L_num_p_inputs = 0;
64  L_num_p_outputs = 0;
65 
66  for (i = 0; i < num_blocks; i++) {
67  num_blocks_type[block[i].type->index]++;
68  if (block[i].type == IO_TYPE) {
69  for (j = 0; j < IO_TYPE->num_pins; j++) {
70  if (block[i].nets[j] != OPEN) {
72  == DRIVER) {
73  L_num_p_inputs++;
74  } else {
75  assert(
76  IO_TYPE-> class_inf[IO_TYPE-> pin_class[j]]. type == RECEIVER);
77  L_num_p_outputs++;
78  }
79  }
80  }
81  }
82  }
83 
84  for (i = 0; i < num_types; i++) {
85  if (IO_TYPE != &type_descriptors[i]) {
86  vpr_printf(TIO_MESSAGE_INFO, "Netlist %s blocks: %d.\n", type_descriptors[i].name, num_blocks_type[i]);
87  }
88  }
89 
90  /* Print out each block separately instead */
91  vpr_printf(TIO_MESSAGE_INFO, "Netlist inputs pins: %d\n", L_num_p_inputs);
92  vpr_printf(TIO_MESSAGE_INFO, "Netlist output pins: %d\n", L_num_p_outputs);
93  vpr_printf(TIO_MESSAGE_INFO, "\n");
94  free(num_blocks_type);
95 }
96 
97 static void ShowRoutingArch(INP struct s_det_routing_arch RoutingArch) {
98 
99  vpr_printf(TIO_MESSAGE_INFO, "RoutingArch.directionality: ");
100  switch (RoutingArch.directionality) {
101  case BI_DIRECTIONAL:
102  vpr_printf(TIO_MESSAGE_INFO, "BI_DIRECTIONAL\n");
103  break;
104  case UNI_DIRECTIONAL:
105  vpr_printf(TIO_MESSAGE_INFO, "UNI_DIRECTIONAL\n");
106  break;
107  default:
108  vpr_printf(TIO_MESSAGE_INFO, "<Unknown>\n");
109  exit(1);
110  }
111 
112  vpr_printf(TIO_MESSAGE_INFO, "RoutingArch.switch_block_type: ");
113  switch (RoutingArch.switch_block_type) {
114  case SUBSET:
115  vpr_printf(TIO_MESSAGE_INFO, "SUBSET\n");
116  break;
117  case WILTON:
118  vpr_printf(TIO_MESSAGE_INFO, "WILTON\n");
119  break;
120  case UNIVERSAL:
121  vpr_printf(TIO_MESSAGE_INFO, "UNIVERSAL\n");
122  break;
123  case FULL:
124  vpr_printf(TIO_MESSAGE_INFO, "FULL\n");
125  break;
126  default:
127  vpr_printf(TIO_MESSAGE_ERROR, "switch block type\n");
128  }
129 
130  vpr_printf(TIO_MESSAGE_INFO, "RoutingArch.Fs: %d\n", RoutingArch.Fs);
131 
132  vpr_printf(TIO_MESSAGE_INFO, "\n");
133 }
134 
135 static void ShowAnnealSched(INP struct s_annealing_sched AnnealSched) {
136 
137  vpr_printf(TIO_MESSAGE_INFO, "AnnealSched.type: ");
138  switch (AnnealSched.type) {
139  case AUTO_SCHED:
140  vpr_printf(TIO_MESSAGE_INFO, "AUTO_SCHED\n");
141  break;
142  case USER_SCHED:
143  vpr_printf(TIO_MESSAGE_INFO, "USER_SCHED\n");
144  break;
145  default:
146  vpr_printf(TIO_MESSAGE_ERROR, "Unknown annealing schedule\n");
147  }
148 
149  vpr_printf(TIO_MESSAGE_INFO, "AnnealSched.inner_num: %f\n", AnnealSched.inner_num);
150 
151  if (USER_SCHED == AnnealSched.type) {
152  vpr_printf(TIO_MESSAGE_INFO, "AnnealSched.init_t: %f\n", AnnealSched.init_t);
153  vpr_printf(TIO_MESSAGE_INFO, "AnnealSched.alpha_t: %f\n", AnnealSched.alpha_t);
154  vpr_printf(TIO_MESSAGE_INFO, "AnnealSched.exit_t: %f\n", AnnealSched.exit_t);
155  }
156 }
157 
158 static void ShowRouterOpts(INP struct s_router_opts RouterOpts) {
159 
160  vpr_printf(TIO_MESSAGE_INFO, "RouterOpts.route_type: ");
161  switch (RouterOpts.route_type) {
162  case GLOBAL:
163  vpr_printf(TIO_MESSAGE_INFO, "GLOBAL\n");
164  break;
165  case DETAILED:
166  vpr_printf(TIO_MESSAGE_INFO, "DETAILED\n");
167  break;
168  default:
169  vpr_printf(TIO_MESSAGE_ERROR, "Unknown router opt\n");
170  }
171 
172  if (DETAILED == RouterOpts.route_type) {
173  vpr_printf(TIO_MESSAGE_INFO, "RouterOpts.router_algorithm: ");
174  switch (RouterOpts.router_algorithm) {
175  case BREADTH_FIRST:
176  vpr_printf(TIO_MESSAGE_INFO, "BREADTH_FIRST\n");
177  break;
178  case TIMING_DRIVEN:
179  vpr_printf(TIO_MESSAGE_INFO, "TIMING_DRIVEN\n");
180  break;
181  case NO_TIMING:
182  vpr_printf(TIO_MESSAGE_INFO, "NO_TIMING\n");
183  break;
184  default:
185  vpr_printf(TIO_MESSAGE_INFO, "<Unknown>\n");
186  exit(1);
187  }
188 
189  vpr_printf(TIO_MESSAGE_INFO, "RouterOpts.base_cost_type: ");
190  switch (RouterOpts.base_cost_type) {
191  case INTRINSIC_DELAY:
192  vpr_printf(TIO_MESSAGE_INFO, "INTRINSIC_DELAY\n");
193  break;
194  case DELAY_NORMALIZED:
195  vpr_printf(TIO_MESSAGE_INFO, "DELAY_NORMALIZED\n");
196  break;
197  case DEMAND_ONLY:
198  vpr_printf(TIO_MESSAGE_INFO, "DEMAND_ONLY\n");
199  break;
200  default:
201  vpr_printf(TIO_MESSAGE_ERROR, "Unknown base_cost_type\n");
202  }
203 
204  vpr_printf(TIO_MESSAGE_INFO, "RouterOpts.fixed_channel_width: ");
205  if (NO_FIXED_CHANNEL_WIDTH == RouterOpts.fixed_channel_width) {
206  vpr_printf(TIO_MESSAGE_INFO, "NO_FIXED_CHANNEL_WIDTH\n");
207  } else {
208  vpr_printf(TIO_MESSAGE_INFO, "%d\n", RouterOpts.fixed_channel_width);
209  }
210 
211  vpr_printf(TIO_MESSAGE_INFO, "RouterOpts.acc_fac: %f\n", RouterOpts.acc_fac);
212  vpr_printf(TIO_MESSAGE_INFO, "RouterOpts.bb_factor: %d\n", RouterOpts.bb_factor);
213  vpr_printf(TIO_MESSAGE_INFO, "RouterOpts.bend_cost: %f\n", RouterOpts.bend_cost);
214  vpr_printf(TIO_MESSAGE_INFO, "RouterOpts.first_iter_pres_fac: %f\n", RouterOpts.first_iter_pres_fac);
215  vpr_printf(TIO_MESSAGE_INFO, "RouterOpts.initial_pres_fac: %f\n", RouterOpts.initial_pres_fac);
216  vpr_printf(TIO_MESSAGE_INFO, "RouterOpts.pres_fac_mult: %f\n", RouterOpts.pres_fac_mult);
217  vpr_printf(TIO_MESSAGE_INFO, "RouterOpts.max_router_iterations: %d\n", RouterOpts.max_router_iterations);
218 
219  if (TIMING_DRIVEN == RouterOpts.router_algorithm) {
220  vpr_printf(TIO_MESSAGE_INFO, "RouterOpts.astar_fac: %f\n", RouterOpts.astar_fac);
221  vpr_printf(TIO_MESSAGE_INFO, "RouterOpts.criticality_exp: %f\n", RouterOpts.criticality_exp);
222  vpr_printf(TIO_MESSAGE_INFO, "RouterOpts.max_criticality: %f\n", RouterOpts.max_criticality);
223  }
224  } else {
225  assert(GLOBAL == RouterOpts.route_type);
226 
227  vpr_printf(TIO_MESSAGE_INFO, "RouterOpts.router_algorithm: ");
228  switch (RouterOpts.router_algorithm) {
229  case BREADTH_FIRST:
230  vpr_printf(TIO_MESSAGE_INFO, "BREADTH_FIRST\n");
231  break;
232  case TIMING_DRIVEN:
233  vpr_printf(TIO_MESSAGE_INFO, "TIMING_DRIVEN\n");
234  break;
235  case NO_TIMING:
236  vpr_printf(TIO_MESSAGE_INFO, "NO_TIMING\n");
237  break;
238  default:
239  vpr_printf(TIO_MESSAGE_ERROR, "Unknown router algorithm\n");
240  }
241 
242  vpr_printf(TIO_MESSAGE_INFO, "RouterOpts.base_cost_type: ");
243  switch (RouterOpts.base_cost_type) {
244  case INTRINSIC_DELAY:
245  vpr_printf(TIO_MESSAGE_INFO, "INTRINSIC_DELAY\n");
246  break;
247  case DELAY_NORMALIZED:
248  vpr_printf(TIO_MESSAGE_INFO, "DELAY_NORMALIZED\n");
249  break;
250  case DEMAND_ONLY:
251  vpr_printf(TIO_MESSAGE_INFO, "DEMAND_ONLY\n");
252  break;
253  default:
254  vpr_printf(TIO_MESSAGE_ERROR, "Unknown router base cost type\n");
255  }
256 
257  vpr_printf(TIO_MESSAGE_INFO, "RouterOpts.fixed_channel_width: ");
258  if (NO_FIXED_CHANNEL_WIDTH == RouterOpts.fixed_channel_width) {
259  vpr_printf(TIO_MESSAGE_INFO, "NO_FIXED_CHANNEL_WIDTH\n");
260  } else {
261  vpr_printf(TIO_MESSAGE_INFO, "%d\n", RouterOpts.fixed_channel_width);
262  }
263 
264  vpr_printf(TIO_MESSAGE_INFO, "RouterOpts.acc_fac: %f\n", RouterOpts.acc_fac);
265  vpr_printf(TIO_MESSAGE_INFO, "RouterOpts.bb_factor: %d\n", RouterOpts.bb_factor);
266  vpr_printf(TIO_MESSAGE_INFO, "RouterOpts.bend_cost: %f\n", RouterOpts.bend_cost);
267  vpr_printf(TIO_MESSAGE_INFO, "RouterOpts.first_iter_pres_fac: %f\n", RouterOpts.first_iter_pres_fac);
268  vpr_printf(TIO_MESSAGE_INFO, "RouterOpts.initial_pres_fac: %f\n", RouterOpts.initial_pres_fac);
269  vpr_printf(TIO_MESSAGE_INFO, "RouterOpts.pres_fac_mult: %f\n", RouterOpts.pres_fac_mult);
270  vpr_printf(TIO_MESSAGE_INFO, "RouterOpts.max_router_iterations: %d\n", RouterOpts.max_router_iterations);
271  if (TIMING_DRIVEN == RouterOpts.router_algorithm) {
272  vpr_printf(TIO_MESSAGE_INFO, "RouterOpts.astar_fac: %f\n", RouterOpts.astar_fac);
273  vpr_printf(TIO_MESSAGE_INFO, "RouterOpts.criticality_exp: %f\n", RouterOpts.criticality_exp);
274  vpr_printf(TIO_MESSAGE_INFO, "RouterOpts.max_criticality: %f\n", RouterOpts.max_criticality);
275  }
276  }
277  vpr_printf(TIO_MESSAGE_INFO, "\n");
278 }
279 
280 static void ShowOperation(INP enum e_operation Operation) {
281  vpr_printf(TIO_MESSAGE_INFO, "Operation: ");
282  switch (Operation) {
283  case RUN_FLOW:
284  vpr_printf(TIO_MESSAGE_INFO, "RUN_FLOW\n");
285  break;
287  vpr_printf(TIO_MESSAGE_INFO, "TIMING_ANALYSIS_ONLY\n");
288  break;
289  default:
290  vpr_printf(TIO_MESSAGE_ERROR, "Unknown VPR operation\n");
291  }
292  vpr_printf(TIO_MESSAGE_INFO, "\n");
293 }
294 
295 static void ShowPlacerOpts(INP t_options Options,
296  INP struct s_placer_opts PlacerOpts,
297  INP struct s_annealing_sched AnnealSched) {
298 
299  vpr_printf(TIO_MESSAGE_INFO, "PlacerOpts.place_freq: ");
300  switch (PlacerOpts.place_freq) {
301  case PLACE_ONCE:
302  vpr_printf(TIO_MESSAGE_INFO, "PLACE_ONCE\n");
303  break;
304  case PLACE_ALWAYS:
305  vpr_printf(TIO_MESSAGE_INFO, "PLACE_ALWAYS\n");
306  break;
307  case PLACE_NEVER:
308  vpr_printf(TIO_MESSAGE_INFO, "PLACE_NEVER\n");
309  break;
310  default:
311  vpr_printf(TIO_MESSAGE_ERROR, "Unknown Place Freq\n");
312  }
313  if ((PLACE_ONCE == PlacerOpts.place_freq)
314  || (PLACE_ALWAYS == PlacerOpts.place_freq)) {
315 
316  vpr_printf(TIO_MESSAGE_INFO, "PlacerOpts.place_algorithm: ");
317  switch (PlacerOpts.place_algorithm) {
318  case BOUNDING_BOX_PLACE:
319  vpr_printf(TIO_MESSAGE_INFO, "BOUNDING_BOX_PLACE\n");
320  break;
322  vpr_printf(TIO_MESSAGE_INFO, "NET_TIMING_DRIVEN_PLACE\n");
323  break;
325  vpr_printf(TIO_MESSAGE_INFO, "PATH_TIMING_DRIVEN_PLACE\n");
326  break;
327  default:
328  vpr_printf(TIO_MESSAGE_ERROR, "Unknown placement algorithm\n");
329  }
330 
331  vpr_printf(TIO_MESSAGE_INFO, "PlacerOpts.pad_loc_type: ");
332  switch (PlacerOpts.pad_loc_type) {
333  case FREE:
334  vpr_printf(TIO_MESSAGE_INFO, "FREE\n");
335  break;
336  case RANDOM:
337  vpr_printf(TIO_MESSAGE_INFO, "RANDOM\n");
338  break;
339  case USER:
340  vpr_printf(TIO_MESSAGE_INFO, "USER '%s'\n", PlacerOpts.pad_loc_file);
341  break;
342  default:
343  vpr_printf(TIO_MESSAGE_INFO, "Unknown I/O pad location type\n");
344  exit(1);
345  }
346 
347  vpr_printf(TIO_MESSAGE_INFO, "PlacerOpts.place_cost_exp: %f\n", PlacerOpts.place_cost_exp);
348 
349  if (Options.Count[OT_PLACE_CHAN_WIDTH]) {
350  vpr_printf(TIO_MESSAGE_INFO, "PlacerOpts.place_chan_width: %d\n", PlacerOpts.place_chan_width);
351  }
352 
353  if ((NET_TIMING_DRIVEN_PLACE == PlacerOpts.place_algorithm)
354  || (PATH_TIMING_DRIVEN_PLACE == PlacerOpts.place_algorithm)) {
355  vpr_printf(TIO_MESSAGE_INFO, "PlacerOpts.inner_loop_recompute_divider: %d\n", PlacerOpts.inner_loop_recompute_divider);
356  vpr_printf(TIO_MESSAGE_INFO, "PlacerOpts.recompute_crit_iter: %d\n", PlacerOpts.recompute_crit_iter);
357  vpr_printf(TIO_MESSAGE_INFO, "PlacerOpts.timing_tradeoff: %f\n", PlacerOpts.timing_tradeoff);
358  vpr_printf(TIO_MESSAGE_INFO, "PlacerOpts.td_place_exp_first: %f\n", PlacerOpts.td_place_exp_first);
359  vpr_printf(TIO_MESSAGE_INFO, "PlacerOpts.td_place_exp_last: %f\n", PlacerOpts.td_place_exp_last);
360  }
361 
362  vpr_printf(TIO_MESSAGE_INFO, "PlaceOpts.seed: %d\n", PlacerOpts.seed);
363 
364  ShowAnnealSched(AnnealSched);
365  }
366  vpr_printf(TIO_MESSAGE_INFO, "\n");
367 
368 }
369 
370 
371 static void ShowPackerOpts(INP struct s_packer_opts PackerOpts) {
372 
373  vpr_printf(TIO_MESSAGE_INFO, "PackerOpts.allow_early_exit: %s", (PackerOpts.allow_early_exit ? "TRUE\n" : "FALSE\n"));
374  vpr_printf(TIO_MESSAGE_INFO, "PackerOpts.allow_unrelated_clustering: %s", (PackerOpts.allow_unrelated_clustering ? "TRUE\n" : "FALSE\n"));
375  vpr_printf(TIO_MESSAGE_INFO, "PackerOpts.alpha_clustering: %f\n", PackerOpts.alpha);
376  vpr_printf(TIO_MESSAGE_INFO, "PackerOpts.aspect: %f\n", PackerOpts.aspect);
377  vpr_printf(TIO_MESSAGE_INFO, "PackerOpts.beta_clustering: %f\n", PackerOpts.beta);
378  vpr_printf(TIO_MESSAGE_INFO, "PackerOpts.block_delay: %f\n", PackerOpts.block_delay);
379  vpr_printf(TIO_MESSAGE_INFO, "PackerOpts.cluster_seed_type: ");
380  switch (PackerOpts.cluster_seed_type) {
381  case VPACK_TIMING:
382  vpr_printf(TIO_MESSAGE_INFO, "TIMING\n");
383  break;
384  case VPACK_MAX_INPUTS:
385  vpr_printf(TIO_MESSAGE_INFO, "MAX_INPUTS\n");
386  break;
387  default:
388  vpr_printf(TIO_MESSAGE_INFO, "Unknown packer cluster_seed_type\n");
389  exit(1);
390  }
391  vpr_printf(TIO_MESSAGE_INFO, "PackerOpts.connection_driven: %s", (PackerOpts.connection_driven ? "TRUE\n" : "FALSE\n"));
392  vpr_printf(TIO_MESSAGE_INFO, "PackerOpts.global_clocks: %s", (PackerOpts.global_clocks ? "TRUE\n" : "FALSE\n"));
393  vpr_printf(TIO_MESSAGE_INFO, "PackerOpts.hill_climbing_flag: %s", (PackerOpts.hill_climbing_flag ? "TRUE\n" : "FALSE\n"));
394  vpr_printf(TIO_MESSAGE_INFO, "PackerOpts.inter_cluster_net_delay: %f\n", PackerOpts.inter_cluster_net_delay);
395  vpr_printf(TIO_MESSAGE_INFO, "PackerOpts.intra_cluster_net_delay: %f\n", PackerOpts.intra_cluster_net_delay);
396  vpr_printf(TIO_MESSAGE_INFO, "PackerOpts.recompute_timing_after: %d\n", PackerOpts.recompute_timing_after);
397  vpr_printf(TIO_MESSAGE_INFO, "PackerOpts.sweep_hanging_nets_and_inputs: %s", (PackerOpts.sweep_hanging_nets_and_inputs ? "TRUE\n" : "FALSE\n"));
398  vpr_printf(TIO_MESSAGE_INFO, "PackerOpts.timing_driven: %s", (PackerOpts.timing_driven ? "TRUE\n" : "FALSE\n"));
399  vpr_printf(TIO_MESSAGE_INFO, "\n");
400 }
401 
void printClusteredNetlistStats()
Definition: ShowSetup.c:50
struct s_class * class_inf
void * my_calloc(size_t nelem, size_t size)
Definition: util.c:132
int num_nets
Definition: globals.c:27
t_type_ptr type
Definition: vpr_types.h:561
int num_blocks
Definition: globals.c:30
struct s_block * block
Definition: globals.c:31
e_operation
Definition: vpr_types.h:468
#define INP
Definition: util.h:19
static void ShowRouterOpts(INP struct s_router_opts RouterOpts)
Definition: ShowSetup.c:158
static void ShowPlacerOpts(INP t_options Options, INP struct s_placer_opts PlacerOpts, INP struct s_annealing_sched AnnealSched)
Definition: ShowSetup.c:295
int num_types
Definition: globals.c:37
t_type_ptr IO_TYPE
Definition: globals.c:40
#define NO_FIXED_CHANNEL_WIDTH
Definition: vpr_types.h:692
static void ShowRoutingArch(INP struct s_det_routing_arch RoutingArch)
Definition: ShowSetup.c:97
Definition: slre.c:50
struct s_type_descriptor * type_descriptors
Definition: globals.c:38
enum e_pin_type type
messagelogger vpr_printf
Definition: util.c:17
void ShowSetup(INP t_options options, INP t_vpr_setup vpr_setup)
Definition: ShowSetup.c:22
static void ShowAnnealSched(INP struct s_annealing_sched AnnealSched)
Definition: ShowSetup.c:135
static void ShowPackerOpts(INP struct s_packer_opts PackerOpts)
Definition: ShowSetup.c:371
static void ShowOperation(INP enum e_operation Operation)
Definition: ShowSetup.c:280