1.FPGAに触れてみる

なぜ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の認識

これらの手順を経て、ようやく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の可能性を探っていきます。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

This site uses Akismet to reduce spam. Learn how your comment data is processed.