FC2カウンター FPGAの部屋 2008年06月24日
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

ISEでSynplify9.2を使ったインプリメントの場合の制約

ISE9.2.03とSynplify Pro9.2で、ファイルを整理してプロジェクトを作り直していたら、Timing Analyzerに出てくるクロック周期がおかしい。
クロック周期のピリオド制約をコメントアウトして、もう一度Constraints Editor で制約しようとしたら、もうすでに15.151nsという制約が入っていて、Constraints Editor でもう一度7.5ns に書き換えようと思っても書き換えることができない。
Virtex2p_constraint_1_080624.png

これはなんだろうと思っていたら、そういえば、前もこんなことで悩んだことがあるような気になってきた。
確か、これはSynplify Proの制約ファイルが出力されてしまって、Translateで解釈されてしまうのが問題だったような。。。
というわけでISEのSynplify Proのプロパティを出してみると、Write Vender Constraint File にチェックが入っていた。
Virtex2p_constraint_2_080624.png

やはり、これだった。早速、Write Vender Constraint File にチェックを外して、プロジェクト名.ncf ファイルを削除した。
Virtex2p_constraint_3_080624.png

これで、インプリメントしたところ正常な制約が適用されているようだった。良かった。

自分のブログを検索すると、”お手軽にISEでSynplifyを使う上での注意点”で同じ過ちをしていた。
どうも、同じ過ちをしてしまう。。。

しかし、Write Vender Constraint File がデフォルトでチェックされているのいただけない。デフォルトではチェックなしにしてほしい。
  1. 2008年06月24日 12:16 |
  2. その他のFPGA用ツールについての話題
  3. | トラックバック:0
  4. | コメント:0