Answers Database
1.5i, 2.1i XC4000XL PAR - Router duplicates registers for use as output to output route-thrus.
Record #3813
Product Family: Software
Product Line: FPGA Implementation
Product Part: par
Product Version: 1.4.
Problem Title:
1.5i, 2.1i XC4000XL PAR - Router duplicates registers for use as output to output
route-thrus.
Problem Description:
PAR will sometimes duplicate flops to drive seperate
sections of a net. This is considered an output to
output route-thru. This is a problem when the input
net is asynchronous, there is a chance that the
flops will be clocked while the input is changing and the
two flops could end up in different states.
Solution 1:
An environment variable (CM_EXCLUDE_XQYQ) has been
created that disables the use of CLB Flop outputs
for output to output route-thrus.
This feature is available in all versions of M1.5.
To set the variable:
setenv CM_EXCLUDE_XQYQ (work stations)
set CM_EXCLUDE_XQYQ=TRUE (PCs)
Solution 2:
The following perl script can be used to detected occurrances of duplicated
registers in XC4000X* designs. The routed .ncd file is used as a command
line argument. A valid Xilinx environment must be present for the script to run
successfully. It may be necessary to modify the first line to the correct location
perl5 on your system.
Sample output:
swissx [186] dup_flop.pl test.ncd
A register has been replicated for net "DONE",
which is driven by CLB "ACTIVE_N" at site CLB_R9C14.
dup_flop.pl:
#!/usr/local/bin/perl5
@ncd_root=split(/\./,$ARGV[0]);
`xdl -nopips -ncd2xdl $ncd_root[0]`;
open (FILE,"$ncd_root[0].xdl");
while(<FILE>){
chomp;
@fields=split(/\s+/);
if ($fields[0] eq "inst" && $fields[2] eq "CLB"){
$comp_name=$fields[1];
$site_name=$fields[6];
}
if (/ROUTETHROUGH-XQ-YQ/) {
open (FILE2,"$ncd_root[0].xdl");
while(<FILE2>){
chomp;
@fields2=split(/\s+/);
if ($fields2[0] eq "net") {
$net=$fields2[1];
}
if ($fields2[1] eq "outpin" && $fields2[2] eq $comp_name && ($fields2[3] eq "YQ" || $fields2[
3] eq "XQ")) {
$net_name=$net;
}
}
print "\n";
print "A register has been replicated for net $net_name,\n";
print "which is driven by CLB $comp_name at site $site_name.\n";
print "\n";
}
}
exit;
End of Record #3813 - Last Modified: 01/05/00 10:46 |