We have detected your current browser version is not the latest one. Xilinx.com uses the latest web technologies to bring you the best online experience possible. Please upgrade to a Xilinx.com supported browser:Chrome, Firefox, Internet Explorer 11, Safari. Thank you!

AR# 2872

9.1i PAR - "WARNING:baspl:291 - The TBUF component "XXX" could not be placed." (How to count the number of TBUF driven nets in a design)


PAR reports the following warning message:

"WARNING:baspl:291 - The TBUF component "XXX" could not be placed.

ERROR:baspl:292 - This is probably due either to lack of resources or to preference conflicts. If PAR has been run, please check the .par file for resource allocation and utilization and verify that there are sufficient resources to place the component(s). Also ensure that all placement conflicts have been resolved."

The number of TBUF-driven nets that a 4K design can accommodate is 4*num_rows. For example, an XC4036EX has 36 rows and can accommodate 144 TBUF-driven nets. When this limitation is exceeded, PAR reports the previous warning message, which can potentially be misleading.

To see if this limitation has been exceeded, you must count the number of TBUF-driven nets. Please see the solutions below for examples of how to count TBUF-driven nets.


The following Perl script will extract an XDL file from the NCD file specified, if the XDL file does not already exist, and then count the number of TBUF drivers on every TBUF net.

Command line:

xilperl tbuf.pl design.ncd

--- cut here and create tbuf.pl ---

# Perl script to count TBUF sets in an existing NCD

# Syntax:xilperl tbuf.pl design.ncd

# Create xdl file in necessary


if (! -e "$ncd_root[0].xdl") {

print "Generating XDL file. Please wait ...\n";

`xdl -nopips -ncd2xdl $ncd_root[0]`;


print "Loading XDL data ...\n";

open (FILE,"$ncd_root[0].xdl");

@XDL = <FILE>;

close (FILE);


foreach $line (@XDL)



@fields=split(/\s+/, $line);

# Find start of net record

if ($fields[0] eq "net")


$net="yes" ;



# Find end of net record and print report if multiple drivers

if ($fields[1] eq ";")


if ($cnt >= "2")


print "$cnt TBUF drivers on net $net_name\n";


$net="no" ;



# Count drivers on net

if ($net eq "yes" && $fields[1] eq "outpin")





Using Perl script:

The following script, "tbuf.pl", can be used to count the number of TBUF-driven nets in a Virtex or Virtex-II design (this script depends on the existence of a valid XILINX environment).

For PCs, run:

xilperl tbuf.pl design.ncd

For UNIX Workstations, run:

tbuf.pl design.ncd

---------Cut Here-------------------------------------------------------------


# Run ncdread on ncd specified on the command line


`ncdread $ncd_root[0].ncd > $ncd_root[0].dmp`;

open (FILE,"$ncd_root[0].dmp");




if (($fields[3] =~ /TINV/ || $fields[3] =~ /TMUX/) && $fields[1] eq "Config"){ $tbuf="1" }

if (($fields[3] !~ /TINV/ && $fields[3] !~ /TMUX/) && $fields[1] eq "Config"){ $tbuf="0" }

if ($tbuf eq "1" && $fields[1] eq "pin" && $fields[4] eq "O:"){

push (@nets, "$fields[5]");




foreach $net (sort(@nets)) {

substr($net,-2,2) = "";

substr($net,0,1) = "";

if ($net ne $old && $cnt > "0") {

print "TBUF net $old has $cnt drivers.\n";



else {$cnt++}



print "TBUF net $old has $cnt drivers.\n";


print "There are $tbuf_cnt TBUFs driving $net_cnt different nets.\n";

`rm $ncd_root[0].dmp`;


AR# 2872
Date Created 08/21/2007
Last Updated 05/14/2014
Status Archive
Type General Article