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

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

FPGAの部屋

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

Spartan-3A Starter KitでEDKを使ってカメラ表示29(ソフトでカメラを制御2)

Spartan-3A Starter KitでEDKを使ってカメラ表示28(ソフトでカメラを制御)”の続き。

XPSでChipScope Proコアを追加してデバック1”と”XPSでChipScope Proコアを追加してデバック2”で、XPSでChipScope ProをIPとして追加して、rot_a, rot_b, rot_centerの様子を観察したら、rot_a, rot_bがPULLUPされているはずなのに、値が0になっていた。
(rot_a, rot_b はロータリー・エンコーダの接点、rot_center はセンタースイッチ、詳しくは、Spartan-3A/3AN スタータ キット ボード ユーザー ガイド (UG334)の30ページ、”ロータリー プッシュボタン スイッチ”を参照のこと)

XPSのUCF制約でPULLUP指定されているはずなのに、PULLUPされていないのはなぜか?調べてみることにした。
FPGA Editorでrot_a, rot_b, rot_centerのPADの属性を調べた。
rot_aのIBUFを下に示す。
Spa3A_SKit_OV7670_121_111025.png

設定値部分を拡大した。
Spa3A_SKit_OV7670_122_111025.png

PULLUPにチェックが入っていない。rot_bも同様だった。rot_centerもPULLDOWNにチェックが入っていなかった。
それじゃ、ISE12.4でインプリメントした回路はどうだったか?というと、”画像テルミン2”をFPGA Editorで見てみた。(こっちはEDKは未使用で、Simple MicroBlazeを使用して、ISEのみで構築してある)
rot_aのIBUFを下に示す。
Spa3A_SKit_OV7670_123_111025.png

PULLUPにチェックが入っていた。rot_bも同様だった。rot_centerはPULLDOWNにチェックが入っていた。

ちなみに、UCFはどちらも同じで下のように記述してある。これは、Spartan-3A/3AN スタータ キット ボード ユーザー ガイド (UG334)に示された制約を丸写ししている。

NET "rot_center" LOC = "R13" | IOSTANDARD = LVTTL | PULLDOWN ;
NET "rot_a" LOC = "T13" | IOSTANDARD = LVTTL | PULLUP ;
NET "rot_b" LOC = "R14" | IOSTANDARD = LVTTL | PULLUP ;


制約ガイド UG625 (v. 13.2) 2011年7月6日”を見ると、3ページの改訂履歴に下のように書いてあった。(引用)
Spa3A_SKit_OV7670_124_111025.png

PULLUP, PULLDOWNについて記述されている。これは、ISE13.2で何かが変わったのかもしれない?
現在のISE13.2の制約を下のように変更してみた。

NET "rot_center" LOC = "R13" | IOSTANDARD = LVTTL | PULLDOWN = TRUE ;
NET "rot_a" LOC = "T13" | IOSTANDARD = LVTTL | PULLUP = TRUE ;
NET "rot_b" LOC = "R14" | IOSTANDARD = LVTTL | PULLUP = TRUE ;


これでも以前同様、PULLUP, PULLDOWNにチェックが入らなかった。(XPSで制約している)

次に、制約を下のように変更してみた。

NET "rot_center" LOC = "R13" | IOSTANDARD = LVTTL;
NET "rot_center" PULLDOWN;
NET "rot_a" LOC = "T13" | IOSTANDARD = LVTTL;
NET "rot_a" PULLUP;
NET "rot_b" LOC = "R14" | IOSTANDARD = LVTTL;
NET "rot_b" PULLUP;


また、以前同様、PULLUP, PULLDOWNにチェックが入らなかった。(XPSで制約している)

どうやっても、PULLUP, PULLDOWN制約が入らない。困った。。。

ISEの方に、system_top_pull.ucfを新規作成した。内容を下に示す。

NET "rot_center" PULLDOWN;
NET "rot_a" PULLUP;
NET "rot_b" PULLUP;


Spa3A_SKit_OV7670_125_111025.png

これでインプリメントし、FPGA Editorで見たところ、うまく行った。
rot_aのIBUFの画面を下に示す。
Spa3A_SKit_OV7670_126_111025.png

rot_bにPULLUP、rot_centerにPULLDOWNのチェックが入っていた。

ということは、13.2のXPSでPULLUP、PULLDOWN制約をしても、インプリメント結果に反映されない。ISE13.2でPULLUP、PULLDOWN制約をすると、インプリメント結果に反映される。ということのようだ。

これで、SDKを立ち上げ、ソフトウェアを入れてビットファイルをダウンロードすると、ロータリー・エンコーダが動作した。これで完璧と思ったら、カメラの表示がおかくなっていた。
Spa3A_SKit_OV7670_127_111025.jpg

前回から入れたのは、ChipScope Proだけなので、iconとilaをXPSで削除して、もう一度やってみたら、カメラの表示が写った。
Spa3A_SKit_OV7670_128_111025.jpg

タイミングは全てメットしていたのだが、やはり、ChipScope Proを入れると、おかしくなることがあるようだ。

一応、これで完成だ。。。
  1. 2011年10月25日 06:05 |
  2. EDK
  3. | トラックバック:0
  4. | コメント:0