FC2カウンター FPGAの部屋 2011年09月23日
FC2ブログ

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

FPGAの部屋

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

Spartan-3A Starter KitでEDKを使ってカメラ表示22(一応完成)

Spartan-3A Starter KitでEDKを使ってカメラ表示21(インプリメント)”でインプリメントが終了したので、Spartan-3A Starter Kitにダウンロードして確かめてみた。

こんな感じでaitendoのOV7670カメラをSpartan-3A Starter Kitに付けて実験している。CMOSカメラ搭載基板の作り方はこちら
Spa3A_SKit_OV7670_93_110923.jpg

画像は写ったが、右の画像が左に来ていた。
Spa3A_SKit_OV7670_92_110923.jpg

左の時計は、右に見えているはずなのだ。
画面の比を測ってみると、画面の横が37.6cmだったが、そのうちの7.7cmずれていた。何ドットずれているか計算してみると、

640ドット / 37.6cm × 7.7cm ≒ 131ドット


128ドットずれているか?
最初に128ドットずれてしまうのかもしれない?
そこで、VSYNCの時に非同期FIFOやアドレスをリセットするようにした。そうしたら、正常に表示されるようになった。動作してとっても嬉しいが、EDKが入っているプロジェクトをシミュレーションするにも、インプリメントするにも時間がかかってしまった。今日はデバックしていた。

うまく行ったという記念写真を下に貼る。
Spa3A_SKit_OV7670_94_110923.jpg

MicroBlazeのソフトウェアは何も入れていないが、この場合は暴走しているのだろうか?HALTしているのかな?
ロータリーエンコーダでCMOSカメラの設定をするソフトウェアを書いてあるので、走らせてみたい。これは、SMM(Simple Micro Blaze)用に書いてあるので、修正する必要がある。

とりあえず、これで一応、EDKを使用して、自分でカスタム・マスタIP、カスタム・スレーブIPを作って、カメラ表示回路を作ることができた。うれしい…
特に、カスタム・マスタIPの作り方は資料が少なく、推測で作った部分も多いが動作して本当に良かった。

  1. 2011年09月23日 20:18 |
  2. EDK
  3. | トラックバック:0
  4. | コメント:0

Spartan-3A Starter KitでEDKを使ってカメラ表示21(インプリメント)

Spartan-3A Starter KitでEDKを使ってカメラ表示20(カメラ回路のシミュレーション)”の続き。

今回は、シミュレーションで問題が無い様なので、インプリメントしてみることにした。早速インプリメントしてみたが、エラーが出てしまった。エラーを下に示す。

ERROR:Place:1138 - Automatic clock placement failed. Please attempt to analyze the global clocking required for this design and either lock the clock placement or area locate the logic driven by the clocks so that the clocks may be placed in such a way that all logic driven by them may be routed. The main restriction on clock placement is that only one clock output signal for any competing Global / Side pair of clocks may enter any region. For further information see the "Quadrant Clock Routing" section in the Spartan3a Family Datasheet.


ERROR_Place_1138_1_110922.png

Webで検索の結果、エラー番号は違うが、”9.2i EDK, Spartan-3A DSP - "ERROR:Place:848 - Automatic clock placement failed"”がヒットした。

それによると、XPSのProjectタブのProject Filesの下にfast_runtime.optがあるということなのだが、な~い。

ファイルを検索した所、system\etcフォルダの下にあることがわかった。
ERROR_Place_1138_2_110922.png

the Program MAP sectionの-timingを消せばよいらしい。

Program mapがあったので、-timing;を消した。
ERROR_Place_1138_3_110922.png

ついでに、XPSのProjectメニューからClean All Generate Filesをやっておいた。

Project Navigatorに戻って、もう一度、Rerun all でインプリメントしたが、やはり同じエラーが出てしまった。

仕方が無いので、fast_runtime.optの-timingオプションを戻してから、PlanAheadを使用して、DCMを固定してみることにした。
DCMは、CamDisp_EDK_OV7670\elaborate\clock_generator_0_v4_02_a\hdl\vhdl\clock_generator.vhd を見たところ、DCMは2つ使ってあって、DCM1が50MHzクロック・オシレータから入力されたクロックを125MHzに変換していた。それをDCM0が受け、125MHzの0度クロック、125MHz90度クロック、2分周された62.5MHzクロックの3つのクロック全てを出力していた。つまりすべてのクロックをDCM1が出力していて、こちらのほうがBUFGを多く使っていた。

Project Navigator のProcessesウインドウのUser Costraintsを展開して、Floorplan Area/IO/Logic (PlanAhead) を起動して、DCMの位置を固定して、からインプリメントした。
PlanAheadを立ち上げると、Spartan-3Aの左側にDDR2 SDRAMのリソースが固定されていた。これはそこのパッドにDDR2 SDRAMが接続されているからだ。

