この前、”仕事では、どうもわけがわからないことがある。IOBのDDRレジスタを使ってクロックを出していて、前のIOBのDDRレジスタを駆動するクロックを使用したIOBのFFでデータを出しているのだが、どうもIOBの出力レジスタから出力パッドまでの遅延がそれぞれ違うのだ。なぜかはまだわからないが、なぜなんだろう? 解明中。”と書いたのだが、私のミス?でUCFが間違っていた。
LVDSのICへはクロックとデータを出力している。クロックはIOBのDDRレジスタを使って、D0に'0'、D1に'1'を入れることによって、クロックを出力している。下の図でフィードバックループが外になくて、FPGA内部に設定してある感じである。(つながっているデバイスもSDRAMではなくてLVDSの送信用ICだけど)

データは最後をFF出力にしてIOB内のFFを使うように設定してある。こうすれば、グローバルクロック配線遅延は大体同一なので、クロック出力時間と、データ出力時間が等しくなり、データとクロックの位相関係が保証できるはずだ。
ところがクロックとデータの出力時間が2ns程度違っている。
クロックのタイミングアナライザでの解析値とFPGA Editorでの回路構成を下に示す。

Tiockpは2.720nsだった。データのタイミングアナライザでの解析値とFPGA Editorでの回路構成を下に示す。

データのTiockpは4.766nsだった。この差は約2nsある。これが何で生じているかをXilinxのアンサー・サーチなどで調べてみたが、無いようだった。更にデータがDDRじゃないからだめなのかな?と思いデータもわざわざDDRにしてみたが、やはりTiockpは変化がなかった。
これで2、3日くらい悩んでしまったが、ふとUCFを見るとクロック出力のほうは、IOBのスルーレートがFASTで8mA出力になっていた。データのほうのUCFは位置の固定だけでデフォルトだったので、スルーレートはSLOWで12mA出力だ。ここがおかしかった。。。
データをクロックの設定にあわせたらTiockpも同じになった。
あ~あ、時間が無駄になってしまった。その前の固めてあるインプリを見るとデータもちゃんと設定してあるので、いつの時点かでUCFがなくなってしまったようだ。
1つ考えられるのは、UCFをPACEで設定するようになってから、 floorplanner や Constraints Editor で作ったUCFと互換が取れにくくなってしまったことがある。両方を使用していると、制約が2重になることもあったし、その時に修正したときに間違って消してしまったのかもしれない。新しいツールを出す時は互換性を完全に取ってもらいたい。(かなり八つ当たりモードです。反省)
- 2007年03月17日 15:40 |
- UCFの書き方
-
| トラックバック:0
-
| コメント:0