Tech Notes

秋月600円FPGAに書き込む

日本の電子工作界隈で数限りなく擦られたであろうネタ。この度自分も挑戦し、案外手こずったのでその記録を書いておく。

秋月600円FPGAについて

このページを見に来るからには大体知っている人が大多数だろうが、ちゃんと説明を書いておく。

LCMXO2-256HC-4TG100C(秋月)

Lattice Semiconductor社のMachXO2シリーズのFPGA。型番の「256」とはLUT(Look-up Table)の数を意味し、256個のLUTがある。ArtixやZynqといったスタンダードな数万円台のFPGAボードには数万個程度のロジックセルがあることを考えると、2桁ほど作れる回路規模が劣るということになる。同じく秋月で安く売っていてお馴染みの「Tang Nano 9K」ですら名前の通り9000個程度のLUTロジックユニットを持つ。

LCMXO2-256はMachXO2シリーズの中で最もLUT数の少ない品番ではあるものの、最上位でもLCMXO2-7000なので、シリーズ自体が「安価で手軽で機能は抑えめ」という立ち位置にある。

長所として、MachXO2はコンフィグレーションメモリと発振回路が内蔵されているため、外付け部品はほぼ0で使える。外にコンフィグレーションメモリも発振回路も要らず、マイコンのようにワンチップで動く。その安価さも含め、入門用途やあまり性能の要らない用途には打って付けだ。

電源供給

MachXO2の電源電圧は型番によって違う。

秋月で売っているものはLCMXO2-256HCとなっているが、型番のこの部分が「HC」の場合はVCC電源に2.5Vまたは3.3Vが使える。一方でHEやZEの場合は1.2Vのみが使える。(データシート参照)

ChatGPTに聞くとなぜか「MachXO2の電源は1.2Vです」という形でHCデバイスを無視する回答が出てくる場合があるようだ(自分だけではないらしい)。まあデータシートはちゃんと読もうねということで。

なおIO電源(VCCIO)は別に供給でき、しかもIOバンクごとに別の電源が供給できる。もちろんVCCと同じ電圧でも良い。ただし最大定格は+3.75Vとなっている。恐らくは3.3Vが想定されてそれにマージンが取られている数値だ。5V IOなどを直接扱うことはできない。

電源ピンは複数ある。全てに電源を入れること。

MachXO2の書き込み方法

FTDIのICをJTAGケーブルとして使って書き込む方法が広く知られており、秋月の公式ページでも案内されている。

秋月のページではFT2232モジュールを用いる方法が案内されているが、重要なのはFTDIのインタフェースICに付いている MPSSE(Multi-Protocol Synchronous Serial Engine) と呼ばれる便利機能である。これが付いていればFT2232以外にもFTDIの他のICでも良いはずだ。FT232Hでも良いが、FT232Rは使えない。 HとRで大違いなので注意。MPSSEをサポートするかどうかはデータシートを見れば確認できる。

ネットの記事を見ると「FT2232は設定用のEEPROMを外付けしないとMPSSEモードになれない」という記述も見受けられるが、自分がFT2232LおよびFT2232Dで実験する限り全くそのようなことはなかった。どこから出てきた情報なのかは不明。EEPROMメーカーの陰謀かもしれない。

それと秋月の公式ページに書いてある書き込み配線は一部直すべきなので注意。

結線

JTAGの4本の線でFT2232と結ぶ。秋月の資料だと他にも多数プルアップしている端子があるが、無視して良い。

FT2232側

MachXO2側

  • TCK
    • FT2232側: DBUS0に接続
    • MachXO2側: 91番ピンに接続
    • 2.2kでプルダウン
  • TDI
    • FT2232側: DBUS1に接続
    • MachXO2側: 94番ピンに接続
    • 4.7kでプルアップ
  • TDO
    • FT2232側: DBUS2に接続
    • MachXO2側: 95番ピンに接続
    • 4.7kでプルアップ
  • TMS
    • FT2232側: DBUS3に接続
    • MachXO2側: 90番ピンに接続
    • 4.7kでプルアップ