DCM0, DCM1をいろいろ配置にしてみたが、”ERROR:Place:1138 - Automatic clock placement failed. ”が出るのは、DCM1がFPGAチップの上側の右側、DCM0を下側に配置したときに出るようだ。
Spa3A_SKit_OV7670_89_110923.png

その時のUCFファイルを示す。

INST "system_i/clock_generator_0/clock_generator_0/DCM1_INST/Using_Virtex.DCM_INST" LOC = DCM_X2Y3;
INST "system_i/clock_generator_0/clock_generator_0/DCM0_INST/Using_Virtex.DCM_INST" LOC = DCM_X1Y0;


それ以外の場合は、DCMなどの配置が最適じゃないので、CLOCK_DEDICATED_ROUTEを使えというようなエラーが出た。
DCM1の出力をCLOCK_DEDICATED_ROUTEしなくてはいけない場合は、カメラ表示回路の動作が危なくなるので、そのようなDCMの配置は使えない。

いろいろやってみた結果、DCM1をFPGAチップの左側の上、DCM0を上側の左に配置した時が良いとわかった。ここの位置だと、50MHzクロック・オシレータからDCM1への入力は遠くなってしまい、CLOCK_DEDICATED_ROUTEが必要だが、その他のエラーは出ない。カメラ表示回路の入出力は入力クロックに対して、入力や出力の制約がないので、ここの時間が伸びるのは問題ない。下にDCMの配置を示す。(このPlanAheadの図はインプリメント後のものだ)
Spa3A_SKit_OV7670_90_110923.png

追加したUCFファイルを下に示す。

INST "system_i/clock_generator_0/clock_generator_0/DCM0_INST/Using_Virtex.DCM_INST" LOC = DCM_X1Y3;
INST "system_i/clock_generator_0/clock_generator_0/DCM1_INST/Using_Virtex.DCM_INST" LOC = DCM_X0Y2;
NET "fpga_0_clk_1_sys_clk_pin" CLOCK_DEDICATED_ROUTE = FALSE;
PIN "system_i/clock_generator_0/clock_generator_0/DCM1_INST/Using_Virtex.DCM_INST/DCM_SP.CLKIN" CLOCK_DEDICATED_ROUTE = FALSE;


これで、もう一度インプリメントしたら成功した。やった~。

下にインプリメント後のProject Navigator を示す。やっとインプリメント成功。
Spa3A_SKit_OV7670_91_110923.png

LUT使用率は53%、FF使用率は47%だった。下にMAPのリポートの一部を示す。

Release 13.2 Map O.61xd (nt)
Xilinx Mapping Report File for Design 'system_top'

Design Information
------------------
Command Line   : map -intstyle ise -p xc3s700a-fg484-4 -cm speed -ir off -pr off
-c 100 -o system_top_map.ncd system_top.ngd system_top.pcf 
Target Device  : xc3s700a
Target Package : fg484
Target Speed   : -4
Mapper Version : spartan3a -- $Revision: 1.55 $
Mapped Date    : THU 22 SEP 23:18:57 2011

Design Summary
--------------
Number of errors:      0
Number of warnings:  251
Logic Utilization:
  Number of Slice Flip Flops:         5,598 out of  11,776   47%
  Number of 4 input LUTs:             6,271 out of  11,776   53%
Logic Distribution:
  Number of occupied Slices:          5,366 out of   5,888   91%
    Number of Slices containing only related logic:   5,366 out of   5,366 100%
    Number of Slices containing unrelated logic:          0 out of   5,366   0%
      *See NOTES below for an explanation of the effects of unrelated logic.
  Total Number of 4 input LUTs:       6,629 out of  11,776   56%
    Number used as logic:             5,713
    Number used as a route-thru:        358
    Number used for Dual Port RAMs:     320
      (Two LUTs used per Dual Port RAM)
    Number used as Shift registers:     238

  The Slice Logic Distribution report is not meaningful if the design is
  over-mapped for a non-slice resource or if Placement fails.

  Number of bonded IOBs:                100 out of     372   26%
    IOB Flip Flops:                      23
    IOB Master Pads:                      3
    IOB Slave Pads:                       3
  Number of ODDR2s used:                 24
    Number of DDR_ALIGNMENT = NONE       24
    Number of DDR_ALIGNMENT = C0          0
    Number of DDR_ALIGNMENT = C1          0
  Number of BUFGMUXs:                    10 out of      24   41%
  Number of DCMs:                         4 out of       8   50%
  Number of BSCANs:                       1 out of       1  100%
  Number of BSCAN_SPARTAN3As:             1 out of       1  100%
  Number of MULT18X18SIOs:                3 out of      20   15%
  Number of RAMB16BWEs:                  19 out of      20   95%

  Number of RPM macros:            1
Average Fanout of Non-Clock Nets:                3.30

Peak Memory Usage:  240 MB
Total REAL time to MAP completion:  39 secs 
Total CPU time to MAP completion:   25 secs 


  1. 2011年09月23日 05:59 |
  2. EDK
  3. | トラックバック:0
  4. | コメント:0