SPIのフラッシュROM書き込みツール「NXSPI(仮称)」を開発しました。

Spartan3Eは、XILINX純正コンフィギュレーションROMの代わりに、SPIという方式でインタフェースされる汎用のフラッシュROMを使用することができます。しかしながら、SPIのROMはJTAGに対応していません。
そこで、SPIのROMにFPGAのコンフィギュレーションデータを書き込むためには、
① 専用のプログラマで書き込んでから基板に実装する
② XILINXのツール(XSPI.EXE)で書き込む
③ バウンダリスキャンで書き込む
④ FPGAにROM書き込み用の回路を実装する
などの方法があります。
まず、①の方法は、これはISPではないので、試作やデバッグ段階では不向きでしょう。
次に②の方法ですが、この目的のためにXILINXはSPIのPROM用にXSPI.EXEというツールを無償で配布しています。このツールは、XILINXのJTAGケーブルを使ってSPIのPROMに書き込むものです。JTAGは、TCK、TDI、TDO、TMSの4本の信号で制御しますが、SPIもCLK、MOSI、MISO、CSの4本の信号で制御します。JTAGとSPIは信号の波形は異なりますが、信号線の本数が同じであるということと、クロック1本、データ2本、制御線1本、という構造が類似しているので、JTAG用のケーブルを流用して書き込みができるようなツールが提供されています。
しかしながら、XSPIを使用するには、下の回路図のように、SPIのPROM用の書き換え用にコネクタを用意しなければなりません。SPIのCLOCKにTCKを、TDOにMISOを・・とつなぎます。

このコネクタはJTAGの信号名がついていますが、JTAGの信号ではないので、JTAGとデイジーチェーンできません。つまり、ROMの書き換えのたびに、FPGAとSPIでコネクタをつなぎかえてやらないといけなくなり、扱いが面倒になります。
③のバウンダリスキャンを用いる方法は、速度が問題で、実用的ではありません。
SPIのROMに書き込むベストな解決策は、④の方法になります。
今回新しく開発したこの方法を簡単に説明します。
FPGAの通常動作時は、下の図のように、FPGAの中ではユーザロジックが動作します。必要に応じてJTAG経由でパソコンをつなぐこともあります。

SPIのPROMを書き換える場合は、まず最初にFPGAの中に書き換え専用ロジックを書き込みます。これはパソコンからJTAGを通じて行われます。このロジックが書き込まれると、FPGAの、SPIのポートだけをイネーブルにし他の全信号は未使用状態になります。

そして、FPGAのJTAGポートを経由して、パソコンはFPGAの中のロジックと通信します。FPGAの中のロジックはSPIのPROMにSPIのコマンドを発行して通信し、ROMを書き換えます。このようにして、パソコンからSPIのROMをアクセスできるようになります。
書き換え後、FPGAを再起動すると、新しくなったデータがロードされ、新しいロジックでFPGAは動作を開始します。

FPGAの中に書き込むコードは、小さなIPコアとして、ソースも公開しています。NXSPIのコアをユーザロジックに同居させることもできます。
もちろん、複数のJTAGデバイスが下の図のようにデイジーチェーンしていても動作するように工夫されています。さらに、Spartan3Eにクロックが供給されていなくても、ホストPCから送られてくるJTAG信号からクロックを作り出して動作します。

下の写真は、AVNETのSpartan3E評価ボードで動作を確認しているときの写真です。

変な子基板が載っています。AVNETの評価ボードは、ST社のROMが載っていたので、それをはずしてATMEL社のROMを外付けしてました。言い忘れましたが、Spartan3Eが使えるのはATMEL社かST社のSPI ROMとなります。NXSPIはそのどちらでも使えるように設計されています。もちろん、AVNETの評価ボードに載っているST社のROMに書き込めることも確認しています。
他にも、XILINXのSpartan3E Starter Kitなどでも動作を確認しました。
現在動作が確認できているデバイスは、
FPGA XC3S100E、XC3S500E
ROM AT45DB041B、AT45DB161D、M25P04、M25P16
です。
書き込みの速度は、Platform Flash ROMの書き込み速度とほぼ変わりません。全くストレスを感じさせません。
このソフトウェアとIPコアは、今週末にはWebからダウンロードできるようにします。
ご期待ください。
すぐに欲しいという方はメールでご連絡ください。
※なお、本ソフトウェアの実行にはMITOUJTAG BASIC Version1.2.4が必要です。
最近のコメント