Example #1
0
static int check_connects(int *num_uses_of_clb_pin, int *num_uses_of_sblk_opin,
		int *num_uses_of_ff_opin, t_subblock_data *subblock_data_ptr, int iblk) {
	/* Reset fanout counts. */
	int i, num_subblocks, num_ffblocks, max_sub, subblock_lut_size,
			subblock_ff_size;
	int error = 0;
	t_subblock *subblock_inf;
	t_ffblock *ffblock_inf;

	subblock_inf = subblock_data_ptr->subblock_inf[iblk];
	ffblock_inf = subblock_data_ptr->ffblock_inf[iblk];
	num_subblocks = subblock_data_ptr->num_subblocks_per_block[iblk];
	max_sub = subblock_data_ptr->max_subblocks_per_block;
	num_ffblocks = subblock_data_ptr->num_ff_per_block[iblk];
	subblock_lut_size = subblock_data_ptr->subblock_lut_size;
	subblock_ff_size = subblock_data_ptr->subblock_ff_size;

	for (i = 0; i < pins_per_clb; i++)
		num_uses_of_clb_pin[i] = 0;

	for (i = 0; i < max_sub; i++)
		num_uses_of_sblk_opin[i] = 0;

	for (i = 0; i < max_sub * subblock_ff_size; i++)
		num_uses_of_ff_opin[i] = 0;

	load_one_clb_fanout_count(subblock_lut_size, subblock_inf, num_subblocks,
			num_uses_of_clb_pin, num_uses_of_sblk_opin, iblk, ffblock_inf,
			num_ffblocks, num_uses_of_ff_opin, max_sub);

	error += check_clb_to_subblock_connections(iblk, subblock_inf, ffblock_inf,
			num_subblocks, num_ffblocks, num_uses_of_clb_pin);

	error += check_internal_subblock_connections(subblock_data_ptr, iblk,
			num_uses_of_sblk_opin, num_uses_of_ff_opin);

	return (error);
}
Example #2
0
static int check_subblocks (int iblk, t_subblock_data *subblock_data_ptr,
           int *num_uses_of_clb_pin, int *num_uses_of_sblk_opin) {

/* This routine checks the subblocks of iblk (which must be a CLB).  It    *
 * returns the number of errors found.                                     */

 int error, isub, ipin, clb_pin, i;
 int num_subblocks, max_subblocks_per_block, subblock_lut_size;
 t_subblock *subblock_inf;

 error = 0;
 subblock_inf = subblock_data_ptr->subblock_inf[iblk];
 num_subblocks = subblock_data_ptr->num_subblocks_per_block[iblk];
 max_subblocks_per_block = subblock_data_ptr->max_subblocks_per_block;
 subblock_lut_size = subblock_data_ptr->subblock_lut_size;

 if (num_subblocks < 1 || num_subblocks > max_subblocks_per_block) {
    printf("Error:  block #%d (%s) contains %d subblocks.\n",
           iblk, block[iblk].name, num_subblocks);
    error++;
 }

/* Check that all pins connect to the proper type of CLB pin and are in the *
 * correct range.                                                           */

 for (isub=0;isub<num_subblocks;isub++) {

    for (ipin=0;ipin<subblock_lut_size;ipin++) {  /* Input pins */
       clb_pin = subblock_inf[isub].inputs[ipin];
       error += check_subblock_pin (clb_pin, 0, pins_per_clb +
            num_subblocks - 1, RECEIVER, iblk, isub,
            subblock_inf);
    }

/* Subblock output pin. */

    clb_pin = subblock_inf[isub].output;
    error += check_subblock_pin (clb_pin, 0, pins_per_clb - 1,
             DRIVER, iblk, isub, subblock_inf);

/* Subblock clock pin. */

    clb_pin = subblock_inf[isub].clock;
    error += check_subblock_pin (clb_pin, 0, pins_per_clb +
             num_subblocks - 1, RECEIVER, iblk, isub,
             subblock_inf);

 }  /* End subblock for loop. */

/* If pins out of range, return.  Could get seg faults otherwise. */

 if (error != 0)
    return (error);

/* Reset fanout counts. */

 for (i=0;i<pins_per_clb;i++)
    num_uses_of_clb_pin[i] = 0;

 for (i=0;i<num_subblocks;i++)
    num_uses_of_sblk_opin[i] = 0;

 load_one_clb_fanout_count (subblock_lut_size, subblock_inf,
        num_subblocks, num_uses_of_clb_pin,
        num_uses_of_sblk_opin, iblk);

 error += check_clb_to_subblock_connections (iblk, subblock_inf,
        num_subblocks, num_uses_of_clb_pin);

 error += check_internal_subblock_connections (subblock_data_ptr, iblk,
        num_uses_of_sblk_opin);

 return (error);
}