なぜFPGAを学ぶのか
FPGAを学び始めた理由はいくつかありますが、まずは電力消費の少ないガジェットを作りたいと考えたためです。従来のマイコンでは実現が難しい処理を、FPGAの並列処理能力を活かして効率よく動作させることができれば、より柔軟な設計が可能になります。まずはFPGAの基本を学ぶところから始めます。
Parallellaボードを使った環境構築
手元に「Parallellaボード」という少し古いFPGAボードがあったため、これを使って学習を進めることにしました。Parallellaについての詳細は以下の公式サイトで紹介されています。
このボード単体ではI/Oが限られているため、拡張のために「Porcupine」というブレイクアウトボードを購入しました。
さらに、FPGAを書き込むために必要なJTAGインターフェースとして「JTAG-HS3」を購入しました。これにより、FPGAとの通信が可能になります。
mac環境でのVivadoセットアップ
FPGAの開発にはXilinxのVivadoというツールが必要ですが、これをmacで動作させるには少し工夫が必要でした。
VMware Fusionを使用
- 幸い、VMware Fusionが無償化されていたため、これを利用して仮想環境を構築しました。
- Windows 11 ARM版をインストールし、その上にVivadoをセットアップしました。
USB-JTAGの認識
- Windows 11 ARM上でJTAG-HS3を認識させるには、以下の方法が有効でした。
- AMD公式サポート情報
- FTDI公式サイトのD2XXドライバを導入し、適切にドライバを設定しました。
これらの手順を経て、ようやくFPGAの開発環境が整いました。
LED点滅プロジェクトでFPGAの基本を学ぶ
環境構築が完了したので、まずはシンプルなLED点滅回路を作ってみました。
ブレッドボードで回路を組む
PorcupineにはPMOD端子がついているため、ここからジャンパーワイヤを使ってブレッドボード上にLEDとスイッチを配置しました。


制約ファイル(Constraints File)の作成
各信号線のピン番号に合わせて制約ファイルを作成し、適切なピンに信号をマッピングしました。
# SWITCH
set_property PACKAGE_PIN U17 [get_ports {pin_switch[0]}]
set_property PACKAGE_PIN W16 [get_ports {pin_switch[1]}]
set_property PACKAGE_PIN P16 [get_ports {pin_switch[2]}]
set_property PACKAGE_PIN U19 [get_ports {pin_switch[3]}]
# LED
set_property PACKAGE_PIN T16 [get_ports {pin_led[0]}]
set_property PACKAGE_PIN V16 [get_ports {pin_led[1]}]
set_property PACKAGE_PIN P15 [get_ports {pin_led[2]}]
set_property PACKAGE_PIN U18 [get_ports {pin_led[3]}]
シンプルな転送回路の実装
- スイッチの入力をFPGAで受け取り、そのままLEDを点灯させる回路を作成しました。
- 最小限のロジックを用いて動作を確認し、Vivadoを使ってFPGAに書き込むことに成功しました。
module top(
input logic [3:0] pin_switch,
output logic [3:0] pin_led
);
assign pin_led = ~pin_switch[3:0];
endmodule

次回について
次回も引き続きFPGAの学習を進めます。もう少し複雑な回路を試しながら、FPGAの可能性を探っていきます。
コメントを残す