Verilogの勉強は脇に置いておいて、取り敢えず自分のPCにインストールした開発環境でアプリが開発できそうだということを検証しました。これまでラズパイpicoのアプリ開発にはArduino IDEを使って来たので、その方法を踏襲することにします。Pythonという選択肢もありますが、やはりPythonはインタープリターなので、遠慮しておきます。FPGAの開発はルネサスの無償ツールを使うことにします。Shrike Liteでは、FPGAのバイナリはパワーオン時にRP2040から書き込む仕掛けになっているようです。Shrike LiteのGithubには、例題アプリのバイナリも収録されているので、とりあえずLチカのバイナリ(LED_blink.bin)を使って検証しました。
期せずして、つい最近、Qiitaに「FPGAボード Shrike Liteをお試し」という記事が発表されていますので、詳しくはこの記事をご覧ください。同じようなことを書こうと思っていましたが、先を越されたようです。書く手間が省けましたので、全然悔しくありません。実に有難いことです。というか敬意を表します。
Shrike Lite専用開発環境を用意するために、従来とは異なるPCにArduino IDE 1.8.19をインストールしました。Arduino IDEをインストールしただけではRP2040の開発は出来ません。eralephilhoerのライブラリではShrike Liteがサポートされているので、先の記事にあるようにeralephilhoerの環境(ライブラリ)をインストールします。次いで、Shrike Lite内蔵のフラッシュメモリにLittleFS割り当てて、そこにFPGAのバイナリをArduino IDEから書き込みできるようにしました。前述の記事ではArduino IDE 2.3.7が使われているので、この部分は異なります。次のような手順でプラグインをインストールしました。
- earlephilhower/arduino-pico-littlefs-pluginからzipファイルをダウンロードする
- toolsという名前のフォルダーをドキュメント/Arduinoの下に作成する
- 先にダウンロードしたzipファイルを展開し、tools以下にコピーする
- 具体的なパスは、ドキュメント/Arduino/tools/PicoLittleFS/tool/picolittlefs.jarとなる
- Aruduino IDEを再起動する
- すると、ツールの下にPico LittleFS Data Uploadという選択肢が表示されるようになる
冒頭の画像は、Arduino IDEのツール以下の選択肢を表示した時のものです。Pico LittleFS Data Uploadが追加されていることが分かります。また、フラッシュの一部にLittleFSを割り当てるために、FlashSize:”4MB(Sketch:4032KB, FS:64KB)”と表示されています。FPGAのバイナリは64KBもあれば十分格納できる筈です。ボードはShrike Liteが選択さています。なぜかシリアルポートの欄に(Raspberry Pi Pico W)と表示されていますが、eralephilhoerライブラリのちょっとしたバグなのでしょう。
RP2040側のソースコードを以下に示します。ラズパイpicoと同じようにLED_BUILDINというラベルが使えますが、ラズパイpicoではGPIO25でした。Shrike LiteではGPIO4にLEDが接続されているので本当に点滅するのかしらと疑いつつやってみましたところ、思った通りにオンボードのUSBコネクタ近くのブルーLEDが0.5秒毎にON/OFFしました。シリアルポートには”LED_BUILDIN 4″と繰り返し表示されました。USBコネクタから離れたところにあるブルーLEDは1秒毎にON/OFFを繰返します。LittleFSに書き込まれたled_blink.binがFPGAにちゃんとロードされていることが確かめられました。これで、心置きなくFPGAの開発に専念できそうです。
//ShrikeEx1 tutorial example
// by H.NAMVA 2026/01/15
#include <ShrikeFlash.h>
ShrikeFlash fpga;
void setup() {
pinMode(LED_BUILTIN, OUTPUT);
Serial.begin(115200);
while (!Serial && millis() < 3000);
// Initialize the library
if (!fpga.begin()) {
Serial.println("Initialization failed!");
while(1);
}
// Flash the FPGA
fpga.flash("/led_blink.bin");
}
// the loop function runs over and over again forever
void loop() {
digitalWrite(LED_BUILTIN, HIGH); // turn the LED on (HIGH is the voltage level)
delay(500); // wait for a second
digitalWrite(LED_BUILTIN, LOW); // turn the LED off by making the voltage LOW
delay(500); // wait for a second
Serial.print("LED_BUILTIN ");
Serial.println(LED_BUILTIN);
}


コメント