”Floorplan Editorでエリア制約”の続き。
さて、どこのクリティカルパスがタイミング制約違反になっているのかを見てみよう。
Process ウインドウのImplement Design -> Place & Route -> Generate Post-Place & Route Static Timing -> Analyze Post-Place & Route Static Timing をダブルクリックする。

そうするとTiming Analyzer が起動して、一番、クリティカルパスを最大のものから3つ表示する。最初で、最大のクリティカルパスはcontroller (DDR2 コントローラのステートマシン制御部)内部のパスだった。何でだろう?あまりクリティカルになるようなところではないはずなんだけど。。。

2つ目のクリティカルパスも1つ目と同様だった。3つ目のクリティカルパスはread_data_module (DDR2のリードデータを受けるモジュール)からrddata_fifo(リードデータ用のFIFO)までだった。これは180度位相のクロックで動作している回路から0度のクロックで動作している回路への入力になるので、タイミング制約は2.5ns となる。(動作クロックは200MHz)

以上のことから、controller の自由度を大きくするために、もう少し領域を大きくし、rdata_fifo とwrdata_fifo(ライトデータ用のFIFO)はそれぞれread_data_module とwrite_data_module と重ね合わせることにした。といっても現在のフロアプランではread_data_module とwrite_data_module 同士が重なり合っている。これを、read_data_module とwrite_data_moduleの位置はそのままにcontroller を大きくして、rddata_fifoとwrdata_fifoをread_data_module、write_data_module とController の領域に重ね合わせるようにした。addr_fifo もController に一部重ね合わせるようにして配置してみた。

これでインプリメントして結果を見てみるとやはりタイミング制約が満足していない。今度はwrdata_fifoとフロアプランに含まれていないのFFへのパスだった。

ここで、本当にフロアプランがうまく実行されているかを見てみよう。本当はスライスを表示するのがいいのだが、Floorplan Editorでは小さくて目立たないのでネットを表示させることにする。ちなみにこのインプリメント後のFloorplan Editor の図はピンクの四角で囲ったView Area Contraints のアイコンとオレンジの四角で囲んだToggle Simplified and Actial Views アイコンをクリックしてある。下に示すのが、addr_fifo のインプリメント位置、赤で示されている部分となる。緑はクリティカルパスとそのクリティカルパスがあるモジュールの配線を示している。

大体、フロアプラン通りに配置されている。今度は、controller だ。これは他のところに行く配線が多いが大体フロアプラン通りに配置されているようだ。

次はrddata_fifo。

read_data_module

wrdata_fifo

write_data_module

全部のモジュールがフロアプランされているのが確認できた。
さて、フロアプランされたところとフロアプランされていないFF間の間がクリティカルパスになっていたので、rddata_fifo(リードデータのFIFO)とwddata_fifo(ライトデータのFIFO)の間を開けることにした。それでトップのモジュール、DDR_burst_test もフロアプランしていなかったので、全体を包むようにフロアプランした。

やはりクリティカルパスが5.904ns で5ns を満足しなかった。残念ながらこの辺であきらめようと思う。
試しにフロアプランしない普通のプロジェクトで、XSTのKeep Hierarchy をYesにしてやってみたら、タイミング制約が満足しなかった。やはり、このプロジェクトでは階層を保持するとタイミングが満足しなくないるようだ。これは、モジュール間はFFで出してFFで受けるということを守れば、タイミングが満足するようになりやすいと思う。その辺はPartition にも関連してくるだろう。
更に、フロアプランをしやすいモジュールの分け方というのがあると思う。例えばライトのモジュールとリードのモジュールで分けるのではなく、FPGAの内部構造を考えたモジュールの分け方をしたほうがフロアプランしやすいと思う。(IOパッドの近くにそのまま置けるので、他に行くネットがないため)
例えば、1組のISERDESとOSERDESを1つのモジュールとすると、そのモジュールはIOパッドの近くに独立にフロアプランすることが出来る。それぞれに1ビットずつのリード用、ライト用FIFOをつけても良いかも?FIFOの制御回路は8ビットごとにつけるとか。とにかくFPGAの内部構造を考えてフロアプランしやすいように考えてモジュールを作ったほうが良いと思われる。今回は失敗してしまったが、次回はそういう風に考えてモジュール分けをやってみたい。
Floorplan Editorでのエリア制約は、ISEでPlanAhead Lite が標準でついていることもあって、WebPACKでしか使われないと思う。これからはPlanAheadに移行していくことだろう。
- 2009年02月19日 21:31 |
- Floorplan Editorの使い方
-
| トラックバック:0
-
| コメント:0