Lynx-EyEDの電音鍵盤 新館

制御とか数学とか駄文とか

Spartan-6のMCBとカメラボード設計

ずっと、UG388と格闘しつつMIGを使ってLPDDRを駆動するMCBラッパをインスタンシエートしたり、シミュレーションしている訳ですが、ALTERAユーザから見るとかなり奇異に見えるかも知れません。(自分もそうだったので)
まず、Spartan-3E、Spartan-6、Virtex-6、*1はどれもMIGを使いメモリコントローラをインスタンシエートします。が、Spartan-6のみハードマクロ(MCB)です。これは奇妙に見えますし、移植性がゼロに思えます。

これはSpartan-3Eの時にはソフトマクロとしてユーザロジックを消費する仕組みだったようですが、LEの消費量よりもDDR2バーストリードライトにおいてタイミングクロージャにかなり難がありました。*2
そこで、ソフトマクロでの実装を諦め、ASICと同様の扱いが出来るハードマクロに置き換えた模様。
これにより

  • インスタンシエート後すぐ動く
  • 内部回路のエラーと基板レイアウトエラーの切り分けが容易
  • 殆どLEを消費しない

という利点が出てきますが、同時に

  • ピンアサインが全部決まっている
  • 16bit幅のデータメモリ以下の対応なので、帯域が広い32bitとかは使えない(MCBを2段並列に使って…とやると個々のブロックは同期していないため失敗する)

というFPGAらしからぬ欠点(笑)が有ります。利用するならこれらをふまえてから基板設計しないと行けません。
検証が容易と言うだけでも採用する価値は大いにあるように思えます。

■カメラボードの設計
で、Spartan-6 LX9 MicroBoardのLPDDRにMCBのFIFOを読み書きしてLEDに表示ワーイしてても面白くないので、そこそこデータのやり取りが忙しい、カメラの制御をしてみようと思います。I2Sを使った音声イコライザでも良かったのですが。今後色認識と顔認識を実装する予定があるのでカメラ(TCM8240MD)にしました。

DesignSpark PCBによる設計です。3電源回路なのですが、配置する部品が少ないので2層に抑えています。

  • 設計方針として電源、ユーザIO、カメラのグランドプレーンを分離、viaを使い電気的に結合
    • 電源回路には容量が大きめのドロップレギュレータ(2.5V,1.5V)を使用しています。これはカメラの消費電力が大きかった為です
    • TCM8240MDが熱ノイズにかなり弱いので個別にグランドプレーンを用意、ノイズが電源やユーザIOに回り込むのをなるべく回避しています。
  • 裏面には部品を出来るだけ配置しない
    • Spartan-6の発熱が40℃〜50℃になることもあるので。
  • 電圧レベル変換付き双方向バスTXB0108を使用
    • FPGA側でIO電圧が変更できますが、今回3.3Vと2.5Vの信号線と交互にデータ通信する必要があった為採用しました。→Wanderlustのまやさんに教えて頂きました。ありがとうございます。
  • SDカードが無駄に2つ
    • FATガン無視でデータを16bitずつシームレスに記録する為です。クロックはSDカードのデータ書き込み速度などの個体差を吸収するため別々にしています。
  • 観測用のIOポートの引き出し

f:id:Lynx-EyED:20111031003535j:image


※20111031追記:最小穴径(via=0.015mm)とアスペクト比から基板の板厚が制限*3されてしまうのでルールを緩くしました。これによりコネクタを1つ削除。
f:id:Lynx-EyED:20111102080321j:image

今日中に出図する予定…

*1:「セブンシリーズ」とザイリンクスが銘打っているArtix,Kintex,VirtexもMIGが有るが、こちらは構造が違うのでまた別の機会に

*2:これ、メモリに限らずザイリンクスユーザはいつも苦しんでるんだけどどうにかならんのか。笑

*3:ロボットの振動がある部分に組み込むので強度もそれなりに欲しい