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
@ncd_root=split(/\./,$ARGV[0]);
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);
$cnt=0;
foreach $line (@XDL)
{
chomp;
@fields=split(/\s+/, $line);
# Find start of net record
if ($fields[0] eq "net")
{
$net="yes" ;
$net_name=$fields[1];
}
# 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" ;
$cnt=0;
}
# Count drivers on net
if ($net eq "yes" && $fields[1] eq "outpin")
{
$cnt++
}
}
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-------------------------------------------------------------
#!/usr/local/bin/perl
# Run ncdread on ncd specified on the command line
@ncd_root=split(/\./,$ARGV[0]);
`ncdread $ncd_root[0].ncd > $ncd_root[0].dmp`;
open (FILE,"$ncd_root[0].dmp");
while(<FILE>){
chomp;
@fields=split(/\s+/);
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]");
$tbuf_cnt++;
}
}
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";
$cnt=1;
$net_cnt++}
else {$cnt++}
$old=$net;
}
print "TBUF net $old has $cnt drivers.\n";
$net_cnt++;
print "There are $tbuf_cnt TBUFs driving $net_cnt different nets.\n";
`rm $ncd_root[0].dmp`;
exit;
AR# 2872 | |
---|---|
Date | 05/14/2014 |
Status | Archive |
Type | General Article |