26 int num_packing_patterns;
28 int num_pack_molecules;
30 vpr_printf(TIO_MESSAGE_INFO,
"Begin packing '%s'.\n", packer_opts->blif_file_name);
34 cur_model = user_models;
37 cur_model = cur_model->
next;
39 cur_model = library_models;
42 cur_model = cur_model->
next;
49 vpr_printf(TIO_MESSAGE_INFO,
"After removing unused inputs...\n");
50 vpr_printf(TIO_MESSAGE_INFO,
"\ttotal blocks: %d, total nets: %d, total inputs: %d, total outputs: %d\n",
53 vpr_printf(TIO_MESSAGE_INFO,
"Begin prepacking.\n");
55 &num_packing_patterns);
57 list_of_packing_patterns, num_packing_patterns,
59 vpr_printf(TIO_MESSAGE_INFO,
"Finish prepacking.\n");
61 if(packer_opts->auto_compute_inter_cluster_net_delay) {
62 packer_opts->inter_cluster_net_delay = interc_delay;
63 vpr_printf(TIO_MESSAGE_INFO,
"Using inter-cluster delay: %g\n", packer_opts->inter_cluster_net_delay);
71 if (packer_opts->skip_clustering ==
FALSE) {
73 packer_opts->global_clocks, is_clock,
74 packer_opts->hill_climbing_flag, packer_opts->output_file,
75 packer_opts->timing_driven, packer_opts->cluster_seed_type,
76 packer_opts->alpha, packer_opts->beta,
77 packer_opts->recompute_timing_after, packer_opts->block_delay,
78 packer_opts->intra_cluster_net_delay,
79 packer_opts->inter_cluster_net_delay, packer_opts->aspect,
80 packer_opts->allow_unrelated_clustering,
81 packer_opts->allow_early_exit, packer_opts->connection_driven,
82 packer_opts->packer_algorithm, timing_inf);
84 vpr_printf(TIO_MESSAGE_ERROR,
"Skip clustering no longer supported.\n");
93 cur_pack_molecule = list_of_pack_molecules;
94 while (cur_pack_molecule != NULL){
97 cur_pack_molecule = list_of_pack_molecules->
next;
98 free(list_of_pack_molecules);
99 list_of_pack_molecules = cur_pack_molecule;
103 vpr_printf(TIO_MESSAGE_INFO,
"Netlist conversion complete.\n");
107 float get_switch_info(
short switch_index,
float &Tdel_switch,
float &R_switch,
float &Cout_switch) {
117 return Tdel_switch + R_switch * Cout_switch;
126 int num_clocks, bnum, clock_net;
138 assert(clock_net !=
OPEN);
139 if (is_clock[clock_net] ==
FALSE) {
140 is_clock[clock_net] =
TRUE;
146 if (is_clock[clock_net] ==
FALSE) {
147 is_clock[clock_net] =
TRUE;
158 if (num_clocks > 1 && global_clocks) {
159 vpr_printf(TIO_MESSAGE_WARNING,
"Circuit contains %d clocks. All clocks will be marked global.\n", num_clocks);
float get_switch_info(short switch_index, float &Tdel_switch, float &R_switch, float &Cout_switch)
void * my_calloc(size_t nelem, size_t size)
void free_list_of_pack_patterns(INP t_pack_patterns *list_of_pack_patterns, INP int num_packing_patterns)
struct s_switch_inf * switch_inf
void do_clustering(const t_arch *arch, t_pack_molecule *molecule_head, int num_models, boolean global_clocks, boolean *is_clock, boolean hill_climbing_flag, char *out_fname, boolean timing_driven, enum e_cluster_seed cluster_seed_type, float alpha, float beta, int recompute_timing_after, float block_delay, float intra_cluster_net_delay, float inter_cluster_net_delay, float aspect, boolean allow_unrelated_clustering, boolean allow_early_exit, boolean connection_driven, enum e_packer_algorithm packer_algorithm, t_timing_inf timing_inf)
t_pack_patterns * alloc_and_load_pack_patterns(OUTP int *num_packing_patterns)
struct s_pack_molecule * next
t_pack_molecule * alloc_and_load_pack_molecules(INP t_pack_patterns *list_of_pack_patterns, INP int num_packing_patterns, OUTP int *num_pack_molecule)
static boolean * alloc_and_load_is_clock(boolean global_clocks)
t_logical_block ** logical_block_ptrs
struct s_logical_block * logical_block
void try_pack(INP struct s_packer_opts *packer_opts, INP const t_arch *arch, INP t_model *user_models, INP t_model *library_models, t_timing_inf timing_inf, float interc_delay)