基本的にXilinxのFPGAを書き込むには専用で高価なケーブルが必要です。
但し、評価ボードの中には特殊な書き込み方法で専用ケーブルが無しで対応できます。
かなり特殊ですがUSBケーブル1本で書き込む方法を試してみました。
XilinxのFPGAへ書き込み!専用ケーブル無しでUSB経由にトライ
XilinxのFPGAへ書き込む専用ケーブルは非常に高価です。
Xilinxの純正のプラットフォームケーブル(HW-USB-II-G)だと$200以上します。
準メーカであるDiligentのケーブル(JTAG-HS2)でも$60程度します。
Xilinxの評価ボードのDiligent製のArty *7などは専用ケーブルは無しでUSBから書き込めます。
(※専用のUSB変換JTAG回路・ICを使用しているためです)
但し、3rdパーティのFPGAボードは専用のJTAG書き込みかROMの書き込みが必要です。
専用のJTAG-USBケーブルについては下記をご参考ください。(リンク先はこちら)

筆者が所持している評価ボードも面白い方法でFPGAのROMを書き込めました。
(使用しているのはSpartan7搭載の「spartan edge accelerator board」です)
少し特殊ですがUSB1本でコンフィグROMに書き込めた方法について紹介していきます。
特殊なFPGAのROM書き込み方法について下記動画でもまとめています。
一連の流れが分かると思いますので是非一緒にご覧ください
各評価ボードでコンフィグROMに書き込む方法は様々です
FPGAの各評価ボードでコンフィグROMに直接書き込む方法は違ってきます。
詳細は各評価ボードのマニュアルを参考ください。あくまで今回は一例です。
「Spartan Edge Accelerator Board」は下記記事で紹介しています。(リンク先はこちら)

USB経由でFPGAのコンフィグROMに書き込む
USB1本でFPGAのコンフィグROMを書き込む方法について概要を紹介します。
Spartan Edge Accelerator Boardでの書き込み概要
今回の評価ボードではUSB(TypeC)の先にUSBシリアル変換ICのCP2102がいます。
CP2102の先にマイコンのESP32が存在しておりFPGAのコンフィグROMを書き込めます。
(※USBからはROMのデータは送りません。ESP32に書き込む指令をするだけです)
コンフィグROMは裏面にあり、FPGAとESP32の両方からSPI接続されています。
コンフィグROMのメーカー・型式はWinbond製「W25Q32JVZPIG」です。
容量は32Mbit(4MB)となっています。
実際どのようにデータを送り込むかというと、MicroSDカードを利用します。
ESP32にはmicroSDカードが接続されています。
SDカードにFPGAのプログラムを入れることでESP32がROMに書き込みます。
コンパイルしてビットストリームファイル(.bit)を用意する
ROMのデータを作成しておく必要があります。
コンパイル時にデフォルトで作成されるビットストリームファイル(.bit)で大丈夫です。
今回筆者は下記記事で紹介したHDMIディスプレイに画像出力するROMデータを使います。
特に指定は無く、各自好きなROMデータを使えば大丈夫です

ビットストリームファイル(.bit)はプロジェクトのファイルの中に作成されます。
プロジェクトのフォルダ内の「~プロジェクト名~.runs」→「impl_1」のフォルダにあります。
何処か任意の箇所にコピーしておくと良いです。
ESP32経由でプログラムファイルを書き込む指令をする
USBからESP32に指令するためにソフト環境を整えます。
手順の詳細に関しては「Spartan Edge Accelerator Board」の公式Wikiを参考ください。

