FC2カウンター FPGAの部屋 2007年07月15日
FC2ブログ

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

FPGAの部屋

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

ISE9.2iの SmartCompile (Partition) を試してみる

ISE WebPACK 9.2iをインストールしてみたが、新機能を見ると”SmartCompile (パーティションおよび SmartGuide) テクノロジを改善し、デザイン パフォーマンスを向上 ”とある。
以前書いた”Partitionの設定”で Partition を試してみたが、その時にはスパルタン3EスターターキットのLCD表示回路を使用した。DDR-SDRAMコントローラでもやってみたが、Partition の設定方法でエラーが出てしまった。前回はエラーが出たということであきらめてしまったが、今回はなぜエラーが出たのか? Partition を使う上で注意することは何なのか?を検証してみたいと思う。
検証回路はVerilog2001版DDR SDRAMコントローラーだ。ダウンロードして試してみたい方は”Verilog2001版DDR SDRAMコントローラーのModelSimシミュレーションまとめ1”からダウンロードしてください。
まずはPartitionを設定する。”Partitionの設定”を参考にしながら、contrller_inst, read_data_module_inst, write_data_inst, addr_fifo_inst, wrdata_fifo_inst, rddata_fifo_inst, Test_LCD4HexDisp_instに Partition を設定し、DDRtestにフォーカスを戻してインプリメントしてみた。
FDDRRSE_070714.png

そうするとエラーが出て、インプリメントができなかった。原因は何かと言うと write_data_module.v で FDDRRSE を使用している。FDDRRSE はIOBのDDRレジスタのことなので階層をキープできないということのようだ。
そこで write_data_module.v の Partition をはずしてしまうことにした。右クリックから Delete Partition を選んで Partition をはずす。それでもう一度インプリメント。そうしたらエラー(”FATAL_ERROR:Pack:pkibaphysmgr.c:1001:1.38.2.3 - Exception: Unable to find block”)になってしまった。
FATAL_ERROR_070714.png

次に、上のモジュール ddr_sdram_cont_inst(ddr_sdram_cont.v) に Partition を設定した。そして、インプリメントしたところ、正常にインプリメントできた。だが、FDDRRSEの扱いから考えて、read_data_module.v のIOBにマップされる予定の入力用FFももしかしたらIOBに入っていないのでは?と考えてFPGA Editorで見てみた。(sd_dq<0>)
DQ_FPGA_Editor_1_070714.png

そうすると、思った通り、IOBの入力用FFにマップされていない。そこで、read_data_module_inst (read_data_module.v) も Delete Partition して、インプリメント。もう一度見てみたところ、やはりIOBに入力用FFがマップされた。
DQ_FPGA_Editor_OK_070714.png

これらのことから考えると、IOBリソースを使いたい記述を書いたHDLファイルは Partition を解除するか、IOBリソースを使いたい記述を最上位の階層においておかなければいけないのだろう。
ただ、下の階層を Partition したときに上の階層も Partition しないと FATAL_ERROR になるのはどうしてだろう。マニュアルで要確認。

ISEヘルプによると
”デザイン階層の任意のレベルにある HDL、回路図、または EDIF ソース インスタンスをパーティションとして設定できます。 下位ソース インスタンスをパーティションとして設定すると、最上位モジュールも自動的にパーティションとなります。”
だそうなので、ちょっとおかしいような気もしますね? バグ?

注:まだ、インプリメントしたものを実機にダウンロードして動作するかどうかはテストしていません。

2007/07/16:追記
どうもFPGA Editorで見たIOBリソースがおかしいので、もう一度 Partition を全部はずして、普通にインプリメントしてみた。そうしたやはりIOBの入力用FFの下は空になっていた。そういえばクロックの立ち上がりエッジで取るデータは使わないで捨ているのだった。
DQ_FPGA_Editor_NP_070715.png

となると Partitionを使うと最適化が不完全になる可能性がありそうだ。(これは悪い場合もあるし、ノードが残っていて波形を観測できてラッキーという場合もある。)もう少し調査が必要なようだ。

2007/07/25:windyさんに教えてもらって、もう一度 Partition をやり直してみた。以前にエラーの出た条件と同じだったが、問題なくインプリメントできた。上のようなFATAL_ERROR が出たら、Cleanup Project Files を実行して、Project を初期化したほうが良いようだ。
windyさん、教えていただいて、ありがとうございました。
Partition_test_ok_070725.png

  1. 2007年07月15日 06:19 |
  2. Xilinx ISEについて
  3. | トラックバック:0
  4. | コメント:2