TCKだけ2.2kでプルダウンなことに注意。

また、FT2232にはVCCIOとして3.3Vを供給する。秋月のFT2232モジュール(AE-FT2232)はそのままだと5V IOなので、これを使う場合は3.3V IOにしなければならない。そのままだとVCCIOはUSBの5Vとジャンパーピンで接続されているのでそれを抜き、VCCIOAピンに3.3Vを接続する。

これらは秋月の公式ページにある書き込み配線に書いてない重要な注意点だ。

ソフトウェア

Lattice Diamondを用いる。この手のICは大抵ICを出してるベンダ公式の独自ソフトが必要になる。面倒だが観念して入れる。

プロジェクト作成に特筆すべきことはない。使うICの型番を正確に指定することくらいか。

VerilogまたはVHDLのファイルを追加して、ProcessタブのPlace&Routeをダブルクリックすれば論理合成と配置配線が行われる。他moduleからの参照のないmoduleが自動的にTop moduleとして認識されるらしい。

ProcessタブのBitstream Fileをダブルクリックすれば.bitファイルが、JEDEC Fileをダブルクリックすれば.jedファイルが生成される。これがFPGAに書き込むデータを表すファイルになる。Flash Programming ModeならJEDECファイルを、Static RAM Cell ModeならBitstreamファイルを使う。

IOのピン割り当ては.lpfファイルに記述する。Tools→Spreadsheet Viewを使うとGUIで編集できる。指定しなければ勝手に割り振られるようだ。

Tools→ProgrammerからDetect CableでFT2232を見つけ、FTUSB-0を選択する。秋月の配線図だとPortA(ADBUS0~3)を使っているが、PortB(BDBUS0~3)を使うならFTUSB-1を選択すればよいと思われる。

Clock Dividerという項目があり、これは適当に2とか10とかの値に設定する。値を大きくするとクロックが遅くなるので動作が安定する。FT2232の仕様的に2以上でないと無理という情報がネットにあったのだが、何故か自分は1でも行けてしまった。なんで?

Design→JTAG Scanをすると接続されたFPGAが検出され、Programを押すと書き込みが行われる。スキャン時におよそのデバイス種別は検出されるのだが、なぜか正確な型番は検出できないらしく、手動で設定しろと言われる。ので手動で設定してからProgramする。

電源ラインへのパスコン

先に紹介した配線をすればスキャンでMachXO2を認識させられるのだが、自分はそこから書き込む際に失敗した。

原因は電源の安定性で、電源ラインにパスコンを入れることで書き込めるようになった。通信程度はパスコンなしでも問題ないものの、内部メモリの書き込み・消去には瞬間的に大きい電流(データシートによれば標準14.6mA)を使うらしい。

MachXO2はVCCとGNDの端子が対になって出ている部分がいくつかある。その全箇所に手元にあった1.0uFのチップコンデンサを付けた。厳密な容量が求められる場所ではないので同じ容量である必要はないが、各0.1uFくらいは付けると良いのではないかと思う。

その他自分は困らなかったが、JTAG信号の質が原因で書き込めない場合もあるらしい。Clock Dividerを最大のx30にしてみると良いと思われる。

おまけ: MachXO2シリーズの調達

長く秋月で売られていたがついに「在庫限り」になってしまった。別にディスコンではないので秋月以外では売り続けるだろうが、手軽に安く欲しい人はお早めに。

秋月で買うと1つ600円だが、コアスタッフ(旧ザイコストア)で10個以上まとめ買いすれば1つあたり400円以下で買える。またLCMXO2-256-4TG100以外の型番も揃っているので見てみると良いかもしれない。(参考リンク)

型番の後ろの「TG100」という部分がパッケージ(この場合はTQFP100ピン)を表しているので、はんだ付け困難なBGAパッケージの製品には注意。

コメント