2012/12/13

FT311D Development Moduleを動かしてみました

 ZedBoardも触ってはいるのですが、
FTDI社のFT311D Development Moduleが届いたので、とりあえずAndroidに接続してみました。

 FT311DはそのままでAndroidに接続するだけでADKが使えるというチップです。
FT311D側がUSB Hostになって、Androidに給電しながら動く形です。
コンフィグピン(3bit)の設定で
  • GPIO (7bit)
  • UART (1ch)
  • PWM (4ch)
  • I2C (1ch)
  • SPI (1ch, FT311Dがスレーブ)
  • SPI (1ch, FT311Dがマスター)
のどれかで動作させられます。(追記:PWMが抜けてたので直しました2012/12/13)

 これまでAndroidに何か繋ぐとなると、Arduino, PIC, mbedなんかでMicroBridgeかADKという感じでしたが、
簡単なGPIOや、ともかくUARTでいいって場合には、もうこれでいいんじゃない、というお手軽なモノです。

 FTDIサイトでデモアプリのソース、APKを配っています。
ひとまず、GPIODemoを試してみました。

 Nexus7 (Android4.2.1) で動かすとこんな感じで、すんなり動きました。
  • OUT BITMAPで0, 1をチェック
  • CONFIGをクリック
  • OUTDATAを操作して、WRITEをクリック
とすると、LEDが反応しています。

 次はNexus S (Android 4.1.1) に接続してみると…、動きません。というか画面が変です。
こんな感じです。

 どうもレイアウトがダメっぽいです。これでは右にあるはずのCONFIGやWRITEがクリックできません。

 ソースも配布されているので、手っ取り早くレイアウトをいじってみました。
手抜きですがこんな感じになりました。基本的にWidthとかMarginとかを小さい値にした感じです。
 これでなんとかCONFIGやWRITEがクリックできます。

 実際、接続してみると、操作しにくいですが動きました。

 このままGPIOなんかで使ってもいいのですが、
今後はFPGAとAndroidの接続に使ってみようかと考え中です。
Twitterで情報が流れてて、「あ、それがいいな」と。

 今までは

  • Android --(USB)-- PIC --(SPI)-- FPGA (PICでMicroBridgeを実装)
  • Android --(USB)-- MAX3421E --(SPI)-- FPGA (FPGA上のNiosIIにMicroBridge or ADKを実装)

とかやっていたのですが、FT311Dを間に挟むのがトラブらなさそうで良いかなと期待しています。

2012/11/14

ZedBoardのDDR3 SDRAMチップ

 ふと気づいたのですが、ZedBoardの2012/08/24版の回路図にはDDR3 SDRAMチップは
MT41K128M16HA-187E
となっています。 ですが、Hardware User's Guideには
MT41J128M16HA-15E
と書かれています。 Board Definition Filesのzedboard_RevC_v2.xmlにも
MT41J128M16HA-15E
と書かれています。

 結局、-187Eなのか、-15Eなのかどっちだよ。

 実物は……、直接の型番は刻印されてないんですよね。これに限らず、最近は小さい部品が多くて、刻印見ても型番分かりづらいですよね。

 でも、調べてみると、MicronはWebページにFBGA Decoderというのがあって、FBGAのチップ刻印とパーツ型番の対応を調べられます。

 結論としては、FBGAの刻印 D9LGQ は -15E と対応するので、搭載チップは-15Eの方でした。

 さらに、ZedBoardのサイトをチェックすると、2012/11/08版の回路図が提供されていて、それでは、型番が直っていました。ボードにも色々Errataがあるらしく、赤字でいろいろ書かれていて不安になる回路図です。

 ところで、-187E-15Eで何が違うのかというと、主には最大動作周波数みたいです。PCパーツ風に言えば、DDR3-1066かDDR3-1333かということですね。-15Eを666MHzで動かす場合はCL=9ですが、-187Eを533MHzで動かす場合はCL=7になるとのこと。-15Eは533MHzで動かせば-187EとコンパチになりCL=7で動かせるみたいです。

 ということで、ZedBoard開発では実物が-15Eでも、533MHz動作なのでCL=7にセッティングするのが、CL=9に比べて、ホンのわずかアクセスが速くてお得そうです。実際にSDKにExportされるhw_platformのサマリを見た限りでは、-15E設定でもCL=7になっているので、デフォルトで大丈夫みたいです。

