exLeaf-iでiCE UltraPlusのLED Driverで遊んでみた

製品紹介

超低消費電力が売りの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スキャンでデバイスをみつけることができないのでマニュアルでプログラミング方法を設定します

  1. Diamond ProgrammerのDevice FamilyにiCE40 UltraPlus,DeviceにiCE40UP5Kを指定
  2. Fast ConfigrationになっているOperation部分をダブルクリックし設定ダイアログを開く
  3. ターゲットメモリにSPI Flash Memoryを指定,デバイスをM25P80に指定します.

設定は,こんな感じ.

設定が終わったら,Program Deviceボタンをクリックして,書き込み開始.書き込みが終わったら,プログラムアダプタを取り外してINITモードを解除,電源の再投入でFPGAが所望の動作を開始します.

場合によってはROMがM25P40がのっていることがあります.

次は

やっぱりRISC-Vでも載せませすかねー.あるいは,SenseAIも面白そうですよねー.

コメント

  1. […] exLeaf-iでiCE UltraPlusのLED Driverで遊んでみたでは,ICEcube2を使った exLeaf-i […]

タイトルとURLをコピーしました