Hold Timeが満たされないと
VirtexII Proを使った設計をしていて、あるときからRouteにかかる時間が急増した。
いままで数分くらいでできていたものが、10分になり、30分になり、どんどん時間がかかっていく。
それほどたいした回路ではないのに・・・
どうやら、タイミング制約にエラーが起きているのだけれども、
今回は、不思議なことにHold Timeが満たされていない。
レジスタとレジスタの間の組み合わせ回路の部分が重ければ、Setup Timeが満たせなくなるのが普通だ。
どうやら、クロックのネットが重くて遅れてしまい、
その結果、データの方が先に到達してしまっていたらしい。
2つのフリップフロップの間の、クロックのスキューは4.773ns。
データは、前段のフリップフロップから配線のみで、3.2nsくらいで到達する。
これだと、Hold Timeが満たせず、
ISEは、PARの中のRouteの最後のプロセスで20分くらい固まってしまう。
(そのときメモリは数百メガ消費していて何かしら動いているが)
最初は、こんな感じだった。
CLK ファンアウト=133、Net Scew=4.778ns、Max Delay=5.218ns
そこで、メインのクロックから、ブロックRAMやその周辺のロジックにつながるクロックを分離したら、
Hold Timeが満たせて、ISEはサクサクとRouteを完了させてくれるようになった。
対策後は、こんな感じになった。
CLK ファンアウト=100、Net Scew=2.516ns、Max Delay=3.260ns
MEMCLK ファンアウト=19、Net Scew=0.046ns、Max Delay=1.162ns
クロックのスキューが減るよう、手作業でDCMを追加していかなければならないのだろうか。
最近のコメント