FC2カウンター FPGAの部屋 Floorplan Editorの使い方

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

FPGAの部屋

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

ISE10.1iのFloorplan Editorでエリア制約2

”Floorplan Editorでエリア制約”の続き。

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

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

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

以上のことから、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 に一部重ね合わせるようにして配置してみた。
floorplan_editor_13_090215.png

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

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

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

次はrddata_fifo。
floorplan_editor_17_090215.png

read_data_module
floorplan_editor_18_090215.png

wrdata_fifo
floorplan_editor_19_090215.png

write_data_module
floorplan_editor_20_090215.png

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

やはりクリティカルパスが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に移行していくことだろう。
  1. 2009年02月19日 21:31 |
  2. Floorplan Editorの使い方
  3. | トラックバック:0
  4. | コメント:0

ISE10.1iのFloorplan Editorでエリア制約

今回はProcessesウインドウのUse Constraints を展開して選ぶ、Floorplan Area / IO / Logic - Post-Synthesis をやってみることにした。これを選ぶとSparntan-3EやVirtex-2などはPACEが起動するが、Virtex-4, Virtex-5, Spartan-3AなどはFloorplan Editorが起動する。多分、正規のISEを使用している方はPlanAhead Liteを使えるので、エリア制約をかけるとしたら、そっちを使用するのだと思うが、WebPACKではそれはないので、エリア制約をするとしたら、この方法になるか、それともFloorplannerになると思う。
Floorplan Editorを使ってみた記事は、” ISERDESのお勉強の続き2 ”がある。(よく書けていると自分でもと思う。後で見ると、ああこんなこともやっていたと思うことが良くある)

さて、プロジェクトはSuzaku-V用のDDR2_burst_testでやってみよう。ProcessesウインドウのUse Constraints を展開して、Floorplan Area / IO / Logic - Post-Synthesis をダブルクリックする。(すでにTiminig ConstrainsがAll Constrains Met になっている。これは、いろいろ苦労してVerilogファイルを最適化しながら制約を満足するようにしたのだった)
floorplan_editor_1_090215.png

Floorplan Editorが立ち上がる。
floorplan_editor_2_090215.png

左のSourceウインドウを見ると、モジュールに分かれていないで、リソースがばらばらになっているのがわかると思う。これではエリア制約をかけることが出来ない。
そうこれは、XSTのKeep Hierarchy オプションをONにする必要がある。(これをONすると、モジュールが残るので、モジュールを渡った最適化が弱くなって、タイミング制約を満たさない可能性も大きくなる)
ProcessesウインドウのSynthesize を右クリックして、Properties... を選択しよう。
floorplan_editor_3_090215.png

Synthesis Options ダイアログが開くので、Keep Hierarchy をNoからYesに変更する。これでモジュールの階層が保持される。
floorplan_editor_4_090215.png

これで再度、ProcessesウインドウのUse Constraints を展開して、Floorplan Area / IO / Logic - Post-Synthesis をダブルクリックする。
そうすると、下の図に示すように、左側のSourceウインドウに各モジュールが表示されるのがわかると思う。右のウインドウのFloorplanタブをクリックして、Floorplanのウインドウに変更する。各モジュールを右側のFloorplanウインドウに適当にドラックアンドドロップしてみる。
floorplan_editor_5_090215.png

下の図がドラックアンドドロップをした後。
floorplan_editor_6_090215.png

適当ではあるが、フロアプランが出来たので、例によってインプリメントした。そうしたら、エリアが小さすぎたようでエラーが出てしまった。
floorplan_editor_7_090215.png

ここでエリアを広げるのだが、やはり、位置を考えてフロアプランすることにした。
ピンクの四角で囲ったところが、IOパッドだ。DQ入出力の近くにread_data_module とwrite_data_module があったほうが良いので、そのモジュールを重ねて大きくして、その2つを重ねた。contorlller は上に大きく配置して、その下にFIFO群を配置した。
floorplan_editor_8_090215.png

これで再度インプリメント。しかし、タイミング制約がエラーになってしまった。
floorplan_editor_9_090215.png

結構、フロアプランするのも面倒だ。。。シビアでなければ、しないほうが面倒がないかも?
後半に続く。果たして無事にインプリメントが成功するのか???
  1. 2009年02月16日 21:14 |
  2. Floorplan Editorの使い方
  3. | トラックバック:0
  4. | コメント:1