Shrike Lite開発ボードでFPGAプログラミングを始めるためのスタートアッププロジェクトです。RP2040マイコンを使用してSPI経由でFPGAにビットストリームをフラッシュし、LED点滅を実装します。
このプロジェクトは、Shrike Liteボードを使ったFPGA開発の入門として、以下の公式ドキュメントとコミュニティガイドを参考に実装しました:
LED点滅という最もシンプルなFPGA設計を通じて、Verilogによるハードウェア記述、ビットストリーム生成、そしてRP2040からのFPGAプログラミングの一連の流れを学習できます。
Shrike Lite は、学習者やメーカー、ホビイストを対象とした低コストのFPGA開発ボードです。
- FPGA: Renesas ForgeFPGA SLG47910V
- マイコン: Raspberry Pi RP2040
- プログラミング方式: RP2040がSPI経由でFPGAをコンフィギュレーション
- ターゲット: FPGA初学者、組み込みエンジニア、電子工作愛好家
Shrikeファミリーには、RP2350を搭載した上位モデルも存在します。
このプロジェクトは以下のリソースを参考に実装しました:
-
- ハードウェア仕様とピン配置
- セットアップガイド
- ビットストリーム生成手順
- Verilogコーディング規約
-
Qiita記事: Shrike Lite 使ってみた by @Lathe
- Arduino IDEでの開発環境構築
- LittleFSプラグインの導入方法
- LED点滅サンプルの実装手順
- トラブルシューティング
- Arduino IDEを起動
- ファイル → 環境設定 を開く
- 「追加のボードマネージャのURL」に以下を追加:
https://github.com/earlephilhower/arduino-pico/releases/download/global/package_rp2040_index.json - ツール → ボード → ボードマネージャ から「Raspberry Pi Pico/RP2040」をインストール
LittleFSファイルシステムにビットストリームをアップロードするためのプラグインが必要です:
- arduino-littlefs-uploadからVSIXファイルをダウンロード
- 以下のディレクトリに配置:
- Windows:
C:\Users\<ユーザー名>\.arduinoIDE\Plugins\ - Mac:
~/.arduinoIDE/Plugins/
- Windows:
- Arduino IDEを再起動
- スケッチ → ライブラリをインクルード → ライブラリを管理 を開く
- 検索ボックスに「Shrike」と入力
- Shrike ライブラリをインストール
FPGA設計のコンパイルには、Renesasの Go Configure Software Hub (旧称: GreenPAK Designer) が必要です。
- Renesas公式サイトにアクセス
- アカウント登録(無料)
- ソフトウェアをダウンロードしてインストール
注意: FPGA合成はGUIツールで行います。コマンドラインでのビルドには対応していません。
shrike_flash/
├── README.md # このファイル
├── CLAUDE.md # AI開発支援用ドキュメント
├── shrike_flash.ino # メインのArduinoスケッチ
├── data/ # ビットストリームファイル格納フォルダ (git管理外)
│ └── led_blink.bin # LED点滅用FPGAビットストリーム (要ビルド)
└── blink_ledd/ # FPGA設計プロジェクト
├── blink_ledd.ffpga # Go Configure プロジェクトファイル
└── ffpga/
├── src/
│ └── main.v # Verilog HDLソースコード
└── build/ # FPGA合成出力 (git管理外)
└── FPGA_bitstream.bin # 生成されたビットストリーム
GitHubからクローン後、まずFPGAビットストリームをビルドする必要があります。
注意:
data/とbuild/フォルダはgit管理外のため、GitHubリポジトリには含まれていません。
- Go Configure Software Hub を起動
- File → Open Project から
blink_ledd/blink_ledd.ffpgaを開く - Build ボタンをクリックしてビットストリームを生成
- ビルド成功後、以下のファイルが生成されます:
blink_ledd/ffpga/build/FPGA_bitstream.bin data/フォルダを作成し、ビットストリームをコピー:mkdir -p data cp blink_ledd/ffpga/build/FPGA_bitstream.bin data/led_blink.bin
- Shrike LiteをUSBケーブルでPCに接続
- Bootボタンを押しながら接続(RP2040がストレージモードで起動)
- Arduino IDEで本プロジェクトを開く
- Ctrl+Shift+P(MacはCmd+Shift+P)でコマンドパレットを開く
- 「Upload LittleFS to Pico/ESP8266/ESP32」を選択
data/フォルダ内のファイルがRP2040のフラッシュメモリにアップロードされます
- ツール → ボード から RP2040ボードを選択
- ツール → Flash Size で「2MB (Sketch: 1MB, FS: 1MB)」など、FS付きオプションを選択
- ツール → シリアルポート でShrike Liteのポートを選択
- アップロードボタンをクリック
- アップロード完了後、ボードが自動的にリセットされます
- シリアルモニタ(115200 bps)を開くと、フラッシュの進行状況が表示されます
- FPGAプログラミング成功後、ボード上のLEDが0.5秒周期で点滅します
blink_ledd/ffpga/src/main.v を開き、点滅速度などを変更できます:
// 点滅周期を変更(例: 0.25秒にする)
if (counter == 12_500_000) begin // 元は 25_000_000
LED_status <= !LED_status;
counter <= 32'b0;
end- Go Configure Software Hubを起動
blink_ledd/blink_ledd.ffpgaを開く- Build ボタンをクリック
- 生成されたビットストリーム:
blink_ledd/ffpga/build/FPGA_bitstream.bin
# 生成されたビットストリームをdataフォルダにコピー
cp blink_ledd/ffpga/build/FPGA_bitstream.bin data/led_blink.bin「クイックスタート」の手順を繰り返してビットストリームとスケッチを再度アップロードします。
このプロジェクトのFPGA設計は以下のロジックで動作します:
(* top *) module blink(
(* iopad_external_pin, clkbuf_inhibit *) input clk, // 50MHz
(* iopad_external_pin *) output LED,
(* iopad_external_pin *) output LED_en,
(* iopad_external_pin *) output clk_en
);
reg [31:0] counter; // 32ビットカウンタ
reg LED_status; // LED状態レジスタ
assign LED_en = 1'b1; // LED常時有効
assign clk_en = 1'b1; // クロック常時有効
always @ (posedge clk) begin
counter <= counter + 1'b1;
if (counter == 25_000_000) begin // 0.5秒 (50MHz / 25M = 2Hz)
LED_status <= !LED_status;
counter <= 32'b0;
end
end
assign LED = LED_status;
endmodule- 50MHzクロック入力: FPGAに外部から50MHzのクロックが供給されます
- カウンタのインクリメント: 各クロックサイクル(20ns)ごとにカウンタが+1
- 2,500万カウント: 25,000,000クロック = 0.5秒後にLEDの状態を反転
- 周期的な点滅: 0.5秒ON → 0.5秒OFF を繰り返し
shrike_flash.ino は起動時に以下の処理を実行します:
#include "Shrike.h"
ShrikeFlash shrike;
void setup() {
Serial.begin(115200);
while (!Serial && millis() < 3000);
// ShrikeFlashライブラリの初期化(SPI設定、ピン設定)
shrike.begin();
// LittleFSからビットストリームを読み込み、SPIでFPGAに転送
shrike.flash("/led_blink.bin");
}
void loop() {
// FPGAはプログラミング後、独立して動作するため処理なし
}エラー: LittleFS Mount Failed
解決方法:
- ツール → Flash Size で FS(ファイルシステム)領域を含むオプションを選択
- 例: 「2MB (Sketch: 1MB, FS: 1MB)」
- LittleFSデータアップロードツールでファイルを再アップロード
エラー: File not found: /led_blink.bin
解決方法:
data/フォルダにビットストリームファイルが存在するか確認- ファイル名が
shrike.flash()の引数と完全一致するか確認(大文字小文字を区別) - シリアルモニタで
shrike.listFiles()を実行してアップロード済みファイルを確認
症状: LEDが点滅しない、シリアル出力でエラー
解決方法:
- シリアルモニタの確認: エラーメッセージを確認
- 配線チェック: ボードのSPIピンが正しく接続されているか
- SPI速度を下げる:
shrike.begin(800000); // 1.6MHz → 800kHz
- ビットストリームの再生成: Go Configureで正常にビルドできているか確認
解決方法:
- Verilogの文法エラーを確認
- ピンマッピングが正しく設定されているか確認
- エラーログを確認して該当箇所を修正
MIT License
このプロジェクトは学習目的で作成されました。ShrikeライブラリはVicharakによって提供されています。
Happy FPGA Programming! 🚀