Xilinx ISE 14.3

 これまでZedBoard用にはXilinx ISE 14.2を使っていましたが、14.3をインストールしてみました。

 WebPackライセンスでXPS立ち上がるときにラインセスエラーのダイアログ出るのは相変わらずでした。

 とはいえ良くなっている点はあって、まず、新規プロジェクト作成時のボード選択にZedBoardが追加されていました。


 これまではZC702で進めていって、後でZedBoardの情報をImportさせる、としていたので、一手間減りました。

 他にもPlanAheadでも見た目など微妙には変わっているようです。ですが、大きな落とし穴が……。

 BitGenまで進むと、
ERROR:Bitstream:188 - Bad time stamp "MON 29 OCT 10:2:52 2012". Expected "YYYY/MM/DD HH:MM:SS".
といったエラーが出ます。 既にXilinxのサポート情報にも載っていて、「ISE 14.3 - 「ERROR:Bitstream:188 - Bad time stamp"」というエラー メッセージが表示される」によると、

  • エラーと出てもbitファイルは生成される
  • LANGUAGE環境変数がJapaneseだと発生する
  • 14.4で修正予定

だそうです。エラー内容自体がどやねん、って感じですが、エラーと言っておきながらbitファイルは生成されるって……。

 それでも、発生条件が分かったので、回避できるか試してみました。
PlanAheadはバッチファイル(私の場合C:\Xilinx\14.3\ISE_DS\PlanAhead\bin\planAhead.bat)から起動しているので、それの最初の方に
set LANGUAGE=usenglish
と追記してみると、エラー出なくなったみたいです。

 Linuxでは試していないですが、同様の状況なら、LANG環境変数をCかen_USあたりにすれば回避できるように想像できます。

 長く使っている人ならCADツールのロケール周りの問題は珍しくはないですね。

 最近は、よく海外に行く人と話していると「シリコンバレーとか中国系とインド系の人ばっかり」とか聞きますので、ツール開発には英語ネイティブじゃない人が多く加わっていそうですが、それでもソフトウェアのインターナショナル対応は進まないものですね。

2012/11/13

ZedBoard未使用ピン

 ZedBoardというかZynqについてなのですが、PL部分の未使用ピンはどうなるのかな?と思ったので調べました。

 Xilinxの開発フローでは未使用ピンの状態はBitGenの時点で決まります。
BitGenはフローの最後に.bitファイルを生成するステップです。

 「コマンドラインツールユーザーガイド」のBitGenの章によると-gオプションで、サブオプションUnusedPinというところになります。

 Version 14.1については、Pulldown, Pullup, Pullnoneのいずれかが設定でき、デフォルトはPulldownだそうです。(デフォルト値はツールバージョンによって変わったことがあった気がします。XilinxじゃなくてAlteraの話だったかもしれませんが…)

 ZedBoardのチュートリアルなどでは、特にBitGenにオプション指定していないので、デフォルトのPulldownになっているのだと思います。

 ZedBoardのような開発ボードでは、FPGA外にいろいろ繋がっているけど全部は使わない、ということが多いので (例えば、SSRAM繋がっているけど使わない、とか)、変なことにならないようにしておきたいです。
 まぁ、気になるなら、使ってないデバイスについてもポート宣言キッチリしてCS#なんかをHigh固定でネゲートするとかすればいいんですが。

 DC特性によれば、Zynq側でのプルアップ/プルダウンは10kΩ以上の抵抗値みたいです。ということで、それより十分に小さい抵抗でプルアップ/プルダウンしている分には外付けのプルアップ/プルダウンが優先されそうです。うーん、でも、それはそれで、電流消費が増えたり、プルアップ/プルダウンに逆らってドライブするのが大変とか、相手のVILとVIHの範囲が云々…、と色々悩ましい感じもしますが。

 ま、ともかく、簡単にZedBoard回路図を見てみると……、

  • スライドスイッチ、プッシュスイッチ、LEDは変に電流流れたりすることは無さそう
  • Audio Codec、HDMI Transmitterは細かくは見てない。I2Cの外付けプルアップとZynq内部のプルダウンがぶつかっていて少し気持ち悪いかも
  • OLED(信号部分)も細かくは見てない
  • OLEDの電源スイッチのN-MOSのゲート信号が外付けプルアップ 10kΩとZynq内部プルダウンがぶつかっていて、上のI2Cより気持ち悪い気が

