超低消費電力が売りのiCE40 UltraPlusですが,ちょっと遊べる(?)ボードexLeaf-iが社長の手によりバージョンアップ,LED DriverのポートにLEDが接続されてました.というわけで,なにはともあれ,LED DriverでLチカしてみました.ちなみに,ボードの名前はexICE5K v2.0っていうらしいです.
もちろん,バージョンアップ前同様,iCE40 UltraPlus 5K,コンフィグROM(M25P80互換),と,オシレータを搭載したシンプルな構成と,そのコンパクトなサイズは踏襲したまま.(前のバージョンについては,“iCE40 UltraPlusのコンフィグROMにRaspberryPiから書き込んでみた”に紹介があります.)
ボード上の,赤・緑・黄のLEDがLED Driverで駆動されています.
iCE40 UltraPlusのLED Driverとは
LEDをいい感じに点灯させるには,PWMを使うのが常套手段の一つですが,結構リソースを消費してしまいます.iCE40 UltraPlusにはロジック使用量を抑えつつPWMを使ってLEDを点灯できるように(LEDだけじゃなくてもいいのでしょうが)専用ロジックが搭載されていて,それがLED Driverです.
詳細は,RGB LED リファレンスデザイン に置いてある ユーザガイド iCE40 Ultra RGB LED Controller User Guide を見るといいです.
iCE40 UltraPlusのLED Driverを使ってみる
RGB Driverのインスタンスを生成,必要なポートとパラメタをセットすれば使えます.コードは次の通り.
`default_nettype none
module top(
input wire CLK,
input wire RESET,
output wire CLKEN,
output wire LED0,
output wire LED1,
output wire LED2,
output wire [3:0] PMOD3B
);
assign CLKEN = 1'b1;
reg [31:0] counter = 32'h0;
reg [2:0] q = 3'b001;
assign PMOD3B = counter[23:20];
always @(posedge CLK) begin
counter <= counter + 1;
end
wire ENABLE_LED = 1'b1;
wire led_power_up = 1'b1;
wire RGB0;
wire RGB1;
wire RGB2;
assign RGB0 = counter[22];
assign RGB1 = counter[21];
assign RGB2 = counter[20];
SB_RGBA_DRV RGB_DRIVER(
.RGBLEDEN(ENABLE_LED),
.RGB0PWM(RGB0),
.RGB1PWM(RGB1),
.RGB2PWM(RGB2),
.CURREN(led_power_up),
.RGB0(LED0),
.RGB1(LED1),
.RGB2(LED2)
);
defparam RGB_DRIVER.CURRENT_MODE = "0b0";
defparam RGB_DRIVER.RGB0_CURRENT = "0b111111";
defparam RGB_DRIVER.RGB1_CURRENT = "0b111111";
defparam RGB_DRIVER.RGB2_CURRENT = "0b111111";
endmodule // top
`default_nettype wire
また,ピン定義ファイルは,次のように用意しました(top.pcf)
set_io PMOD3B[0] 48 -io_std SB_LVCMOS -pullup no set_io PMOD3B[1] 46 -io_std SB_LVCMOS -pullup no set_io PMOD3B[2] 44 -io_std SB_LVCMOS -pullup no set_io PMOD3B[3] 42 -io_std SB_LVCMOS -pullup no set_io CLK 35 set_io CLKEN 34 set_io LED0 39 set_io LED1 40 set_io LED2 41
合成と書き込み
合成
合成は,iCEcube2を使って合成hexファイルを生成します.Add Synthesis Filesでtop.vを,Add P&R Filesでtop.pcfを追加してGenerate Bitmapまで実行すれば top_bitmap.hex 他,コンフィギュレーション用のファイルが生成されます
書き込み
このボードはSPI ROMにhexファイルを書き込むことでコンフィギュレーションします.書き込みには,Diamond Programmerを使用します.残念ながら,JTAGスキャンでデバイスをみつけることができないのでマニュアルでプログラミング方法を設定します
- Diamond ProgrammerのDevice FamilyにiCE40 UltraPlus,DeviceにiCE40UP5Kを指定
- Fast ConfigrationになっているOperation部分をダブルクリックし設定ダイアログを開く
- ターゲットメモリにSPI Flash Memoryを指定,デバイスをM25P80に指定します.
設定は,こんな感じ.
設定が終わったら,Program Deviceボタンをクリックして,書き込み開始.書き込みが終わったら,プログラムアダプタを取り外してINITモードを解除,電源の再投入でFPGAが所望の動作を開始します.
場合によってはROMがM25P40がのっていることがあります.
次は
やっぱりRISC-Vでも載せませすかねー.あるいは,SenseAIも面白そうですよねー.




コメント
[…] exLeaf-iでiCE UltraPlusのLED Driverで遊んでみたでは,ICEcube2を使った exLeaf-i […]