Esempio n. 1
0
static int check_subblocks(int iblk, t_subblock_data *subblock_data_ptr) {

	/* 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;
	int num_subblocks, max_subblocks_per_block, subblock_lut_size;
	t_subblock *subblock_inf;
	int subblock_ff_size;

	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;
	subblock_ff_size = subblock_data_ptr->subblock_ff_size;

	if (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
							+ (1 + subblock_ff_size) * max_subblocks_per_block
							- 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. */

	return (error);
}
Esempio n. 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);
}