AR# 3813

41i XC4000XL/Spartan PAR - 配線の際、重複したレジスタが出力から出力へ信号をルートスルーする

説明

キーワード : replicate, duplicate, flop, register, FF, sync, asynchronous, route-thru, routethru, 反復, 重複, フリップフロップ, レジスタ, 非同期, ルートスルー

重要度 : 標準

概要 :
PAR では、1 つのネットの別々のセクションを駆動するためフリップフロップのコピーが作成されることがあります。 これは、出力から出力へのルートスルーとみなされ、 入力ネットが非同期の場合に問題となります。入力が変化している状態でフリップフロップにクロック信号が入ってくると、この 2 つのフリップフロップがそれぞれ別のステートになってしまう可能性があるからです。

この問題は、XC4000XL および Spartan などのデバイスに影響を与えます。

ソリューション

1

環境変数 (CM_EXCLUDE_XQYQ) は、出力から出力へ信号がルートスルーされている CLB フリップフロップ出力ピンをディスエーブルにします。

この変数の設定方法 :

UNIX の場合 :
setenv CM_EXCLUDE_XQYQ

PC の場合 :
set CM_EXCLUDE_XQYQ=TRUE

2

次の Perl スクリプトは、XC4000X* のデザイン内で重複しているレジスタを検出するのに使用します。 配線済みの .ncd ファイルは、コマンド ラインの引数として使用します。 このスクリプトを正しく実行するため、有効な環境が必要です。 最初の行は、ご使用のシステムでの Perl5 の正しいディレクトリに合わせて、修正してください。

メモ : CLB に複数のルートスルーが含まれている場合、このスクリプトで正確な結果を得ることができません。 この問題を修正するには、XDL のパッチを入手してください。詳細については、(ザイリンクス アンサー #13636) を参照してください。

サンプル出力 :
swissx [186] dup_flop.pl test.ncd

サイト CLB_R9C14 で「ACTIVE_N」という CLB により駆動されるネット DONE に対してレジスタのコピーが作成されます。

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;

3

BLKNM や RLOC などのマップ制約を使用しフリップフロップが常にほかのフリップフロップと一緒に CLB にパックされるようにすると、フリップフロップの重複を防ぐことができます。 CLB 内ですべてのフリップフロップが使用されるようにしておくと、フリップフロップは重複されません。 この回避策では、一部のフリップフロップのみが重複されるのを防ぐことができます。
AR# 3813
日付 10/19/2008
ステータス アーカイブ
種類 一般