――というので、実はむしろPullup設定の方がいいのでは?という気も。

 とはいえ、ZedBoardのForumとかでも話題に出てないみたいだし。うーん、調べだしたはいいけどスッキリしない感じです……。

2012/10/28

Stellaris LaunchPad

 すごく安いマイコン基板が出たので、反射的に買ってきました。

 Texas InstrumentsのStellaris LaunchPadです。Cortex-M4Fがのって550円の安さ!実は初入荷の後に店に行ったのですが売り切れで、再入荷との情報を得て、買いに行って何とかゲットしました。お店では

お一人様、4個まででお願いします

――と。そりゃそうですね、破格の安さだし。

 他の方に聞いた話やTIの資料によると、どうも正規価格は約12ドルなので、期間限定のキャンペーン価格なのかもしれません。もう、何枚か買っておこうかな~。

 主なスペックはこんな感じです。

  • TI LM4F120搭載
    • 80MHz 32-bit ARM Cortex-M4F
    • 256KB Flash, 32KB SRAM, 2KB EEPROM
  • オンボードUSB Debug Interface搭載
  • USBから給電
    • レギュレータで3.3Vをマイコンへ給電
  • USB Device機能
  • リセットスイッチ & 2個のユーザ用プッシュスイッチ搭載
  • 16MHz クリスタル搭載
  • RTC用クリスタル搭載
  • フルカラーLED 1個搭載
  • BoosterPack(拡張基板)用コネクタ搭載

 見た目はこんな感じです。裏面にはコネクタしかなくスッキリしています。コネクタが足になるので、基板が裏面でクリップとかに触れてショートする心配なくて良いかと。

左1/4のあたりが、Stellarsis In-Circuit Debug Interface (ICDI) を構成している部分です。よく見ると、ICDIを構成しているのも中央と同じ型番です。結局、Cortex-M4F (LM4F120)が2個載ってます!

 Micro-BのUSBコネクタは左がICDIのポート、下はマイコンがUSB Deviceになる場合のコネクタです。電源はどちらかのUSBコネクタから供給し、それを左下のスイッチで切り替えます。

 ちなみにICDIのUSBを接続すると、仮想シリアルポートも見えます。これはメインマイコンのUARTに繋がる感じです。デバッガとかと独立にシリアルポートとしても使えるので地味に便利かな~と思ってます。

 開発ツールは複数から選べるようですが(評価期間とか制限とかいろいろ異なる)、私はTIのCode Composer Studio (CCS v5)を使いました。

 定番のLチカをするには次の手順でできました。

1. TIサイトから必要なファイルをダウンロード

  • EK-LM4F120XL-CCS (CCS, StellarisWare, ICDIドライバ等が含まれる)
  • Stellaris LaunchPad Workshopマニュアル
  • Stellaris LaunchPad Workshopファイル
