2018-07-26 12:28:21 -05:00
|
|
|
#include <assert.h>
|
|
|
|
#include "util.h"
|
|
|
|
#include "vpr_types.h"
|
|
|
|
#include "globals.h"
|
|
|
|
#include "OptionTokens.h"
|
|
|
|
#include "ReadOptions.h"
|
|
|
|
#include "read_xml_arch_file.h"
|
|
|
|
#include "SetupVPR.h"
|
|
|
|
|
|
|
|
/******** Function Prototypes ********/
|
|
|
|
static void ShowPackerOpts(INP struct s_packer_opts PackerOpts);
|
|
|
|
static void ShowPlacerOpts(INP t_options Options,
|
|
|
|
INP struct s_placer_opts PlacerOpts,
|
|
|
|
INP struct s_annealing_sched AnnealSched);
|
|
|
|
static void ShowOperation(INP enum e_operation Operation);
|
|
|
|
static void ShowRouterOpts(INP struct s_router_opts RouterOpts);
|
|
|
|
static void ShowAnnealSched(INP struct s_annealing_sched AnnealSched);
|
|
|
|
static void ShowRoutingArch(INP struct s_det_routing_arch RoutingArch);
|
|
|
|
|
|
|
|
/******** Function Implementations ********/
|
|
|
|
|
|
|
|
void ShowSetup(INP t_options options, INP t_vpr_setup vpr_setup) {
|
|
|
|
vpr_printf(TIO_MESSAGE_INFO, "Timing analysis: %s\n", (vpr_setup.TimingEnabled? "ON" : "OFF"));
|
|
|
|
|
|
|
|
vpr_printf(TIO_MESSAGE_INFO, "Circuit netlist file: %s\n", vpr_setup.FileNameOpts.NetFile);
|
|
|
|
vpr_printf(TIO_MESSAGE_INFO, "Circuit placement file: %s\n", vpr_setup.FileNameOpts.PlaceFile);
|
|
|
|
vpr_printf(TIO_MESSAGE_INFO, "Circuit routing file: %s\n", vpr_setup.FileNameOpts.RouteFile);
|
|
|
|
vpr_printf(TIO_MESSAGE_INFO, "Circuit SDC file: %s\n", vpr_setup.Timing.SDCFile);
|
|
|
|
|
|
|
|
ShowOperation(vpr_setup.Operation);
|
|
|
|
vpr_printf(TIO_MESSAGE_INFO, "Packer: %s\n", (vpr_setup.PackerOpts.doPacking ? "ENABLED" : "DISABLED"));
|
|
|
|
vpr_printf(TIO_MESSAGE_INFO, "Placer: %s\n", (vpr_setup.PlacerOpts.doPlacement ? "ENABLED" : "DISABLED"));
|
|
|
|
vpr_printf(TIO_MESSAGE_INFO, "Router: %s\n", (vpr_setup.RouterOpts.doRouting ? "ENABLED" : "DISABLED"));
|
|
|
|
|
|
|
|
if (vpr_setup.PackerOpts.doPacking) {
|
|
|
|
ShowPackerOpts(vpr_setup.PackerOpts);
|
|
|
|
}
|
|
|
|
if (vpr_setup.PlacerOpts.doPlacement) {
|
|
|
|
ShowPlacerOpts(options, vpr_setup.PlacerOpts, vpr_setup.AnnealSched);
|
|
|
|
}
|
|
|
|
if (vpr_setup.RouterOpts.doRouting) {
|
|
|
|
ShowRouterOpts(vpr_setup.RouterOpts);
|
|
|
|
}
|
|
|
|
|
|
|
|
if (DETAILED == vpr_setup.RouterOpts.route_type)
|
|
|
|
ShowRoutingArch(vpr_setup.RoutingArch);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
void printClusteredNetlistStats() {
|
|
|
|
int i, j, L_num_p_inputs, L_num_p_outputs;
|
|
|
|
int *num_blocks_type;
|
|
|
|
num_blocks_type = (int*) my_calloc(num_types, sizeof(int));
|
|
|
|
|
|
|
|
vpr_printf(TIO_MESSAGE_INFO, "\n");
|
|
|
|
vpr_printf(TIO_MESSAGE_INFO, "Netlist num_nets: %d\n", num_nets);
|
|
|
|
vpr_printf(TIO_MESSAGE_INFO, "Netlist num_blocks: %d\n", num_blocks);
|
|
|
|
|
|
|
|
for (i = 0; i < num_types; i++) {
|
|
|
|
num_blocks_type[i] = 0;
|
|
|
|
}
|
|
|
|
/* Count I/O input and output pads */
|
|
|
|
L_num_p_inputs = 0;
|
|
|
|
L_num_p_outputs = 0;
|
|
|
|
|
|
|
|
for (i = 0; i < num_blocks; i++) {
|
|
|
|
num_blocks_type[block[i].type->index]++;
|
|
|
|
if (block[i].type == IO_TYPE) {
|
|
|
|
for (j = 0; j < IO_TYPE->num_pins; j++) {
|
|
|
|
if (block[i].nets[j] != OPEN) {
|
|
|
|
if (IO_TYPE->class_inf[IO_TYPE->pin_class[j]].type
|
|
|
|
== DRIVER) {
|
|
|
|
L_num_p_inputs++;
|
|
|
|
} else {
|
|
|
|
assert(
|
|
|
|
IO_TYPE-> class_inf[IO_TYPE-> pin_class[j]]. type == RECEIVER);
|
|
|
|
L_num_p_outputs++;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
for (i = 0; i < num_types; i++) {
|
|
|
|
if (IO_TYPE != &type_descriptors[i]) {
|
|
|
|
vpr_printf(TIO_MESSAGE_INFO, "Netlist %s blocks: %d.\n", type_descriptors[i].name, num_blocks_type[i]);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/* Print out each block separately instead */
|
|
|
|
vpr_printf(TIO_MESSAGE_INFO, "Netlist inputs pins: %d\n", L_num_p_inputs);
|
|
|
|
vpr_printf(TIO_MESSAGE_INFO, "Netlist output pins: %d\n", L_num_p_outputs);
|
|
|
|
vpr_printf(TIO_MESSAGE_INFO, "\n");
|
|
|
|
free(num_blocks_type);
|
|
|
|
}
|
|
|
|
|
|
|
|
static void ShowRoutingArch(INP struct s_det_routing_arch RoutingArch) {
|
|
|
|
|
|
|
|
vpr_printf(TIO_MESSAGE_INFO, "RoutingArch.directionality: ");
|
|
|
|
switch (RoutingArch.directionality) {
|
|
|
|
case BI_DIRECTIONAL:
|
|
|
|
vpr_printf(TIO_MESSAGE_INFO, "BI_DIRECTIONAL\n");
|
|
|
|
break;
|
|
|
|
case UNI_DIRECTIONAL:
|
|
|
|
vpr_printf(TIO_MESSAGE_INFO, "UNI_DIRECTIONAL\n");
|
|
|
|
break;
|
|
|
|
default:
|
|
|
|
vpr_printf(TIO_MESSAGE_INFO, "<Unknown>\n");
|
|
|
|
exit(1);
|
|
|
|
}
|
|
|
|
|
|
|
|
vpr_printf(TIO_MESSAGE_INFO, "RoutingArch.switch_block_type: ");
|
|
|
|
switch (RoutingArch.switch_block_type) {
|
|
|
|
case SUBSET:
|
|
|
|
vpr_printf(TIO_MESSAGE_INFO, "SUBSET\n");
|
|
|
|
break;
|
|
|
|
case WILTON:
|
|
|
|
vpr_printf(TIO_MESSAGE_INFO, "WILTON\n");
|
|
|
|
break;
|
|
|
|
case UNIVERSAL:
|
|
|
|
vpr_printf(TIO_MESSAGE_INFO, "UNIVERSAL\n");
|
|
|
|
break;
|
|
|
|
case FULL:
|
|
|
|
vpr_printf(TIO_MESSAGE_INFO, "FULL\n");
|
|
|
|
break;
|
|
|
|
default:
|
|
|
|
vpr_printf(TIO_MESSAGE_ERROR, "switch block type\n");
|
|
|
|
}
|
|
|
|
|
|
|
|
vpr_printf(TIO_MESSAGE_INFO, "RoutingArch.Fs: %d\n", RoutingArch.Fs);
|
|
|
|
|
|
|
|
vpr_printf(TIO_MESSAGE_INFO, "\n");
|
|
|
|
}
|
|
|
|
|
|
|
|
static void ShowAnnealSched(INP struct s_annealing_sched AnnealSched) {
|
|
|
|
|
|
|
|
vpr_printf(TIO_MESSAGE_INFO, "AnnealSched.type: ");
|
|
|
|
switch (AnnealSched.type) {
|
|
|
|
case AUTO_SCHED:
|
|
|
|
vpr_printf(TIO_MESSAGE_INFO, "AUTO_SCHED\n");
|
|
|
|
break;
|
|
|
|
case USER_SCHED:
|
|
|
|
vpr_printf(TIO_MESSAGE_INFO, "USER_SCHED\n");
|
|
|
|
break;
|
|
|
|
default:
|
|
|
|
vpr_printf(TIO_MESSAGE_ERROR, "Unknown annealing schedule\n");
|
|
|
|
}
|
|
|
|
|
|
|
|
vpr_printf(TIO_MESSAGE_INFO, "AnnealSched.inner_num: %f\n", AnnealSched.inner_num);
|
|
|
|
|
|
|
|
if (USER_SCHED == AnnealSched.type) {
|
|
|
|
vpr_printf(TIO_MESSAGE_INFO, "AnnealSched.init_t: %f\n", AnnealSched.init_t);
|
|
|
|
vpr_printf(TIO_MESSAGE_INFO, "AnnealSched.alpha_t: %f\n", AnnealSched.alpha_t);
|
|
|
|
vpr_printf(TIO_MESSAGE_INFO, "AnnealSched.exit_t: %f\n", AnnealSched.exit_t);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
static void ShowRouterOpts(INP struct s_router_opts RouterOpts) {
|
|
|
|
|
|
|
|
vpr_printf(TIO_MESSAGE_INFO, "RouterOpts.route_type: ");
|
|
|
|
switch (RouterOpts.route_type) {
|
|
|
|
case GLOBAL:
|
|
|
|
vpr_printf(TIO_MESSAGE_INFO, "GLOBAL\n");
|
|
|
|
break;
|
|
|
|
case DETAILED:
|
|
|
|
vpr_printf(TIO_MESSAGE_INFO, "DETAILED\n");
|
|
|
|
break;
|
|
|
|
default:
|
|
|
|
vpr_printf(TIO_MESSAGE_ERROR, "Unknown router opt\n");
|
|
|
|
}
|
|
|
|
|
|
|
|
if (DETAILED == RouterOpts.route_type) {
|
|
|
|
vpr_printf(TIO_MESSAGE_INFO, "RouterOpts.router_algorithm: ");
|
|
|
|
switch (RouterOpts.router_algorithm) {
|
|
|
|
case BREADTH_FIRST:
|
|
|
|
vpr_printf(TIO_MESSAGE_INFO, "BREADTH_FIRST\n");
|
|
|
|
break;
|
|
|
|
case TIMING_DRIVEN:
|
|
|
|
vpr_printf(TIO_MESSAGE_INFO, "TIMING_DRIVEN\n");
|
|
|
|
break;
|
|
|
|
case NO_TIMING:
|
|
|
|
vpr_printf(TIO_MESSAGE_INFO, "NO_TIMING\n");
|
|
|
|
break;
|
|
|
|
default:
|
|
|
|
vpr_printf(TIO_MESSAGE_INFO, "<Unknown>\n");
|
|
|
|
exit(1);
|
|
|
|
}
|
|
|
|
|
|
|
|
vpr_printf(TIO_MESSAGE_INFO, "RouterOpts.base_cost_type: ");
|
|
|
|
switch (RouterOpts.base_cost_type) {
|
|
|
|
case INTRINSIC_DELAY:
|
|
|
|
vpr_printf(TIO_MESSAGE_INFO, "INTRINSIC_DELAY\n");
|
|
|
|
break;
|
|
|
|
case DELAY_NORMALIZED:
|
|
|
|
vpr_printf(TIO_MESSAGE_INFO, "DELAY_NORMALIZED\n");
|
|
|
|
break;
|
|
|
|
case DEMAND_ONLY:
|
|
|
|
vpr_printf(TIO_MESSAGE_INFO, "DEMAND_ONLY\n");
|
|
|
|
break;
|
|
|
|
default:
|
|
|
|
vpr_printf(TIO_MESSAGE_ERROR, "Unknown base_cost_type\n");
|
|
|
|
}
|
|
|
|
|
|
|
|
vpr_printf(TIO_MESSAGE_INFO, "RouterOpts.fixed_channel_width: ");
|
|
|
|
if (NO_FIXED_CHANNEL_WIDTH == RouterOpts.fixed_channel_width) {
|
|
|
|
vpr_printf(TIO_MESSAGE_INFO, "NO_FIXED_CHANNEL_WIDTH\n");
|
|
|
|
} else {
|
|
|
|
vpr_printf(TIO_MESSAGE_INFO, "%d\n", RouterOpts.fixed_channel_width);
|
|
|
|
}
|
2019-07-03 13:11:48 -05:00
|
|
|
vpr_printf(TIO_MESSAGE_INFO, "RouterOpts.use_tileable_route_chan_width: %s\n", RouterOpts.use_tileable_route_chan_width ? "TRUE\n" : "FALSE\n");
|
2018-07-26 12:28:21 -05:00
|
|
|
|
|
|
|
vpr_printf(TIO_MESSAGE_INFO, "RouterOpts.acc_fac: %f\n", RouterOpts.acc_fac);
|
|
|
|
vpr_printf(TIO_MESSAGE_INFO, "RouterOpts.bb_factor: %d\n", RouterOpts.bb_factor);
|
|
|
|
vpr_printf(TIO_MESSAGE_INFO, "RouterOpts.bend_cost: %f\n", RouterOpts.bend_cost);
|
|
|
|
vpr_printf(TIO_MESSAGE_INFO, "RouterOpts.first_iter_pres_fac: %f\n", RouterOpts.first_iter_pres_fac);
|
|
|
|
vpr_printf(TIO_MESSAGE_INFO, "RouterOpts.initial_pres_fac: %f\n", RouterOpts.initial_pres_fac);
|
|
|
|
vpr_printf(TIO_MESSAGE_INFO, "RouterOpts.pres_fac_mult: %f\n", RouterOpts.pres_fac_mult);
|
|
|
|
vpr_printf(TIO_MESSAGE_INFO, "RouterOpts.max_router_iterations: %d\n", RouterOpts.max_router_iterations);
|
|
|
|
|
|
|
|
if (TIMING_DRIVEN == RouterOpts.router_algorithm) {
|
|
|
|
vpr_printf(TIO_MESSAGE_INFO, "RouterOpts.astar_fac: %f\n", RouterOpts.astar_fac);
|
|
|
|
vpr_printf(TIO_MESSAGE_INFO, "RouterOpts.criticality_exp: %f\n", RouterOpts.criticality_exp);
|
|
|
|
vpr_printf(TIO_MESSAGE_INFO, "RouterOpts.max_criticality: %f\n", RouterOpts.max_criticality);
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
assert(GLOBAL == RouterOpts.route_type);
|
|
|
|
|
|
|
|
vpr_printf(TIO_MESSAGE_INFO, "RouterOpts.router_algorithm: ");
|
|
|
|
switch (RouterOpts.router_algorithm) {
|
|
|
|
case BREADTH_FIRST:
|
|
|
|
vpr_printf(TIO_MESSAGE_INFO, "BREADTH_FIRST\n");
|
|
|
|
break;
|
|
|
|
case TIMING_DRIVEN:
|
|
|
|
vpr_printf(TIO_MESSAGE_INFO, "TIMING_DRIVEN\n");
|
|
|
|
break;
|
|
|
|
case NO_TIMING:
|
|
|
|
vpr_printf(TIO_MESSAGE_INFO, "NO_TIMING\n");
|
|
|
|
break;
|
|
|
|
default:
|
|
|
|
vpr_printf(TIO_MESSAGE_ERROR, "Unknown router algorithm\n");
|
|
|
|
}
|
|
|
|
|
|
|
|
vpr_printf(TIO_MESSAGE_INFO, "RouterOpts.base_cost_type: ");
|
|
|
|
switch (RouterOpts.base_cost_type) {
|
|
|
|
case INTRINSIC_DELAY:
|
|
|
|
vpr_printf(TIO_MESSAGE_INFO, "INTRINSIC_DELAY\n");
|
|
|
|
break;
|
|
|
|
case DELAY_NORMALIZED:
|
|
|
|
vpr_printf(TIO_MESSAGE_INFO, "DELAY_NORMALIZED\n");
|
|
|
|
break;
|
|
|
|
case DEMAND_ONLY:
|
|
|
|
vpr_printf(TIO_MESSAGE_INFO, "DEMAND_ONLY\n");
|
|
|
|
break;
|
|
|
|
default:
|
|
|
|
vpr_printf(TIO_MESSAGE_ERROR, "Unknown router base cost type\n");
|
|
|
|
}
|
|
|
|
|
|
|
|
vpr_printf(TIO_MESSAGE_INFO, "RouterOpts.fixed_channel_width: ");
|
|
|
|
if (NO_FIXED_CHANNEL_WIDTH == RouterOpts.fixed_channel_width) {
|
|
|
|
vpr_printf(TIO_MESSAGE_INFO, "NO_FIXED_CHANNEL_WIDTH\n");
|
|
|
|
} else {
|
|
|
|
vpr_printf(TIO_MESSAGE_INFO, "%d\n", RouterOpts.fixed_channel_width);
|
|
|
|
}
|
2019-07-03 13:11:48 -05:00
|
|
|
vpr_printf(TIO_MESSAGE_INFO, "RouterOpts.use_tileable_route_chan_width: ", RouterOpts.use_tileable_route_chan_width ? "TRUE\n" : "FALSE\n");
|
2018-07-26 12:28:21 -05:00
|
|
|
|
|
|
|
vpr_printf(TIO_MESSAGE_INFO, "RouterOpts.acc_fac: %f\n", RouterOpts.acc_fac);
|
|
|
|
vpr_printf(TIO_MESSAGE_INFO, "RouterOpts.bb_factor: %d\n", RouterOpts.bb_factor);
|
|
|
|
vpr_printf(TIO_MESSAGE_INFO, "RouterOpts.bend_cost: %f\n", RouterOpts.bend_cost);
|
|
|
|
vpr_printf(TIO_MESSAGE_INFO, "RouterOpts.first_iter_pres_fac: %f\n", RouterOpts.first_iter_pres_fac);
|
|
|
|
vpr_printf(TIO_MESSAGE_INFO, "RouterOpts.initial_pres_fac: %f\n", RouterOpts.initial_pres_fac);
|
|
|
|
vpr_printf(TIO_MESSAGE_INFO, "RouterOpts.pres_fac_mult: %f\n", RouterOpts.pres_fac_mult);
|
|
|
|
vpr_printf(TIO_MESSAGE_INFO, "RouterOpts.max_router_iterations: %d\n", RouterOpts.max_router_iterations);
|
|
|
|
if (TIMING_DRIVEN == RouterOpts.router_algorithm) {
|
|
|
|
vpr_printf(TIO_MESSAGE_INFO, "RouterOpts.astar_fac: %f\n", RouterOpts.astar_fac);
|
|
|
|
vpr_printf(TIO_MESSAGE_INFO, "RouterOpts.criticality_exp: %f\n", RouterOpts.criticality_exp);
|
|
|
|
vpr_printf(TIO_MESSAGE_INFO, "RouterOpts.max_criticality: %f\n", RouterOpts.max_criticality);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
vpr_printf(TIO_MESSAGE_INFO, "\n");
|
|
|
|
}
|
|
|
|
|
|
|
|
static void ShowOperation(INP enum e_operation Operation) {
|
|
|
|
vpr_printf(TIO_MESSAGE_INFO, "Operation: ");
|
|
|
|
switch (Operation) {
|
|
|
|
case RUN_FLOW:
|
|
|
|
vpr_printf(TIO_MESSAGE_INFO, "RUN_FLOW\n");
|
|
|
|
break;
|
|
|
|
case TIMING_ANALYSIS_ONLY:
|
|
|
|
vpr_printf(TIO_MESSAGE_INFO, "TIMING_ANALYSIS_ONLY\n");
|
|
|
|
break;
|
|
|
|
default:
|
|
|
|
vpr_printf(TIO_MESSAGE_ERROR, "Unknown VPR operation\n");
|
|
|
|
}
|
|
|
|
vpr_printf(TIO_MESSAGE_INFO, "\n");
|
|
|
|
}
|
|
|
|
|
|
|
|
static void ShowPlacerOpts(INP t_options Options,
|
|
|
|
INP struct s_placer_opts PlacerOpts,
|
|
|
|
INP struct s_annealing_sched AnnealSched) {
|
|
|
|
|
|
|
|
vpr_printf(TIO_MESSAGE_INFO, "PlacerOpts.place_freq: ");
|
|
|
|
switch (PlacerOpts.place_freq) {
|
|
|
|
case PLACE_ONCE:
|
|
|
|
vpr_printf(TIO_MESSAGE_INFO, "PLACE_ONCE\n");
|
|
|
|
break;
|
|
|
|
case PLACE_ALWAYS:
|
|
|
|
vpr_printf(TIO_MESSAGE_INFO, "PLACE_ALWAYS\n");
|
|
|
|
break;
|
|
|
|
case PLACE_NEVER:
|
|
|
|
vpr_printf(TIO_MESSAGE_INFO, "PLACE_NEVER\n");
|
|
|
|
break;
|
|
|
|
default:
|
|
|
|
vpr_printf(TIO_MESSAGE_ERROR, "Unknown Place Freq\n");
|
|
|
|
}
|
|
|
|
if ((PLACE_ONCE == PlacerOpts.place_freq)
|
|
|
|
|| (PLACE_ALWAYS == PlacerOpts.place_freq)) {
|
|
|
|
|
|
|
|
vpr_printf(TIO_MESSAGE_INFO, "PlacerOpts.place_algorithm: ");
|
|
|
|
switch (PlacerOpts.place_algorithm) {
|
|
|
|
case BOUNDING_BOX_PLACE:
|
|
|
|
vpr_printf(TIO_MESSAGE_INFO, "BOUNDING_BOX_PLACE\n");
|
|
|
|
break;
|
|
|
|
case NET_TIMING_DRIVEN_PLACE:
|
|
|
|
vpr_printf(TIO_MESSAGE_INFO, "NET_TIMING_DRIVEN_PLACE\n");
|
|
|
|
break;
|
|
|
|
case PATH_TIMING_DRIVEN_PLACE:
|
|
|
|
vpr_printf(TIO_MESSAGE_INFO, "PATH_TIMING_DRIVEN_PLACE\n");
|
|
|
|
break;
|
|
|
|
default:
|
|
|
|
vpr_printf(TIO_MESSAGE_ERROR, "Unknown placement algorithm\n");
|
|
|
|
}
|
|
|
|
|
|
|
|
vpr_printf(TIO_MESSAGE_INFO, "PlacerOpts.pad_loc_type: ");
|
|
|
|
switch (PlacerOpts.pad_loc_type) {
|
|
|
|
case FREE:
|
|
|
|
vpr_printf(TIO_MESSAGE_INFO, "FREE\n");
|
|
|
|
break;
|
|
|
|
case RANDOM:
|
|
|
|
vpr_printf(TIO_MESSAGE_INFO, "RANDOM\n");
|
|
|
|
break;
|
|
|
|
case USER:
|
|
|
|
vpr_printf(TIO_MESSAGE_INFO, "USER '%s'\n", PlacerOpts.pad_loc_file);
|
|
|
|
break;
|
|
|
|
default:
|
|
|
|
vpr_printf(TIO_MESSAGE_INFO, "Unknown I/O pad location type\n");
|
|
|
|
exit(1);
|
|
|
|
}
|
|
|
|
|
|
|
|
vpr_printf(TIO_MESSAGE_INFO, "PlacerOpts.place_cost_exp: %f\n", PlacerOpts.place_cost_exp);
|
|
|
|
|
|
|
|
if (Options.Count[OT_PLACE_CHAN_WIDTH]) {
|
|
|
|
vpr_printf(TIO_MESSAGE_INFO, "PlacerOpts.place_chan_width: %d\n", PlacerOpts.place_chan_width);
|
|
|
|
}
|
|
|
|
|
|
|
|
if ((NET_TIMING_DRIVEN_PLACE == PlacerOpts.place_algorithm)
|
|
|
|
|| (PATH_TIMING_DRIVEN_PLACE == PlacerOpts.place_algorithm)) {
|
|
|
|
vpr_printf(TIO_MESSAGE_INFO, "PlacerOpts.inner_loop_recompute_divider: %d\n", PlacerOpts.inner_loop_recompute_divider);
|
|
|
|
vpr_printf(TIO_MESSAGE_INFO, "PlacerOpts.recompute_crit_iter: %d\n", PlacerOpts.recompute_crit_iter);
|
|
|
|
vpr_printf(TIO_MESSAGE_INFO, "PlacerOpts.timing_tradeoff: %f\n", PlacerOpts.timing_tradeoff);
|
|
|
|
vpr_printf(TIO_MESSAGE_INFO, "PlacerOpts.td_place_exp_first: %f\n", PlacerOpts.td_place_exp_first);
|
|
|
|
vpr_printf(TIO_MESSAGE_INFO, "PlacerOpts.td_place_exp_last: %f\n", PlacerOpts.td_place_exp_last);
|
|
|
|
}
|
|
|
|
|
|
|
|
vpr_printf(TIO_MESSAGE_INFO, "PlaceOpts.seed: %d\n", PlacerOpts.seed);
|
|
|
|
|
|
|
|
ShowAnnealSched(AnnealSched);
|
|
|
|
}
|
|
|
|
vpr_printf(TIO_MESSAGE_INFO, "\n");
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
static void ShowPackerOpts(INP struct s_packer_opts PackerOpts) {
|
|
|
|
|
|
|
|
vpr_printf(TIO_MESSAGE_INFO, "PackerOpts.allow_early_exit: %s", (PackerOpts.allow_early_exit ? "TRUE\n" : "FALSE\n"));
|
|
|
|
vpr_printf(TIO_MESSAGE_INFO, "PackerOpts.allow_unrelated_clustering: %s", (PackerOpts.allow_unrelated_clustering ? "TRUE\n" : "FALSE\n"));
|
|
|
|
vpr_printf(TIO_MESSAGE_INFO, "PackerOpts.alpha_clustering: %f\n", PackerOpts.alpha);
|
|
|
|
vpr_printf(TIO_MESSAGE_INFO, "PackerOpts.aspect: %f\n", PackerOpts.aspect);
|
|
|
|
vpr_printf(TIO_MESSAGE_INFO, "PackerOpts.beta_clustering: %f\n", PackerOpts.beta);
|
|
|
|
vpr_printf(TIO_MESSAGE_INFO, "PackerOpts.block_delay: %f\n", PackerOpts.block_delay);
|
|
|
|
vpr_printf(TIO_MESSAGE_INFO, "PackerOpts.cluster_seed_type: ");
|
|
|
|
switch (PackerOpts.cluster_seed_type) {
|
|
|
|
case VPACK_TIMING:
|
|
|
|
vpr_printf(TIO_MESSAGE_INFO, "TIMING\n");
|
|
|
|
break;
|
|
|
|
case VPACK_MAX_INPUTS:
|
|
|
|
vpr_printf(TIO_MESSAGE_INFO, "MAX_INPUTS\n");
|
|
|
|
break;
|
|
|
|
default:
|
|
|
|
vpr_printf(TIO_MESSAGE_INFO, "Unknown packer cluster_seed_type\n");
|
|
|
|
exit(1);
|
|
|
|
}
|
|
|
|
vpr_printf(TIO_MESSAGE_INFO, "PackerOpts.connection_driven: %s", (PackerOpts.connection_driven ? "TRUE\n" : "FALSE\n"));
|
|
|
|
vpr_printf(TIO_MESSAGE_INFO, "PackerOpts.global_clocks: %s", (PackerOpts.global_clocks ? "TRUE\n" : "FALSE\n"));
|
|
|
|
vpr_printf(TIO_MESSAGE_INFO, "PackerOpts.hill_climbing_flag: %s", (PackerOpts.hill_climbing_flag ? "TRUE\n" : "FALSE\n"));
|
|
|
|
vpr_printf(TIO_MESSAGE_INFO, "PackerOpts.inter_cluster_net_delay: %f\n", PackerOpts.inter_cluster_net_delay);
|
|
|
|
vpr_printf(TIO_MESSAGE_INFO, "PackerOpts.intra_cluster_net_delay: %f\n", PackerOpts.intra_cluster_net_delay);
|
|
|
|
vpr_printf(TIO_MESSAGE_INFO, "PackerOpts.recompute_timing_after: %d\n", PackerOpts.recompute_timing_after);
|
|
|
|
vpr_printf(TIO_MESSAGE_INFO, "PackerOpts.sweep_hanging_nets_and_inputs: %s", (PackerOpts.sweep_hanging_nets_and_inputs ? "TRUE\n" : "FALSE\n"));
|
|
|
|
vpr_printf(TIO_MESSAGE_INFO, "PackerOpts.timing_driven: %s", (PackerOpts.timing_driven ? "TRUE\n" : "FALSE\n"));
|
|
|
|
vpr_printf(TIO_MESSAGE_INFO, "\n");
|
|
|
|
}
|
|
|
|
|