この記事ではあくまで概要のみ紹介しています。
ESP32でROMを書き込むライブラリを入手する
公式Wikiだと「Download the ESP32 Boot Library」の箇所です。
ESP32でROMを書き込むライブラリを入手します。(GitHubのリンク先はこちらです)
「↓Code」→「Download ZIP」からダウンロード可能です。
Arduino IDEでESP32を書き込めるように設定する
ESP32にはソフト「Arduino IDE」を介して指令するのでインストールします。
(ダウンロードのリンク先はこちらです。)
インストールしたらFPGAの評価ボードのWikiに従い、ESP32を使えるように設定します。
あとはシリアルポートの選択、ボーレートを「115200」に設定しておきます。
MicroSDカードにROMデータ入れておく
MicroSDに「overlay」のフォルダを作り、その中にビットストリームファイル(.bit)を入れます。
その際、名前を「default.bit」変更しておきます。
ESP32に繋がっているMicroSDカードコネクタに挿しておきます。
後WikiによるとボードのDIPSWのNo5を「Slave」に切り替えておいた方が良いということです。
(筆者の環境では「JTAG」でも「Slave」でも書き換わりました)
Arduino IDEでROMデータを書き込む
あとはFPGAに電源を入れて、Arduino IDEから書き込むだけです。
今回はダウンロードした「examples」にある「01LoadDefaultBitstream」を使用しています。
「スケッチ」から「マイコンボードに書き込む」を選択します。
動画でも説明していましたが評価ボードの「Boot」スイッチを1秒以上押します。
ESP32をブートローダモードにすると、ROMに書き込みが始まります。
その後はコンフィグROM書き込みが終わると無事FPGAが動作します。
電源OFF→ONしてもSDカードに書き込んだROMデータが動作します。
(SDカード内のROMデータさえ変えるだけで、FPGAの書き込みデータが変わります)
コンフィグROMに書き込むテスト動画
動画で見るとUSB1本でコンフィグROMに書き込む様子が分かりやすいと思います。
冒頭でも紹介しましたが、ぜひ一緒にご覧ください。
ESP32のログ
実際にテストした際のログを下記に貼り付けておきます。
ROMの32Mbit(4MB)に書き込まれている様子が分かります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
最大1310720バイトのフラッシュメモリのうち、スケッチが301737バイト(23%)を使っています。 最大327680バイトのRAMのうち、グローバル変数が15716バイト(4%)を使っていて、ローカル変数で311964バイト使うことができます。 esptool.py v2.6 Serial port COM3 Connecting........_____....._____....._____....._____....._____.....__ Chip is ESP32D0WDQ6 (revision 1) Features: WiFi, BT, Dual Core, 240MHz, VRef calibration in efuse, Coding Scheme None MAC: 24:6f:28:99:e8:98 Uploading stub... Running stub... Stub running... Configuring flash size... Auto-detected Flash size: 4MB Compressed 8192 bytes to 47... Wrote 8192 bytes (47 compressed) at 0x0000e000 in 0.1 seconds (effective 910.2 kbit/s)... Hash of data verified. Compressed 17392 bytes to 11186... Wrote 17392 bytes (11186 compressed) at 0x00001000 in 1.1 seconds (effective 132.3 kbit/s)... Hash of data verified. Compressed 301856 bytes to 152504... Wrote 301856 bytes (152504 compressed) at 0x00010000 in 14.1 seconds (effective 170.8 kbit/s)... Hash of data verified. Compressed 3072 bytes to 128... Wrote 3072 bytes (128 compressed) at 0x00008000 in 0.1 seconds (effective 319.2 kbit/s)... Hash of data verified. Leaving... Hard resetting via RTS pin... |
まとめ
今回はUSB1本でXilinxのFPGAへ書き込む方法に関して紹介させていただきました。
記事をまとめますと下記になります。
効率的にFPGAデバッグ作業進めたい方は専用ケーブル(JTAG-HS2)を購入してもOKです。
予算的に厳しい方はROMに直接書き込む方法でも大丈夫です。
ぜひ皆さまもXilinxの評価ボードを購入してFPGAを始めてみて下さい。

コメント
詳しい記事、ありがとうございます。
記事の通りにしたらFPGAを動かすことが出来ました。
不思議なのですが、一回目記事通りにFPGAに書き込んだ後、次からはArduino IDEを使わずにmicroSDのbitファイルを置き換えて評価ボードに挿すだけでFPGAがbitファイルの通りに動いでくれます。