の3つです。合計で約1.3GBになります。
 Workshopのは必須ではないのですが、WorkshopのLabに沿って進めるのが手っ取り早いです。

2. ソフトウェア類のインストール

  • CCSv5 (開発環境)
  • StellarisWare (ライブラリなどが含まれる)
  • Workshopファイル
  • ICDIドライバ
の4つです。上3つはセットアップを実行していくだけです。標準のままだとc:\tiとc:\c:\StellarisWareにインストールされます。

 ICDIドライバは基板をPCに接続して、ドライバを入れていきます。PowerSelectスイッチをDEBUGにして、DBG側のUSBをPCに接続します。Windowsのデバイスには都合、
  • Stellaris Virtual Serial Port
  • Stellaris ICDI DFU Device
  • Stellaris ICDI JTAG/SWD Interface
の3つが出てきます。

3. WorkshopのLab2をする

 実は手順2でだいたいLab1をしたことになるので、Lab2をやります。Lab2がLチカそのものです。

 結局は、
  • CCS起動
  • 空プロジェクト作る
  • main.cを書き換える(コピペ)
  • プロジェクトの設定を追加する
    • StellarisWareのヘッダファイルやビルド済みライブラリを使うようにする感じです
  • 実行する
    • デバッガモードになって、バイナリがマイコンのフラッシュに書き込まれて動き出します
って感じです。

    ZedBoardクロック周り

     前回の投稿でZynqで気になっている点として「クロック周り」を挙げましたが、ドキュメントを調べたり、開発環境をいじってみて分かってきました。

     まず、PS側はチップ外から供給されるクロックで動きます。まぁ普通ですよね(マイコンによっては内部に発振回路持っていたり色々ですが……)。
     PLLが内蔵されていて、CPU、DDR3 I/F、etc. それぞれに色々な周波数を供給することになるみたいです。

     気になっていたのはPL側で使うクロックはどうなるのか?という点です。結局、

    • PS側からのクロック (4系統)
    • チップ外からのクロック供給 (&MMCMブロックでのクロック制御)

    の2種類のようです。
     ZedBoardの場合は、チップ外からPLへは100MHzが供給されています。

     PS側からのクロックはXPSの画面で、ここをクリックすると……

    このようなダイアログが出てきて、設定することができます。

     チップ外からのPLへのクロックについては、これまでのFPGAのように「CORE Generator」で「Clocking Wizard」でMMCME2_ADVやPLLE2_ADVを構成すれば使えるみたいです。

    2012/10/07

    ZedBoard買いました

    Zynq搭載ボードのZedBoardを買いました。
    まだ、買っただけで本格的には触れていませんが……。

    ZynqはXilinxが出した新しいFPGAです。
    が、ただのFPGAではなく、ARM Cortex-A9が搭載されています。
    というより、

    Cortex-A9チップのオンチップペリフェラルにFPGAが載っている

    と思った方が近いみたいです。
    Cortex-A9はデュアルコアでZedBoardでは最大667MHz動作らしいです。

    あとは、

    • 513MByte DDR3
    • 256Mbit QPI Flash
    • SD Card I/F
    • 10/100/1000 Ethernet
    • USB OTG 2.0
    • HDMI Output
    • VGA Output
    • OLED Display
    • FMC

    等々が搭載されています。

    とりあえず気になっているのは

    • クロック周り
    • リセット周り
    • ブート手順
    • プロセッサ側とFPGA側の境界部分

    といったところです。

    他の方と話していて

    • Cortex-A9コアをMMU不使用でOS無しマイコンファームウェアみたいなの実行できるか
    • Cortex-A9のデュアルコアをAMPとして、個別に動かす方法

    というのも気になりだしました。

    MMU不使用というのは、現時点ではマニュアルを確かめられていませんが、
    起動後にMMUを有効化しなければ、物理アドレス空間で動くのでは?と思っています。

    気になっている点、今後、調べて備忘録もかねてブログに書けたらよいかと。