FC2カウンター FPGAの部屋 DCMを使わないクロックを使いIOB内のFFでデータを受ける2
fc2ブログ

FPGAやCPLDの話題やFPGA用のツールの話題などです。 マニアックです。 日記も書きます。

FPGAの部屋

FPGAの部屋の有用と思われるコンテンツのまとめサイトを作りました。Xilinx ISEの初心者の方には、FPGAリテラシーおよびチュートリアルのページをお勧めいたします。

DCMを使わないクロックを使いIOB内のFFでデータを受ける2

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

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

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

そうするとデータ入力のセットアップ時間が同じような値でマイナスになった。これをプラスにするためにデータ入力の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;


これでインプリメントすると、セットアップ時間内にばらつきが少なくおさまった。
Virtex2p_recv_data_4_080624.png

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

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

コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック URL
https://marsee101.blog.fc2.com/tb.php/821-cbc0bb40
この記事にトラックバックする(FC2ブログユーザー)