FC2カウンター FPGAの部屋 Floorplannerの使い方覚書3
FC2ブログ

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

FPGAの部屋

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

Floorplannerの使い方覚書3

Floorplannerの使い方覚書1で現在のロジックセルの配置をすべてUCF(制約ファイル)とFNF(フロアプランのファイル)にコピーして、クリティカルパスのみ配置を移動した。
セミナに行ってみると、それはだめといわれてしまった。確かにV2-6000で6%くらいしかロジックを使っていないにもかかわらず、UCFファイルの行数は5000行を越え、容量は390Kbyte以上になっている。全部使うようになったら、UCFは5万行を越えそうである。これじゃだめだ。
それで、クリティカルパスだけUCFとFNFにコピーして、修正したほうが良いとセミナで言っていたのでやってみた。
例によって、インプリメンテーションしてから、タイミングアナライザを起動する。
Process View - Implement Design - Place & Route - Generate Post-Place & Route Static Timing - Analyze Post-Place & Route Static Timing(Timing Analyzer)をダブルクリックして、Timing Analyzerを起動。
ISE_timinga.jpg


Timinig Analyzerが起動する。一番左の時計マークのアイコン"Analyze against Timing Constrains"をクリックする。そうするとあらかじめUCFで制約をかけたパスについてタイミング解析をする。タイミングを満たしていないパスはで表示される。
Timing Analyzer画面の左側のペインの"Timing Constrains"の左の四角で囲ったプラスをクリックすると、制約ごとのタイミング解析結果を展開して表示する。その時に、タイミングを満たしていないパスはで表示される。
さらにその制約(ここではTIMEGRP "clk" PERIOD=の部分)の左の四角で囲ったプラスをクリックすると、一番遅延が大きいパス(クリティカルパス)から表示される。ここでもタイミング制約を満足していないパスはで表示される。
でクリティカルパスを確認。
timing_ana_051116.jpg

Timing AnalyzerでViewメニューからFloorplanner for crossprobingを選択し、Floorplannerを起動。クリティカルパス(赤い四角で囲った部分)をダブルクリック。
Floorplannerをクリックして前面に出すとクリティカルパスが表示される。
floorplanner_051116.jpg

FloorplannerでFloorplanメニューから"Constrain from placemant"を選ぶと、表示されているクリティカルパスだけ別画面のUCF Flowにコピーできる。
floorplanner_2_051116.jpg

現在のUCF Flowの画面には、インプリ前に指定したエリア制約も表示されている。(Floorplannerの使い方覚書2参照)
ロジックセルを移動して、クリティカルパスを改善する。その場合、そのままドラックするとそのまま移動してしまうので、いったんフォーカスをはずしてから、一番長いパスを縮めると良いだろう。(図はクリティカルパスを移動中)
floorplanner_3_051116.jpg

全てのクリティカルパスに操作を行うまで繰り返すか、飽きたら(いい加減20くらいやっていると飽きる)セーブしてもう一度インプリ。
UCF制約ファイルに書かれる例は。
INST "serial" AREA_GROUP = "AG_serial" ;
AREA_GROUP "AG_serial" RANGE = SLICE_X28Y40:SLICE_X37Y30 ;
INST "con" AREA_GROUP = "AG_con" ;
AREA_GROUP "AG_con" RANGE = SLICE_X24Y26:SLICE_X39Y16 ;
INST "iom" AREA_GROUP = "AG_iom" ;
AREA_GROUP "AG_iom" RANGE = SLICE_X30Y15:SLICE_X34Y4 ;
INST "core" AREA_GROUP = "AG_core" ;
AREA_GROUP "AG_core" RANGE = SLICE_X5Y39:SLICE_X22Y9 ;
INST "core/_n02021" LOC = "SLICE_X13Y12" ;
INST "core/_n01231" LOC = "SLICE_X10Y25" ;
INST "core/forbmux<7>_SW2" LOC = "SLICE_X15Y24" ;
INST "core/forbmux<14>_SW2" LOC = "SLICE_X12Y26" ;
INST "core/mem_wb/dff8/q_2" LOC = "SLICE_X8Y17" ;
INST "core/Inst_forwarding/forwardB<0>41" LOC = "SLICE_X14Y19" ;

という感じ。最初はエリア制約。次がロジックセルの位置固定。

この操作はあまりクリティカルパスが多いと、ほかと干渉して結局クリティカルパスが移動するだけの結果になる場合があるようだ。私もサンプルをやってみて、発散して止めてしまった。余りクリティカルパスが多いと、他のパスと干渉してしまうのではないだろうか?
クリティカルパスが少ない場合に有効かもしれない。
後は、クリティカルパスがあるモジュールを特定して、そこだけ配置を固定して、クリティカルパスを修正するという方法が使えるかもしれない。余りにもクリティカルパスが多いと、全部固定するのと変わらなくなるが。。。
やはり、HDLコードの品質が重要ということだろう。#それが一番難しいのだが。。。
  1. 2005年11月17日 20:51 |
  2. Floorplannerの使い方
  3. | トラックバック:0
  4. | コメント:2

コメント

まずはお礼を言わせてください、ありがとうございます。
今日、仕事場でずーっと悩んでいたことが、marseeさんのブログにより解決できました。(詳細、、は自分のとこで書くと思います)私は自分のブログはメモ帳程度にしか捉えていませんでしたが、考え方が少し変わりました。私も読むヒトの役に立つようなことを書いて、ネットの世界に還元しなきゃ~と、身の引き締まる思いデス。
  1. 2005/11/18(金) 00:52:36 |
  2. URL |
  3. キコ #-
  4. [ 編集 ]

おめでとうございます。そういう時はとてもうれしいですよね。
私も手探り状態でプロジェクトをコピーして、トライして、大概はだめでくしゃくしゃになります。どうすればうまく行くかが良くわからないんですよね。これではだめだと思い、また新しいことを試したりしています。それがうまく行った時はとてもうれしいです。
そして、思いついたことをブログに書いて、検索できるようにしています。
それが人様の役に立てば、こんなにうれしいことはありません。
出来れば、こういうマイナーですが、役立つトピックをみんなで教え合える場があるとうれしいです。
  1. 2005/11/18(金) 05:57:00 |
  2. URL |
  3. marsee #-
  4. [ 編集 ]

コメントの投稿


管理者にだけ表示を許可する

トラックバック URL
http://marsee101.blog.fc2.com/tb.php/67-c47d8db0
この記事にトラックバックする(FC2ブログユーザー)