以前の記事 exLeaf-iでiCE UltraPlusのLED Driverで遊んでみたでは,ICEcube2を使った exLeaf-i の開発方法を紹介しました.今回は,少し新しいツールである Radiant Software を使った開発方法を紹介します.作成するデザインは,以前の記事と同じようにPWMモジュールを利用してLチカするハードウェアです.
Radiant Software
Lattice Radiant Software は,iCE40 UltraPlusのほかMachXO5-NXなどに対応したLatticeのFPGA向け開発環境です.WindowsあるいはLinuxで利用することができます.同ページからラインセンスを取得する必要がありますが,iCE40 UltraPlus向けの開発では無償でライセンスの取得ができます.
プロジェクト作成
Radiantをインストールしたら起動します.初回起動時にはラインセスファイルの場所を尋ねられますので,Radiantをダウンロードしたページから取得したライセンスファイルのパスを指定してください.ライセンスファイルの設定を終えると,次のようなスタートアップ画面になります.
スタートアップ画面の New Project
をクリックしてプロジェクトを作成しましょう.
最初はウィザードの開始ウィンドウです.これは,Next >
で先にすすみます.
次はプロジェクト名と保存先の設定です.ここではプロジェクト名を exleaf_test
とし,保存先は自分のホームディレクトリの下の Lattice
に決めました.Implemationの名前はデフォルト impl_1
のまま Next >
をクリックします.
プロジェクトに追加する既存ファイルがあれば,ここで追加しておくことができます.今回は,新規に作成するので何もせずに Next >
でステップを進めましょう.
次は,使用するデバイスの選択です.iCE40UPファミリの,iCE40UP5Kを選択します.Packageは SG48です.選択したら NEXT >
をクリックします.
次は,合成に使うツールを Symplify Pro か Lattice LSE から選びます.ここでは,Lattice LSE で次にすすみます.
最後に,確認ウィンドウが表示されます.設定内容を確認したら Finish
をクリックしてウィザードを終了します.
ファイルの用意
プロジェクトにデザインを追加します.メニューを,File
→ New
→ File...
とクリックすると,ファイル生成ダイアログが表示されます.
まずは,Verilogでハードウェアをデザインするためのファイルを作成します.Source FilesでVerilog Filesを選択,Nameはtopとしてみました.
作成した top.v の編集ウィンドウが開くので,次のソースコードを貼り付けて保存します.
`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];
RGB#(.CURRENT_MODE(0),
.RGB0_CURRENT("0b111111"),
.RGB1_CURRENT("0b111111"),
.RGB2_CURRENT("0b111111")
) RGB_DRIVER(
.RGBLEDEN(ENABLE_LED),
.RGB0PWM(RGB0),
.RGB1PWM(RGB1),
.RGB2PWM(RGB2),
.CURREN(led_power_up),
.RGB0(LED0),
.RGB1(LED1),
.RGB2(LED2)
);
endmodule // top
`default_nettype wire
ICEcube2を使っていた人へ: ICEcube2を使う場合には,PWMモジュールを利用したLEDドライバで SB_RGBA_DRV
のインスタンスを生成していましたが,Radiant Softwareでは RGB
にモジュール名が変更になっているので注意が必要です.他にも,ICEcube2時代からモジュール名が変わっているコアがたくさんあります.詳細は,Migrating iCEcube2 iCE40 UltraPlus Designs to Lattice Radiant Software を参照してください.
次にVerilogで設計したデザインとFPGAをマッピングさせるのに必要なピン定義ファイルを作成します.同じように新規ファイル追加ダイアログを開いたら,今度は,Post-Synthesis Contstraint Filesを選択します.名前はソースコードと同じく top とつけてみました.拡張子は .pdc です.
作成するとエディタが開きますので,中身を記述します.今回は,次のように記述しました.
ldc_set_location -site {48} [get_ports {PMOD3B[0]}]
ldc_set_location -site {46} [get_ports {PMOD3B[1]}]
ldc_set_location -site {44} [get_ports {PMOD3B[2]}]
ldc_set_location -site {42} [get_ports {PMOD3B[3]}]
ldc_set_location -site {34} [get_ports CLKEN]
ldc_set_location -site {35} [get_ports CLK]
ldc_set_location -site {39} [get_ports LED0]
ldc_set_location -site {40} [get_ports LED1]
ldc_set_location -site {41} [get_ports LED2]
2つのファイルをプロジェクトに登録することができました.追加したファイルはプロジェクトツリーのInput Filesと Post-Synthesis Constraint Filesの下にあります.
合成・配置配線
プロジェクトに必要なリソースがそろったので合成・配置配線します.ツールバーの緑色の三角ボタンをクリックするだけです.
無事に完了するとメッセージが表示されます.
FPGAをパソコンに接続する
作成したFPGAのコンフィギュレーションデータをボードに書き込むために,FPGAとパソコンを接続します.ここでは,Lattice純正のプログラミングアダプタ HW-USBN-2B を使いました.コンフィギュレーション用のポートは,CON5の横のポートです.接続は次のようにします.
ボード上の表示 | ケーブル |
CS | TMS(紫色) |
MOSI | TDI/SI(橙色) |
MISO | TDO/SO(茶色) |
CK | TCK/SCLK(白色) |
GND | GND(黒色) |
VCC | VCC(赤色) |
別途,ボードへの電源供給も必要です.適当なI/Oポートの電源端子から3.3Vを供給してください.
書き込み
準備ができたら書き込みます.書き込み時には,FPGAが余計な動作をしないようにDIPスイッチの1番ピンをONにしておきます.セットしたら,適当なI/Oの電源ポートから3.3Vを供給します.HW-USBN-2Bを利用している場合,USB PwrとBoard PwrのLEDが共に点灯していれば,ここまでは成功です.
書き込みには,RadiantからProgrammerを呼び出します.メニューをTools → Programmer とたどると次のように起動することができます.
まず,ただしくプログラミングアダプタとパソコンが接続できているか確認します.右ペインのCable Setupの Detect Cableをクリックします.アダプタの候補が表示されますので,正しいもの(今回の場合はHW-USBN-2B)を選択します.
次に,プログラミング対象を選択します.今回は,貴重なiCE40UPのROMには書かずにボード上のフラッシュROMにFPGAコンフィギュレーション情報を書き込みます.1番の行で右クリックをしてコンテクストメニューを開き,Device Propertiesをクリックしましょう.次のような設定ダイアログが表示されます.デフォルトではiCE40の持つCRAMがターゲットになっています.
これを,次のように設定を変更します.フラッシュROMは,Micron M25P80です.Programming fileはデフォルトでエントリが指定されていると思いますので,そのままで構いません.設定したらOKでダイアログを閉じます.
最後に,メニューの Run → Program Device をクリックすると,ROMへの書き込みが開始します.無事に完了すると,ステータスが緑色になりPASSと表示されます.
注意 フラッシュROMがM25P40のバージョンもあります.書き込み時にCHEKC_IDが h12
だったというエラーが出力された場合には,設定ウィンドウで Deviceを M25P40 にセットしてください.(h12
がM25P40,h13
がM25P80に相当します)
動作確認
書き込んだコンフィギュレーションデータでFPGAを起動させましょう.3.3Vの電源供給を止めプログラミングアダプタをとりのぞき,ディップスイッチの1番をOFFに変更します.再度I/Oから3.3Vを供給すれば,ボード上の3色のLEDが点滅します.
最後に
この記事では,Radiantを使ってexLeaf-iの開発をする方法を紹介しました.iCE40UPで低消費電力FPGAの世界を楽しんでもらえればと思います.
コメント
[…] Radiant SoftwareでexLeaf-i開発をする […]