2019年11月21日木曜日

FPGA configurer の作成


FPGA を使用する為には外部より FPGA のコンフィギュレーションデータを転送する必要がある. 多くは serial flash rom から転送を行なうが, 動作が安定しデータの書き換えが必要なれば問題ないが, 開発段階では何回も serial flash rom の更新が必要になる. その場合, JTAG やなんらかの書き換え装置が必要になり, 使用者全体に JTAG を配るか, 一度機器を手元に送ってもらい書き換えて再び発送をするかになる.
本機はその煩わしさから開放する為, コンフィギュレーションデータの格納をSD カードを使用し, 書き換えが必要な場合は SD カードを PC に挿し更新された file PC 上でコピーし, その後 SD カードを本機に挿す事で簡単に更新できる様になり更新の手間が削減される


基本仕様

- CPU STM32F730 200MHz@ 3.3V, 180MHz@1.8V
- SD card 内の bitstream data FPGA に転送
- SD 50MHz 4bit FAT16, FAT32
- FPGA I/F SPI 50MHz(max), 8 bit parallel bus 66MHz(max)
- Chip Select , 8 (STM32F730V 5 本に制限)
- PROGX, DONE, GPIO 8


ソフトスタック


上記はソフトウェアスタックで諸般の事情により ST が出している SDK を使用せずに各スタックをスクラッチから書いている. 簡単に動作内容を示すと, FAT でフォーマットされたファイルシステム上にある init.txt を読み, そこに記述している処理を順次実行していく. その一つに fpga の bitstream ファイルを読みその内容を fpga に転送するスクリプトも含まれる.

結果
bitstream を SD に入れてコンフィギュレーションできる利点は先に述べた通りで, 十分に便利である. ここで問題なのはコンフィギュレーション時間である. 現状ボトルネックは, 計算上, SD からの読み出しである. Clock 50MHz, 4bit 幅の為, 上限 25MB/s となり, 約 80MB の bitstream の場合 3.2sec 程度で読み出せるはずであるが, 実際は SDIO の read コマンドを出してからデータの転送準備ができるまでの無転送期間がある為,今回使用したカードでは実際はおおよそ 4.5sec 程度かかる. ただしカードによって変化すると思われるので, おおよその目安にはなるだろう.