”Spartan3A Starter KitのDDR2 SDRAMコントローラの途中経過4(ロジックセルを固定する)”でロジックセルを固定したが、微妙な遅延差が残った。今回は微妙な遅延差の解消を目指す。
まずはIOBから非同期FIFOまでのネットが約0.4ns のDQ0と同じく0.7ns のDQ1の違いを考察することにする。まずはDQ0から下の図にFPGA Editorで見たIOBから非同期FIFOまでのネットを示す。

DQ0はIOBと非同期FIFOのロジックが同じ行にある。IOBから最初につながっているスライス(フロアプランの位置で言うとX0Y62)と次のスライス(X2Y63)はX方向(行方向)が異なっているが、遅延の差は5ps だった(0.405ns と0.410ns)。
次にDQ1を見てみよう。下にDQ1のにFPGA Editorで見たIOBから非同期FIFOまでのネットを示す。

これはIOBとスライスの列方向の位置が違っている。この遅延はどちらのスライスも0.700ns と大きい。やはり列方向に配線するのに遅延が大きくなっているのだろうか?なるべく、列方向が異なる配置にならないようにもう一度Floorplannerで配置をやり直すことにする。
もう一度、Floorplannerを立ち上げてよく見てみると、IOBとスライスの間が2重線でつながれているところがある。そこが列が違うところのようだった。

2重線をネットがまたがないように位置を並べ替えた。そして、この状態でインプリメントし、Timinig Analyzerで見たところ、IOBから非同期FIFOまでのネットの遅延が0.7ns程度のものがある。どうやら区画の上側のIOパッドから、その区画のSLICEM(分散RAMになるのはSLICEMのみです)に行くネットの遅延が大きいようだ。下にDQ1のネットを示す。0.7ns程度の遅延だ(ピンクの四角の部分)。

これは困った。スイッチファブリックのスイッチルートが悪いのだろうか?
更に、区画内の上側のIOパッドから少ない遅延時間で接続できるSLICEM(非同期FIFOの入り口のロジックセル)を探してみることにした。その結果、上の区画のX0の位置の2つのSLICEMに接続すれば0.481ns の遅延で接続できることがわかった。

この結果、区画の下側のIOパッドは同じ区画のSLICEMに接続すれば遅延が少なく、区画の上側のIOパッドは上の区画のX0の2つのSLICEMに接続すればやはり遅延が少ないことがわかった。
上の法則にしたがって、さらにもう一度Floorplannerで配置をやり直す。
これでインプリメントしたら失敗してしまった。FPGA Editorで見たIOパッドの位置とFloorplannerで見た区画内のIOパッドの位置は逆のようだ。それを考慮して、Floorplannerで逆に配置する。
実際には下の図のように配置した。

これでIOパッド(IOB)から非同期FIFOまでのネットの遅延は0.401ns、0.411ns と0.481ns になったが、DQ7のネットのみ、ロングライン配線の通っている(横切っている)数が多いようで、間が広いようだった?そのため遅延が0.543ns と多くなってしまった。それでも、最大遅延と最小遅延の差は142ps になった。これはこの辺でいいだろうというか、これ以上改善は難しいと思う。
- 2009年03月30日 22:00 |
- Spartan3A Starter Kit
-
| トラックバック:0
-
| コメント:0