”DCMを使わないクロックを使いIOB内のFFでデータを受ける”でDCMを使わないクロックでのデータの受け方を練習したが、クロックを遅延させる方法はどうも危ない気がするし、違う方法を模索してみることにした。
ISE9.2.03とSynplify9.2、FPGAはVirtex2pだ。今どきVirtex2を使っている人は少ないと思うが、Spartan3にも適応できるので良いと思う。(もっとVirtex4などの方が簡単なのだが。。。)
状況は、他にチップからのデータを向こうの受信クロックで受ける。チップが多いのでDCMは使用できない。クロックはBUFGMUXのみを通してFPGA内に供給している。
その時に、セットアップ時間を制約しているが、(1.5ns) それだけだと、制約をオーバーしたり、マイナスになることがよくある。それで、ちょうどうまくセットアップ時間を確保するにはどうすればよいかを探る。
たとえば下のTiming Analyzerのようにマイナスになってしまう。こうなるとホールド時間がきつくなってしまう。さらに結構ばらついてしまう。

とりあえずばらつきを防止するために、Floorplannnerでデータの最初のFFの位置を全部固定した。

パッドと最初のFFを割り当てるスライスの間が離れると配線の自由度が上がるので、値がばらつくだろうという考えのもとに、パッドからなるべく近くのスライスに配線した。
これでインプリメントしてみた。

そうするとデータ入力のセットアップ時間が同じような値でマイナスになった。これをプラスにするためにデータ入力のIOBDELAYを入れることにした。
INST "lvds_rx0_data[*]" IOBDELAY=BOTH;
INST "lvds_rx1_data[*]" IOBDELAY=BOTH;
INST "lvds_rx2_data[*]" IOBDELAY=BOTH;
INST "lvds_rx3_data[*]" IOBDELAY=BOTH;
INST "lvds_rx4_data[*]" IOBDELAY=BOTH;
INST "lvds_rx5_data[*]" IOBDELAY=BOTH;
INST "lvds_rx6_data[*]" IOBDELAY=BOTH;
これでインプリメントすると、セットアップ時間内にばらつきが少なくおさまった。

前と同じパッドのTiming Analyzer解析結果はこうなった。

IOBDELAYを入れたので、入力パッドの遅延が増えている。次のFFまでのネットの遅延は減っている。総合的にちょうど良くなった。これでもう少し、セットアップ時間を増やしたいときにはFloorplannerで固定するFFの位置を離せば良いと思う。あまり離すと遅延値がぶれてしまう可能性があると思うが。。。もしどうしても必要があるのならば、FPGA Editorで配線も固定する必要があるかもしれない。
- 2008年06月24日 17:32 |
- FPGAチップ内の配線方法
-
| トラックバック:0
-
| コメント:0